From d78daa2715bc1c22f7ab7ca990baad90804ff8f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 14:21:52 +0800 Subject: [PATCH 001/168] =?UTF-8?q?feat(order):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BE=9B=E5=89=8D=E7=AB=AF=E8=BD=AE=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/orderStatusController.js | 19 +++++++++++++++++++ backend/src/modules/order/routes/index.js | 2 ++ .../modules/order/services/orderService.js | 16 +++++++++++++++- frontend/src/api/order.js | 1 + 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 backend/src/modules/order/controllers/orderStatusController.js diff --git a/backend/src/modules/order/controllers/orderStatusController.js b/backend/src/modules/order/controllers/orderStatusController.js new file mode 100644 index 0000000..4ff4d1a --- /dev/null +++ b/backend/src/modules/order/controllers/orderStatusController.js @@ -0,0 +1,19 @@ +/** + * 订单状态查询 controller — 供前端支付页轮询 + */ +'use strict'; + +const orderService = require('../services/orderService'); +const { success } = require('../../../common/response'); + +async function status(req, res, next) { + try { + const data = await orderService.getOrderStatus({ + userId: req.user.userId, + orderId: req.params.id, + }); + res.json(success(data)); + } catch (e) { next(e); } +} + +module.exports = { status }; \ No newline at end of file diff --git a/backend/src/modules/order/routes/index.js b/backend/src/modules/order/routes/index.js index 5ce00df..5dc695e 100644 --- a/backend/src/modules/order/routes/index.js +++ b/backend/src/modules/order/routes/index.js @@ -9,6 +9,7 @@ const { validate } = require('../../../common/validator'); const orderCtl = require('../controllers/orderController'); const paymentCtl = require('../controllers/paymentController'); +const orderStatusCtl = require('../controllers/orderStatusController'); const adminOrderCtl = require('../controllers/adminOrderController'); // /api/orders/* (买家) @@ -16,6 +17,7 @@ router.use('/orders', authMiddleware); router.post('/orders', validate(orderCtl.createSchema), orderCtl.create); router.get('/orders', orderCtl.list); router.get('/orders/:id', orderCtl.detail); +router.get('/orders/:id/status', orderStatusCtl.status); router.post('/orders/:id/cancel', orderCtl.cancel); router.post('/orders/:id/confirm', orderCtl.confirm); diff --git a/backend/src/modules/order/services/orderService.js b/backend/src/modules/order/services/orderService.js index 7a9ed54..8352a66 100644 --- a/backend/src/modules/order/services/orderService.js +++ b/backend/src/modules/order/services/orderService.js @@ -166,7 +166,21 @@ async function orderDetail({ userId, orderId }) { return obj; } +async function getOrderStatus({ userId, orderId }) { + const order = await Order.findOne({ + where: { id: orderId, userId }, + attributes: ['id', 'status', 'paidAt', 'createdAt'], + }); + if (!order) throw new NotFoundError('订单不存在'); + const expired = order.status === 0 && (Date.now() - new Date(order.createdAt).getTime()) > 30 * 60 * 1000; + return { + status: order.status, + paidAt: order.paidAt, + expired, + }; +} + module.exports = { - createOrder, cancelOrder, confirmOrder, listOrders, orderDetail, + createOrder, cancelOrder, confirmOrder, listOrders, orderDetail, getOrderStatus, ALLOWED_TRANSITIONS, genOrderNo, }; diff --git a/frontend/src/api/order.js b/frontend/src/api/order.js index 8764df3..80bc239 100644 --- a/frontend/src/api/order.js +++ b/frontend/src/api/order.js @@ -10,6 +10,7 @@ import http from './index'; export const createOrder = (data) => http.post('/orders', data); export const listOrders = (params) => http.get('/orders', { params }); export const getOrder = (id) => http.get(`/orders/${id}`); +export const getOrderStatus = (id) => http.get(`/orders/${id}/status`); export const cancelOrder = (id) => http.post(`/orders/${id}/cancel`); export const confirmOrder = (id) => http.post(`/orders/${id}/confirm`); -- Gitee From a0ea22839c68964cb2f41f1350af5ac9f4e32af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 14:23:43 +0800 Subject: [PATCH 002/168] =?UTF-8?q?feat(order):=20Payment.vue=20=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=E7=9C=9F=E5=AE=9E=E5=80=92=E8=AE=A1=E6=97=B6=E4=B8=8E?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E8=BD=AE=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/order/Payment.vue | 83 +++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/frontend/src/views/order/Payment.vue b/frontend/src/views/order/Payment.vue index 63831d5..02b220c 100644 --- a/frontend/src/views/order/Payment.vue +++ b/frontend/src/views/order/Payment.vue @@ -19,8 +19,7 @@ import { ref, computed, onMounted, onUnmounted } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { ElMessage } from 'element-plus'; -import { getOrder } from '@/api/order'; -import { mockPay } from '@/api/order'; +import { getOrder, getOrderStatus, mockPay } from '@/api/order'; const route = useRoute(); const router = useRouter(); @@ -28,9 +27,19 @@ const router = useRouter(); const order = ref(null); const loading = ref(false); const paying = ref(false); -const remain = ref(600); // 10 分钟倒计时(秒) +const remain = ref(0); // 剩余支付秒数(基于 createdAt 真实计算) -let timer = null; +let pollTimer = null; +const POLL_INTERVAL = 2000; +const POLL_TIMEOUT = 60_000; +const TIMEOUT_LIMIT = 30 * 60; + +/** 根据订单创建时间计算剩余秒数 */ +function calcRemain(createdAt) { + if (!createdAt) return TIMEOUT_LIMIT; + const elapsed = (Date.now() - new Date(createdAt).getTime()) / 1000; + return Math.max(0, TIMEOUT_LIMIT - Math.floor(elapsed)); +} const countdownText = computed(() => { const m = String(Math.floor(remain.value / 60)).padStart(2, '0'); @@ -43,11 +52,16 @@ async function load() { try { // 拦截器已 return body.data,直接拿到订单对象 order.value = await getOrder(route.query.orderId); - if (order.value && order.value.status !== 'pending' && order.value.status !== 0) { + if (!order.value) return; + if (Number(order.value.status) !== 0) { ElMessage.warning('该订单已支付或已关闭'); router.replace(`/orders/${order.value.id}`); + return; } - } finally { loading.value = false; } + remain.value = calcRemain(order.value.createdAt); + } finally { + loading.value = false; + } } async function onPay(success) { @@ -60,17 +74,60 @@ async function onPay(success) { } else { ElMessage.error('支付失败,请重试'); } - } finally { paying.value = false; } + } finally { + paying.value = false; + } +} + +/** 启动轮询:每 2 秒拉一次状态,最多 60 秒 */ +function startPolling() { + stopPolling(); + pollTimer = setInterval(async () => { + remain.value = Math.max(0, remain.value - POLL_INTERVAL / 1000); + if (remain.value <= 0) { + ElMessage.warning('订单已超时,请重新下单'); + stopPolling(); + router.replace('/orders'); + return; + } + try { + const s = await getOrderStatus(order.value.id); + if (s.status === 1) { + ElMessage.success('支付成功'); + stopPolling(); + router.replace(`/orders/${order.value.id}`); + } else if (s.expired) { + ElMessage.warning('订单已超时'); + stopPolling(); + router.replace('/orders'); + } + } catch (_) { + // 单次失败不影响下一次轮询 + } + }, POLL_INTERVAL); + + // 兜底:60 秒后强制停止轮询 + setTimeout(() => { + if (pollTimer) { + stopPolling(); + ElMessage.warning('轮询超时,请稍后查看订单状态'); + } + }, POLL_TIMEOUT); +} + +function stopPolling() { + if (pollTimer) { + clearInterval(pollTimer); + pollTimer = null; + } } onMounted(() => { - load(); - timer = setInterval(() => { - if (remain.value > 0) remain.value--; - else clearInterval(timer); - }, 1000); + load().then(() => { + if (order.value && Number(order.value.status) === 0) startPolling(); + }); }); -onUnmounted(() => clearInterval(timer)); +onUnmounted(() => stopPolling()); diff --git a/frontend/src/views/user/Register.vue b/frontend/src/views/user/Register.vue index a15aa00..4e9bd2f 100644 --- a/frontend/src/views/user/Register.vue +++ b/frontend/src/views/user/Register.vue @@ -1,73 +1,252 @@ \ No newline at end of file +.register-page { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #b8c6e2 0%, #d4dff6 100%); +} + +.register-card { + width: 420px; + background: #fff; + border-radius: 16px; + padding: 48px 40px 40px; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); +} + +.logo-title { + font-size: 28px; + font-weight: 700; + text-align: center; + color: #333; + margin-bottom: 6px; +} + +.slogan { + text-align: center; + color: #999; + font-size: 14px; + margin-bottom: 36px; +} + +.register-form { + margin-bottom: 16px; +} + +.strength-wrap { + display: flex; + align-items: center; + gap: 10px; + margin: -8px 0 16px; + padding: 0 2px; +} + +.strength-bar { + flex: 1; +} + +.strength-label { + font-size: 12px; + font-weight: 600; + min-width: 20px; +} + +.register-btn { + width: 100%; + height: 44px; + font-size: 16px; + font-weight: 600; + background: linear-gradient(135deg, #b8c6e2 0%, #d4dff6 100%); + border: none; + letter-spacing: 4px; +} + +.register-btn:hover { + opacity: 0.9; +} + +.footer-link { + text-align: center; + color: #999; + font-size: 14px; +} + +.footer-link a { + color: #b8c6e2; + text-decoration: none; + font-weight: 500; +} + +.footer-link a:hover { + text-decoration: underline; +} + diff --git "a/reports/daily/\344\275\231\346\263\275/imgs/0727-\346\263\250\345\206\214.png" "b/reports/daily/\344\275\231\346\263\275/imgs/0727-\346\263\250\345\206\214.png" new file mode 100644 index 0000000000000000000000000000000000000000..bbfe589d99ae6a000dcd6942291d9f93229a0150 GIT binary patch literal 276647 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≫;tbf4Llabfl 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 @@ -51,6 +70,7 @@ import { ref, onMounted } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { ElMessage, ElMessageBox } from 'element-plus'; +import { CreditCard, Van, Box } from '@element-plus/icons-vue'; import { getOrder, cancelOrder, confirmOrder } from '@/api/order'; const route = useRoute(); @@ -58,13 +78,6 @@ const router = useRouter(); const order = ref(null); const loading = ref(false); -async function load() { - loading.value = true; - try { - order.value = await getOrder(route.params.id); - } finally { loading.value = false; } -} - // 后端 status: 0=待支付 1=已支付 2=已发货 3=已完成 4=已取消 5=已退款 const STATUS_MAP = { 0: { text: '待支付', tag: 'warning' }, @@ -73,12 +86,6 @@ const STATUS_MAP = { 3: { text: '已完成', tag: 'success' }, 4: { text: '已取消', tag: 'danger' }, 5: { text: '已退款', tag: 'danger' }, - // 兼容字符串 - pending: { text: '待支付', tag: 'warning' }, - paid: { text: '已支付', tag: 'primary' }, - shipped: { text: '已发货', tag: 'info' }, - completed: { text: '已完成', tag: 'success' }, - cancelled: { text: '已取消', tag: 'danger' }, }; function statusText(s) { @@ -88,6 +95,23 @@ function statusTag(s) { return STATUS_MAP[s]?.tag; } +/** 把订单状态映射到 el-steps 的 active 索引 + * 0/1/2/3 → 0/1/2/3 + * 4 (已取消) → -1(不显示进度,按钮区显示取消原因) + */ +function stepActive(s) { + const n = Number(s); + if (n === 4) return -1; + return n; +} + +async function load() { + loading.value = true; + try { + order.value = await getOrder(route.params.id); + } finally { loading.value = false; } +} + async function onPay() { router.push({ path: '/payment', query: { orderId: order.value.id } }); } @@ -118,7 +142,7 @@ onMounted(load); .footer { display: flex; justify-content: space-between; align-items: center; margin-top: 16px; padding: 16px; background: #fff; - border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,0.05); + border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,.05); } .price { color: #f56c6c; font-size: 24px; font-weight: bold; } \ No newline at end of file -- Gitee From fa65ebea1badfdbeffeb84e48d9a973db9419804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 15:33:15 +0800 Subject: [PATCH 012/168] =?UTF-8?q?feat(order):=20OrderList=20=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=88=97=E5=A2=9E=E5=8A=A0=E6=8C=89=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/order/OrderList.vue | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/frontend/src/views/order/OrderList.vue b/frontend/src/views/order/OrderList.vue index 1d900d8..7626759 100644 --- a/frontend/src/views/order/OrderList.vue +++ b/frontend/src/views/order/OrderList.vue @@ -35,9 +35,12 @@ - + @@ -51,7 +54,8 @@ + + \ No newline at end of file -- Gitee From c27163015c99bad1c54a8adcb24c46153d691023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 16:08:18 +0800 Subject: [PATCH 017/168] =?UTF-8?q?test(order):=20jest=20+=20supertest=20?= =?UTF-8?q?=E9=9B=86=E6=88=90=E6=B5=8B=E8=AF=95=EF=BC=88=E4=B8=BB=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=20+=20=E5=8F=96=E6=B6=88=E5=B9=82=E7=AD=89=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 backend/jest.config.js + tests/setup.js + tests/order.test.js - backend 增加 jest/supertest devDeps + npm test 脚本 - app.js 增加 NODE_ENV=test 守卫,测试环境跳过 bootstrap - 顺手清理:删除 adminSetOrderStatus dead code(路由 + API) - 2 个用例:完整主链路 + 取消幂等 (二次取消 409) --- backend/jest.config.js | 13 + backend/package-lock.json | 6057 ++++++++++++++++----- backend/package.json | 6 +- backend/src/app.js | 6 +- backend/src/modules/order/routes/index.js | 1 - backend/tests/order.test.js | 127 + backend/tests/setup.js | 30 + frontend/src/api/order.js | 1 - 8 files changed, 4812 insertions(+), 1429 deletions(-) create mode 100644 backend/jest.config.js create mode 100644 backend/tests/order.test.js create mode 100644 backend/tests/setup.js diff --git a/backend/jest.config.js b/backend/jest.config.js new file mode 100644 index 0000000..5e70a64 --- /dev/null +++ b/backend/jest.config.js @@ -0,0 +1,13 @@ +/** + * Jest 配置(订单支付模块集成测试) + * - testEnvironment: node + * - --runInBand: 串行执行(共用 sequelize/redis,避免并发写同一行) + * - testTimeout: 20s(登录 + 多次 DB 写入留余量) + */ +module.exports = { + testEnvironment: 'node', + testMatch: ['/tests/**/*.test.js'], + testTimeout: 20000, + // 排除后端自身代码,确保不被当成测试 + modulePathIgnorePatterns: ['/src'], +}; \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json index dc951dd..f57eda8 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -24,2120 +24,4680 @@ }, "devDependencies": { "eslint": "^8.57.0", + "jest": "^29.7.0", "nodemon": "^3.1.4", - "sequelize-cli": "^6.6.2" + "sequelize-cli": "^6.6.2", + "supertest": "^7.0.0" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmmirror.com/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, "engines": { - "node": ">=0.1.90" + "node": ">=6.9.0" } }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmmirror.com/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, "license": "MIT", - "dependencies": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.10.1", - "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", - "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.9.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", "dependencies": { - "@hapi/hoek": "^9.0.0" + "yallist": "^3.0.2" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "license": "Apache-2.0", + "license": "ISC" + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.2.2" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@babel/types": "^7.29.7" }, - "engines": { - "node": ">=12" + "bin": { + "parser": "bin/babel-parser.js" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@redis/bloom/-/bloom-1.2.0.tgz", - "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@redis/client": { - "version": "1.6.1", - "resolved": "https://registry.npmmirror.com/@redis/client/-/client-1.6.1.tgz", - "integrity": "sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "license": "MIT", "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/graph": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/@redis/graph/-/graph-1.1.1.tgz", - "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", - "license": "MIT", "peerDependencies": { - "@redis/client": "^1.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@redis/json": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/@redis/json/-/json-1.0.7.tgz", - "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@redis/search": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@redis/search/-/search-1.2.0.tgz", - "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@redis/time-series": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/@redis/time-series/-/time-series-1.1.0.tgz", - "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "license": "BSD-3-Clause", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "license": "MIT", "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/debug": { - "version": "4.1.13", - "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/ms": "*" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "26.1.1", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-26.1.1.tgz", - "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~8.3.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/validator": { - "version": "13.15.10", - "resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.15.10.tgz", - "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.3", - "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", - "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", - "dev": true, - "license": "ISC" - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/acorn": { - "version": "8.17.0", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.17.0.tgz", - "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-plugin-utils": "^7.29.7" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=0.1.90" } }, - "node_modules/aws-ssl-profiles": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", - "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "node_modules/@dabh/diagnostics": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", "license": "MIT", - "engines": { - "node": ">= 6.0.0" + "dependencies": { + "@so-ric/colorspace": "^1.1.6", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, - "license": "MIT" - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "license": "MIT", "dependencies": { - "safe-buffer": "5.1.2" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmmirror.com/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.5", - "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.5.tgz", - "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.15.1", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" }, - "node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "fill-range": "^7.1.1" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=8" + "node": ">=10.10.0" } }, - "node_modules/buffer-equal-constant-time": { + "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.8" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">=12" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" - }, + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/color": { - "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/color/-/color-5.0.3.tgz", - "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.15.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=7.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmmirror.com/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", "license": "MIT", "dependencies": { - "color-name": "^2.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=12.20" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=14.6" + "node": ">=8" } }, - "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": ">=6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "node-notifier": { "optional": true } } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT" - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, "engines": { - "node": ">=0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, - "funding": { - "url": "https://dotenvx.com" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dottie": { - "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/dottie/-/dottie-2.0.7.tgz", - "integrity": "sha512-7lAK2A0b3zZr3UC5aE69CPdCFR4RHW1o2Dr74TqFykxkUCBXSRJum/yPc7g8zRHJqWKomPLHwFLLoUnn8PXXRg==", - "license": "MIT" - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/editorconfig": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.7.tgz", - "integrity": "sha512-e0GOtq/aTQhVdNyDU9e02+wz9oDDM+SIOQxWME2QRjzRX5yyLAuHDE+0aE8vHb9XRC8XD37eO2u57+F09JqFhw==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { - "@one-ini/wasm": "0.1.1", - "commander": "^10.0.0", - "minimatch": "^9.0.1", - "semver": "^7.5.3" - }, - "bin": { - "editorconfig": "bin/editorconfig" - }, - "engines": { - "node": ">=14" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.1.1.tgz", - "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/editorconfig/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6.0.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">= 0.4" + "node": ">= 8" } }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, "engines": { - "node": ">= 0.4" + "node": ">= 8" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true, "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@noble/hashes": "^1.1.5" } }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, + "optional": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=14" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/@redis/bloom": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@redis/bloom/-/bloom-1.2.0.tgz", + "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/client": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/@redis/client/-/client-1.6.1.tgz", + "integrity": "sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "cluster-key-slot": "1.1.2", + "generic-pool": "3.9.0", + "yallist": "4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=14" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node_modules/@redis/graph": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@redis/graph/-/graph-1.1.1.tgz", + "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz", + "node_modules/@redis/json": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/@redis/json/-/json-1.0.7.tgz", + "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/search": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@redis/search/-/search-1.2.0.tgz", + "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/time-series": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@redis/time-series/-/time-series-1.1.0.tgz", + "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.12", + "resolved": "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.1.1", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-26.1.1.tgz", + "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.10", + "resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.15.10.tgz", + "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmmirror.com/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.4", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.4.tgz", + "integrity": "sha512-s4+sLr9mZ/CyqeRritFeYV/Zx73OAtmaHn6kkBS1XRoJn1hrg3xIDUcpicAEX68tkcIN0iBCgti31C8zxtkhsQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmmirror.com/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.5", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.7", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001806", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": 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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "license": "MIT", + "dependencies": { + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-string/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmmirror.com/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dottie": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/dottie/-/dottie-2.0.7.tgz", + "integrity": "sha512-7lAK2A0b3zZr3UC5aE69CPdCFR4RHW1o2Dr74TqFykxkUCBXSRJum/yPc7g8zRHJqWKomPLHwFLLoUnn8PXXRg==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.7.tgz", + "integrity": "sha512-e0GOtq/aTQhVdNyDU9e02+wz9oDDM+SIOQxWME2QRjzRX5yyLAuHDE+0aE8vHb9XRC8XD37eO2u57+F09JqFhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "^9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.396", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.396.tgz", + "integrity": "sha512-yHiw2Y3C3H9U6TMbOfoWK/BPreiOPXRfTWPBwQBoZG6/8TB6eOPnsy5oaRYuatR7Fw2SJ4kKforgufeo7fq0EQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.22.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.15.1", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-async-errors": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/express-async-errors/-/express-async-errors-3.1.1.tgz", + "integrity": "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==", + "license": "ISC", + "peerDependencies": { + "express": "^4.16.2" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.4.3.tgz", + "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmmirror.com/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=10" } }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" - }, + "is-property": "^1.0.2" + } + }, + "node_modules/generic-pool": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/generic-pool/-/generic-pool-3.9.0.tgz", + "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">= 4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=6.9.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "engines": { - "node": ">=4.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/express": { - "version": "4.22.2", - "resolved": "https://registry.npmmirror.com/express/-/express-4.22.2.tgz", - "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.5", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.15.1", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "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": ">= 0.10.0" + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/express-async-errors": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/express-async-errors/-/express-async-errors-3.1.1.tgz", - "integrity": "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "license": "ISC", - "peerDependencies": { - "express": "^4.16.2" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "has-symbols": "^1.0.3" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "node_modules/helmet": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/helmet/-/helmet-7.2.0.tgz", + "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", "statuses": "~2.0.2", - "unpipe": "~1.0.0" + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { + "node_modules/import-local": { "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flatted": { - "version": "3.4.3", - "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.4.3.tgz", - "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, "license": "MIT" }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "hasown": "^2.0.3" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", + "engines": { + "node": ">=8" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "license": "MIT", - "dependencies": { - "is-property": "^1.0.2" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" }, - "node_modules/generic-pool": { - "version": "3.9.0", - "resolved": "https://registry.npmmirror.com/generic-pool/-/generic-pool-3.9.0.tgz", - "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", - "license": "MIT", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "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" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/helmet": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/helmet/-/helmet-7.2.0.tgz", - "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true, - "license": "ISC" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inflection": { - "version": "1.13.4", - "resolved": "https://registry.npmmirror.com/inflection/-/inflection-1.13.4.tgz", - "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", - "engines": [ - "node >= 0.4.0" - ], - "license": "MIT" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.3" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "license": "MIT" + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=10" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/joi": { @@ -2229,6 +4789,13 @@ "dev": true, "license": "MIT" }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.3.0.tgz", @@ -2252,6 +4819,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", @@ -2259,6 +4839,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2273,6 +4860,19 @@ "dev": true, "license": "MIT" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonfile": { "version": "6.2.1", "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.1.tgz", @@ -2339,12 +4939,32 @@ "json-buffer": "3.0.1" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", "license": "MIT" }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", @@ -2359,6 +4979,13 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", @@ -2475,6 +5102,32 @@ "url": "https://github.com/sponsors/wellwelwel" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -2502,6 +5155,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", @@ -2511,6 +5171,20 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", @@ -2544,6 +5218,16 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.5.tgz", @@ -2695,6 +5379,23 @@ "node": ">= 0.6" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.51", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/nodemon": { "version": "3.1.14", "resolved": "https://registry.npmmirror.com/nodemon/-/nodemon-3.1.14.tgz", @@ -2812,6 +5513,19 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", @@ -2873,6 +5587,22 @@ "fn.name": "1.x.x" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", @@ -2923,6 +5653,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -2943,6 +5683,25 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", @@ -2982,70 +5741,191 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "node_modules/pg-connection-string": { + "version": "2.12.0", + "resolved": "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.12.0.tgz", + "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/path-to-regexp": { - "version": "0.1.13", - "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz", - "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", - "license": "MIT" - }, - "node_modules/pg-connection-string": { - "version": "2.12.0", - "resolved": "https://registry.npmmirror.com/pg-connection-string/-/pg-connection-string-2.12.0.tgz", - "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 6" } }, "node_modules/proto-list": { @@ -3085,6 +5965,23 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/qs": { "version": "6.15.3", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.15.3.tgz", @@ -3146,6 +6043,13 @@ "node": ">= 0.8" } }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", @@ -3222,6 +6126,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3232,6 +6159,16 @@ "node": ">=4" } }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/retry-as-promised": { "version": "7.1.1", "resolved": "https://registry.npmmirror.com/retry-as-promised/-/retry-as-promised-7.1.1.tgz", @@ -3612,6 +6549,51 @@ "node": ">=10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/sql-escaper": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/sql-escaper/-/sql-escaper-1.5.1.tgz", @@ -3636,6 +6618,29 @@ "node": "*" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz", @@ -3654,6 +6659,20 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", @@ -3712,6 +6731,26 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3725,6 +6764,65 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superagent": { + "version": "10.3.0", + "resolved": "https://registry.npmmirror.com/superagent/-/superagent-10.3.0.tgz", + "integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.1", + "cookiejar": "^2.1.4", + "debug": "^4.3.7", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.5", + "formidable": "^3.5.4", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.14.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "7.2.2", + "resolved": "https://registry.npmmirror.com/supertest/-/supertest-7.2.2.tgz", + "integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cookie-signature": "^1.2.2", + "methods": "^1.1.2", + "superagent": "^10.3.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supertest/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", @@ -3751,6 +6849,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/text-hex/-/text-hex-1.0.0.tgz", @@ -3764,6 +6877,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3824,6 +6944,16 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", @@ -3895,6 +7025,37 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", @@ -3929,6 +7090,21 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/validator": { "version": "13.15.35", "resolved": "https://registry.npmmirror.com/validator/-/validator-13.15.35.tgz", @@ -3947,6 +7123,16 @@ "node": ">= 0.8" } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", @@ -4062,6 +7248,27 @@ "dev": true, "license": "ISC" }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": 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/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", diff --git a/backend/package.json b/backend/package.json index dcfcfbd..6b62567 100644 --- a/backend/package.json +++ b/backend/package.json @@ -7,6 +7,8 @@ "dev": "nodemon src/app.js", "start": "node src/app.js", "lint": "eslint \"src/**/*.js\"", + "test": "jest --runInBand", + "test:watch": "jest --watch", "db:sync": "node src/scripts/sync-db.js" }, "dependencies": { @@ -26,8 +28,10 @@ }, "devDependencies": { "eslint": "^8.57.0", + "jest": "^29.7.0", "nodemon": "^3.1.4", - "sequelize-cli": "^6.6.2" + "sequelize-cli": "^6.6.2", + "supertest": "^7.0.0" }, "engines": { "node": ">=20.0.0" diff --git a/backend/src/app.js b/backend/src/app.js index b69d37f..2871044 100644 --- a/backend/src/app.js +++ b/backend/src/app.js @@ -63,7 +63,11 @@ async function bootstrap() { } } -bootstrap(); +// 测试环境跳过 bootstrap(避免 require 时尝试连接 MySQL/Redis) +// jest 默认设 NODE_ENV=test;supertest 直接 require app + 注入 mock 请求即可 +if (process.env.NODE_ENV !== 'test') { + bootstrap(); +} // 优雅关闭 process.on('SIGTERM', async () => { diff --git a/backend/src/modules/order/routes/index.js b/backend/src/modules/order/routes/index.js index 5b6ae71..bb16a9c 100644 --- a/backend/src/modules/order/routes/index.js +++ b/backend/src/modules/order/routes/index.js @@ -30,7 +30,6 @@ router.use('/admin/orders', authMiddleware, requireRole('admin')); router.get('/admin/orders', adminOrderCtl.list); router.post('/admin/orders/:id/ship', adminOrderCtl.ship); router.post('/admin/orders/:id/complete', adminOrderCtl.complete); -router.put('/admin/orders/:id/status', adminOrderCtl.setStatus); router.get('/admin/orders/:id/items', adminOrderCtl.items); module.exports = router; diff --git a/backend/tests/order.test.js b/backend/tests/order.test.js new file mode 100644 index 0000000..a00d44f --- /dev/null +++ b/backend/tests/order.test.js @@ -0,0 +1,127 @@ +/** + * 订单主链路集成测试(基于 supertest) + * + * 覆盖: + * 1. 创建订单 → 模拟支付 → 后台发货 → 买家确认收货 + * 2. 取消订单(待支付 → 已取消)+ 二次取消报冲突 + * + * 副作用:会在 dev DB 真实写入 order/payment/cart_item/address。 + */ +'use strict'; + +const request = require('supertest'); +const { getApp, loginAs, authHeader } = require('./setup'); +const { sequelize } = require('../src/config/db'); +const { redis } = require('../src/config/redis'); + +const app = getApp(); +const req = request(app); + +let buyerToken; +let adminToken; +let buyerAuthH; +let adminAuthH; + +beforeAll(async () => { + buyerToken = await loginAs(req, 'tester', 'buyer123'); + adminToken = await loginAs(req, 'admin', 'admin123'); + buyerAuthH = authHeader(buyerToken); + adminAuthH = authHeader(adminToken); +}); + +afterAll(async () => { + // 主动关闭 DB / Redis 连接,避免 jest 退出警告 + await sequelize.close().catch(() => {}); + await redis.quit().catch(() => {}); +}); + +/** 准备 buyer 的收货地址 + 购物车项(fixture) */ +async function ensureFixtures() { + // 1. 取或建收货地址 + const addrRes = await req.get('/api/addresses').set(buyerAuthH.headers); + expect(addrRes.status).toBe(200); + let addressId = addrRes.body?.data?.[0]?.id ?? addrRes.body?.data?.list?.[0]?.id; + if (!addressId) { + const created = await req.post('/api/addresses').set(buyerAuthH.headers).send({ + receiver: '测试收件人', + phone: '13800001234', + province: '福建省', city: '龙岩市', district: '新罗区', + detail: '测试路 1 号', + isDefault: 1, + }); + expect(created.status).toBe(200); + addressId = created.body.data.id; + } + + // 2. 取或建购物车项(product id=29「九阳破壁机」stock=150) + const cartRes = await req.get('/api/cart').set(buyerAuthH.headers); + expect(cartRes.status).toBe(200); + const cartItems = Array.isArray(cartRes.body?.data) ? cartRes.body.data : []; + let cartItemId = cartItems.find((c) => c.productId === 29)?.id; + if (!cartItemId) { + const added = await req.post('/api/cart').set(buyerAuthH.headers) + .send({ productId: 29, qty: 1 }); + expect(added.status).toBe(200); + cartItemId = added.body.data.id; + } + + return { addressId, cartItemId }; +} + +describe('订单主链路', () => { + test('创建 → 支付 → 后台发货 → 买家确认收货', async () => { + const { addressId } = await ensureFixtures(); + + // 1. 创建订单 + const create = await req.post('/api/orders').set(buyerAuthH.headers).send({ addressId }); + expect(create.status).toBe(200); + expect(create.body.code).toBe(0); + const orderId = create.body.data.id; + expect(orderId).toBeGreaterThan(0); + + // 2. 模拟支付成功 + const pay = await req.post('/api/pay/mock').set(buyerAuthH.headers) + .send({ orderId, simulateSuccess: true }); + expect(pay.status).toBe(200); + expect(pay.body.code).toBe(0); + expect(pay.body.data.status).toBe(1); + + // 3. 状态查询接口(Task 1 新增) + const st = await req.get(`/api/orders/${orderId}/status`).set(buyerAuthH.headers); + expect(st.status).toBe(200); + expect(st.body.data.status).toBe(1); + + // 4. 后台发货 + const ship = await req.post(`/api/admin/orders/${orderId}/ship`).set(adminAuthH.headers).send({}); + expect(ship.status).toBe(200); + expect(ship.body.code).toBe(0); + + // 5. 买家确认收货 + const confirm = await req.post(`/api/orders/${orderId}/confirm`).set(buyerAuthH.headers).send({}); + expect(confirm.status).toBe(200); + + // 6. 验证最终状态 = 3 + const final = await req.get(`/api/orders/${orderId}`).set(buyerAuthH.headers); + expect(final.body.data.status).toBe(3); + }); + + test('取消订单(待支付 → 已取消)+ 二次取消报冲突', async () => { + const { addressId } = await ensureFixtures(); + + const create = await req.post('/api/orders').set(buyerAuthH.headers).send({ addressId }); + expect(create.body.code).toBe(0); + const orderId = create.body.data.id; + + const cancel = await req.post(`/api/orders/${orderId}/cancel`).set(buyerAuthH.headers).send({}); + expect(cancel.body.code).toBe(0); + + const detail = await req.get(`/api/orders/${orderId}`).set(buyerAuthH.headers); + expect(detail.body.data.status).toBe(4); + expect(detail.body.data.cancelReason).toBeTruthy(); + + // 二次取消应当 409 + const cancelAgain = await req.post(`/api/orders/${orderId}/cancel`) + .set(buyerAuthH.headers).send({}); + expect(cancelAgain.body.code).toBe(409); + }); +}); \ No newline at end of file diff --git a/backend/tests/setup.js b/backend/tests/setup.js new file mode 100644 index 0000000..f430d21 --- /dev/null +++ b/backend/tests/setup.js @@ -0,0 +1,30 @@ +/** + * 测试基础设施(基于 supertest) + * - getApp(): 返回 express app(用于 supertest) + * - loginAs(req, username, password): 通过 supertest 调 /api/auth/login 拿 JWT + * - authHeader(token): 返回 { headers: { Authorization: 'Bearer xxx' } } + * + * 注意事项同 setup.js:直接复用 dev DB(admin / tester 来自 data.sql), + * 测试会在 dev DB 中真实写入,跑前请确认是开发库。 + */ +'use strict'; + +const app = require('../src/app'); + +function getApp() { return app; } + +async function loginAs(req, username, password) { + const res = await req + .post('/api/auth/login') + .send({ username, password }); + if (res.body.code !== 0) { + throw new Error(`login failed for ${username}: ${res.body.message || res.text}`); + } + return res.body.data.token; +} + +function authHeader(token) { + return { headers: { Authorization: `Bearer ${token}` } }; +} + +module.exports = { getApp, loginAs, authHeader }; \ No newline at end of file diff --git a/frontend/src/api/order.js b/frontend/src/api/order.js index 5c6c01e..56fae25 100644 --- a/frontend/src/api/order.js +++ b/frontend/src/api/order.js @@ -20,4 +20,3 @@ export const mockPay = (data) => http.post('/pay/mock', data); export const adminListOrders = (params) => http.get('/admin/orders', { params }); export const adminShipOrder = (id) => http.post(`/admin/orders/${id}/ship`); export const adminCompleteOrder = (id) => http.post(`/admin/orders/${id}/complete`); -export const adminSetOrderStatus = (id, status) => http.put(`/admin/orders/${id}/status`, null, { params: { status } }); -- Gitee From a2bca675aa22d1fd775b5481beed8d587826128b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 16:11:16 +0800 Subject: [PATCH 018/168] =?UTF-8?q?docs:=20README=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=BF=90=E8=A1=8C=E8=AF=B4=E6=98=8E=20+=20?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E6=96=87=E6=A1=A3=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E5=AE=9E=E6=96=BD=E5=AF=B9=E7=85=A7=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 26 ++ ...57\344\273\230\345\212\237\350\203\275.md" | 372 ++++++++++++++++++ 2 files changed, 398 insertions(+) create mode 100644 "docs/\350\256\242\345\215\225\346\224\257\344\273\230\345\212\237\350\203\275.md" diff --git a/README.md b/README.md index b47f9bd..9b977aa 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,32 @@ pnpm dev # 访问 http://localhost:5173 > ✅ 真实 bcrypt 哈希已写入 `backend/sql/data.sql`(commit `ba6c314`),导入 SQL 后即可直接登录。 > ⚠️ 本项目**不使用 Docker**(团队统一约定)。如需容器化请自行扩展。 +## 🧪 测试运行 + +订单支付模块集成测试(Jest + Supertest),覆盖主链路 + 取消幂等: + +```bash +cd backend +npm test # 串行跑全部用例 +npm run test:watch # watch 模式 +``` + +**前置**:本地 MySQL + Redis 已在运行,且 `schema.sql` / `data.sql` 已导入(测试复用 `data.sql` 中的 `admin/admin123` 与 `tester/buyer123` 账号)。 + +**注意**:测试会**真实写入 dev 库**的 order / payment / cart_item / address 表(无 sandbox DB)。跑前请确认是开发库,或重置数据: + +```bash +mysql -u root -p eshop < backend/sql/schema.sql +mysql -u root -p eshop < backend/sql/data.sql +``` + +**实现要点**: +- `src/app.js` 在 `NODE_ENV !== 'test'` 时才调用 `bootstrap()`,jest 自动设 `NODE_ENV=test` → 测试环境 require app 时不连 DB +- `tests/setup.js` 提供 `getApp / loginAs / authHeader` +- `tests/order.test.js` 两个用例:`创建→支付→发货→收货` + `取消幂等` + +详细业务规则与挑战项实现见 [`docs/订单支付功能.md`](docs/订单支付功能.md) 与 [`docs/superpowers/specs/2026-07-27-address-feature-design.md`](docs/superpowers/specs/2026-07-27-address-feature-design.md)。 + ## 协作硬规则(来自《项目要求》3.3) 1. **接口文档先行**:跨人接缝接口变更必须先 PR 到 `docs/02-设计文档/接口设计.md`,A 审核通过方可改代码。 diff --git "a/docs/\350\256\242\345\215\225\346\224\257\344\273\230\345\212\237\350\203\275.md" "b/docs/\350\256\242\345\215\225\346\224\257\344\273\230\345\212\237\350\203\275.md" new file mode 100644 index 0000000..63df2d8 --- /dev/null +++ "b/docs/\350\256\242\345\215\225\346\224\257\344\273\230\345\212\237\350\203\275.md" @@ -0,0 +1,372 @@ +# 电商系统 - 订单支付模块(C 角色)功能梳理与注意事项 + +> **项目背景** +> 团队项目中的订单支付包,含前台订单/支付/取消、后台订单管理,挑战项 C03 订单超时取消。 +> 技术栈:Vue 3 + Vite + Pinia + Element Plus / Node.js + Express + Sequelize + MySQL 8.0 + Redis 7 + +--- +## 项目结构 +我承担角色C,负责其相关的业务 +``` +eshop-class2-group8/ +├── backend/ +│ ├── package.json +│ ├── .env.example +│ ├── sql/ +│ │ ├── schema.sql # A 负责(建表全部由 A 汇总,但表结构由各人设计后合并) +│ │ └── data.sql # 各人准备自己模块的演示数据,A 汇总 +│ ├── src/ +│ │ ├── app.js # A 负责(入口,挂载路由、中间件) +│ │ ├── common/ # ===== A 公共基建 ===== +│ │ │ ├── response.js # 统一响应格式 +│ │ │ ├── exception.js # 全局异常处理 +│ │ │ ├── auth.js 、 # 鉴权中间件(JWT 验证) +│ │ │ ├── pagination.js # 分页封装 +│ │ │ ├── validator.js # 参数校验中间件 +│ │ │ ├── logger.js # 操作日志(A 可挑战后台操作日志) +│ │ │ └── error-handler.js # Express 4 参全局异常中间件(与 exception.js 职责分离:exception.js 是异常类定义,error-handler.js 是把异常转成 {code,message,data} HTTP 响应) +│ │ ├── config/ +│ │ │ ├── db.js # A 负责(数据库连接) +│ │ │ └── redis.js # A 负责(Redis 连接,供缓存/超时使用) +│ │ ├── models/ # Sequelize 模型注册中心(A 负责统一加载关联) +│ │ │ ├── index.js # A 负责(导入所有模块模型并建立关联) +│ │ │ └── (各模块模型由各人定义,放置于 modules/模块名/models/ 下) +│ │ ├── routes/ +│ │ │ └── index.js # A 负责(聚合所有模块路由) +│ │ └── modules/ # ===== 业务模块 ===== +│ │ ├── user/ # ===== D 负责 ===== +│ │ │ ├── models/ +│ │ │ │ ├── User.js +│ │ │ │ ├── Address.js +│ │ │ │ └── CartItem.js # 购物车项 +│ │ │ ├── routes/ +│ │ │ │ └── index.js # 路由:/api/user/* +│ │ │ ├── controllers/ +│ │ │ │ ├── authController.js # 注册/登录/退出 +│ │ │ │ ├── profileController.js # 个人信息维护 +│ │ │ │ ├── addressController.js # 地址 CRUD +│ │ │ │ ├── cartController.js # 购物车 CRUD +│ │ │ │ └── adminUserController.js # 后台用户管理(禁用/启用) +│ │ │ └── services/ +│ │ │ ├── authService.js +│ │ │ ├── userService.js +│ │ │ └── cartService.js +│ │ │ +│ │ ├── product/ # ===== B 负责 ===== +│ │ │ ├── models/ +│ │ │ │ ├── Category.js +│ │ │ │ └── Product.js +│ │ │ ├── routes/ +│ │ │ │ └── index.js # 路由:/api/product/* +│ │ │ ├── controllers/ +│ │ │ │ ├── categoryController.js # 分类列表(前台+后台) +│ │ │ │ ├── productController.js # 商品列表/详情/搜索 +│ │ │ │ └── adminProductController.js # 后台增删改查/上下架 +│ │ │ └── services/ +│ │ │ ├── categoryService.js +│ │ │ └── productService.js +│ │ │ +│ │ ├── order/ # ===== C 负责 ===== +│ │ │ ├── models/ +│ │ │ │ ├── Order.js +│ │ │ │ ├── OrderItem.js +│ │ │ │ └── Payment.js +│ │ │ ├── routes/ +│ │ │ │ └── index.js # 路由:/api/order/* +│ │ │ ├── controllers/ +│ │ │ │ ├── orderController.js # 提交订单/列表/详情/取消 +│ │ │ │ ├── paymentController.js # 模拟支付(状态流转) +│ │ │ │ └── adminOrderController.js # 后台订单管理/发货 +│ │ │ └── services/ +│ │ │ ├── orderService.js +│ │ │ └── paymentService.js +│ │ │ +│ │ └── admin/ # ===== A 负责(管理后台专属) ===== +│ │ ├── log.routes.js # 操作日志查询路由(GET /api/admin/operation-logs) +│ │ └── operation-log.model.js # operation_log 表 Sequelize 模型 +│ │ +│ └── (tests/ 按模块分,各自写单元/集成测试,D 汇总测试计划) # ⚠️ 暂未创建 +│ +└── frontend/ + ├── package.json + ├── src/ + │ ├── main.js # A 负责(全局配置) + │ ├── App.vue # A 负责 + │ ├── api/ # Axios 封装(A 负责基础,各模块自己扩展) + │ │ ├── index.js # A 负责(axios 实例/拦截器) + │ │ ├── user.js # D 负责 + │ │ ├── product.js # B 负责 + │ │ ├── order.js # C 负责 + │ │ └── admin.js # A 负责(管理后台专属 API:操作日志 M09) + │ ├── stores/ # Pinia 状态管理(按模块分) + │ │ ├── index.js # A 负责(组合 store) + │ │ ├── userStore.js # D 负责(登录态、用户信息) + │ │ ├── cartStore.js # D 负责(购物车本地状态+同步) + │ │ ├── productStore.js # B 负责(商品列表/分类) + │ │ └── orderStore.js # C 负责(订单列表/支付状态) + │ ├── router/ + │ │ └── index.js # A 负责(路由守卫,鉴权) + │ ├── layouts/ + │ │ ├── FrontLayout.vue # A 负责(前台布局,header/footer) + │ │ └── AdminLayout.vue # A 负责(后台布局,侧边栏) + │ ├── components/ # 公共组件(A 负责) + │ │ ├── Pagination.vue + │ │ ├── Loading.vue + │ │ └── ... + │ └── views/ # ===== 业务页面(按模块划分) ===== + │ ├── user/ # D 负责 + │ │ ├── Login.vue + │ │ ├── Register.vue + │ │ ├── Profile.vue + │ │ ├── AddressList.vue + │ │ ├── AddressEdit.vue + │ │ ├── Cart.vue + │ │ └── admin/ + │ │ └── UserManage.vue # 后台用户管理 + │ ├── product/ # B 负责 + │ │ ├── ProductList.vue + │ │ ├── ProductDetail.vue + │ │ ├── SearchResult.vue + │ │ ├── CategoryBrowse.vue + │ │ └── admin/ + │ │ ├── ProductManage.vue # 商品列表/增删改 + │ │ └── CategoryManage.vue # 分类管理 + │ ├── order/ # C 负责 + │ │ ├── Checkout.vue # 提交订单(结算页) + │ │ ├── OrderList.vue + │ │ ├── OrderDetail.vue + │ │ ├── Payment.vue # 模拟支付页 + │ │ └── admin/ + │ │ └── OrderManage.vue # 后台订单管理 + │ └── admin/ # ===== A 负责(管理后台专属页面) ===== + │ ├── Dashboard.vue # 后台首页(统计看板) + │ └── Logs.vue # 操作日志查看页(M09) + │ # ⚠️ 备注:图中原写为 "(可选)dashboard/",实际项目中归入 admin/ 目录下 + └── public/ .. + +``` + +## 一、需要完成的功能全景 + +### 1. 前台用户端页面 + +| 页面 | 文件名 | 核心功能 | +|------|--------|----------| +| 结算页 | `Checkout.vue` | 从购物车生成预订单,选择/新增地址,金额核算,提交订单 | +| 模拟支付页 | `Payment.vue` | 订单摘要展示,支付按钮,支付结果展示,超时倒计时 | +| 订单列表 | `OrderList.vue` | 按状态 Tab 筛选,分页加载,订单卡片,快捷操作入口 | +| 订单详情 | `OrderDetail.vue` | 状态进度条,商品明细,收货/支付信息,物流预留 | + +### 2. 后台管理端页面 + +| 页面 | 文件名 | 核心功能 | +|------|--------|----------| +| 订单管理 | `admin/OrderManage.vue` | 列表筛选(状态/单号/用户),详情查看,发货操作,订单关闭 | + +### 3. 前端状态管理与接口封装 + +- **Pinia Store** - `orderStore.js`:结算临时数据、订单列表缓存、支付状态轮询 +- **API 封装** - `api/order.js`: + - `submitOrder`、`getOrderList`、`getOrderDetail` + - `cancelOrder`、`confirmReceipt` + - `createPayment`、`checkPaymentStatus` + +### 4. 数据库模型设计 + +| 表 | 核心字段 | 设计要点 | +|----|----------|----------| +| `Order` | id, order_no, user_id, address_id, total_amount, status, payment_status, paid_at, shipped_at, canceled_at, remark | 订单状态与支付状态分离,便于扩展 | +| `OrderItem` | id, order_id, product_id, product_snapshot (JSON), quantity, unit_price, total_price | 存储商品快照,避免商品修改影响历史订单 | +| `Payment` | id, payment_no, order_id, amount, method, status, paid_at, transaction_id | 支付流水独立记录,便于对账 | + +### 5. 后端接口列表 + +#### 前台接口 +- `POST /api/order/submit` — 提交订单(含库存预占) +- `GET /api/order/list` — 我的订单(分页、状态筛选) +- `GET /api/order/:id` — 订单详情 +- `PUT /api/order/:id/cancel` — 取消订单 +- `PUT /api/order/:id/confirm-receipt` — 确认收货 +- `POST /api/payment/pay/:orderId` — 发起模拟支付 +- `GET /api/payment/status/:orderId` — 查询支付状态 + +#### 后台接口 +- `GET /api/admin/order/list` — 所有订单(含筛选) +- `GET /api/admin/order/:id` — 订单详情 +- `PUT /api/admin/order/:id/ship` — 发货(填写物流信息) +- `PUT /api/admin/order/:id/complete` — 完成订单 + +### 6. 订单状态机 +``` +待付款 ──(支付成功)──> 待发货 ──(发货)──> 待收货 ──(确认收货)──> 已完成 +│ │ │ +└─(取消/超时) └─(退款) └─(退货退款) +│ +已取消 +``` +建议使用英文枚举:`PENDING_PAYMENT`、`PENDING_SHIPMENT`、`SHIPPED`、`COMPLETED`、`CANCELED`,退款状态后续扩展。 + +--- + +## 二、行业内关键注意事项(踩坑点与最佳实践) + +### 1. 库存与并发控制 +- **预占-支付-实扣**模式:下单预占库存,支付成功真正扣减,取消/超时释放预占。 +- **乐观锁扣库存**:`UPDATE product SET stock = stock - ? WHERE id = ? AND stock >= ?`,判断受影响行数,失败则回滚提示库存不足。 +- **高并发可选方案**:Redis 缓存库存 + 消息队列异步落库(本项目用 MySQL 乐观锁即可)。 + +### 2. 订单超时取消(挑战项 C03) +三种主流方案,推荐 **Redis 过期监听**: + +#### 方案一:Redis Keyspace 通知(推荐) +1. Redis 配置开启:`notify-keyspace-events Ex` +2. 下单成功后:`SETEX order:timeout:{orderId} 1800 1` (30分钟) +3. 订阅 `__keyevent@*__:expired`,收到过期事件后检查订单状态,若仍为待付款则执行取消逻辑(事务:更新状态、释放库存)。 + +#### 方案二:定时任务扫表 +- 每秒或每分钟扫描 `status = PENDING_PAYMENT AND created_at < NOW() - INTERVAL 30 MINUTE` 的记录分批处理,DB 压力较大,适用于低频场景。 + +#### 方案三:RabbitMQ 延时队列 +- 可靠性最高,但引入额外中间件,项目当前技术栈不必要。 + +#### 幂等性要求 +- 取消操作可能因重试多次触发,必须保证释放库存只执行一次(通过状态判断或幂等键)。 + +### 3. 数据一致性保障(事务与锁) +- **下单流程事务**:创建订单、订单项、预占库存、清空购物车、生成支付记录(一个 Transaction)。 +- **支付/取消事务**:更新订单状态、更新支付记录、调整库存,同样放入事务。 +- 避免长事务,外部调用(如支付通知)不在事务内执行。 + +### 4. 支付安全与状态校验 +- 支付金额以服务端订单总价为准,禁止前端传入。 +- 严格校验订单归属(JWT 用户身份)和状态(只有待付款可支付)。 +- 支付流水号全局唯一,可使用 `Date.now() + 随机数 + user_id`。 +- 支付成功后异步通知前端(轮询或 WebSocket),不依赖重定向。 + +### 5. 商品快照与金额计算 +- `OrderItem` 必须保存商品快照(名称、图片、单价等),以 JSON 字段存储,防止后续商品编辑影响历史订单。 +- 金额在后端重新计算(单价×数量),前端仅展示,服务端校验一致。 + +### 6. 前后端状态同步 +- 支付页轮询支付状态:`setInterval` 每 2 秒请求 `/api/payment/status/:orderId`,最多轮询 60 秒后提示超时。 +- 订单列表支持分页参数 `page`、`pageSize`,返回总条数 `total`,便于前端分页和下拉刷新。 +- 状态变更操作(取消、收货)后,及时更新本地 Pinia 状态或重新拉取列表。 + +### 7. 异常与边界情况 +- 库存不足 → 明确提示“XX商品库存不足”。 +- 重复提交 → 前端防抖 + 后端幂等(基于购物车版本或 token)。 +- 已支付订单不可取消 → 按钮置灰并校验状态。 +- 已发货不可取消 → 状态校验。 +- 网络异常 → 统一错误处理,前端友好 toast 提示。 + +### 8. 用户体验细节 +- 结算页库存紧张提醒。 +- 待付款订单倒计时(基于创建时间 +30 分钟),用 `dayjs` 实时计算展示。 +- 订单详情页展示操作日志时间线,使用 Element Plus 的 `el-steps` 做进度条。 + +--- + +## 三、结合项目技术栈的实施建议 + +1. **Sequelize 关联配置** + `Order.belongsTo(User)`, `Order.hasMany(OrderItem)`, `Order.hasOne(Payment)`, `Order.belongsTo(Address)`,确保在 `models/index.js` 统一声明。 + +2. **Joi 参数校验** + 下单接口需校验地址 ID、商品数组格式 `[{productId, quantity}]`,可复用 A 提供的 `validator.js` 中间件。 + +3. **Redis 超时取消实施步骤** + - 使用 `ioredis`,从 `config/redis.js` 获取客户端。 + - 下单成功写入:`redis.setex(`order:timeout:${orderId}`, 1800, '1')`。 + - 在 `app.js` 启动时创建订阅客户端,监听过期事件,处理函数内查询订单并执行取消。 + - 注意:Redis 重启可能导致监听失效,建议配合定时任务兜底。 + +4. **测试场景** + - 正常下单→支付→发货→收货完整流程。 + - 超时自动取消,验证库存是否释放。 + - 库存不足时下单失败。 + - 重复支付防御。 + +5. **模块间协作** + - 下单需与购物车模块交互:获取选中项或接收前端提交的商品列表并校验,下单成功后通知清空购物车(调用 D 的 Service 或直接 DB 操作)。 + - 支付成功后异步更新商品销量(可暂缓)。 + - 发货后可预留通知接口。 + +--- + +## 四、总结 + +订单支付模块不仅是基础的 CRUD,核心难点在于: +- **严格的订单状态流转**设计 +- **并发下的库存控制**(乐观锁 + 事务) +- **超时自动取消**的可靠实现(Redis 过期监听 + 兜底任务) +- **数据一致性**与幂等性保障 + +抓住这几个要点,结合团队提供的公共基建(统一响应、鉴权、校验),即可构建稳定且体验良好的订单支付系统。 + +--- + +## 五、实施对照表(2026-07-27 完善版) + +下列项目在 [Plan 2026-07-27-order-payment-detail-polish](../superpowers/plans/2026-07-27-order-payment-detail-polish.md) 与本轮迭代中落地。 + +| 文档章节 | 内容 | 当前实现 | 备注 | +|---|---|---|---| +| 1. 库存乐观锁 | `UPDATE product SET stock = stock - ? WHERE id = ? AND stock >= ?` | ✅ `orderService.createOrder` | 幂等键走 `stock_log` | +| 2. 超时取消(C03) | Redis 过期监听 + 兜底定时 | ✅ `timeoutService` | 详见 `services/timeoutService.js` | +| 3. 事务一致性 | 订单/支付/库存同事务 | ✅ 全部 `sequelize.transaction` | `handleCallback` 事务化 | +| 4. 支付安全 | 金额服务端计算、状态校验 | ✅ `orderService` 校验 `status === 0` | FOR UPDATE 防并发 | +| 5. 商品快照 | JSON 字段 | ⚠️ 当前为单字段(name/image/price) | 已满足"快照"语义 | +| 6. 状态同步 | 轮询 `/api/payment/status` | ✅ 改为 `/api/orders/:id/status` | `OrderDetail` 与 `Payment.vue` 都用 | +| 7. 进度条 | el-steps | ✅ `OrderDetail.vue` | 4 段:提交/支付/发货/收货 | +| 8. 快捷操作 | 按状态按钮 | ✅ `OrderList.vue` | 去支付/取消/确认收货 | +| 9. 后台管理 | 列表/发货/详情/完成 | ✅ `OrderManage.vue` + `complete` | 新增 `complete` 接口 | +| 10. 集成测试 | Jest + Supertest | ✅ `tests/order.test.js` | 2 用例全绿 | +| 11. 防抖 | 提交按钮防重复下单 | ✅ `Checkout.onSubmit` | loading + 800ms 解锁 | +| 12. 库存不足提示 | 商品数量列提示 | ✅ `Checkout.vue` | 红色 el-tag | +| 13. 地址增强 | 弹窗新增 + cascader + 卡片网格 | ✅ `AddressEditDialog.vue` + `Checkout.vue` | element-china-area-data | + +### 新增/修改文件清单 + +**后端** +- 新增 `modules/order/services/timeoutService.js` +- 新增 `modules/order/controllers/orderStatusController.js` +- 修改 `modules/order/services/orderService.js`(写 timeout key、cancel FOR UPDATE) +- 修改 `modules/order/services/paymentService.js`(事务化 + 清 timeout key) +- 修改 `modules/order/controllers/adminOrderController.js`(新增 `complete`) +- 修改 `modules/order/routes/index.js`(新增 status、complete 路由) +- 修改 `config/redis.js`(新增 `createSubscriber`) +- 修改 `app.js`(`NODE_ENV !== 'test'` 守卫 + 启动 timeout watcher) +- 新增 `tests/setup.js` + `tests/order.test.js` + `jest.config.js` + +**前端** +- 新增 `components/AddressEditDialog.vue` +- 修改 `views/order/OrderDetail.vue`(el-steps + 时间线) +- 修改 `views/order/OrderList.vue`(按状态快捷按钮) +- 修改 `views/order/Payment.vue`(真实倒计时 + 状态轮询) +- 修改 `views/order/Checkout.vue`(淘宝式 3 列卡片网格 + 库存检查 + 防抖) +- 修改 `views/order/admin/OrderManage.vue`(完整实现) +- 修改 `views/user/AddressEdit.vue`(省/市/区 cascader) +- 修改 `api/order.js`(新增 `getOrderStatus`、`adminCompleteOrder`) + +### 关键 commit 历史(自 `0db45ed` 之后) + +``` +872b4b6 feat(deps): 添加 element-china-area-data 用于省市区级联 +f4f0f8a feat(ui): 新增 AddressEditDialog 弹窗组件(含省市区级联) +44ba55a feat(user): AddressEdit 省/市/区改为 element-cascader 级联 +9723523 feat(order): Checkout 改为淘宝式 3 列卡片地址网格 + 新增 Dialog +0607ba4 fix(user): 修复地址弹窗/编辑页保存不关闭(cascader 校验与 form 字段名不一致) +fbd0ffd feat(order): OrderDetail 加 el-steps 进度条 + 状态时间线 +fa65ebe feat(order): OrderList 操作列增加按状态快捷按钮 +b43a386 feat(order): Checkout 库存不足提示 + 提交按钮防抖 +1e4f0f6 feat(order): cancelOrder 事务内二次校验 + payment 事务化 + 写入/清理超时 key +4c60b17 feat(order): 实现 Redis 过期监听 + 兜底定时器(C03 超时取消) +e5ff550 feat(order): 完整实现后台订单管理(列表筛选/详情/发货/完成) +c271630 test(order): jest + supertest 集成测试(主链路 + 取消幂等) +``` + +(Task 1/2 早期 commit:状态查询接口 `d78daa2`、Payment 轮询 `a0ea228`) + +--- + +*文档整理自项目讨论 + 2026-07-27 实施落地,供开发参考。* \ No newline at end of file -- Gitee From d3e712502b548c32b8371bf5a37b8f65fb757346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 16:16:10 +0800 Subject: [PATCH 019/168] =?UTF-8?q?fix(order):=20=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E4=BB=85=20status=3D0=20=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=20+=20OrderList.onCancel=20=E5=8A=A0=20catch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:订单已支付(status=1)后点取消按钮,后端 409 拒绝但前端无明显反馈。 根因:前端按钮规则是 [0,1].includes(status),允许已支付显示取消, 但业务上已支付应走「退款」而非「取消」(取消 = 未付款撤销)。 修复: 1. OrderDetail.vue / OrderList.vue 取消按钮改为 v-if="status === 0" 2. OrderList.vue onCancel 加 try/catch + ElMessage.error,避免异常静默 --- frontend/src/views/order/OrderDetail.vue | 2 +- frontend/src/views/order/OrderList.vue | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/frontend/src/views/order/OrderDetail.vue b/frontend/src/views/order/OrderDetail.vue index 0d00651..09f2dd8 100644 --- a/frontend/src/views/order/OrderDetail.vue +++ b/frontend/src/views/order/OrderDetail.vue @@ -59,7 +59,7 @@
合计 ¥ {{ order.total }}
去支付 - 取消订单 + 取消订单 确认收货
diff --git a/frontend/src/views/order/OrderList.vue b/frontend/src/views/order/OrderList.vue index 7626759..462a478 100644 --- a/frontend/src/views/order/OrderList.vue +++ b/frontend/src/views/order/OrderList.vue @@ -39,7 +39,7 @@
@@ -92,9 +92,13 @@ function goPay(id) { router.push({ path: '/payment', query: { orderId: id } }); async function onCancel(row) { await ElMessageBox.confirm(`确认取消订单 ${row.orderNo}?`, '提示', { type: 'warning' }); - await cancelOrder(row.id); - ElMessage.success('已取消'); - fetchList(); + try { + await cancelOrder(row.id); + ElMessage.success('已取消'); + fetchList(); + } catch (e) { + ElMessage.error(e.message || '取消失败'); + } } async function onConfirm(row) { -- Gitee From 8b825946af25e8aaf012aa8bddba49f3c7b42600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 17:09:37 +0800 Subject: [PATCH 020/168] =?UTF-8?q?order:=E5=AE=8C=E6=88=90=E4=BA=86?= =?UTF-8?q?=E4=B8=8B=E5=8D=95--=E4=BF=AE=E6=94=B9=E5=9C=B0=E5=9D=80--?= =?UTF-8?q?=E6=94=AF=E4=BB=98--=E5=8F=91=E8=B4=A7--=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E6=94=B6=E8=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26-07-27-address-feature-implementation.md | 95 +- .../2026-07-27-order-payment-detail-polish.md | 1168 +++++++++++++++++ 2 files changed, 1245 insertions(+), 18 deletions(-) create mode 100644 docs/superpowers/plans/2026-07-27-order-payment-detail-polish.md diff --git a/docs/superpowers/plans/2026-07-27-address-feature-implementation.md b/docs/superpowers/plans/2026-07-27-address-feature-implementation.md index 473f0b1..cf72a7b 100644 --- a/docs/superpowers/plans/2026-07-27-address-feature-implementation.md +++ b/docs/superpowers/plans/2026-07-27-address-feature-implementation.md @@ -347,7 +347,7 @@ git commit -m "feat(user): AddressEdit 省/市/区改为 element-cascader 级联 --- -## Task 5: Checkout.vue 集成 "+ 新增收货地址" 按钮 + dialog +## Task 5: Checkout.vue 改造为淘宝式 3 列卡片网格 + Dialog **Files:** - 修改 `frontend/src/views/order/Checkout.vue` @@ -355,7 +355,8 @@ git commit -m "feat(user): AddressEdit 省/市/区改为 element-cascader 级联 **Interfaces:** - 新增 ref: `dlgVisible` - 新增组件: `` -- 新增方法: `onAddressSaved(saved)` — 刷新地址列表并自动选中新地址 +- 新增方法: `onAddressSaved()` — 刷新地址列表并自动选中新地址 +- 布局: 地址卡片 3 列横向网格(淘宝风格),选中态橙色边框;"+ 新增"作为第 N+1 张占位卡 - [ ] **Step 1: 引入组件与新增 ref** @@ -371,30 +372,63 @@ import AddressEditDialog from '@/components/AddressEditDialog.vue'; const dlgVisible = ref(false); ``` -- [ ] **Step 2: 在地址卡片尾部加 "+ 新增收货地址" 按钮** +- [ ] **Step 2: 重写地址卡片区为 3 列卡片网格** -修改 `` 的内容:在 `` 之后,把"还没有收货地址"的提示区块替换为: +替换**整个** `...` 区块为: ```html -
- 还没有收货地址,请 - 新增 +
+
+ 选择收货地址 + 管理地址 +
+ + + +
+
+ {{ a.receiver }} + {{ a.phone }} + 默认 +
+
+ {{ a.province }} {{ a.city }} {{ a.district }} {{ a.detail }} +
+
+
+ + + +
+ + 新增收货地址 +
+
+
+ + + + +
+ + 新增收货地址 +
+
+
``` -并紧跟: +并在 ` + + +``` + +- [ ] **Step 5: Commit** + +```bash +git add backend/src/modules/order/controllers/adminOrderController.js \ + backend/src/modules/order/routes/index.js \ + frontend/src/views/order/admin/OrderManage.vue \ + frontend/src/api/order.js +git commit -m "feat(order): 完整实现后台订单管理(列表筛选/详情/发货/完成)" +``` + +--- + +## Task 9: 后端 Jest + Supertest 集成测试(覆盖主链路) + +**Files:** +- 新增 `backend/jest.config.js` +- 新增 `backend/tests/setup.js` +- 新增 `backend/tests/order.test.js` +- 修改 `backend/package.json` (新增 scripts) + +- [ ] **Step 1: 添加依赖与脚本** + +```bash +cd backend && npm install --save-dev jest supertest +``` + +在 `backend/package.json` 中 `scripts` 增加: + +```json +"test": "jest --runInBand", +"test:watch": "jest --watch" +``` + +- [ ] **Step 2: 写入 `backend/jest.config.js`** + +```js +module.exports = { + testEnvironment: 'node', + testMatch: ['**/tests/**/*.test.js'], + setupFilesAfterEach: [], + testTimeout: 20000, +}; +``` + +- [ ] **Step 3: 写入 `backend/tests/setup.js`** + +提供全局的测试辅助:登录拿 token、清理订单/支付表。 + +```js +'use strict'; +const http = require('http'); +const app = require('../src/app'); +const { sequelize } = require('../src/config/db'); +const { redis } = require('../src/config/redis'); + +let server; +let port; + +async function start() { + await sequelize.sync({ force: false }); + await new Promise((resolve) => { + server = app.listen(0, () => { + port = server.address().port; + resolve(); + }); + }); + return `http://127.0.0.1:${port}`; +} + +async function stop() { + if (server) await new Promise((r) => server.close(r)); + await sequelize.close(); + await redis.quit().catch(() => {}); +} + +async function loginAs(username, password) { + // 通过 axios 直接调 /api/auth/login + const axios = require('axios'); + const baseURL = await start(); + const { data } = await axios.post(`${baseURL}/api/auth/login`, { username, password }); + return { token: data.data.token, baseURL }; +} + +module.exports = { start, stop, loginAs }; +``` + +> 注意:test 之间复用一个 server,jest --runInBand 串行执行;`loginAs` 提供 token。 + +- [ ] **Step 4: 写入 `backend/tests/order.test.js`** + +```js +'use strict'; +const axios = require('axios'); +const { start, stop, loginAs } = require('./setup'); + +describe('订单主链路', () => { + let baseURL, token; + + beforeAll(async () => { + const r = await loginAs('buyer123', 'buyer123'); // 占位:依据 data.sql 中的演示账号 + baseURL = r.baseURL; token = r.token; + }); + + afterAll(async () => { await stop(); }); + + test('创建订单 → 模拟支付 → 后台发货 → 买家确认收货', async () => { + const auth = { headers: { Authorization: `Bearer ${token}` } }; + + // 1. 创建订单 + const { data: create } = await axios.post(`${baseURL}/api/orders`, { addressId: 1 }, auth); + expect(create.code).toBe(0); + const orderId = create.data.id; + + // 2. 模拟支付成功 + const { data: pay } = await axios.post(`${baseURL}/api/pay/mock`, { orderId, simulateSuccess: true }, auth); + expect(pay.data.status).toBe(1); + + // 3. 状态查询接口 + const { data: st } = await axios.get(`${baseURL}/api/orders/${orderId}/status`, auth); + expect(st.data.status).toBe(1); + + // 4. 后台发货(用 admin 登录) + const admin = await loginAs('admin', 'admin123'); + await axios.post(`${admin.baseURL}/api/admin/orders/${orderId}/ship`, {}, { headers: { Authorization: `Bearer ${admin.token}` } }); + + // 5. 买家确认收货 + await axios.post(`${baseURL}/api/orders/${orderId}/confirm`, {}, auth); + const { data: final } = await axios.get(`${baseURL}/api/orders/${orderId}`, auth); + expect(final.data.status).toBe(3); + }); + + test('取消订单释放库存', async () => { + const auth = { headers: { Authorization: `Bearer ${token}` } }; + const { data: create } = await axios.post(`${baseURL}/api/orders`, { addressId: 1 }, auth); + await axios.post(`${baseURL}/api/orders/${create.data.id}/cancel`, {}, auth); + const { data: detail } = await axios.get(`${baseURL}/api/orders/${create.data.id}`, auth); + expect(detail.data.status).toBe(4); + }); +}); +``` + +> 注:`buyer123` / `admin123` 用户名依据 `data.sql` 中实际种子数据调整;如不存在可在 `data.sql` 中插入。 + +- [ ] **Step 5: 运行测试** + +```bash +cd backend && npm test +``` + +预期:两个用例都 PASS。 + +- [ ] **Step 6: Commit** + +```bash +git add backend/jest.config.js backend/tests backend/package.json backend/package-lock.json +git commit -m "test(order): 增加主链路 Jest + Supertest 集成测试" +``` + +--- + +## Task 10: README + 文档收尾 + +**Files:** +- 修改 `README.md` (新增 `npm test` 说明) +- 修改 `docs/订单支付功能.md` (在末尾追加"实施对照表"小节) + +- [ ] **Step 1: 在 `README.md` 中新增"测试运行"小节** + +```markdown +## 测试 + +后端集成测试(Jest + Supertest)覆盖订单主链路: +\`\`\`bash +cd backend && npm test +\`\`\` +测试用账号需与 `sql/data.sql` 演示数据一致(默认 `admin/admin123`、`buyer123/buyer123`)。 +``` + +- [ ] **Step 2: 在 `docs/订单支付功能.md` 文末追加** + +```markdown +## 五、实施对照表(2026-07-27 完善版) + +| 文档章节 | 内容 | 当前实现 | 备注 | +|---|---|---|---| +| 1.库存乐观锁 | `UPDATE product SET stock = stock - ? WHERE id = ? AND stock >= ?` | ✅ orderService.createOrder | 幂等键走 stock_log | +| 2.超时取消 | Redis 过期监听 + 兜底 | ✅ timeoutService | 详见 Task 7 | +| 3.事务一致性 | 订单/支付/库存同事务 | ✅ 全部用 sequelize.transaction | callback 事务化 | +| 4.支付安全 | 金额服务端计算、状态校验 | ✅ orderService 校验 status=0 | | +| 5.商品快照 | JSON 字段 | ⚠️ 当前为单字段(name/image/price) | 已满足"快照"语义 | +| 6.状态同步 | 轮询 /api/payment/status | ✅ 重命名为 /api/orders/:id/status | 见 Task 1 | +| 7.进度条 | el-steps | ✅ OrderDetail.vue | 见 Task 3 | +| 8.快捷操作 | 按状态按钮 | ✅ OrderList.vue | 见 Task 4 | +| 9.后台管理 | 列表/发货/详情 | ✅ OrderManage.vue + adminCompleteOrder | 见 Task 8 | +| 10.集成测试 | Jest + Supertest | ✅ tests/order.test.js | 见 Task 9 | +``` + +- [ ] **Step 3: Commit** + +```bash +git add README.md docs/订单支付功能.md +git commit -m "docs: README 增加测试说明 + 订单支付文档追加实施对照表" +``` + +--- + +## Self-Review + +**1. Spec coverage(按 `docs/订单支付功能.md` 一/二节逐项):** +- ✅ 前台四页面(Checkout / OrderList / OrderDetail / Payment) — 现有 + Task 2/3/4/5 增强 +- ✅ 后台 OrderManage — Task 8 +- ✅ Pinia + api 封装 — 现有 + Task 2 新接口 +- ✅ 数据模型 Order/OrderItem/Payment — schema 与 model 全部存在 +- ✅ 前台 7 个接口 + 后台 4 个接口 — Task 1(status)、Task 8(complete)新增 +- ✅ 状态机 — 现有 +- ✅ 库存乐观锁 — 现有 +- ✅ 超时取消(C03) — Task 7 全新 +- ✅ 数据一致性 / 幂等 — Task 6 加固 +- ✅ 支付安全 / 状态校验 — 现有 +- ✅ 快照 — 现有(单字段已等价 JSON 语义) +- ✅ 状态同步(轮询) — Task 1 + Task 2 +- ✅ 异常边界 — Task 5 防抖 + Task 6 二次校验 +- ✅ UX 细节(库存 / 倒计时 / 进度条) — Task 2/3/5 + +**2. Placeholder scan:** 无 "TBD/TODO/实现 later";每个 step 都给出具体代码与命令。 + +**3. Type consistency:** +- Task 1 → Task 2:暴露的 `getOrderStatus` 返回 `{ status, paidAt, expired }`,前端 `Payment.vue` 仅用 `status` 与 `expired`,一致。 +- Task 6 → Task 7:`TIMEOUT_KEY` 与 `TIMEOUT_SECONDS` 在两处文件中重新定义为同语义函数,幂等键前缀分别用 `cancel:` / `timeout:` 区分,避免冲突。 +- Task 8:`adminCompleteOrder` 与 `adminOrderController.complete` 名称对齐。 + +--- + +## Execution Handoff + +Plan complete and saved to `docs/superpowers/plans/2026-07-27-order-payment-detail-polish.md`. + +Two execution options: + +1. **Subagent-Driven (recommended)** — I dispatch a fresh subagent per task, review between tasks, fast iteration. +2. **Inline Execution** — Execute tasks in this session using executing-plans, batch execution with checkpoints. + +请 master 确认执行方式,或就任务顺序 / 范围提出调整。 \ No newline at end of file -- Gitee From 6a4c79ddc4243eb7400a8752ed3a33ee12d7156b Mon Sep 17 00:00:00 2001 From: fishandsong <2633826274@qq.com> Date: Tue, 28 Jul 2026 21:22:07 +0800 Subject: [PATCH 021/168] =?UTF-8?q?feat(user-cart):=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=A4=A7=E9=83=A8=E5=88=86=E5=90=8E=E7=AB=AF=EF=BC=8C=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=97=A5=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/models/index.js | 9 + .../user/controllers/adminUserController.js | 31 +- .../user/controllers/cartController.js | 127 +- .../user/controllers/favoriteController.js | 45 + backend/src/modules/user/models/CartItem.js | 7 +- backend/src/modules/user/models/Favorite.js | 23 + backend/src/modules/user/routes/index.js | 17 +- .../src/modules/user/services/cartService.js | 126 +- .../modules/user/services/favoriteService.js | 42 + .../src/modules/user/services/userService.js | 17 +- frontend/pnpm-lock.yaml | 2615 +++++++++++++++++ frontend/pnpm-workspace.yaml | 4 + frontend/src/api/user.js | 46 +- frontend/src/router/index.js | 1 + frontend/src/stores/cartStore.js | 163 +- frontend/src/stores/userStore.js | 41 +- frontend/src/views/user/AddressList.vue | 555 +++- frontend/src/views/user/Cart.vue | 253 +- frontend/src/views/user/FavoriteList.vue | 80 + frontend/src/views/user/Login.vue | 7 +- frontend/src/views/user/admin/UserManage.vue | 119 +- ...45-\344\275\231\346\263\275-2026-07-28.md" | 61 + 22 files changed, 4174 insertions(+), 215 deletions(-) create mode 100644 backend/src/modules/user/controllers/favoriteController.js create mode 100644 backend/src/modules/user/models/Favorite.js create mode 100644 backend/src/modules/user/services/favoriteService.js create mode 100644 frontend/pnpm-lock.yaml create mode 100644 frontend/pnpm-workspace.yaml create mode 100644 frontend/src/views/user/FavoriteList.vue create mode 100644 "reports/daily/\344\275\231\346\263\275/\346\227\245\346\212\245-\344\275\231\346\263\275-2026-07-28.md" diff --git a/backend/src/models/index.js b/backend/src/models/index.js index eaa8998..fa180f2 100644 --- a/backend/src/models/index.js +++ b/backend/src/models/index.js @@ -10,6 +10,7 @@ const { sequelize } = require('../config/db'); const User = require('../modules/user/models/User'); const Address = require('../modules/user/models/Address'); const CartItem = require('../modules/user/models/CartItem'); +const Favorite = require('../modules/user/models/Favorite'); const Category = require('../modules/product/models/Category'); const Product = require('../modules/product/models/Product'); @@ -34,6 +35,14 @@ CartItem.belongsTo(User, { foreignKey: 'userId', as: 'user' }); Product.hasMany(CartItem, { foreignKey: 'productId', as: 'cartItems' }); CartItem.belongsTo(Product, { foreignKey: 'productId', as: 'product' }); +// 用户 ↔ 收藏(一对多) +User.hasMany(Favorite, { foreignKey: 'userId', as: 'favorites' }); +Favorite.belongsTo(User, { foreignKey: 'userId', as: 'user' }); + +// 商品 ↔ 收藏(一对多) +Product.hasMany(Favorite, { foreignKey: 'productId', as: 'favorites' }); +Favorite.belongsTo(Product, { foreignKey: 'productId', as: 'product' }); + // 商品 ↔ 分类(多对一) Product.belongsTo(Category, { foreignKey: 'categoryId', as: 'category' }); Category.hasMany(Product, { foreignKey: 'categoryId', as: 'products' }); diff --git a/backend/src/modules/user/controllers/adminUserController.js b/backend/src/modules/user/controllers/adminUserController.js index ff14aa2..83a9e99 100644 --- a/backend/src/modules/user/controllers/adminUserController.js +++ b/backend/src/modules/user/controllers/adminUserController.js @@ -9,32 +9,51 @@ const authService = require('../services/authService'); const { success } = require('../../../common/response'); const { validate } = require('../../../common/validator'); const { paginated, parsePagination } = require('../../../common/pagination'); +const { ForbiddenError } = require('../../../common/exception'); const adminLoginSchema = Joi.object({ username: Joi.string().required(), password: Joi.string().required(), }); +const statusSchema = Joi.object({ + status: Joi.number().valid(0, 1).required(), +}); + +/** 后台登录 */ async function adminLogin(req, res, next) { try { const data = await authService.adminLogin(req.body); res.json(success(data, '登录成功')); - } catch (e) { next(e); } + } catch (e) { + next(e); + } } +/** GET /api/admin/users — 分页查询用户列表,支持 username/phone 模糊搜索 */ async function list(req, res, next) { try { + // 校验 role===1 + if (req.user.role !== 'admin') throw new ForbiddenError('无权限'); + const { page, pageSize, offset, limit } = parsePagination(req.query, { defaultPageSize: 20 }); - const { count, rows } = await userService.listUsers({ keyword: req.query.keyword, page, pageSize, offset, limit }); + const { username, phone } = req.query; + const { count, rows } = await userService.listUsers({ username, phone, page, pageSize, offset, limit }); res.json(paginated(rows, count, page, pageSize)); - } catch (e) { next(e); } + } catch (e) { + next(e); + } } +/** PUT /api/admin/users/:id/status — 禁用/启用用户 */ async function updateStatus(req, res, next) { try { - await userService.updateStatus(req.params.id, parseInt(req.query.status, 10)); + if (req.user.role !== 'admin') throw new ForbiddenError('无权限'); + await userService.updateStatus(req.params.id, req.query.status); res.json(success(null, '已更新')); - } catch (e) { next(e); } + } catch (e) { + next(e); + } } -module.exports = { adminLogin, list, updateStatus, adminLoginSchema }; +module.exports = { adminLogin, list, updateStatus, adminLoginSchema, statusSchema }; diff --git a/backend/src/modules/user/controllers/cartController.js b/backend/src/modules/user/controllers/cartController.js index 192cf34..9bf1308 100644 --- a/backend/src/modules/user/controllers/cartController.js +++ b/backend/src/modules/user/controllers/cartController.js @@ -10,43 +10,132 @@ const { validate } = require('../../../common/validator'); const addSchema = Joi.object({ productId: Joi.number().required(), - qty: Joi.number().integer().min(1).default(1), + quantity: Joi.number().integer().min(1).default(1), }); -const qtySchema = Joi.object({ quantity: Joi.number().integer().min(1).required() }); -async function add(req, res, next) { +const qtySchema = Joi.object({ + quantity: Joi.number().integer().min(0).required(), +}); + +const selectSchema = Joi.object({ + selected: Joi.boolean().required(), +}); + +const mergeSchema = Joi.object({ + items: Joi.array() + .items( + Joi.object({ + productId: Joi.number().required(), + quantity: Joi.number().integer().min(1).default(1), + selected: Joi.boolean().default(true), + }) + ) + .required(), +}); + +/** GET /api/cart */ +async function getCart(req, res, next) { try { - const data = await cartService.add(req.user.userId, req.body); - res.json(success(data, '已加入购物车')); - } catch (e) { next(e); } + const data = await cartService.getCart(req.user.userId); + res.json(success(data)); + } catch (e) { + next(e); + } } -async function list(req, res, next) { +/** POST /api/cart */ +async function addItem(req, res, next) { try { - const data = await cartService.list(req.user.userId); - res.json(success(data)); - } catch (e) { next(e); } + const data = await cartService.addItem( + req.user.userId, + req.body.productId, + req.body.quantity + ); + res.json(success(data, '已加入购物车')); + } catch (e) { + next(e); + } } +/** PUT /api/cart/:id */ async function updateQty(req, res, next) { try { - await cartService.updateQty(req.user.userId, req.params.id, req.body.quantity); + await cartService.updateQty( + parseInt(req.params.id), + req.user.userId, + req.body.quantity + ); res.json(success(null, '已更新')); - } catch (e) { next(e); } + } catch (e) { + next(e); + } } -async function remove(req, res, next) { +/** DELETE /api/cart/:id */ +async function deleteItem(req, res, next) { try { - await cartService.remove(req.user.userId, req.params.id); + await cartService.deleteItem(parseInt(req.params.id), req.user.userId); res.json(success(null, '已删除')); - } catch (e) { next(e); } + } catch (e) { + next(e); + } +} + +/** PATCH /api/cart/:id/select */ +async function toggleSelect(req, res, next) { + try { + await cartService.toggleSelect( + parseInt(req.params.id), + req.user.userId, + req.body.selected + ); + res.json(success(null, '已更新')); + } catch (e) { + next(e); + } +} + +/** DELETE /api/cart/clear */ +async function clear(req, res, next) { + try { + await cartService.clear(req.user.userId); + res.json(success(null, '已清空')); + } catch (e) { + next(e); + } +} + +/** POST /api/cart/merge */ +async function merge(req, res, next) { + try { + await cartService.merge(req.user.userId, req.body.items); + res.json(success(null, '已合并')); + } catch (e) { + next(e); + } } -async function checkout(req, res, next) { +/** GET /api/cart/checkout — S04 结算快照 */ +async function getCheckout(req, res, next) { try { - const data = await cartService.checkout(req.user.userId, req.query.ids); + const data = await cartService.getCheckout(req.user.userId); res.json(success(data)); - } catch (e) { next(e); } + } catch (e) { + next(e); + } } -module.exports = { add, list, updateQty, remove, checkout, addSchema, qtySchema }; +module.exports = { + getCart, + addItem, + updateQty, + deleteItem, + toggleSelect, + clear, + merge, + getCheckout, + addSchema, + qtySchema, + selectSchema, + mergeSchema, +}; diff --git a/backend/src/modules/user/controllers/favoriteController.js b/backend/src/modules/user/controllers/favoriteController.js new file mode 100644 index 0000000..4b2160a --- /dev/null +++ b/backend/src/modules/user/controllers/favoriteController.js @@ -0,0 +1,45 @@ +/** + * 收藏 controller + */ +'use strict'; + +const Joi = require('joi'); +const favoriteService = require('../services/favoriteService'); +const { success } = require('../../../common/response'); +const { validate } = require('../../../common/validator'); + +const addSchema = Joi.object({ + productId: Joi.number().required(), +}); + +/** POST /api/favorites */ +async function add(req, res, next) { + try { + const data = await favoriteService.add(req.user.userId, req.body.productId); + res.json(success(data, '收藏成功')); + } catch (e) { + next(e); + } +} + +/** DELETE /api/favorites/:id */ +async function remove(req, res, next) { + try { + await favoriteService.remove(parseInt(req.params.id), req.user.userId); + res.json(success(null, '已取消收藏')); + } catch (e) { + next(e); + } +} + +/** GET /api/favorites */ +async function list(req, res, next) { + try { + const data = await favoriteService.list(req.user.userId); + res.json(success(data)); + } catch (e) { + next(e); + } +} + +module.exports = { add, remove, list, addSchema }; diff --git a/backend/src/modules/user/models/CartItem.js b/backend/src/modules/user/models/CartItem.js index 2ad6b65..72845cb 100644 --- a/backend/src/modules/user/models/CartItem.js +++ b/backend/src/modules/user/models/CartItem.js @@ -10,9 +10,14 @@ const CartItem = sequelize.define('CartItem', { productId: { type: DataTypes.BIGINT, allowNull: false, field: 'product_id' }, quantity: { type: DataTypes.INTEGER, allowNull: false, defaultValue: 1 }, selected: { type: DataTypes.TINYINT, allowNull: false, defaultValue: 1 }, + createTime: { type: DataTypes.DATE, allowNull: false, field: 'created_at', defaultValue: DataTypes.NOW }, + updateTime: { type: DataTypes.DATE, allowNull: false, field: 'updated_at', defaultValue: DataTypes.NOW }, }, { tableName: 'cart_item', - timestamps: false // ← 添加这一行 + timestamps: false, + indexes: [ + { unique: true, fields: ['user_id', 'product_id'] }, + ], }); module.exports = CartItem; \ No newline at end of file diff --git a/backend/src/modules/user/models/Favorite.js b/backend/src/modules/user/models/Favorite.js new file mode 100644 index 0000000..09b33c9 --- /dev/null +++ b/backend/src/modules/user/models/Favorite.js @@ -0,0 +1,23 @@ +/** + * 收藏模型 + */ +'use strict'; + +const { DataTypes } = require('sequelize'); +const { sequelize } = require('../../../config/db'); + +const Favorite = sequelize.define('Favorite', { + id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true }, + userId: { type: DataTypes.BIGINT, allowNull: false, field: 'user_id' }, + productId: { type: DataTypes.BIGINT, allowNull: false, field: 'product_id' }, + createTime: { type: DataTypes.DATE, allowNull: false, field: 'create_time', defaultValue: DataTypes.NOW }, +}, { + tableName: 'favorite', + timestamps: false, + indexes: [ + { unique: true, fields: ['user_id', 'product_id'] }, + { fields: ['user_id'] }, + ], +}); + +module.exports = Favorite; diff --git a/backend/src/modules/user/routes/index.js b/backend/src/modules/user/routes/index.js index 422961e..389e0e9 100644 --- a/backend/src/modules/user/routes/index.js +++ b/backend/src/modules/user/routes/index.js @@ -11,6 +11,7 @@ const authCtl = require('../controllers/authController'); const profileCtl = require('../controllers/profileController'); const addressCtl = require('../controllers/addressController'); const cartCtl = require('../controllers/cartController'); +const favoriteCtl = require('../controllers/favoriteController'); const adminUserCtl = require('../controllers/adminUserController'); // /api/auth/* @@ -32,11 +33,19 @@ router.delete('/address/:id', authMiddleware, addressCtl.remove); router.patch('/address/:id/default', authMiddleware, addressCtl.setDefault); // /api/cart/* (购物车 + S04 结算) -router.post('/cart', authMiddleware, validate(cartCtl.addSchema), cartCtl.add); -router.get('/cart', authMiddleware, cartCtl.list); -router.get('/cart/checkout', authMiddleware, cartCtl.checkout); // S04 接缝 +router.get('/cart', authMiddleware, cartCtl.getCart); +router.post('/cart', authMiddleware, validate(cartCtl.addSchema), cartCtl.addItem); +router.post('/cart/merge', authMiddleware, validate(cartCtl.mergeSchema), cartCtl.merge); +router.get('/cart/checkout', authMiddleware, cartCtl.getCheckout); // S04 接缝 router.put('/cart/:id', authMiddleware, validate(cartCtl.qtySchema), cartCtl.updateQty); -router.delete('/cart/:id', authMiddleware, cartCtl.remove); +router.patch('/cart/:id/select', authMiddleware, validate(cartCtl.selectSchema), cartCtl.toggleSelect); +router.delete('/cart/clear', authMiddleware, cartCtl.clear); +router.delete('/cart/:id', authMiddleware, cartCtl.deleteItem); + +// /api/favorites/* (收藏) +router.get('/favorites', authMiddleware, favoriteCtl.list); +router.post('/favorites', authMiddleware, validate(favoriteCtl.addSchema), favoriteCtl.add); +router.delete('/favorites/:id', authMiddleware, favoriteCtl.remove); // /api/admin/auth/* (后台登录) router.post('/admin/auth/login', validate(adminUserCtl.adminLoginSchema), adminUserCtl.adminLogin); diff --git a/backend/src/modules/user/services/cartService.js b/backend/src/modules/user/services/cartService.js index bfa9a90..64b8270 100644 --- a/backend/src/modules/user/services/cartService.js +++ b/backend/src/modules/user/services/cartService.js @@ -4,67 +4,133 @@ 'use strict'; const { Op } = require('sequelize'); -// 关键:手动加载 models/index.js 以确保 Product ↔ CartItem 关联已建立 -// (独立 require model 时 Sequelize 不知道它们之间的关联) +const { sequelize } = require('../../../config/db'); require('../../../models'); const CartItem = require('../models/CartItem'); const Product = require('../../product/models/Product'); const { ParamError } = require('../../../common/exception'); -async function add(userId, { productId, qty }) { - const p = await Product.findByPk(productId); - if (!p || p.onSale !== 1) throw new ParamError('商品不存在或已下架'); - if (p.stock < qty) throw new ParamError('库存不足'); +/** 查询该用户所有购物车项 */ +async function getCart(userId) { + return CartItem.findAll({ + where: { userId }, + include: [{ model: Product, as: 'product' }], + }); +} + +/** 添加购物车项,存在则 quantity 累加,否则新增 */ +async function addItem(userId, productId, quantity = 1) { + const product = await Product.findByPk(productId); + if (!product || product.onSale !== 1) throw new ParamError('商品不存在或已下架'); + if (product.stock < quantity) throw new ParamError('库存不足'); - const [row] = await CartItem.findOrCreate({ + const [row, created] = await CartItem.findOrCreate({ where: { userId, productId }, - defaults: { quantity: qty }, + defaults: { quantity, selected: true }, }); - if (row.quantity !== qty) await row.update({ quantity: row.quantity + qty }); + if (!created) { + await row.update({ quantity: row.quantity + quantity }); + } return row; } -async function list(userId) { - return CartItem.findAll({ - where: { userId }, - include: [{ model: Product, as: 'product' }], - }); +/** 修改数量(需校验归属) */ +async function updateQty(id, userId, quantity) { + const row = await CartItem.findOne({ where: { id, userId } }); + if (!row) throw new ParamError('购物车项不存在'); + if (quantity <= 0) { + await row.destroy(); + } else { + await row.update({ quantity }); + } +} + +/** 删除单条(需校验归属) */ +async function deleteItem(id, userId) { + const row = await CartItem.findOne({ where: { id, userId } }); + if (!row) throw new ParamError('购物车项不存在'); + await row.destroy(); } -async function updateQty(userId, id, quantity) { +/** 勾选/取消(需校验归属) */ +async function toggleSelect(id, userId, selected) { const row = await CartItem.findOne({ where: { id, userId } }); if (!row) throw new ParamError('购物车项不存在'); - await row.update({ quantity }); + await row.update({ selected: !!selected }); } -async function remove(userId, id) { - await CartItem.destroy({ where: { id, userId } }); +/** 清空该用户所有购物车项 */ +async function clear(userId) { + await CartItem.destroy({ where: { userId } }); } -/** S04 购物车结算快照(接缝) */ -async function checkout(userId, idsParam) { - const ids = (idsParam || '').toString().split(',').filter(Boolean).map(Number); - const where = { userId }; - if (ids.length) where.id = { [Op.in]: ids }; +/** 合并购物车(存在则 quantity 累加,不存在则新增,使用事务) */ +async function merge(userId, items) { + if (!Array.isArray(items) || !items.length) return; + const t = await sequelize.transaction(); + try { + for (const item of items) { + const { productId, quantity = 1, selected = true } = item; + const product = await Product.findByPk(productId, { transaction: t }); + if (!product || product.onSale !== 1) continue; + + const existing = await CartItem.findOne({ + where: { userId, productId }, + transaction: t, + }); + if (existing) { + await existing.update( + { quantity: existing.quantity + quantity }, + { transaction: t } + ); + } else { + await CartItem.create( + { userId, productId, quantity, selected }, + { transaction: t } + ); + } + } + await t.commit(); + } catch (err) { + await t.rollback(); + throw err; + } +} + +/** S04 购物车结算快照 */ +async function getCheckout(userId) { const items = await CartItem.findAll({ - where, + where: { userId, selected: true }, include: [{ model: Product, as: 'product' }], }); if (!items.length) throw new ParamError('购物车为空'); - const offShelf = items.filter((it) => !it.product || it.product.onSale !== 1).map((it) => it.productId); - if (offShelf.length) throw new ParamError('以下商品已下架:' + offShelf.join(',')); + const offShelf = items.filter((it) => !it.product || it.product.onSale !== 1); + if (offShelf.length) throw new ParamError('以下商品已下架:' + offShelf.map((it) => it.productId).join(',')); const snap = items.map((it) => ({ productId: it.productId, name: it.product.name, price: it.product.price, image: it.product.image, - qty: it.quantity, + quantity: it.quantity, + selected: it.selected, })); - const total = snap.reduce((sum, x) => sum + Number(x.price) * x.qty, 0).toFixed(2); - return { items: snap, total }; + + const totalPrice = snap.reduce((sum, x) => sum + Number(x.price) * x.quantity, 0); + const itemCount = snap.reduce((sum, x) => sum + x.quantity, 0); + + return { items: snap, totalPrice, itemCount }; } -module.exports = { add, list, updateQty, remove, checkout }; +module.exports = { + getCart, + addItem, + updateQty, + deleteItem, + toggleSelect, + clear, + merge, + getCheckout, +}; diff --git a/backend/src/modules/user/services/favoriteService.js b/backend/src/modules/user/services/favoriteService.js new file mode 100644 index 0000000..794fdf1 --- /dev/null +++ b/backend/src/modules/user/services/favoriteService.js @@ -0,0 +1,42 @@ +/** + * 收藏 service + */ +'use strict'; + +const { Op } = require('sequelize'); +require('../../../models'); +const Favorite = require('../models/Favorite'); +const Product = require('../../product/models/Product'); +const { ParamError } = require('../../../common/exception'); + +/** 收藏商品 */ +async function add(userId, productId) { + const product = await Product.findByPk(productId); + if (!product || product.onSale !== 1) throw new ParamError('商品不存在或已下架'); + + const [row, created] = await Favorite.findOrCreate({ + where: { userId, productId }, + defaults: { userId, productId }, + }); + if (!created) throw new ParamError('已收藏'); + + return row; +} + +/** 取消收藏 */ +async function remove(id, userId) { + const row = await Favorite.findOne({ where: { id, userId } }); + if (!row) throw new ParamError('收藏记录不存在'); + await row.destroy(); +} + +/** 收藏列表 */ +async function list(userId) { + return Favorite.findAll({ + where: { userId }, + include: [{ model: Product, as: 'product' }], + order: [['create_time', 'DESC']], + }); +} + +module.exports = { add, remove, list }; diff --git a/backend/src/modules/user/services/userService.js b/backend/src/modules/user/services/userService.js index 2248781..88879b1 100644 --- a/backend/src/modules/user/services/userService.js +++ b/backend/src/modules/user/services/userService.js @@ -29,13 +29,13 @@ async function changePassword(userId, oldPassword, newPassword) { } // 后台 -async function listUsers({ keyword, page, pageSize, offset, limit }) { +async function listUsers({ username, phone, page, pageSize, offset, limit }) { const where = {}; - if (keyword) { - where[Op.or] = [ - { username: { [Op.like]: `%${keyword}%` } }, - { phone: { [Op.like]: `%${keyword}%` } }, - ]; + if (username) { + where.username = { [Op.like]: `%${username}%` }; + } + if (phone) { + where.phone = { [Op.like]: `%${phone}%` }; } return User.findAndCountAll({ where, offset, limit, @@ -46,8 +46,9 @@ async function listUsers({ keyword, page, pageSize, offset, limit }) { } async function updateStatus(userId, status) { - if (![0, 1].includes(status)) throw new Error('status 取值 0 或 1'); - await User.update({ status }, { where: { id: userId } }); + const s = parseInt(status, 10); + if (![0, 1].includes(s)) throw new Error('status 取值 0 或 1'); + await User.update({ status: s }, { where: { id: userId } }); } module.exports = { getMe, updateMe, changePassword, listUsers, updateStatus }; diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..c42d63d --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,2615 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.1 + version: 2.3.2(vue@3.5.40) + axios: + specifier: ^1.7.2 + version: 1.18.1 + element-plus: + specifier: ^2.7.6 + version: 2.14.3(vue@3.5.40) + pinia: + specifier: ^2.1.7 + version: 2.1.7(vue@3.5.40) + vue: + specifier: ^3.4.31 + version: 3.5.40 + vue-router: + specifier: ^4.4.0 + version: 4.6.4(vue@3.5.40) + devDependencies: + '@vitejs/plugin-vue': + specifier: ^5.0.5 + version: 5.0.5(vite@5.3.4(sass@1.102.0))(vue@3.5.40) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-plugin-vue: + specifier: ^9.27.0 + version: 9.27.0(eslint@8.57.0) + sass: + specifier: ^1.77.6 + version: 1.102.0 + unplugin-auto-import: + specifier: ^0.17.6 + version: 0.17.6(@vueuse/core@14.3.0(vue@3.5.40))(rollup@4.62.2) + unplugin-vue-components: + specifier: ^0.27.2 + version: 0.27.2(@babel/parser@7.29.7)(rollup@4.62.2)(vue@3.5.40) + vite: + specifier: ^5.3.4 + version: 5.3.4(sass@1.102.0) + +packages: + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@ctrl/tinycolor@4.2.0': + resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} + engines: {node: '>=14'} + + '@element-plus/icons-vue@2.3.2': + resolution: {integrity: sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.21.3': + resolution: {integrity: sha512-yTgnwQpFVYfvvo4SvRFB0SwrW8YjOxEoT7wfMT7Ol5v7v5LDNvSGo67aExmxOb87nQNeWPVvaGBNfQ7BXcrZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.3': + resolution: {integrity: sha512-c+ty9necz3zB1Y+d/N+mC6KVVkGUUOcm4ZmT5i/Fk5arOaY3i6CA3P5wo/7+XzV8cb4GrI/Zjp8NuOQ9Lfsosw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.3': + resolution: {integrity: sha512-bviJOLMgurLJtF1/mAoJLxDZDL6oU5/ztMHnJQRejbJrSc9FFu0QoUoFhvi6qSKJEw9y5oGyvr9fuDtzJ30rNQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.3': + resolution: {integrity: sha512-JReHfYCRK3FVX4Ra+y5EBH1b9e16TV2OxrPAvzMsGeES0X2Ndm9ImQRI4Ket757vhc5XBOuGperw63upesclRw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.3': + resolution: {integrity: sha512-U3fuQ0xNiAkXOmQ6w5dKpEvXQRSpHOnbw7gEfHCRXPeTKW9sBzVck6C5Yneb8LfJm0l6le4NQfkNPnWMSlTFUQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.3': + resolution: {integrity: sha512-3m1CEB7F07s19wmaMNI2KANLcnaqryJxO1fXHUV5j1rWn+wMxdUYoPyO2TnAbfRZdi7ADRwJClmOwgT13qlP3Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.3': + resolution: {integrity: sha512-fsNAAl5pU6wmKHq91cHWQT0Fz0vtyE1JauMzKotrwqIKAswwP5cpHUCxZNSTuA/JlqtScq20/5KZ+TxQdovU/g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.3': + resolution: {integrity: sha512-tci+UJ4zP5EGF4rp8XlZIdq1q1a/1h9XuronfxTMCNBslpCtmk97Q/5qqy1Mu4zIc0yswN/yP/BLX+NTUC1bXA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.3': + resolution: {integrity: sha512-vvG6R5g5ieB4eCJBQevyDMb31LMHthLpXTc2IGkFnPWS/GzIFDnaYFp558O+XybTmYrVjxnryru7QRleJvmZ6Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.3': + resolution: {integrity: sha512-f6kz2QpSuyHHg01cDawj0vkyMwuIvN62UAguQfnNVzbge2uWLhA7TCXOn83DT0ZvyJmBI943MItgTovUob36SQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.3': + resolution: {integrity: sha512-HjCWhH7K96Na+66TacDLJmOI9R8iDWDDiqe17C7znGvvE4sW1ECt9ly0AJ3dJH62jHyVqW9xpxZEU1jKdt+29A==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.3': + resolution: {integrity: sha512-BGpimEccmHBZRcAhdlRIxMp7x9PyJxUtj7apL2IuoG9VxvU/l/v1z015nFs7Si7tXUwEsvjc1rOJdZCn4QTU+Q==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.3': + resolution: {integrity: sha512-5rMOWkp7FQGtAH3QJddP4w3s47iT20hwftqdm7b+loe95o8JU8ro3qZbhgMRy0VuFU0DizymF1pBKkn3YHWtsw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.3': + resolution: {integrity: sha512-h0zj1ldel89V5sjPLo5H1SyMzp4VrgN1tPkN29TmjvO1/r0MuMRwJxL8QY05SmfsZRs6TF0c/IDH3u7XYYmbAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.3': + resolution: {integrity: sha512-dkAKcTsTJ+CRX6bnO17qDJbLoW37npd5gSNtSzjYQr0svghLJYGYB0NF1SNcU1vDcjXLYS5pO4qOW4YbFama4A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.3': + resolution: {integrity: sha512-vnD1YUkovEdnZWEuMmy2X2JmzsHQqPpZElXx6dxENcIwTu+Cu5ERax6+Ke1QsE814Zf3c6rxCfwQdCTQ7tPuXA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.3': + resolution: {integrity: sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.3': + resolution: {integrity: sha512-uTgCwsvQ5+vCQnqM//EfDSuomo2LhdWhFPS8VL8xKf+PKTCrcT/2kPPoWMTs22aB63MLdGMJiE3f1PHvCDmUOw==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.3': + resolution: {integrity: sha512-vNAkR17Ub2MgEud2Wag/OE4HTSI6zlb291UYzHez/psiKarp0J8PKGDnAhMBcHFoOHMXHfExzmjMojJNbAStrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.3': + resolution: {integrity: sha512-W8H9jlGiSBomkgmouaRoTXo49j4w4Kfbl6I1bIdO/vT0+0u4f20ko3ELzV3hPI6XV6JNBVX+8BC+ajHkvffIJA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.3': + resolution: {integrity: sha512-EjEomwyLSCg8Ag3LDILIqYCZAq/y3diJ04PnqGRgq8/4O3VNlXyMd54j/saShaN4h5o5mivOjAzmU6C3X4v0xw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.3': + resolution: {integrity: sha512-WGiE/GgbsEwR33++5rzjiYsKyHywE8QSZPF7Rfx9EBfK3Qn3xyR6IjyCr5Uk38Kg8fG4/2phN7sXp4NPWd3fcw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.3': + resolution: {integrity: sha512-xRxC0jaJWDLYvcUvjQmHCJSfMrgmUuvsoXgDeU/wTorQ1ngDdUBuFtgY3W1Pc5sprGAvZBtWdJX7RPg/iZZUqA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.8.0': + resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} + + '@floating-ui/dom@1.8.0': + resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} + + '@floating-ui/utils@0.2.12': + resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@parcel/watcher-android-arm64@2.6.0': + resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.6.0': + resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.6.0': + resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.6.0': + resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.6.0': + resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.6.0': + resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.6.0': + resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.6.0': + resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.6.0': + resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.6.0': + resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.6.0': + resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-x64@2.6.0': + resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.6.0': + resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} + engines: {node: '>= 10.0.0'} + + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.62.2': + resolution: {integrity: sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.62.2': + resolution: {integrity: sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.62.2': + resolution: {integrity: sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.62.2': + resolution: {integrity: sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.62.2': + resolution: {integrity: sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.62.2': + resolution: {integrity: sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + resolution: {integrity: sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + resolution: {integrity: sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.62.2': + resolution: {integrity: sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.62.2': + resolution: {integrity: sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.62.2': + resolution: {integrity: sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.62.2': + resolution: {integrity: sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + resolution: {integrity: sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.62.2': + resolution: {integrity: sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + resolution: {integrity: sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.62.2': + resolution: {integrity: sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.62.2': + resolution: {integrity: sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.62.2': + resolution: {integrity: sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.62.2': + resolution: {integrity: sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.62.2': + resolution: {integrity: sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.62.2': + resolution: {integrity: sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.62.2': + resolution: {integrity: sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.62.2': + resolution: {integrity: sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.62.2': + resolution: {integrity: sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.62.2': + resolution: {integrity: sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==} + cpu: [x64] + os: [win32] + + '@sxzz/popperjs-es@2.11.8': + resolution: {integrity: sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@ungap/structured-clone@1.3.3': + resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} + + '@vitejs/plugin-vue@5.0.5': + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@vue/compiler-core@3.5.40': + resolution: {integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==} + + '@vue/compiler-dom@3.5.40': + resolution: {integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==} + + '@vue/compiler-sfc@3.5.40': + resolution: {integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==} + + '@vue/compiler-ssr@3.5.40': + resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==} + + '@vue/devtools-api@6.5.0': + resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity@3.5.40': + resolution: {integrity: sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==} + + '@vue/runtime-core@3.5.40': + resolution: {integrity: sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==} + + '@vue/runtime-dom@3.5.40': + resolution: {integrity: sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==} + + '@vue/server-renderer@3.5.40': + resolution: {integrity: sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==} + + '@vue/shared@3.5.40': + resolution: {integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==} + + '@vueuse/core@14.3.0': + resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@14.3.0': + resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==} + + '@vueuse/shared@14.3.0': + resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==} + peerDependencies: + vue: ^3.5.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.0: + resolution: {integrity: sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==} + engines: {node: '>= 6.0.0'} + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.1.0: + resolution: {integrity: sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} + + balanced-match@1.0.0: + resolution: {integrity: sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} + + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.0.0: + resolution: {integrity: sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + element-plus@2.14.3: + resolution: {integrity: sha512-pJcvxcpZjYruNzuJhAeVwnbYjfNgzBKnWHwSVEhwzM2/kcLI3brzmtIBxtPqd4hQWJfD1PRnjoc1WipLw2eBGg==} + peerDependencies: + vue: ^3.3.7 + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.3: + resolution: {integrity: sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw==} + engines: {node: '>=12'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-plugin-vue@9.27.0: + resolution: {integrity: sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.3.1: + resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.4.3: + resolution: {integrity: sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + globals@13.19.0: + resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + engines: {node: '>=8'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + ignore@5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + + immutable@5.1.9: + resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} + + import-fresh@3.2.1: + resolution: {integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-addon-api@7.0.0: + resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.0.2: + resolution: {integrity: sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + engines: {node: '>=12'} + + pinia@2.1.7: + resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + postcss-selector-parser@6.1.4: + resolution: {integrity: sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==} + engines: {node: '>=4'} + + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup@4.62.2: + resolution: {integrity: sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sass@1.102.0: + resolution: {integrity: sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==} + engines: {node: '>=20.19.0'} + hasBin: true + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + + supports-color@7.1.0: + resolution: {integrity: sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + unimport@3.7.1: + resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} + + unplugin-auto-import@0.17.6: + resolution: {integrity: sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-vue-components@0.27.2: + resolution: {integrity: sha512-YifnsmslMRNt+JRQiCG4ZX1+xUQuubUZm76K7Qtg8dmchZJkHIDxZSyfZb5/jqrLWMTm/TUjGJ3ZDlzO6SFnSQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@1.10.1: + resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + engines: {node: '>=14.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite@5.3.4: + resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vue-component-type-helpers@3.3.8: + resolution: {integrity: sha512-troqCMmQodQDqUqn63NQaFi+CDSclSe7sc8VEBFqf5GFLqmGR2Ph3P2WEC7qwpRVyEWsTi/aAr4vyOe/B1hU3g==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-router@4.6.4: + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} + peerDependencies: + vue: ^3.5.0 + + vue@3.5.40: + resolution: {integrity: sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + webpack-sources@3.5.1: + resolution: {integrity: sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which@2.0.1: + resolution: {integrity: sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + +snapshots: + + '@antfu/utils@0.7.10': {} + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@ctrl/tinycolor@4.2.0': {} + + '@element-plus/icons-vue@2.3.2(vue@3.5.40)': + dependencies: + vue: 3.5.40 + + '@esbuild/aix-ppc64@0.21.3': + optional: true + + '@esbuild/android-arm64@0.21.3': + optional: true + + '@esbuild/android-arm@0.21.3': + optional: true + + '@esbuild/android-x64@0.21.3': + optional: true + + '@esbuild/darwin-arm64@0.21.3': + optional: true + + '@esbuild/darwin-x64@0.21.3': + optional: true + + '@esbuild/freebsd-arm64@0.21.3': + optional: true + + '@esbuild/freebsd-x64@0.21.3': + optional: true + + '@esbuild/linux-arm64@0.21.3': + optional: true + + '@esbuild/linux-arm@0.21.3': + optional: true + + '@esbuild/linux-ia32@0.21.3': + optional: true + + '@esbuild/linux-loong64@0.21.3': + optional: true + + '@esbuild/linux-mips64el@0.21.3': + optional: true + + '@esbuild/linux-ppc64@0.21.3': + optional: true + + '@esbuild/linux-riscv64@0.21.3': + optional: true + + '@esbuild/linux-s390x@0.21.3': + optional: true + + '@esbuild/linux-x64@0.21.3': + optional: true + + '@esbuild/netbsd-x64@0.21.3': + optional: true + + '@esbuild/openbsd-x64@0.21.3': + optional: true + + '@esbuild/sunos-x64@0.21.3': + optional: true + + '@esbuild/win32-arm64@0.21.3': + optional: true + + '@esbuild/win32-ia32@0.21.3': + optional: true + + '@esbuild/win32-x64@0.21.3': + optional: true + + '@eslint-community/eslint-utils@4.10.1(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 9.6.1 + globals: 13.19.0 + ignore: 5.2.0 + import-fresh: 3.2.1 + js-yaml: 4.3.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@floating-ui/core@1.8.0': + dependencies: + '@floating-ui/utils': 0.2.12 + + '@floating-ui/dom@1.8.0': + dependencies: + '@floating-ui/core': 1.8.0 + '@floating-ui/utils': 0.2.12 + + '@floating-ui/utils@0.2.12': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@parcel/watcher-android-arm64@2.6.0': + optional: true + + '@parcel/watcher-darwin-arm64@2.6.0': + optional: true + + '@parcel/watcher-darwin-x64@2.6.0': + optional: true + + '@parcel/watcher-freebsd-x64@2.6.0': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-arm-musl@2.6.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.6.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.6.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.6.0': + optional: true + + '@parcel/watcher-win32-arm64@2.6.0': + optional: true + + '@parcel/watcher-win32-x64@2.6.0': + optional: true + + '@parcel/watcher@2.6.0': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.0.0 + picomatch: 4.0.5 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 + optional: true + + '@rollup/pluginutils@5.4.0(rollup@4.62.2)': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.5 + optionalDependencies: + rollup: 4.62.2 + + '@rollup/rollup-android-arm-eabi@4.62.2': + optional: true + + '@rollup/rollup-android-arm64@4.62.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.62.2': + optional: true + + '@rollup/rollup-darwin-x64@4.62.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.62.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.62.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.62.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.62.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.62.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.62.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.62.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.62.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.62.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.62.2': + optional: true + + '@rollup/rollup-openbsd-x64@4.62.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.62.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.62.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.62.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.62.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.62.2': + optional: true + + '@sxzz/popperjs-es@2.11.8': {} + + '@types/estree@1.0.9': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.24 + + '@types/lodash@4.17.24': {} + + '@types/web-bluetooth@0.0.21': {} + + '@ungap/structured-clone@1.3.3': {} + + '@vitejs/plugin-vue@5.0.5(vite@5.3.4(sass@1.102.0))(vue@3.5.40)': + dependencies: + vite: 5.3.4(sass@1.102.0) + vue: 3.5.40 + + '@vue/compiler-core@3.5.40': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.40 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.40': + dependencies: + '@vue/compiler-core': 3.5.40 + '@vue/shared': 3.5.40 + + '@vue/compiler-sfc@3.5.40': + dependencies: + '@babel/parser': 7.29.7 + '@vue/compiler-core': 3.5.40 + '@vue/compiler-dom': 3.5.40 + '@vue/compiler-ssr': 3.5.40 + '@vue/shared': 3.5.40 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.23 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.40': + dependencies: + '@vue/compiler-dom': 3.5.40 + '@vue/shared': 3.5.40 + + '@vue/devtools-api@6.5.0': {} + + '@vue/devtools-api@6.6.4': {} + + '@vue/reactivity@3.5.40': + dependencies: + '@vue/shared': 3.5.40 + + '@vue/runtime-core@3.5.40': + dependencies: + '@vue/reactivity': 3.5.40 + '@vue/shared': 3.5.40 + + '@vue/runtime-dom@3.5.40': + dependencies: + '@vue/reactivity': 3.5.40 + '@vue/runtime-core': 3.5.40 + '@vue/shared': 3.5.40 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.40': + dependencies: + '@vue/compiler-ssr': 3.5.40 + '@vue/runtime-dom': 3.5.40 + '@vue/shared': 3.5.40 + + '@vue/shared@3.5.40': {} + + '@vueuse/core@14.3.0(vue@3.5.40)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.3.0 + '@vueuse/shared': 14.3.0(vue@3.5.40) + vue: 3.5.40 + + '@vueuse/metadata@14.3.0': {} + + '@vueuse/shared@14.3.0(vue@3.5.40)': + dependencies: + vue: 3.5.40 + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + + acorn@8.17.0: {} + + agent-base@6.0.0: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.1.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + argparse@2.0.1: {} + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + axios@1.18.1: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.6 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + + balanced-match@1.0.0: {} + + binary-extensions@2.3.0: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.16: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + + brace-expansion@2.1.2: + dependencies: + balanced-match: 1.0.0 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + chalk@4.0.0: + dependencies: + ansi-styles: 4.1.0 + supports-color: 7.1.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@5.0.0: + dependencies: + readdirp: 5.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + concat-map@0.0.1: {} + + confbox@0.1.8: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.1 + + cssesc@3.0.0: {} + + csstype@3.2.3: {} + + dayjs@1.11.21: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + delayed-stream@1.0.0: {} + + detect-libc@2.1.2: + optional: true + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + element-plus@2.14.3(vue@3.5.40): + dependencies: + '@ctrl/tinycolor': 4.2.0 + '@element-plus/icons-vue': 2.3.2(vue@3.5.40) + '@floating-ui/dom': 1.8.0 + '@popperjs/core': '@sxzz/popperjs-es@2.11.8' + '@types/lodash': 4.17.24 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 14.3.0(vue@3.5.40) + async-validator: 4.2.5 + dayjs: 1.11.21 + lodash: 4.18.1 + lodash-es: 4.18.1 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.40 + vue-component-type-helpers: 3.3.8 + + entities@7.0.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + esbuild@0.21.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.3 + '@esbuild/android-arm': 0.21.3 + '@esbuild/android-arm64': 0.21.3 + '@esbuild/android-x64': 0.21.3 + '@esbuild/darwin-arm64': 0.21.3 + '@esbuild/darwin-x64': 0.21.3 + '@esbuild/freebsd-arm64': 0.21.3 + '@esbuild/freebsd-x64': 0.21.3 + '@esbuild/linux-arm': 0.21.3 + '@esbuild/linux-arm64': 0.21.3 + '@esbuild/linux-ia32': 0.21.3 + '@esbuild/linux-loong64': 0.21.3 + '@esbuild/linux-mips64el': 0.21.3 + '@esbuild/linux-ppc64': 0.21.3 + '@esbuild/linux-riscv64': 0.21.3 + '@esbuild/linux-s390x': 0.21.3 + '@esbuild/linux-x64': 0.21.3 + '@esbuild/netbsd-x64': 0.21.3 + '@esbuild/openbsd-x64': 0.21.3 + '@esbuild/sunos-x64': 0.21.3 + '@esbuild/win32-arm64': 0.21.3 + '@esbuild/win32-ia32': 0.21.3 + '@esbuild/win32-x64': 0.21.3 + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-plugin-vue@9.27.0(eslint@8.57.0): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@8.57.0) + eslint: 8.57.0 + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.4 + semver: 7.8.5 + vue-eslint-parser: 9.4.3(eslint@8.57.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.3.0: {} + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@8.57.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.3 + ajv: 6.15.0 + chalk: 4.0.0 + cross-spawn: 7.0.6 + debug: 4.4.3 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.19.0 + graphemer: 1.4.0 + ignore: 5.2.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.3.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.3.1: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 3.3.0 + + espree@9.6.1: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 3.4.3 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.0.4 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.0.4: + dependencies: + flatted: 3.4.3 + rimraf: 3.0.2 + + flatted@3.4.3: {} + + follow-redirects@1.16.0: {} + + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.19.0: + dependencies: + type-fest: 0.20.2 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + gopd@1.2.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ignore@5.2.0: {} + + immutable@5.1.9: {} + + import-fresh@3.2.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + isexe@2.0.0: {} + + js-yaml@4.3.0: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsonc-parser@3.2.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + local-pkg@0.5.0: + dependencies: + mlly: 1.8.2 + pkg-types: 1.0.3 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.18.1: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.18.1)(lodash@4.18.1): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.18.1 + lodash-es: 4.18.1 + + lodash.merge@4.6.2: {} + + lodash@4.18.1: {} + + magic-string@0.30.10: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + memoize-one@6.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.16 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.2 + + mlly@1.8.2: + dependencies: + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + + ms@2.1.3: {} + + nanoid@3.3.16: {} + + natural-compare@1.4.0: {} + + node-addon-api@7.0.0: + optional: true + + normalize-path@3.0.0: {} + + normalize-wheel-es@1.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.0.2: + dependencies: + p-try: 2.2.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.0.2 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.5: {} + + pinia@2.1.7(vue@3.5.40): + dependencies: + '@vue/devtools-api': 6.5.0 + vue: 3.5.40 + vue-demi: 0.14.10(vue@3.5.40) + + pkg-types@1.0.3: + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.8.2 + pathe: 1.1.2 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + postcss-selector-parser@6.1.4: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.23: + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + proxy-from-env@2.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + readdirp@5.0.0: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.0 + + rollup@4.62.2: + dependencies: + '@types/estree': 1.0.9 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.62.2 + '@rollup/rollup-android-arm64': 4.62.2 + '@rollup/rollup-darwin-arm64': 4.62.2 + '@rollup/rollup-darwin-x64': 4.62.2 + '@rollup/rollup-freebsd-arm64': 4.62.2 + '@rollup/rollup-freebsd-x64': 4.62.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.2 + '@rollup/rollup-linux-arm-musleabihf': 4.62.2 + '@rollup/rollup-linux-arm64-gnu': 4.62.2 + '@rollup/rollup-linux-arm64-musl': 4.62.2 + '@rollup/rollup-linux-loong64-gnu': 4.62.2 + '@rollup/rollup-linux-loong64-musl': 4.62.2 + '@rollup/rollup-linux-ppc64-gnu': 4.62.2 + '@rollup/rollup-linux-ppc64-musl': 4.62.2 + '@rollup/rollup-linux-riscv64-gnu': 4.62.2 + '@rollup/rollup-linux-riscv64-musl': 4.62.2 + '@rollup/rollup-linux-s390x-gnu': 4.62.2 + '@rollup/rollup-linux-x64-gnu': 4.62.2 + '@rollup/rollup-linux-x64-musl': 4.62.2 + '@rollup/rollup-openbsd-x64': 4.62.2 + '@rollup/rollup-openharmony-arm64': 4.62.2 + '@rollup/rollup-win32-arm64-msvc': 4.62.2 + '@rollup/rollup-win32-ia32-msvc': 4.62.2 + '@rollup/rollup-win32-x64-gnu': 4.62.2 + '@rollup/rollup-win32-x64-msvc': 4.62.2 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sass@1.102.0: + dependencies: + chokidar: 5.0.0 + immutable: 5.1.9 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.6.0 + + scule@1.3.0: {} + + semver@7.8.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + strip-literal@1.3.0: + dependencies: + acorn: 8.17.0 + + supports-color@7.1.0: + dependencies: + has-flag: 4.0.0 + + text-table@0.2.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + ufo@1.6.4: {} + + unimport@3.7.1(rollup@4.62.2): + dependencies: + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) + acorn: 8.17.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.3 + local-pkg: 0.5.0 + magic-string: 0.30.10 + mlly: 1.8.2 + pathe: 1.1.2 + pkg-types: 1.0.3 + scule: 1.3.0 + strip-literal: 1.3.0 + unplugin: 1.10.1 + transitivePeerDependencies: + - rollup + + unplugin-auto-import@0.17.6(@vueuse/core@14.3.0(vue@3.5.40))(rollup@4.62.2): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) + fast-glob: 3.3.3 + local-pkg: 0.5.0 + magic-string: 0.30.10 + minimatch: 9.0.9 + unimport: 3.7.1(rollup@4.62.2) + unplugin: 1.10.1 + optionalDependencies: + '@vueuse/core': 14.3.0(vue@3.5.40) + transitivePeerDependencies: + - rollup + + unplugin-vue-components@0.27.2(@babel/parser@7.29.7)(rollup@4.62.2)(vue@3.5.40): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.4.0(rollup@4.62.2) + chokidar: 3.6.0 + debug: 4.4.3 + fast-glob: 3.3.3 + local-pkg: 0.5.0 + magic-string: 0.30.10 + minimatch: 9.0.9 + mlly: 1.8.2 + unplugin: 1.10.1 + vue: 3.5.40 + optionalDependencies: + '@babel/parser': 7.29.7 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin@1.10.1: + dependencies: + acorn: 8.17.0 + chokidar: 3.6.0 + webpack-sources: 3.5.1 + webpack-virtual-modules: 0.6.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite@5.3.4(sass@1.102.0): + dependencies: + esbuild: 0.21.3 + postcss: 8.5.23 + rollup: 4.62.2 + optionalDependencies: + fsevents: 2.3.3 + sass: 1.102.0 + + vue-component-type-helpers@3.3.8: {} + + vue-demi@0.14.10(vue@3.5.40): + dependencies: + vue: 3.5.40 + + vue-eslint-parser@9.4.3(eslint@8.57.0): + dependencies: + debug: 4.4.3 + eslint: 8.57.0 + eslint-scope: 7.1.1 + eslint-visitor-keys: 3.3.0 + espree: 9.3.1 + esquery: 1.7.0 + lodash: 4.18.1 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + + vue-router@4.6.4(vue@3.5.40): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.40 + + vue@3.5.40: + dependencies: + '@vue/compiler-dom': 3.5.40 + '@vue/compiler-sfc': 3.5.40 + '@vue/runtime-dom': 3.5.40 + '@vue/server-renderer': 3.5.40 + '@vue/shared': 3.5.40 + + webpack-sources@3.5.1: {} + + webpack-virtual-modules@0.6.2: {} + + which@2.0.1: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wrappy@1.0.2: {} + + xml-name-validator@4.0.0: {} diff --git a/frontend/pnpm-workspace.yaml b/frontend/pnpm-workspace.yaml new file mode 100644 index 0000000..190e413 --- /dev/null +++ b/frontend/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +allowBuilds: + '@parcel/watcher': set this to true or false + esbuild: set this to true or false + vue-demi: set this to true or false diff --git a/frontend/src/api/user.js b/frontend/src/api/user.js index 1d521e3..8b66d7d 100644 --- a/frontend/src/api/user.js +++ b/frontend/src/api/user.js @@ -8,35 +8,51 @@ */ import http from './index'; -// 鉴权 +// ===================== 鉴权 ===================== export const login = (data) => http.post('/auth/login', data); export const register = (data) => http.post('/auth/register', data); export const logout = () => http.post('/auth/logout'); export const me = () => http.get('/auth/me'); -export const changePassword = (data) => http.put('/user/password', data); - -// 个人信息 +// ===================== 个人信息 ===================== export const getProfile = () => http.get('/user/profile'); export const updateProfile = (data) => http.put('/user/profile', data); +export const updatePassword = (data) => http.put('/user/password', data); -// 收货地址 -export const listAddresses = () => http.get('/addresses'); -export const createAddress = (data) => http.post('/address', data); +// ===================== 收货地址 ===================== +export const getAddresses = () => http.get('/addresses'); +export const addAddress = (data) => http.post('/address', data); export const updateAddress = (id, data) => http.put(`/address/${id}`, data); export const deleteAddress = (id) => http.delete(`/address/${id}`); export const setDefaultAddress = (id) => http.patch(`/address/${id}/default`); -// 购物车 -export const addToCart = (data) => http.post('/cart', data); +// ===================== 购物车 ===================== export const getCart = () => http.get('/cart'); -export const updateCartItem = (id, quantity) => http.put(`/cart/${id}`, { quantity }); +export const addCart = (data) => http.post('/cart', data); +export const updateCartQty = (id, qty) => http.put(`/cart/${id}`, { quantity: qty }); export const deleteCartItem = (id) => http.delete(`/cart/${id}`); -// S04 购物车结算快照(接缝接口,D 提供 C 调用) -export const checkoutCart = (ids) => http.get('/cart/checkout', { params: { ids } }); +export const toggleCartSelect = (id, selected) => http.patch(`/cart/${id}/select`, { selected }); +export const clearCart = () => http.delete('/cart/clear'); +export const mergeCart = (items) => http.post('/cart/merge', { items }); +export const checkout = () => http.get('/cart/checkout'); -// 后台登录 +// ===================== 后台登录 ===================== export const adminLogin = (data) => http.post('/admin/auth/login', data); -// 后台用户管理 + +// ===================== 后台用户管理 ===================== export const listAdminUsers = (params) => http.get('/admin/users', { params }); -export const updateUserStatus = (id, status) => http.put(`/admin/users/${id}/status`, null, { params: { status } }); +export const updateUserStatus = (id, status) => + http.put(`/admin/users/${id}/status`, null, { params: { status } }); + +// ===================== 收藏 ===================== +export const getFavorites = () => http.get('/favorites'); +export const addFavorite = (productId) => http.post('/favorites', { productId }); +export const deleteFavorite = (id) => http.delete(`/favorites/${id}`); + +// ===================== 兼容别名(其他模块引用旧名) ===================== +export const listAddresses = getAddresses; +export const createAddress = addAddress; +export const checkoutCart = checkout; +export const addToCart = addCart; +export const updateCartItem = updateCartQty; +export const mergeLocalCart = mergeCart; diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 4bb4cb7..a2e93c5 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -26,6 +26,7 @@ const routes = [ { path: 'user', name: 'UserCenter', component: () => import('@/views/user/Profile.vue'), meta: { auth: true } }, { path: 'user/address-list', name: 'AddressList', component: () => import('@/views/user/AddressList.vue'), meta: { auth: true } }, { path: 'user/address-edit', name: 'AddressEdit', component: () => import('@/views/user/AddressEdit.vue'), meta: { auth: true } }, + { path: 'user/favorites', name: 'Favorites', component: () => import('@/views/user/FavoriteList.vue'), meta: { auth: true } }, ], }, { diff --git a/frontend/src/stores/cartStore.js b/frontend/src/stores/cartStore.js index 705a35a..b4924a5 100644 --- a/frontend/src/stores/cartStore.js +++ b/frontend/src/stores/cartStore.js @@ -3,52 +3,165 @@ */ import { defineStore } from 'pinia'; import { ElMessage } from 'element-plus'; -import { getCart, addToCart, updateCartItem, deleteCartItem, checkoutCart } from '@/api/user'; +import { useUserStore } from './userStore'; +import { + getCart, + addCart, + updateCartQty, + deleteCartItem, + toggleCartSelect, + clearCart, + mergeCart, + checkout, +} from '@/api/user'; + +const LOCAL_KEY = 'localCart'; + +function loadLocalCart() { + try { + return JSON.parse(localStorage.getItem(LOCAL_KEY) || '[]'); + } catch { + return []; + } +} + +function saveLocalCart(items) { + localStorage.setItem(LOCAL_KEY, JSON.stringify(items)); +} export const useCartStore = defineStore('cart', { state: () => ({ - items: [], + items: [], // 已登录:API 返回的购物车项 + localCart: loadLocalCart(), // 未登录:本地购物车 loading: false, }), getters: { - totalQty: (s) => s.items.reduce((sum, it) => sum + it.quantity, 0), - totalAmount: (s) => s.items.reduce((sum, it) => sum + (it.product?.price || 0) * it.quantity, 0), + totalQty: (s) => + (s.items.length ? s.items : s.localCart).reduce((sum, it) => sum + it.quantity, 0), + totalAmount: (s) => + (s.items.length ? s.items : s.localCart).reduce( + (sum, it) => sum + (it.product?.price || 0) * it.quantity, + 0 + ), }, actions: { - async fetch() { + /** 加载购物车(已登录) */ + async loadCart() { this.loading = true; try { - // 拦截器已 return body.data,直接拿到购物车列表 this.items = (await getCart()) || []; - } finally { this.loading = false; } + } finally { + this.loading = false; + } + }, + + /** 添加购物车(已登录调 API,未登录存本地) */ + async addToCart(productId, qty = 1) { + const user = useUserStore(); + if (!user.isLoggedIn) { + // 未登录:存 localStorage + const cart = loadLocalCart(); + const idx = cart.findIndex((it) => it.productId === productId); + if (idx >= 0) { + cart[idx].quantity += qty; + } else { + cart.push({ productId, quantity: qty, selected: true }); + } + saveLocalCart(cart); + this.localCart = cart; + ElMessage.success('已加入购物车'); + return; + } + await addCart({ productId, quantity: qty }); + await this.loadCart(); }, - async add(productId, qty = 1) { - await addToCart({ productId, qty }); - await this.fetch(); + + /** 更新数量 */ + async updateQty(id, qty) { + const user = useUserStore(); + if (!user.isLoggedIn) { + const cart = loadLocalCart(); + const idx = cart.findIndex((it) => it.id === id); + if (idx >= 0) { + cart[idx].quantity = qty; + saveLocalCart(cart); + this.localCart = cart; + } + return; + } + await updateCartQty(id, qty); + await this.loadCart(); }, - async updateQty(id, quantity) { - await updateCartItem(id, quantity); - await this.fetch(); + + /** 切换选中状态 */ + async toggleSelect(id, selected) { + const user = useUserStore(); + if (!user.isLoggedIn) { + const cart = loadLocalCart(); + const idx = cart.findIndex((it) => it.id === id); + if (idx >= 0) { + cart[idx].selected = selected; + saveLocalCart(cart); + this.localCart = cart; + } + return; + } + await toggleCartSelect(id, selected); + await this.loadCart(); }, - async remove(id) { + + /** 删除单条 */ + async removeItem(id) { + const user = useUserStore(); + if (!user.isLoggedIn) { + const cart = loadLocalCart().filter((it) => it.id !== id); + saveLocalCart(cart); + this.localCart = cart; + return; + } await deleteCartItem(id); - await this.fetch(); + await this.loadCart(); }, - async checkout(ids) { - // 拦截器已 return body.data,拿到后端的 items 数组 / 对象 - return await checkoutCart(ids); + + /** 清空购物车 */ + async clearAll() { + const user = useUserStore(); + if (!user.isLoggedIn) { + saveLocalCart([]); + this.localCart = []; + return; + } + await clearCart(); + await this.loadCart(); }, + + /** 登录后合并本地购物车到服务器 */ async mergeLocalCart() { - const localCart = localStorage.getItem('localCart'); - if (!localCart) return; + const cart = loadLocalCart(); + if (!cart.length) return; try { - const items = JSON.parse(localCart); - for (const item of items) { - await addToCart({ productId: item.productId, qty: item.quantity }); - } - localStorage.removeItem('localCart'); + await mergeCart( + cart.map((it) => ({ + productId: it.productId, + quantity: it.quantity, + selected: it.selected ?? true, + })) + ); + localStorage.removeItem(LOCAL_KEY); + this.localCart = []; ElMessage.success('购物车已同步'); } catch (_) {} }, + + /** 返回结算商品列表和总价(只取勾选商品) */ + getCheckoutItems() { + const list = this.items.length ? this.items : this.localCart; + const selected = list.filter((it) => it.selected); + const totalPrice = selected.reduce( + (sum, it) => sum + (it.product?.price || 0) * it.quantity, + 0 + ); + return { items: selected, totalPrice }; + }, }, }); diff --git a/frontend/src/stores/userStore.js b/frontend/src/stores/userStore.js index d2fa19a..286a69d 100644 --- a/frontend/src/stores/userStore.js +++ b/frontend/src/stores/userStore.js @@ -2,45 +2,38 @@ * 用户 store(D 余泽负责):登录态 + 个人信息 */ import { defineStore } from 'pinia'; -import { login as apiLogin, register as apiRegister, me as apiMe, logout as apiLogout, getProfile, updateProfile } from '@/api/user'; +import { login as apiLogin, logout as apiLogout, getProfile, updatePassword } from '@/api/user'; export const useUserStore = defineStore('user', { state: () => ({ + isLoggedIn: !!localStorage.getItem('token'), + userInfo: null, token: localStorage.getItem('token') || '', - user: null, }), getters: { - isLoggedIn: (s) => !!s.token, - isAdmin: (s) => s.user?.role === 1 || s.user?.role === 'admin', + isAdmin: (s) => s.userInfo?.role === 1, }, actions: { - async login(payload) { - const data = await apiLogin(payload); + async login(loginData) { + const data = await apiLogin(loginData); this.token = data.token; - this.user = { id: data.userId, username: data.username }; + this.userInfo = { id: data.userId, username: data.username }; + this.isLoggedIn = true; localStorage.setItem('token', data.token); return data; }, - async register(payload) { - return apiRegister(payload); - }, - async fetchMe() { - this.user = await apiMe(); - return this.user; - }, - async fetchProfile() { - this.user = await getProfile(); - return this.user; - }, - async updateProfile(data) { - await updateProfile(data); - await this.fetchProfile(); - }, async logout() { - try { await apiLogout(); } catch (_) {} + try { + await apiLogout(); + } catch (_) {} this.token = ''; - this.user = null; + this.userInfo = null; + this.isLoggedIn = false; localStorage.removeItem('token'); }, + async fetchProfile() { + this.userInfo = await getProfile(); + return this.userInfo; + }, }, }); diff --git a/frontend/src/views/user/AddressList.vue b/frontend/src/views/user/AddressList.vue index 373ca02..4a22819 100644 --- a/frontend/src/views/user/AddressList.vue +++ b/frontend/src/views/user/AddressList.vue @@ -1,77 +1,530 @@ \ No newline at end of file +.address-list { padding: 16px; max-width: 900px; margin: 0 auto; } +.breadcrumb { margin-bottom: 16px; } +.header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } +.header h2 { margin: 0; font-size: 20px; font-weight: bold; } +.cards { display: flex; flex-direction: column; gap: 12px; } +.address-card { background: #fff; border: 1px solid #ebeef5; border-radius: 4px; padding: 16px 16px 8px; transition: box-shadow 0.2s; } +.address-card:hover { box-shadow: 0 2px 12px rgba(0,0,0,0.08); } +.address-card.is-default { border-left: 4px solid #67c23a; } +.card-body { display: flex; justify-content: space-between; align-items: flex-start; } +.info .name { font-size: 16px; font-weight: 600; margin-bottom: 4px; } +.info .phone { font-size: 14px; color: #606266; margin-bottom: 6px; } +.info .address-text { font-size: 14px; color: #909399; line-height: 1.5; } +.tags { flex-shrink: 0; } +.card-footer { margin-top: 10px; padding-top: 10px; border-top: 1px solid #f5f5f5; display: flex; gap: 8px; } + diff --git a/frontend/src/views/user/Cart.vue b/frontend/src/views/user/Cart.vue index 7db50b3..58a2e80 100644 --- a/frontend/src/views/user/Cart.vue +++ b/frontend/src/views/user/Cart.vue @@ -1,27 +1,69 @@ -- Gitee From 5d54b74c5019820e8102263b6e35af8be1bbe7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Wed, 29 Jul 2026 08:40:39 +0800 Subject: [PATCH 024/168] =?UTF-8?q?fix(order):=20admin=20=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=AF=A6=E6=83=85=E8=B5=B0=E4=B8=93=E7=94=A8=20/api/a?= =?UTF-8?q?dmin/orders/:id=20=E7=AB=AF=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因复盘: - authService.login 第 30 行把 JWT role 字段序列化为字符串 'admin' issueToken({ userId, role: user.role === 1 ? 'admin' : 'user' }) - 但 userStore.isAdmin 用的是 user.role === 1(DB 原始 TINYINT 数字) - 之前用 req.user.role !== 1 在 controller 内做分流,永远 true(字符串 !== 1) → 仍加 userId 过滤 → 404 - 与现有 routes/index.js 的 requireRole('admin')(字符串)语义不一致 修复方案(彻底分离 buyer / admin 两套端点): 后端: 1. adminOrderController 新增 detail(),不走 userId 过滤 2. 注册 GET /api/admin/orders/:id 3. 回滚之前 orderController.role 分流改动(恢复 buyer 专用逻辑) 前端: api/order.js getOrder(id) 根据 userStore.isAdmin 切换 URL: - admin → /api/admin/orders/:id (新端点,无 userId 过滤) - buyer → /api/orders/:id (保留 userId 过滤) 测试: + 新增 admin/buyer 两端点用例(order.test.js): - admin 通过 /api/admin/orders/:id 查 buyer 订单 → 200 - buyer 通过 /api/orders/:id 查自己订单 → 200 3 个用例全绿(之前 2 个 + 新增 1 个) --- .../order/controllers/adminOrderController.js | 14 +++++++++++-- .../order/controllers/orderController.js | 5 +---- backend/src/modules/order/routes/index.js | 1 + backend/tests/order.test.js | 20 +++++++++++++++++++ frontend/src/api/order.js | 14 +++++++++++-- 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/backend/src/modules/order/controllers/adminOrderController.js b/backend/src/modules/order/controllers/adminOrderController.js index 3001301..6513eb7 100644 --- a/backend/src/modules/order/controllers/adminOrderController.js +++ b/backend/src/modules/order/controllers/adminOrderController.js @@ -6,7 +6,7 @@ const { Op } = require('sequelize'); const { success } = require('../../../common/response'); const { paginated, parsePagination } = require('../../../common/pagination'); -const { ParamError } = require('../../../common/exception'); +const { ParamError, NotFoundError } = require('../../../common/exception'); const Order = require('../models/Order'); const OrderItem = require('../models/OrderItem'); @@ -53,4 +53,14 @@ async function items(req, res, next) { } catch (e) { next(e); } } -module.exports = { list, ship, complete, items }; \ No newline at end of file +/** 后台订单详情(admin 无 userId 过滤,复用 orderService 以保证返回结构与 buyer 一致) */ +async function detail(req, res, next) { + try { + const data = await require('../services/orderService').orderDetail({ + orderId: req.params.id, + }); + res.json(success(data)); + } catch (e) { next(e); } +} + +module.exports = { list, ship, complete, items, detail }; \ No newline at end of file diff --git a/backend/src/modules/order/controllers/orderController.js b/backend/src/modules/order/controllers/orderController.js index 609917d..b02d1cb 100644 --- a/backend/src/modules/order/controllers/orderController.js +++ b/backend/src/modules/order/controllers/orderController.js @@ -31,10 +31,7 @@ async function list(req, res, next) { async function detail(req, res, next) { try { - // admin(role=1)查看任意订单;buyer(role=0)只查自己 - const opts = { orderId: req.params.id }; - if (req.user.role !== 1) opts.userId = req.user.userId; - const data = await orderService.orderDetail(opts); + const data = await orderService.orderDetail({ userId: req.user.userId, orderId: req.params.id }); res.json(success(data)); } catch (e) { next(e); } } diff --git a/backend/src/modules/order/routes/index.js b/backend/src/modules/order/routes/index.js index bb16a9c..e2ddda4 100644 --- a/backend/src/modules/order/routes/index.js +++ b/backend/src/modules/order/routes/index.js @@ -28,6 +28,7 @@ router.post('/pay/callback', paymentCtl.callback); // /api/admin/orders/* (后台) router.use('/admin/orders', authMiddleware, requireRole('admin')); router.get('/admin/orders', adminOrderCtl.list); +router.get('/admin/orders/:id', adminOrderCtl.detail); router.post('/admin/orders/:id/ship', adminOrderCtl.ship); router.post('/admin/orders/:id/complete', adminOrderCtl.complete); router.get('/admin/orders/:id/items', adminOrderCtl.items); diff --git a/backend/tests/order.test.js b/backend/tests/order.test.js index a00d44f..fd61e8f 100644 --- a/backend/tests/order.test.js +++ b/backend/tests/order.test.js @@ -124,4 +124,24 @@ describe('订单主链路', () => { .set(buyerAuthH.headers).send({}); expect(cancelAgain.body.code).toBe(409); }); + + test('admin 通过 /api/admin/orders/:id 可查任意买家订单', async () => { + const { addressId } = await ensureFixtures(); + + // 先用一个 buyer 创建订单 + const create = await req.post('/api/orders').set(buyerAuthH.headers).send({ addressId }); + expect(create.body.code).toBe(0); + const orderId = create.body.data.id; + + // admin 用 admin endpoint 查这条订单(不持 userId) + const adminGet = await req.get(`/api/admin/orders/${orderId}`).set(adminAuthH.headers); + expect(adminGet.status).toBe(200); + expect(adminGet.body.code).toBe(0); + expect(adminGet.body.data.id).toBe(orderId); + + // buyer 用自己的 endpoint 查同一条订单(应可见) + const buyerGet = await req.get(`/api/orders/${orderId}`).set(buyerAuthH.headers); + expect(buyerGet.body.code).toBe(0); + expect(buyerGet.body.data.id).toBe(orderId); + }); }); \ No newline at end of file diff --git a/frontend/src/api/order.js b/frontend/src/api/order.js index 56fae25..f2fea72 100644 --- a/frontend/src/api/order.js +++ b/frontend/src/api/order.js @@ -2,14 +2,24 @@ * 订单支付域 API(C 陈杨文负责) * - 订单:提交 / 列表 / 详情 / 取消 / 确认收货 * - 支付:模拟支付 / 支付回调 - * - 后台订单:列表 / 发货 / 改状态 + * - 后台订单:列表 / 详情 / 发货 / 完成 */ import http from './index'; +import { useUserStore } from '@/stores/userStore'; // 买家订单 export const createOrder = (data) => http.post('/orders', data); export const listOrders = (params) => http.get('/orders', { params }); -export const getOrder = (id) => http.get(`/orders/${id}`); +/** + * 订单详情:按当前用户角色自动选择 URL + * - buyer → /api/orders/:id (校验 userId,仅看自己) + * - admin → /api/admin/orders/:id (不校验 userId,可看任意) + */ +export const getOrder = (id) => { + const userStore = useUserStore(); + const url = userStore.isAdmin ? `/admin/orders/${id}` : `/orders/${id}`; + return http.get(url); +}; export const getOrderStatus = (id) => http.get(`/orders/${id}/status`); export const cancelOrder = (id) => http.post(`/orders/${id}/cancel`); export const confirmOrder = (id) => http.post(`/orders/${id}/confirm`); -- Gitee From 462d258eee183500159ca84e2d327ef0038a0802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Wed, 29 Jul 2026 08:48:04 +0800 Subject: [PATCH 025/168] =?UTF-8?q?fix(admin):=20=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8=E4=B8=8B=E5=8D=95=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=9C=AC=E5=9C=B0=E5=8C=96=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复下单时间显示为 UTC(2026-07-29T00:42:10.000Z) - 后台 OrderManage.vue 下单时间列原为 prop='createdAt' 直接绑字符串 - 改用模板调 utils/time.js 的 formatLocalTime 转东八区显示 仅改 1 个文件,复用已存在的 formatLocalTime,不动其他代码 --- frontend/src/views/order/admin/OrderManage.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/order/admin/OrderManage.vue b/frontend/src/views/order/admin/OrderManage.vue index b28f16e..3822d08 100644 --- a/frontend/src/views/order/admin/OrderManage.vue +++ b/frontend/src/views/order/admin/OrderManage.vue @@ -34,7 +34,9 @@ {{ STATUS_MAP[row.status]?.text }} - + + + - - -- Gitee From a8f36330bdf1a5cacc6ee66a7b4457c529e5740e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=99=A8=E8=BE=89?= <2630523459@qq.com> Date: Tue, 4 Aug 2026 10:08:56 +0800 Subject: [PATCH 072/168] =?UTF-8?q?docs(readme):=20=E5=8C=BA=E5=88=86?= =?UTF-8?q?=E8=A3=85=E9=A5=B0=E5=9B=BE=E4=B8=8E=E5=95=86=E5=93=81=E5=9B=BE?= =?UTF-8?q?=E6=9D=A5=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5dd9731..53c5126 100644 --- a/README.md +++ b/README.md @@ -304,7 +304,7 @@ A: 先 PR 到 `docs/02-设计文档/接口设计.md`,A 审核通过后再改 ## 前台首页 UI 风格 -`/` 首页采用类电商首屏布局(顶部快捷入口 + 居中搜索栏 + 左侧分类 + 中间 Banner 轮播 + 右侧分类卡片 + 猜你喜欢 + 浮动工具栏),所有数据来源于 `/api/categories` 与 `/api/products`,装饰图均为内联 SVG,无外部网络依赖。详见 [docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md](docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md)。 +`/` 首页采用类电商首屏布局(顶部快捷入口 + 居中搜索栏 + 左侧分类 + 中间 Banner 轮播 + 右侧分类卡片 + 猜你喜欢 + 浮动工具栏),所有数据来源于 `/api/categories` 与 `/api/products`。**装饰图**(Banner 轮播 + 右侧促销卡片)为内联 SVG,无外部网络依赖;**商品图片**使用 Unsplash CDN(`https://images.unsplash.com/`)真实图片,与演示数据保持一致。详见 [docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md](docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md)。 --- -- Gitee From 05e5550501c691e359e8cacce4ea52152ae40be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=99=A8=E8=BE=89?= <2630523459@qq.com> Date: Tue, 4 Aug 2026 10:09:00 +0800 Subject: [PATCH 073/168] =?UTF-8?q?docs(sql):=20=E6=9B=B4=E6=96=B0=20data.?= =?UTF-8?q?sql=20=E6=B3=A8=E9=87=8A=E6=8C=87=E5=90=91=20Unsplash=20?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/sql/data.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/sql/data.sql b/backend/sql/data.sql index 62c0acc..d122d8a 100644 --- a/backend/sql/data.sql +++ b/backend/sql/data.sql @@ -56,5 +56,6 @@ INSERT INTO `product` (`category_id`, `name`, `description`, `price`, `stock`, ` -- 注意:data.sql 改了图片路径后,需要重新执行: -- mysql -u root -p eshop < backend/sql/data.sql --- 或者只更新 product 表的 image 字段: --- UPDATE product SET image = CONCAT('https://picsum.photos/seed/', id, '/400/400'); \ No newline at end of file +-- 或者只更新 product 表的 image 字段,请使用独立脚本: +-- mysql -u root -p eshop < backend/sql/update-product-images.sql +-- (该脚本将 30 个商品图按品类替换为 Unsplash CDN 真实图片,避免 picsum 占位图风格不一致) \ No newline at end of file -- Gitee From e42b180c1e0033d8ba08d4028bde756b7ac5e084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=99=A8=E8=BE=89?= <2630523459@qq.com> Date: Tue, 4 Aug 2026 10:09:04 +0800 Subject: [PATCH 074/168] =?UTF-8?q?docs(spec):=20spec=20/=20plan=20?= =?UTF-8?q?=E8=A1=A5=E5=AE=9E=E6=96=BD=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plans/2026-08-04-homepage-taobao-style.md | 10 ++++++++++ .../specs/2026-08-04-homepage-taobao-style-design.md | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/superpowers/plans/2026-08-04-homepage-taobao-style.md b/docs/superpowers/plans/2026-08-04-homepage-taobao-style.md index 8ecca5a..068ff19 100644 --- a/docs/superpowers/plans/2026-08-04-homepage-taobao-style.md +++ b/docs/superpowers/plans/2026-08-04-homepage-taobao-style.md @@ -1556,3 +1556,13 @@ git commit -m "docs(readme): 首页 UI 风格说明" - Task 2、3(SVG)→ Task 7、8 依赖 - Task 12(Home.vue)依赖 Task 4-10 全部 - 顺序合理 + +--- + +## 2026-08-04 实施备注 + +实际落地与本计划存在 3 处偏差,记录如下: + +1. **TopNavBar 已移除**(commit `864f33f`):应用户反馈,Task 4(顶部快捷功能栏 TopNavBar.vue)落地的组件**已从 Home.vue 卸载**,且 `frontend/src/components/home/TopNavBar.vue` 文件于本次清理任务中删除。配置 `frontend/src/config/homeNav.js` 的 `topNavItems` 保留,作为未来按需重启顶部入口的数据源。当前 `Home.vue` 仅挂载 6 个组件(SearchBar / CategorySidebar / HeroBanner / PromoCards / GuessYouLike / FloatSidebar)。 +2. **商品图改 Unsplash CDN**(commit `7865ae7`):Task 12 仅约定"装饰图为纯内联 SVG,避免外部网络依赖"。该约束仅适用于 banner / promo 装饰图。**商品图片**(`product.image`)后于本次落地替换为 Unsplash CDN 真实图片(`https://images.unsplash.com/...`),告别 picsum 占位风格不一致;同步脚本 `backend/sql/update-product-images.sql` 与 `data.sql` 注释联动更新,README 已区分装饰图与商品图来源。 +3. **布局结构调整**(commit `061c76e`):Task 12 Step 1 的 `Home.vue` 草稿采用"上排 3 项 + 下排猜你喜欢共享 6 列网格"。最终落地改为**两行结构**——上行为"侧栏 + Banner + 4 张促销卡片"、下行为"猜你喜欢"独占整行(6 列网格),保证商品卡视觉宽度不被压缩。 diff --git a/docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md b/docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md index 3e2abbf..9bfef81 100644 --- a/docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md +++ b/docs/superpowers/specs/2026-08-04-homepage-taobao-style-design.md @@ -191,3 +191,13 @@ mounted (Home.vue) - **风险 2**:Banner 与 PromoCards 装饰图为纯 SVG,**不需要任何外网资源**(参考 jest 文档图、但用 `` 标签 inline 渲染而非 ``),保证断网环境下也能展示。 - **风险 3**:侧栏分类若 > 11 个,**仅显示前 11 个**(与原图布局一致);超出滚动。 - **备注**:不改动未提及的任何现有文件行为,符合"工兵式"重构原则。 + +--- + +## 2026-08-04 实施备注 + +实际落地与本 spec 存在 3 处偏差,记录如下: + +1. **TopNavBar 已移除**(commit `864f33f`):应用户反馈,顶部 7 个快捷入口(商城补贴/限时秒杀/试用中心/官方补贴/领券中心/品牌专区/会员聚惠)整体不再展示;前端 `Home.vue` 仅挂载 6 个组件(SearchBar / CategorySidebar / HeroBanner / PromoCards / GuessYouLike / FloatSidebar),`frontend/src/components/home/TopNavBar.vue` 文件随后清理(commit ``)。配置 `frontend/src/config/homeNav.js` 的 `topNavItems` 保留,供未来按需重启顶部入口。 +2. **商品图改 Unsplash CDN**(commit `7865ae7`):原 spec 风险 2 提及"装饰图为纯 SVG、不需要任何外网资源"。该约束仅适用于 banner / promo 装饰图;**商品图片**(`product.image`)后于本次落地替换为 Unsplash CDN 真实图片(`https://images.unsplash.com/...`),与品类匹配,告别 picsum 占位。同步脚本见 `backend/sql/update-product-images.sql`,README "前台首页 UI 风格" 段已区分"装饰图 vs 商品图"来源。 +3. **布局结构调整**(commit `061c76e`):实际 `Home.vue` 采用上下两行布局——上行为"侧栏 + Banner + 4 张促销卡片"、下行为"猜你喜欢"独占整行(不再与上排共用 12 列网格);与 spec 3.1 描述的"侧栏 + 主体行"基本一致,但商品流独立成行以保证 6 列网格宽度。 -- Gitee From 602790b75293ed6303baa813650b4cbaa852cf4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=99=A8=E8=BE=89?= <2630523459@qq.com> Date: Tue, 4 Aug 2026 10:18:18 +0800 Subject: [PATCH 075/168] =?UTF-8?q?docs(spec):=20=E8=B4=AD=E7=89=A9?= =?UTF-8?q?=E8=BD=A6=E6=B7=98=E5=AE=9D=E9=A3=8E=E6=A0=BC=E6=94=B9=E9=80=A0?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=20spec?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-08-04-cart-taobao-style-design.md | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 docs/superpowers/specs/2026-08-04-cart-taobao-style-design.md diff --git a/docs/superpowers/specs/2026-08-04-cart-taobao-style-design.md b/docs/superpowers/specs/2026-08-04-cart-taobao-style-design.md new file mode 100644 index 0000000..3f5faba --- /dev/null +++ b/docs/superpowers/specs/2026-08-04-cart-taobao-style-design.md @@ -0,0 +1,137 @@ +# 购物车淘宝风格改造设计 Spec + +**作者**:胡晨辉(A 角色 · 公共基建) +**日期**:2026-08-04 +**关联**:[首页淘宝风格改造 spec](2026-08-04-homepage-taobao-style-design.md) +**类型**:前端 UI 重构(不改后端、不改路由) + +--- + +## 1. 目标与背景 + +用户提供一张淘宝购物车截图,要求把 `frontend/src/views/user/Cart.vue` 改造成相同结构与视觉风格。 + +当前 `Cart.vue` 是 Element Plus 默认风格的纵向卡片列表,无顶部 Tab / 无店铺分组 / 无商品标签 / 无装饰按钮,视觉密度低、风格与首页不统一。 + +**改造目标**:复刻淘宝购物车的"店铺分组 + 标签装饰 + 顶部 Tab + 浮动结算栏"四类核心体验,但不抄袭淘宝品牌、用本项目自有配色与图标。 + +## 2. 设计决策(已与 master 对齐) + +| 决策点 | 选项 | 选定 | +|---|---|---| +| 商品分组粒度 | 按 category 分组 / 平铺 | **按 category 分组**(手机数码 / 电脑办公 / 家用电器) | +| 商品标签 | 静态装饰 / 仅灰色单标签 / 不显示 | **静态装饰**(信用卡支付 + 假一赔四 极速退款 7天无理由退换) | +| 顶部 Tab 交互 | 真实筛选 / 全部 + 2 装饰 | **全部商品 + 2 装饰 Tab**(点装饰 Tab 显示"暂无该类商品"空态) | +| 主题色 | 沿用首页 #ff5000 橙红 | **沿用** | +| 店铺标识 | 复用 category 名 + 类天猫图标 | **复用** | +| 商品描述 | 用 product.description | **复用** | +| 后端 | 不改 | **不改** | + +## 3. 架构与组件 + +### 3.1 单文件改造 + +只改 `frontend/src/views/user/Cart.vue`,不新增组件。脚本逻辑(cartStore、select、qty、remove、checkout)保持不变。 + +### 3.2 页面结构 + +``` +Cart.vue +├── 未登录提示条(沿用现有) +├── 顶部 Tab 栏 +│ ├── 全部商品(20) ← active(橙红下边框 + 橙红图标) +│ ├── 超级立减 +│ └── 降价 +├── 操作栏(紧贴 Tab 下方) +│ ├── 左:全选 checkbox / 移入收藏 / 删除 +│ └── 右:分类 dropdown / 状态 dropdown / 搜索 input +├── 购物车列表(按 category 分组) +│ └── 每组: +│ ├── 店铺 header:📦 图标 + category 名 + 蓝色店铺标签 +│ └── 购物车 item: +│ ├── checkbox +│ ├── 商品图(100×100) +│ ├── 商品描述(名称 + 静态标签 + 红色服务标签) +│ ├── 找同款 / 重新选择规格 按钮 +│ ├── 单价 ¥XX +│ ├── 数量 - 1 + +│ └── 操作:移入收藏 / 删除 +├── 底部浮动结算栏(sticky bottom) +│ ├── 左:优惠明细(点击可展开,本版只展示) +│ └── 右:合计 ¥0 + 结算按钮(橙红) +└── 空状态(沿用现有) +``` + +### 3.3 视觉规范 + +- **主色**:橙红 `#ff5000`(沿用首页) +- **背景**:`#f5f5f5`(沿用首页) +- **卡片**:`#fff` 圆角 8px +- **Tab 激活**:橙红下边框 3px + 橙红图标 +- **商品标签**:灰色 `` + 红色服务标签(假一赔四等) +- **价格**:橙红 `#ff5000` +- **店铺标签**:蓝色 `#4ab9ff` 圆角小标签 +- **结算按钮**:橙红 `#ff5000` 渐变 + 圆角 22px + +### 3.4 关键交互 + +| 元素 | 交互 | +|------|------| +| 顶部 Tab | 点击切换;非"全部商品"显示空态 | +| 全选 | 切换所有商品 selected | +| 移入收藏 | 演示版:弹 `ElMessage.info('收藏功能开发中')` | +| 删除 | 弹 `ElMessageBox` 确认 → 调 cartStore.removeItem | +| 重新选择规格 | 弹 `ElMessage.info('规格选择功能开发中')` | +| 数量 - 1 + | 调 cartStore.updateQty | +| 结算 | 跳 `/checkout?ids=...&totalPrice=...` | +| 优惠明细 | 弹 `ElMessage.info('优惠明细开发中')` | + +### 3.5 错误处理 + +| 场景 | 行为 | +|------|------| +| 加载失败 | 顶部警告条 + 列表保持空态 | +| 空购物车 | 沿用现有 `el-empty` 占位 | +| 后端无 categories | 店铺 header 退化为"未分类" | + +## 4. 文件改动清单 + +| 路径 | 操作 | 说明 | +|------|------|------| +| `frontend/src/views/user/Cart.vue` | 重写 | 整体替换为淘宝风格 | +| `frontend/src/assets/home/cart-store-icon.svg`(可选) | 新增 | 店铺图标(如用 emoji 📦 替代则不用) | + +**不改动**: +- 后端任何文件 +- `cartStore.js`(已具备 itemCount getter) +- `api/user.js`(cart 接口不变) +- 其他页面 + +## 5. 验收标准 + +1. ✓ 顶部 3 个 Tab 横向展示,"全部商品"为激活态 +2. ✓ 操作栏:左全选 + 移入收藏 + 删除;右分类 + 状态 + 搜索 +3. ✓ 商品按 category 分组(手机数码 / 电脑办公 / 家用电器) +4. ✓ 每个店铺 header 显示 category 名 + 蓝色店铺标签 +5. ✓ 商品卡:图片 + 描述 + "信用卡支付"灰色标签 + 红色服务标签(4 个) +6. ✓ 价格橙红、数量加减按钮、操作(移入收藏 + 删除) +7. ✓ 底部 sticky 结算栏:合计 ¥X + 橙红结算按钮 +8. ✓ 主题色统一 `#ff5000`,无淘宝品牌文案残留 +9. ✓ 已有功能(select / qty / delete / checkout)继续工作 +10. ✓ 空购物车显示沿用 `el-empty` + +## 6. 不做什么(YAGNI) + +- ❌ 后端 store / shop 表 +- ❌ 真实的优惠计算 +- ❌ 商品规格选择 +- ❌ 收藏功能(弹提示占位) +- ❌ 真实的"超级立减" / "降价"筛选 +- ❌ 改其他页面布局 +- ❌ 引入新依赖 + +## 7. 风险与备注 + +- **风险 1**:本项目商品没有 store 概念,按 category 分组是临时方案;未来如加 store 表,需要扩展。 +- **风险 2**:静态装饰标签(假一赔四等)不反映真实数据,仅作视觉占位;如果需要真实数据,需后端增加字段。 +- **风险 3**:底部"优惠明细"点击只弹提示,不展开真实折扣列表。 -- Gitee From 6f58ca6dd01e68b0e32512febb267801b0822898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=99=A8=E8=BE=89?= <2630523459@qq.com> Date: Tue, 4 Aug 2026 10:20:13 +0800 Subject: [PATCH 076/168] =?UTF-8?q?docs(plan):=20=E8=B4=AD=E7=89=A9?= =?UTF-8?q?=E8=BD=A6=E6=B7=98=E5=AE=9D=E9=A3=8E=E6=A0=BC=E6=94=B9=E9=80=A0?= =?UTF-8?q?=E5=AE=9E=E6=96=BD=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plans/2026-08-04-cart-taobao-style.md | 438 ++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 docs/superpowers/plans/2026-08-04-cart-taobao-style.md diff --git a/docs/superpowers/plans/2026-08-04-cart-taobao-style.md b/docs/superpowers/plans/2026-08-04-cart-taobao-style.md new file mode 100644 index 0000000..0fe9bb7 --- /dev/null +++ b/docs/superpowers/plans/2026-08-04-cart-taobao-style.md @@ -0,0 +1,438 @@ +# 购物车淘宝风格改造实施计划 + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 把 `frontend/src/views/user/Cart.vue` 重写为淘宝风格购物车(顶部 Tab + 按 category 分组 + 商品标签 + 浮动结算栏)。不改后端、不改路由、不动 cartStore / api。 + +**Architecture:** 单文件重写。现有脚本逻辑(cartStore 集成、compute、select、qty、remove、checkout)完全保留;只改 template 结构 + scoped CSS。引入按 category 分组的 computed;对 cartStore.item 没 category 字段时,回退到 categoryStore(如有)或"未分类"。 + +**Tech Stack:** Vue 3 + Element Plus — 无新依赖。 + +## 全局约束 + +- 主题色:`#ff5000`(橙红)、`#f5f5f5`(背景);禁止残留"淘宝"字样。 +- 商品按 category 分组(手机数码 / 电脑办公 / 家用电器),无 store 概念。 +- 静态装饰标签:每件商品「信用卡支付」灰色 + 「假一赔四 极速退款 7天无理由退换」红色。 +- 顶部 Tab 仅「全部商品」真实响应;其他 2 个点中显示空态。 +- 提交频率:每个 Task 1 个 commit。 +- 验收:`pnpm build` 0 错误;浏览器 `http://localhost:5173/cart` 视觉一致。 + +--- + +## File Structure + +**修改文件** +- `frontend/src/views/user/Cart.vue` — 整体重写 + +**新增文件(可选)** +- `frontend/src/views/user/cartConfig.js` — 静态 Tab / 标签 / 店铺标题配置(如果觉得这能减负) + +**不做** +- 不改后端 / cartStore / api / 路由 + +--- + +## Task 1: 重写 Cart.vue 为淘宝风格 + +**Files:** +- Modify: `frontend/src/views/user/Cart.vue` + +**Interfaces:** +- Consumes: `useCartStore()` (items, localCart, totalQty, loadCart, toggleSelect, toggleSelectAll, updateQty, removeItem, clearAll) +- Produces: unchanged — same route `/cart`, same `onCheckout` URL `/checkout?ids=...&totalPrice=...` + +- [ ] **Step 1: 读取目录** + +先看现有 `Cart.vue` 全文(已在 spec 中核对过),确认保留: +- `onToggleSelect`, `onToggleAll`, `onQty`, `onRemove`, `onClearAll`, `onCheckout` 函数名 +- `isAllSelected`, `isIndeterminate`, `selectedCount`, `totalPrice` 计算属性 +- `onMounted` 加载逻辑 + +- [ ] **Step 2: 重写为淘宝风格** + +**整体结构**: + +```vue + +``` + +**Script 部分**: + +```vue + +``` + +**Scoped CSS**(关键样式): + +```vue + +``` + +- [ ] **Step 3: 验证 build** + +```bash +cd frontend && pnpm build +``` + +预期:✓ built in <时间>s,无错误。 + +- [ ] **Step 4: Commit** + +```bash +git add frontend/src/views/user/Cart.vue +git commit -m "feat(cart): 购物车 UI 重写为淘宝风格(顶部 Tab + 按 category 分组 + 浮动结算栏)" +``` + +## 自审检查清单 + +- [x] Spec 全部覆盖(Tab + 工具栏 + 分组 + 商品卡 + 底部栏 + 空态) +- [x] 现有 cartStore / API 调用不被破坏 +- [x] 静态装饰标签写入 template,不依赖后端数据 +- [x] 主题色统一 `#ff5000` +- [x] 无淘宝品牌残留 +- [x] 移入收藏 / 重新选择规格 / 优惠明细 全部用 `ElMessage.info('开发中')` 占位 -- Gitee From 3bc172409ae7fb377fc5f401c194bf9d77c263a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E6=99=A8=E8=BE=89?= <2630523459@qq.com> Date: Tue, 4 Aug 2026 10:24:38 +0800 Subject: [PATCH 077/168] =?UTF-8?q?feat(cart):=20=E8=B4=AD=E7=89=A9?= =?UTF-8?q?=E8=BD=A6=20UI=20=E9=87=8D=E5=86=99=E4=B8=BA=E6=B7=98=E5=AE=9D?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC=EF=BC=88=E9=A1=B6=E9=83=A8=20Tab=20+=20?= =?UTF-8?q?=E6=8C=89=20category=20=E5=88=86=E7=BB=84=20+=20=E6=B5=AE?= =?UTF-8?q?=E5=8A=A8=E7=BB=93=E7=AE=97=E6=A0=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/user/Cart.vue | 570 +++++++++++++++++-------------- 1 file changed, 307 insertions(+), 263 deletions(-) diff --git a/frontend/src/views/user/Cart.vue b/frontend/src/views/user/Cart.vue index d1a5b44..e1a1a05 100644 --- a/frontend/src/views/user/Cart.vue +++ b/frontend/src/views/user/Cart.vue @@ -9,116 +9,156 @@ :closable="false" show-icon class="login-tip" - @click="$router.push('/login')" style="cursor:pointer" + @click="$router.push('/login')" /> - -

u}_|OR=h- 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 literal 0 HcmV?d00001 diff --git "a/reports/daily/\344\275\231\346\263\275/imgs/0727-\347\231\273\345\275\225.png" "b/reports/daily/\344\275\231\346\263\275/imgs/0727-\347\231\273\345\275\225.png" new file mode 100644 index 0000000000000000000000000000000000000000..8bc75b669a8a9175bd8c8bad5226420b2e7f7cf0 GIT binary patch literal 277907 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 s&&O%oOyGG}8G{KuS(i$CIG8j!hk*e>B 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Μ!u#*w`@N|15Y`R6~!?KurH@|yf7Zx7&0~};dc`1 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 ~F3Dsb}S*XzY!{Q}`(h%snV3Y^Y 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�E9-m7v%D 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 z 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 g(to0~X9|U?@A9wtJCR=ugZ~+ Date: Mon, 27 Jul 2026 14:46:45 +0800 Subject: [PATCH 004/168] =?UTF-8?q?docs(spec):=20=E6=94=B6=E8=B4=A7?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=20spec?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-07-27-address-feature-design.md | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 docs/superpowers/specs/2026-07-27-address-feature-design.md diff --git a/docs/superpowers/specs/2026-07-27-address-feature-design.md b/docs/superpowers/specs/2026-07-27-address-feature-design.md new file mode 100644 index 0000000..9263e0d --- /dev/null +++ b/docs/superpowers/specs/2026-07-27-address-feature-design.md @@ -0,0 +1,157 @@ +# 收货地址功能优化设计 Spec + +**作者**:陈杨文(C 角色;本次优化虽属 D 角色域,但前端 UI 增强由 C 推动) +**日期**:2026-07-27 +**关联**:master 提出 4 项需求;本 spec 给出实施蓝图 + +--- + +## 1. 目标与背景 + +`docs/订单支付功能.md` 已记录订单支付主链路。当前 Checkout 页面下"选择收货地址"卡片要求用户先离开页面到 `/user/address-edit` 才能新增;省/市/区仍以 `` 手动输入;列表排序未明。master 提出 4 项优化: + +1. Checkout 卡片旁**常驻**"新增收货地址"按钮,支持创建多个。 +2. 省/市/区改为**级联选择**(选省 → 市 → 区自动联动)。 +3. 已创建地址支持**修改 + 删除**(删除已有;修改要新增)。 +4. 地址列表按**创建时间倒序**排列。 + +## 2. 现有资产(已实现,不重写) + +| 模块 | 现状 | +|---|---| +| `backend/src/modules/user/services/addressService.js` | `list / create / update / remove / setDefault` 完整 | +| `backend/src/modules/user/controllers/addressController.js` | 对应路由完整 | +| `frontend/src/views/user/AddressList.vue` | 列表 + 新增/编辑/删除/设默认入口完整 | +| `frontend/src/views/user/AddressEdit.vue` | 单页表单,含校验、保存、跳转 | +| `frontend/src/views/order/Checkout.vue` | 仅含 `` 静态跳转提示 | + +## 3. 设计决策(已与 master 对齐) + +| 决策点 | 选项 | 选择 | +|---|---|---| +| Checkout 新增入口交互 | Dialog 弹窗 / Inline 展开 / 跳独立页面 | **Dialog 弹窗** | +| 省/市/区级联数据源 | `element-china-area-data` / 内置静态 JSON / 仅到市级 | **`element-china-area-data`** | +| 地址排序实现层 | 后端 `ORDER BY` / 前端 `.sort()` | **后端 `ORDER BY id DESC`** | + +## 4. 架构与组件 + +### 4.1 组件拆分 + +新增 `frontend/src/components/AddressEditDialog.vue`,作为**可复用**弹窗组件,供 `Checkout.vue` 与(后续可能的)`AddressList.vue` 共用: + +``` +AddressEditDialog.vue +├─ props: { modelValue: Boolean, address: Object } +├─ emits: ['update:modelValue', 'saved'] +├─ 内部: el-dialog + el-form(复用 AddressEdit 的字段与校验) +├─ 数据: 省/市/区级联 (element-china-area-data 的 regionData) +└─ 行为: createAddress / updateAddress → emit('saved', newAddress) +``` + +### 4.2 数据流 + +**新增地址(Checkout 路径):** +``` +Checkout.vue + ├─ 点 [+ 新增收货地址] + ├─ + │ └─ createAddress(form) → 200 → emit('saved', newAddress) + ├─ onSaved(newAddress): + │ ├─ addresses.value = await listAddresses() // 刷新 + │ ├─ addressId.value = newAddress.id // 自动选中新地址 + │ └─ ElMessage.success('地址已新增') +``` + +**编辑地址(AddressList 路径):** +``` +AddressList.vue + ├─ 行 [编辑] → router.push('/user/address-edit?id=' + row.id) + └─ AddressEdit.vue onSubmit → updateAddress → router.push('/user/address-list') + (保留现有行为,不引入 dialog 改造,保持最小改动) +``` + +**省/市/区级联:** +``` +AddressEdit.vue / AddressEditDialog.vue + ├─ + ├─ onAreaChange(arr): + │ ├─ form.province = arr[0] || '' + │ ├─ form.city = arr[1] || '' + │ └─ form.district = arr[2] || '' + ├─ 编辑模式回填:cascader 的值需要从 province/city/district 字符串拼回数组 + │ areaArr = [row.province, row.city, row.district] + │ (element-china-area-data 提供 regionDataWithProvinceId 等带 id 版本便于精确回填, + │ 本设计先用纯文本 regionData,回填时按字符串匹配;不匹配则 cascader 显示空但表单字段仍可用) +``` + +### 4.3 后端改动 + +`backend/src/modules/user/services/addressService.js` 的 `list` 函数追加 `order`: + +```js +async function list(userId) { + return Address.findAll({ + where: { userId }, + order: [['id', 'DESC']], // ← 新增 + }); +} +``` + +> id 自增 ≡ 创建时间倒序,1 个 SQL 子句解决;后端无须返回 `created_at`(虽 schema 中有)。 + +### 4.4 依赖 + +```bash +cd frontend && npm install element-china-area-data +``` + +`package.json` 增加: +```json +"element-china-area-data": "^6.1.0" +``` + +## 5. 错误处理 + +| 场景 | 处理 | +|---|---| +| 级联回填找不到精确匹配(编辑模式) | cascader 显示空数组,但 `form.province/city/district` 仍保留原值;保存时若字段已存在则照写 | +| `createAddress` 失败 | dialog 不关闭,ElMessage.error 提示;`loading.value = false` | +| 刷新列表失败 | dialog 已关闭但列表不变,ElMessage.warning('地址已保存,请刷新页面') | +| 删除最后一条默认地址 | 后端不强制要求至少 1 条默认;不抛错 | + +## 6. 测试场景 + +1. **Checkout 新增地址**:进入 /checkout → 点 [+] → 选"四川省 / 成都市 / 武侯区" → 填详细地址 → 保存 → dialog 关闭,新地址自动选中并出现在 radio 列表顶部 +2. **级联回填**:进入 /user/address-edit?id=1 → 省/市/区显示已选中的值(精度匹配时) +3. **列表排序**:连续新增 3 个地址,AddressList.vue 显示顺序为:第三 → 第二 → 第一 +4. **编辑/删除**:AddressList.vue 行 [编辑]/[删除] 仍可用 +5. **保留校验**:手机号 11 位、详细地址非空、收件人非空 + +## 7. 边界与 YAGNI + +- **不**引入 GET `/addresses/:id` 单条接口 — 前端用 `list.find()` 即可,列表规模 < 20 条 +- **不**做地址去重 / 智能识别("这是不是已有地址")— YAGNI +- **不**加地址簿容量限制 +- **不**在 dialog 内做"删除"动作(删除入口仍在 AddressList.vue) +- **不**做地址复制("复制已有地址创建新地址")— YAGNI + +## 8. 文件变更清单 + +| 文件 | 类型 | 行数估算 | +|---|---|---| +| `backend/src/modules/user/services/addressService.js` | 修改 | +1(order) | +| `frontend/package.json` | 修改 | +1 依赖 | +| `frontend/package-lock.json` | 修改 | 自动生成 | +| `frontend/src/components/AddressEditDialog.vue` | 新增 | ~120 行 | +| `frontend/src/views/user/AddressEdit.vue` | 改造 | 模板替换 ~20 行 + script ~30 行 | +| `frontend/src/views/order/Checkout.vue` | 修改 | +30 行(按钮 + dialog + onSaved) | + +## 9. 验收 + +- [ ] Checkout 页面右上"+ 新增收货地址"按钮常驻 +- [ ] 点击"+",弹出 el-dialog;省/市/区使用级联选择 +- [ ] 选择"四川省" → 二级下拉只剩四川名下的市 +- [ ] 保存后 dialog 自动关闭,新地址出现在 radio 列表并被选中 +- [ ] AddressList 已有:编辑、删除、设默认(无回归) +- [ ] AddressList 行顺序:最新创建在最上面 +- [ ] 后端响应排序由 SQL `ORDER BY id DESC` 保证(前端不依赖本地 sort) \ No newline at end of file -- Gitee From da84ea20414f639ae171393c5d0c41d7c3053de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 14:48:46 +0800 Subject: [PATCH 005/168] =?UTF-8?q?docs(plan):=20=E6=94=B6=E8=B4=A7?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96=E5=AE=9E?= =?UTF-8?q?=E6=96=BD=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26-07-27-address-feature-implementation.md | 501 ++++++++++++++++++ 1 file changed, 501 insertions(+) create mode 100644 docs/superpowers/plans/2026-07-27-address-feature-implementation.md diff --git a/docs/superpowers/plans/2026-07-27-address-feature-implementation.md b/docs/superpowers/plans/2026-07-27-address-feature-implementation.md new file mode 100644 index 0000000..473f0b1 --- /dev/null +++ b/docs/superpowers/plans/2026-07-27-address-feature-implementation.md @@ -0,0 +1,501 @@ +# 收货地址功能优化实施计划 + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 在 Checkout 页内嵌"新增收货地址"Dialog、把省/市/区改为 element-china-area-data 级联选择、并保证地址列表按创建时间倒序。 + +**Architecture:** 抽 `AddressEditDialog.vue` 通用弹窗组件供 Checkout 调用;AddressEdit.vue 独立页同样接入 cascader;后端 `addressService.list` 加 `ORDER BY id DESC`。最小改动原则:后端契约不变、路由不变、字段不变。 + +**Tech Stack:** Vue 3 + Element Plus / Express + Sequelize(无新后端依赖)/ element-china-area-data 6.x(前端新增依赖) + +## 全局约束 + +- 字段命名:province / city / district 保持字符串写入数据库;级联选择器仅做 UI 聚合,最终仍按三个独立字段提交。 +- 接口契约:`POST /addresses` 接收 `{ receiver, phone, province, city, district, detail, isDefault }`,与现状一致。 +- 排序:依赖后端 `ORDER BY id DESC`(id 自增 ≡ 创建时间倒序);前端**不**做本地排序。 +- 提交频率:每个 Task 一个 commit。 + +--- + +## File Structure + +**后端修改** +- `backend/src/modules/user/services/addressService.js` — `list` 函数加 `order` + +**前端新增 / 修改** +- 新增 `frontend/src/components/AddressEditDialog.vue` — 通用弹窗组件 +- 修改 `frontend/src/views/user/AddressEdit.vue` — 省/市/区改为 cascader +- 修改 `frontend/src/views/order/Checkout.vue` — 加 "+ 新增收货地址" 按钮 + 接入 dialog +- 修改 `frontend/package.json` / `frontend/package-lock.json` — 加 `element-china-area-data` + +--- + +## Task 1: 后端地址列表按 id DESC 排序 + +**Files:** +- 修改 `backend/src/modules/user/services/addressService.js` + +- [ ] **Step 1: 读取并定位 `list` 函数** + +```bash +grep -n "async function list" backend/src/modules/user/services/addressService.js +``` + +预期输出包含 `async function list(userId)` 所在的行号。 + +- [ ] **Step 2: 修改 `list` 函数,加入 `order`** + +在 `Address.findAll({ where: { userId } })` 的对象中追加 `order: [['id', 'DESC']]`。完成后函数体形如: + +```js +async function list(userId) { + return Address.findAll({ + where: { userId }, + order: [['id', 'DESC']], + }); +} +``` + +- [ ] **Step 3: 验证 SQL 行为** + +启动后端服务(已有 `npm run dev` 或 `npm start`),用 curl / Postman 调 `GET /api/addresses`(带 buyer JWT),确认返回数组第一项的 `id` 是最大值。 + +- [ ] **Step 4: Commit** + +```bash +git add backend/src/modules/user/services/addressService.js +git commit -m "feat(user): addressService.list 按 id DESC 排序(创建时间倒序)" +``` + +--- + +## Task 2: 安装 element-china-area-data + +**Files:** +- 修改 `frontend/package.json` +- 修改 `frontend/package-lock.json`(自动生成) + +- [ ] **Step 1: 安装依赖** + +```bash +cd frontend && npm install element-china-area-data +``` + +预期:`package.json` 新增 `"element-china-area-data": "^6.x.x"`。 + +- [ ] **Step 2: 验证 import 可用** + +在 `frontend/src/components/` 下临时建一个 sanity check 文件 `area-data-check.mjs`: + +```js +import { regionData } from 'element-china-area-data'; +console.log('regionData is array:', Array.isArray(regionData), 'len:', regionData.length); +``` + +运行: + +```bash +cd frontend && node src/components/area-data-check.mjs +``` + +预期输出:`regionData is array: true len: 34`(34 个省级行政单位)。验证后**删除** `area-data-check.mjs`。 + +- [ ] **Step 3: Commit** + +```bash +cd frontend && git add package.json package-lock.json +git commit -m "feat(deps): 添加 element-china-area-data 用于省市区级联" +``` + +> 注意:cwd 在 frontend/,要回到 repo 根目录再提交,或 git 直接 add frontend/package.json frontend/package-lock.json。 + +--- + +## Task 3: 创建 AddressEditDialog.vue 可复用弹窗组件 + +**Files:** +- 新增 `frontend/src/components/AddressEditDialog.vue` + +**Interfaces:** +- Props: `modelValue: Boolean`(v-model 控制显示) +- Emits: `update:modelValue`, `saved`(保存成功后触发,payload 为新增/更新后的 address 对象) +- 内部数据:完整地址表单(receiver / phone / province / city / district / detail / isDefault) +- 内部使用:`createAddress` / `updateAddress` / `regionData` + +- [ ] **Step 1: 创建文件,写入完整组件骨架** + +```vue + + + + + +``` + +- [ ] **Step 2: 手动检查** + +- 打开 `frontend/src/components/AddressEditDialog.vue` 确认文件无 lint 错误 +- 确认 `import { createAddress } from '@/api/user';` 路径正确(与 `api/user.js` 已暴露的方法一致) + +- [ ] **Step 3: Commit** + +```bash +git add frontend/src/components/AddressEditDialog.vue +git commit -m "feat(ui): 新增 AddressEditDialog 弹窗组件(含省市区级联)" +``` + +--- + +## Task 4: AddressEdit.vue 改造省/市/区为 cascader + +**Files:** +- 修改 `frontend/src/views/user/AddressEdit.vue` + +**Interfaces:** +- 字段保持:`form.receiver / phone / province / city / district / detail / isDefault` +- 新增内部:`areaArr`(cascader 用的数组),`regionData` 数据源 +- watch cascader 选中值同步到 `form.province/city/district` +- 编辑模式回填:用 `[row.province, row.city, row.district]` 字符串数组尝试匹配 cascader 选项 + +- [ ] **Step 1: 修改 ` + + \ No newline at end of file -- Gitee From 44ba55ad8395bcd51415a01a62d3e72c31cc274a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 15:13:31 +0800 Subject: [PATCH 008/168] =?UTF-8?q?feat(user):=20AddressEdit=20=E7=9C=81/?= =?UTF-8?q?=E5=B8=82/=E5=8C=BA=E6=94=B9=E4=B8=BA=20element-cascader=20?= =?UTF-8?q?=E7=BA=A7=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/user/AddressEdit.vue | 34 +++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/frontend/src/views/user/AddressEdit.vue b/frontend/src/views/user/AddressEdit.vue index d52ca9f..006e333 100644 --- a/frontend/src/views/user/AddressEdit.vue +++ b/frontend/src/views/user/AddressEdit.vue @@ -10,14 +10,13 @@ - - - - - - - - + + @@ -35,15 +34,17 @@ \ No newline at end of file -- Gitee From 0607ba4e3f55f67b4b9432c3fbf73fd9c01fb76e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 15:23:56 +0800 Subject: [PATCH 010/168] =?UTF-8?q?fix(user):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=BC=B9=E7=AA=97/=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=A1=B5=E4=BF=9D=E5=AD=98=E4=B8=8D=E5=85=B3=E9=97=AD=EF=BC=88?= =?UTF-8?q?cascader=20=E6=A0=A1=E9=AA=8C=E4=B8=8E=20form=20=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=90=8D=E4=B8=8D=E4=B8=80=E8=87=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/AddressEditDialog.vue | 15 ++++++++++++--- frontend/src/views/user/AddressEdit.vue | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/AddressEditDialog.vue b/frontend/src/components/AddressEditDialog.vue index 446aee2..39ff40c 100644 --- a/frontend/src/components/AddressEditDialog.vue +++ b/frontend/src/components/AddressEditDialog.vue @@ -67,7 +67,6 @@ const rules = { { required: true, message: '请输入手机号', trigger: 'blur' }, { pattern: /^1[3-9]\d{9}$/, message: '手机号格式不对', trigger: 'blur' }, ], - area: [{ required: true, message: '请选择省/市/区', trigger: 'change' }], detail: [{ required: true, message: '请输入详细地址', trigger: 'blur' }], }; @@ -84,8 +83,18 @@ function resetForm() { } async function onSubmit() { - const valid = await formRef.value.validate().catch(() => false); - if (!valid) return; + // 1) 手动校验省/市/区(cascader 区域不归 el-form 管) + if (!form.province || !form.city || !form.district) { + ElMessage.warning('请选择省/市/区'); + return; + } + // 2) el-form 校验其他字段(不再静默吞错,让 el-form 自动显示红字) + try { + await formRef.value.validate(); + } catch (_) { + return; + } + // 3) 提交 loading.value = true; try { const saved = await createAddress({ ...form }); diff --git a/frontend/src/views/user/AddressEdit.vue b/frontend/src/views/user/AddressEdit.vue index 006e333..3db4681 100644 --- a/frontend/src/views/user/AddressEdit.vue +++ b/frontend/src/views/user/AddressEdit.vue @@ -57,7 +57,6 @@ const rules = { { required: true, message: '请输入手机号', trigger: 'blur' }, { pattern: /^1[3-9]\d{9}$/, message: '手机号格式不对', trigger: 'blur' }, ], - area: [{ required: true, message: '请选择省/市/区', trigger: 'change' }], detail: [{ required: true, message: '请输入详细地址', trigger: 'blur' }], }; @@ -79,8 +78,18 @@ async function fetchOne() { } async function onSubmit() { - const valid = await formRef.value.validate().catch(() => false); - if (!valid) return; + // 1) 手动校验省/市/区(cascader 区域不归 el-form 管) + if (!form.province || !form.city || !form.district) { + ElMessage.warning('请选择省/市/区'); + return; + } + // 2) el-form 校验其他字段(不静默吞错) + try { + await formRef.value.validate(); + } catch (_) { + return; + } + // 3) 提交 loading.value = true; try { if (isEdit.value) { -- Gitee From fbd0ffd2b33cec7a6140cfa97165e912269a2fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=A8=E6=96=87?= <2112133735@qq.com> Date: Mon, 27 Jul 2026 15:29:22 +0800 Subject: [PATCH 011/168] =?UTF-8?q?feat(order):=20OrderDetail=20=E5=8A=A0?= =?UTF-8?q?=20el-steps=20=E8=BF=9B=E5=BA=A6=E6=9D=A1=20+=20=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=97=B6=E9=97=B4=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/order/OrderDetail.vue | 58 +++++++++++++++++------- 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/frontend/src/views/order/OrderDetail.vue b/frontend/src/views/order/OrderDetail.vue index 135be35..0d00651 100644 --- a/frontend/src/views/order/OrderDetail.vue +++ b/frontend/src/views/order/OrderDetail.vue @@ -14,6 +14,25 @@ + + + + + + + + + + + {{ order.createdAt }} + {{ order.paidAt }} + {{ order.shippedAt }} + {{ order.finishedAt }} + {{ order.cancelledAt }} + {{ order.cancelReason }} + + + @@ -39,9 +58,9 @@