eletrotupi / tcc/ commit / 2b1f047

api: rewrite tests using vitest instead of ava, add specs for /me, user creation, mood trends

Pedro Lucas Porcellis porcellis@eletrotupi.com 29 days ago 2b1f0479416f5033b2f7f43bd11b6ad759f5ec98
Parents: 00a1c75
19 file(s) changed
  • api/ava.config.mjs +0 -18
  • api/package-lock.json +1025 -2098
  • api/package.json +8 -8
  • api/scripts/create-test-db.mjs +22 -0
  • api/tests/auth/login.test.ts +42 -0
  • api/tests/database-auth.test.ts +0 -260
  • api/tests/jobs/mood-trend.test.ts +101 -0
  • api/tests/moods/create.test.ts +57 -0
  • api/tests/moods/list.test.ts +91 -0
  • api/tests/setup.ts +14 -0
  • api/tests/test-helper.ts +23 -44
  • api/tests/users/create.test.ts +35 -114
  • api/tests/users/delete.test.ts +0 -58
  • api/tests/users/fetch.test.ts +0 -68
  • api/tests/users/me.test.ts +31 -0
  • api/tests/users/update.test.ts +0 -85
  • api/tsconfig.json +0 -1
  • api/tsconfig.test.json +3 -11
  • api/vitest.config.ts +15 -0
@@ -1,19 +0,0 @@
1 - export default {
2 - extensions: {
3 - ts: 'commonjs'
4 - },
5 - nodeArguments: [
6 - '--require=tsx/cjs',
7 - '--require=tsconfig-paths/register'
8 - ],
9 - files: [
10 - 'tests/**/*.test.ts'
11 - ],
12 - environmentVariables: {
13 - NODE_ENV: 'test',
14 - TS_NODE_PROJECT: './tsconfig.json'
15 - },
16 - timeout: '30s',
17 - concurrency: 1, // Run tests serially to avoid database conflicts
18 - verbose: true
19 - };
api/package-lock.json
1 1
{
2 2
  "name": "orbit-api",
3 3
  "version": "0.0.0",
4 4
  "lockfileVersion": 3,
5 5
  "requires": true,
▸ 26 unchanged lines
32 32
        "resend": "^6.12.3",
33 33
        "zod": "^4.4.3",
34 34
        "zod-validation-error": "^5.0.0"
35 35
      },
36 36
      "devDependencies": {
37 -
        "@ava/typescript": "^6.0.0",
38 37
        "@types/better-sqlite3": "^7.6.13",
39 38
        "@types/express": "^5.0.6",
40 39
        "@types/morgan": "^1.9.10",
41 40
        "@types/multer": "^2.1.0",
42 41
        "@types/multer-s3": "^3.0.3",
43 42
        "@types/node": "^25.5.2",
44 -
        "ava": "^6.4.1",
43 +
        "@types/supertest": "^6.0.3",
45 44
        "cross-var": "^1.1.0",
46 45
        "dotenv-cli": "^11.0.0",
47 46
        "nodemon": "^3.1.14",
48 47
        "pino-pretty": "^13.1.3",
49 48
        "prisma": "^7.5.0",
50 49
        "supertest": "^7.1.4",
51 -
        "ts-node": "^10.9.2",
52 50
        "tsc-alias": "^1.8.16",
53 -
        "tsconfig-paths": "^4.2.0",
54 51
        "tsx": "^4.21.0",
55 -
        "typescript": "^6.0.2"
56 -
      }
57 -
    },
58 -
    "node_modules/@ava/typescript": {
59 -
      "version": "6.0.0",
60 -
      "resolved": "https://registry.npmjs.org/@ava/typescript/-/typescript-6.0.0.tgz",
61 -
      "integrity": "sha512-+8oDYc4J5cCaWZh1VUbyc+cegGplJO9FqHpqR4LVAVx8fRLVRaYlC4yyA6cqHJ1vWP23Ff/ECS5U68Zz6OLZlg==",
62 -
      "dev": true,
63 -
      "license": "MIT",
64 -
      "dependencies": {
65 -
        "escape-string-regexp": "^5.0.0",
66 -
        "execa": "^9.6.0"
67 -
      },
68 -
      "engines": {
69 -
        "node": "^20.8 || ^22 || >=24"
52 +
        "typescript": "^6.0.2",
53 +
        "vite-tsconfig-paths": "^5.1.4",
54 +
        "vitest": "^3.0.0"
70 55
      }
71 56
    },
72 57
    "node_modules/@aws-crypto/crc32": {
73 58
      "version": "5.2.0",
74 59
      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz",
▸ 556 unchanged lines
631 616
      "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-10.5.0.tgz",
632 617
      "integrity": "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==",
633 618
      "devOptional": true,
634 619
      "license": "Apache-2.0"
635 620
    },
636 -
    "node_modules/@cspotcode/source-map-support": {
637 -
      "version": "0.8.1",
638 -
      "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
639 -
      "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
640 -
      "dev": true,
641 -
      "license": "MIT",
642 -
      "dependencies": {
643 -
        "@jridgewell/trace-mapping": "0.3.9"
644 -
      },
645 -
      "engines": {
646 -
        "node": ">=12"
647 -
      }
648 -
    },
649 621
    "node_modules/@electric-sql/pglite": {
650 622
      "version": "0.3.15",
651 623
      "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.15.tgz",
652 624
      "integrity": "sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ==",
653 625
      "devOptional": true,
▸ 481 unchanged lines
1135 1107
      "version": "1.5.1",
1136 1108
      "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.1.tgz",
1137 1109
      "integrity": "sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==",
1138 1110
      "license": "MIT"
1139 1111
    },
1140 -
    "node_modules/@isaacs/cliui": {
1141 -
      "version": "8.0.2",
1142 -
      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
1143 -
      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
1144 -
      "dev": true,
1145 -
      "license": "ISC",
1146 -
      "dependencies": {
1147 -
        "string-width": "^5.1.2",
1148 -
        "string-width-cjs": "npm:string-width@^4.2.0",
1149 -
        "strip-ansi": "^7.0.1",
1150 -
        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
1151 -
        "wrap-ansi": "^8.1.0",
1152 -
        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
1153 -
      },
1154 -
      "engines": {
1155 -
        "node": ">=12"
1156 -
      }
1157 -
    },
1158 -
    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
1159 -
      "version": "9.2.2",
1160 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1161 -
      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1162 -
      "dev": true,
1163 -
      "license": "MIT"
1164 -
    },
1165 -
    "node_modules/@isaacs/cliui/node_modules/string-width": {
1166 -
      "version": "5.1.2",
1167 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1168 -
      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1169 -
      "dev": true,
1170 -
      "license": "MIT",
1171 -
      "dependencies": {
1172 -
        "eastasianwidth": "^0.2.0",
1173 -
        "emoji-regex": "^9.2.2",
1174 -
        "strip-ansi": "^7.0.1"
1175 -
      },
1176 -
      "engines": {
1177 -
        "node": ">=12"
1178 -
      },
1179 -
      "funding": {
1180 -
        "url": "https://github.com/sponsors/sindresorhus"
1181 -
      }
1182 -
    },
1183 -
    "node_modules/@isaacs/fs-minipass": {
1184 -
      "version": "4.0.1",
1185 -
      "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
1186 -
      "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
1187 -
      "dev": true,
1188 -
      "license": "ISC",
1189 -
      "dependencies": {
1190 -
        "minipass": "^7.0.4"
1191 -
      },
1192 -
      "engines": {
1193 -
        "node": ">=18.0.0"
1194 -
      }
1195 -
    },
1196 -
    "node_modules/@jridgewell/resolve-uri": {
1197 -
      "version": "3.1.2",
1198 -
      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
1199 -
      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
1200 -
      "dev": true,
1201 -
      "license": "MIT",
1202 -
      "engines": {
1203 -
        "node": ">=6.0.0"
1204 -
      }
1205 -
    },
1206 1112
    "node_modules/@jridgewell/sourcemap-codec": {
1207 1113
      "version": "1.5.5",
1208 1114
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
1209 1115
      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
1210 1116
      "dev": true,
1211 1117
      "license": "MIT"
1212 1118
    },
1213 -
    "node_modules/@jridgewell/trace-mapping": {
1214 -
      "version": "0.3.9",
1215 -
      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
1216 -
      "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
1217 -
      "dev": true,
1218 -
      "license": "MIT",
1219 -
      "dependencies": {
1220 -
        "@jridgewell/resolve-uri": "^3.0.3",
1221 -
        "@jridgewell/sourcemap-codec": "^1.4.10"
1222 -
      }
1223 -
    },
1224 -
    "node_modules/@mapbox/node-pre-gyp": {
1225 -
      "version": "2.0.3",
1226 -
      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz",
1227 -
      "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==",
1228 -
      "dev": true,
1229 -
      "license": "BSD-3-Clause",
1230 -
      "dependencies": {
1231 -
        "consola": "^3.2.3",
1232 -
        "detect-libc": "^2.0.0",
1233 -
        "https-proxy-agent": "^7.0.5",
1234 -
        "node-fetch": "^2.6.7",
1235 -
        "nopt": "^8.0.0",
1236 -
        "semver": "^7.5.3",
1237 -
        "tar": "^7.4.0"
1238 -
      },
1239 -
      "bin": {
1240 -
        "node-pre-gyp": "bin/node-pre-gyp"
1241 -
      },
1242 -
      "engines": {
1243 -
        "node": ">=18"
1244 -
      }
1245 -
    },
1246 1119
    "node_modules/@mrleebo/prisma-ast": {
1247 1120
      "version": "0.13.1",
1248 1121
      "resolved": "https://registry.npmjs.org/@mrleebo/prisma-ast/-/prisma-ast-0.13.1.tgz",
1249 1122
      "integrity": "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==",
1250 1123
      "devOptional": true,
▸ 160 unchanged lines
1411 1284
    "node_modules/@pinojs/redact": {
1412 1285
      "version": "0.4.0",
1413 1286
      "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
1414 1287
      "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==",
1415 1288
      "license": "MIT"
1416 -
    },
1417 -
    "node_modules/@pkgjs/parseargs": {
1418 -
      "version": "0.11.0",
1419 -
      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
1420 -
      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
1421 -
      "dev": true,
1422 -
      "license": "MIT",
1423 -
      "optional": true,
1424 -
      "engines": {
1425 -
        "node": ">=14"
1426 -
      }
1427 1289
    },
1428 1290
    "node_modules/@prisma/adapter-better-sqlite3": {
1429 1291
      "version": "7.5.0",
1430 1292
      "resolved": "https://registry.npmjs.org/@prisma/adapter-better-sqlite3/-/adapter-better-sqlite3-7.5.0.tgz",
1431 1293
      "integrity": "sha512-ThP6y1cAZW/BdHuuTKzO+j8vzEzXDMZaDPmboJyrkdbJvO9LRiHdnG5LNKAht8YYwjHgQoq7G7NtKbaW7NebVQ==",
▸ 205 unchanged lines
1637 1499
        "@types/react": "^18.0.0 || ^19.0.0",
1638 1500
        "react": "^18.0.0 || ^19.0.0",
1639 1501
        "react-dom": "^18.0.0 || ^19.0.0"
1640 1502
      }
1641 1503
    },
1642 -
    "node_modules/@rollup/pluginutils": {
1643 -
      "version": "5.3.0",
1644 -
      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
1645 -
      "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
1504 +
    "node_modules/@rollup/rollup-android-arm-eabi": {
1505 +
      "version": "4.62.2",
1506 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz",
1507 +
      "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==",
1508 +
      "cpu": [
1509 +
        "arm"
1510 +
      ],
1511 +
      "dev": true,
1512 +
      "license": "MIT",
1513 +
      "optional": true,
1514 +
      "os": [
1515 +
        "android"
1516 +
      ]
1517 +
    },
1518 +
    "node_modules/@rollup/rollup-android-arm64": {
1519 +
      "version": "4.62.2",
1520 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz",
1521 +
      "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==",
1522 +
      "cpu": [
1523 +
        "arm64"
1524 +
      ],
1525 +
      "dev": true,
1526 +
      "license": "MIT",
1527 +
      "optional": true,
1528 +
      "os": [
1529 +
        "android"
1530 +
      ]
1531 +
    },
1532 +
    "node_modules/@rollup/rollup-darwin-arm64": {
1533 +
      "version": "4.62.2",
1534 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz",
1535 +
      "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==",
1536 +
      "cpu": [
1537 +
        "arm64"
1538 +
      ],
1539 +
      "dev": true,
1540 +
      "license": "MIT",
1541 +
      "optional": true,
1542 +
      "os": [
1543 +
        "darwin"
1544 +
      ]
1545 +
    },
1546 +
    "node_modules/@rollup/rollup-darwin-x64": {
1547 +
      "version": "4.62.2",
1548 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz",
1549 +
      "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==",
1550 +
      "cpu": [
1551 +
        "x64"
1552 +
      ],
1553 +
      "dev": true,
1554 +
      "license": "MIT",
1555 +
      "optional": true,
1556 +
      "os": [
1557 +
        "darwin"
1558 +
      ]
1559 +
    },
1560 +
    "node_modules/@rollup/rollup-freebsd-arm64": {
1561 +
      "version": "4.62.2",
1562 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz",
1563 +
      "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==",
1564 +
      "cpu": [
1565 +
        "arm64"
1566 +
      ],
1567 +
      "dev": true,
1568 +
      "license": "MIT",
1569 +
      "optional": true,
1570 +
      "os": [
1571 +
        "freebsd"
1572 +
      ]
1573 +
    },
1574 +
    "node_modules/@rollup/rollup-freebsd-x64": {
1575 +
      "version": "4.62.2",
1576 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz",
1577 +
      "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==",
1578 +
      "cpu": [
1579 +
        "x64"
1580 +
      ],
1581 +
      "dev": true,
1582 +
      "license": "MIT",
1583 +
      "optional": true,
1584 +
      "os": [
1585 +
        "freebsd"
1586 +
      ]
1587 +
    },
1588 +
    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
1589 +
      "version": "4.62.2",
1590 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz",
1591 +
      "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==",
1592 +
      "cpu": [
1593 +
        "arm"
1594 +
      ],
1595 +
      "dev": true,
1596 +
      "libc": [
1597 +
        "glibc"
1598 +
      ],
1599 +
      "license": "MIT",
1600 +
      "optional": true,
1601 +
      "os": [
1602 +
        "linux"
1603 +
      ]
1604 +
    },
1605 +
    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
1606 +
      "version": "4.62.2",
1607 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz",
1608 +
      "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==",
1609 +
      "cpu": [
1610 +
        "arm"
1611 +
      ],
1612 +
      "dev": true,
1613 +
      "libc": [
1614 +
        "musl"
1615 +
      ],
1616 +
      "license": "MIT",
1617 +
      "optional": true,
1618 +
      "os": [
1619 +
        "linux"
1620 +
      ]
1621 +
    },
1622 +
    "node_modules/@rollup/rollup-linux-arm64-gnu": {
1623 +
      "version": "4.62.2",
1624 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz",
1625 +
      "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==",
1626 +
      "cpu": [
1627 +
        "arm64"
1628 +
      ],
1629 +
      "dev": true,
1630 +
      "libc": [
1631 +
        "glibc"
1632 +
      ],
1633 +
      "license": "MIT",
1634 +
      "optional": true,
1635 +
      "os": [
1636 +
        "linux"
1637 +
      ]
1638 +
    },
1639 +
    "node_modules/@rollup/rollup-linux-arm64-musl": {
1640 +
      "version": "4.62.2",
1641 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz",
1642 +
      "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==",
1643 +
      "cpu": [
1644 +
        "arm64"
1645 +
      ],
1646 +
      "dev": true,
1647 +
      "libc": [
1648 +
        "musl"
1649 +
      ],
1650 +
      "license": "MIT",
1651 +
      "optional": true,
1652 +
      "os": [
1653 +
        "linux"
1654 +
      ]
1655 +
    },
1656 +
    "node_modules/@rollup/rollup-linux-loong64-gnu": {
1657 +
      "version": "4.62.2",
1658 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz",
1659 +
      "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==",
1660 +
      "cpu": [
1661 +
        "loong64"
1662 +
      ],
1663 +
      "dev": true,
1664 +
      "libc": [
1665 +
        "glibc"
1666 +
      ],
1667 +
      "license": "MIT",
1668 +
      "optional": true,
1669 +
      "os": [
1670 +
        "linux"
1671 +
      ]
1672 +
    },
1673 +
    "node_modules/@rollup/rollup-linux-loong64-musl": {
1674 +
      "version": "4.62.2",
1675 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz",
1676 +
      "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==",
1677 +
      "cpu": [
1678 +
        "loong64"
1679 +
      ],
1680 +
      "dev": true,
1681 +
      "libc": [
1682 +
        "musl"
1683 +
      ],
1684 +
      "license": "MIT",
1685 +
      "optional": true,
1686 +
      "os": [
1687 +
        "linux"
1688 +
      ]
1689 +
    },
1690 +
    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
1691 +
      "version": "4.62.2",
1692 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz",
1693 +
      "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==",
1694 +
      "cpu": [
1695 +
        "ppc64"
1696 +
      ],
1697 +
      "dev": true,
1698 +
      "libc": [
1699 +
        "glibc"
1700 +
      ],
1701 +
      "license": "MIT",
1702 +
      "optional": true,
1703 +
      "os": [
1704 +
        "linux"
1705 +
      ]
1706 +
    },
1707 +
    "node_modules/@rollup/rollup-linux-ppc64-musl": {
1708 +
      "version": "4.62.2",
1709 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz",
1710 +
      "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==",
1711 +
      "cpu": [
1712 +
        "ppc64"
1713 +
      ],
1714 +
      "dev": true,
1715 +
      "libc": [
1716 +
        "musl"
1717 +
      ],
1718 +
      "license": "MIT",
1719 +
      "optional": true,
1720 +
      "os": [
1721 +
        "linux"
1722 +
      ]
1723 +
    },
1724 +
    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1725 +
      "version": "4.62.2",
1726 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz",
1727 +
      "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==",
1728 +
      "cpu": [
1729 +
        "riscv64"
1730 +
      ],
1731 +
      "dev": true,
1732 +
      "libc": [
1733 +
        "glibc"
1734 +
      ],
1735 +
      "license": "MIT",
1736 +
      "optional": true,
1737 +
      "os": [
1738 +
        "linux"
1739 +
      ]
1740 +
    },
1741 +
    "node_modules/@rollup/rollup-linux-riscv64-musl": {
1742 +
      "version": "4.62.2",
1743 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz",
1744 +
      "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==",
1745 +
      "cpu": [
1746 +
        "riscv64"
1747 +
      ],
1748 +
      "dev": true,
1749 +
      "libc": [
1750 +
        "musl"
1751 +
      ],
1752 +
      "license": "MIT",
1753 +
      "optional": true,
1754 +
      "os": [
1755 +
        "linux"
1756 +
      ]
1757 +
    },
1758 +
    "node_modules/@rollup/rollup-linux-s390x-gnu": {
1759 +
      "version": "4.62.2",
1760 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz",
1761 +
      "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==",
1762 +
      "cpu": [
1763 +
        "s390x"
1764 +
      ],
1765 +
      "dev": true,
1766 +
      "libc": [
1767 +
        "glibc"
1768 +
      ],
1769 +
      "license": "MIT",
1770 +
      "optional": true,
1771 +
      "os": [
1772 +
        "linux"
1773 +
      ]
1774 +
    },
1775 +
    "node_modules/@rollup/rollup-linux-x64-gnu": {
1776 +
      "version": "4.62.2",
1777 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz",
1778 +
      "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==",
1779 +
      "cpu": [
1780 +
        "x64"
1781 +
      ],
1782 +
      "dev": true,
1783 +
      "libc": [
1784 +
        "glibc"
1785 +
      ],
1786 +
      "license": "MIT",
1787 +
      "optional": true,
1788 +
      "os": [
1789 +
        "linux"
1790 +
      ]
1791 +
    },
1792 +
    "node_modules/@rollup/rollup-linux-x64-musl": {
1793 +
      "version": "4.62.2",
1794 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz",
1795 +
      "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==",
1796 +
      "cpu": [
1797 +
        "x64"
1798 +
      ],
1799 +
      "dev": true,
1800 +
      "libc": [
1801 +
        "musl"
1802 +
      ],
1803 +
      "license": "MIT",
1804 +
      "optional": true,
1805 +
      "os": [
1806 +
        "linux"
1807 +
      ]
1808 +
    },
1809 +
    "node_modules/@rollup/rollup-openbsd-x64": {
1810 +
      "version": "4.62.2",
1811 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz",
1812 +
      "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==",
1813 +
      "cpu": [
1814 +
        "x64"
1815 +
      ],
1816 +
      "dev": true,
1817 +
      "license": "MIT",
1818 +
      "optional": true,
1819 +
      "os": [
1820 +
        "openbsd"
1821 +
      ]
1822 +
    },
1823 +
    "node_modules/@rollup/rollup-openharmony-arm64": {
1824 +
      "version": "4.62.2",
1825 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz",
1826 +
      "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==",
1827 +
      "cpu": [
1828 +
        "arm64"
1829 +
      ],
1830 +
      "dev": true,
1831 +
      "license": "MIT",
1832 +
      "optional": true,
1833 +
      "os": [
1834 +
        "openharmony"
1835 +
      ]
1836 +
    },
1837 +
    "node_modules/@rollup/rollup-win32-arm64-msvc": {
1838 +
      "version": "4.62.2",
1839 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz",
1840 +
      "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==",
1841 +
      "cpu": [
1842 +
        "arm64"
1843 +
      ],
1844 +
      "dev": true,
1845 +
      "license": "MIT",
1846 +
      "optional": true,
1847 +
      "os": [
1848 +
        "win32"
1849 +
      ]
1850 +
    },
1851 +
    "node_modules/@rollup/rollup-win32-ia32-msvc": {
1852 +
      "version": "4.62.2",
1853 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz",
1854 +
      "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==",
1855 +
      "cpu": [
1856 +
        "ia32"
1857 +
      ],
1646 1858
      "dev": true,
1647 1859
      "license": "MIT",
1648 -
      "dependencies": {
1649 -
        "@types/estree": "^1.0.0",
1650 -
        "estree-walker": "^2.0.2",
1651 -
        "picomatch": "^4.0.2"
1652 -
      },
1653 -
      "engines": {
1654 -
        "node": ">=14.0.0"
1655 -
      },
1656 -
      "peerDependencies": {
1657 -
        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
1658 -
      },
1659 -
      "peerDependenciesMeta": {
1660 -
        "rollup": {
1661 -
          "optional": true
1662 -
        }
1663 -
      }
1860 +
      "optional": true,
1861 +
      "os": [
1862 +
        "win32"
1863 +
      ]
1664 1864
    },
1665 -
    "node_modules/@sec-ant/readable-stream": {
1666 -
      "version": "0.4.1",
1667 -
      "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
1668 -
      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
1865 +
    "node_modules/@rollup/rollup-win32-x64-gnu": {
1866 +
      "version": "4.62.2",
1867 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz",
1868 +
      "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==",
1869 +
      "cpu": [
1870 +
        "x64"
1871 +
      ],
1669 1872
      "dev": true,
1670 -
      "license": "MIT"
1873 +
      "license": "MIT",
1874 +
      "optional": true,
1875 +
      "os": [
1876 +
        "win32"
1877 +
      ]
1671 1878
    },
1672 -
    "node_modules/@sindresorhus/merge-streams": {
1673 -
      "version": "2.3.0",
1674 -
      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
1675 -
      "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
1879 +
    "node_modules/@rollup/rollup-win32-x64-msvc": {
1880 +
      "version": "4.62.2",
1881 +
      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz",
1882 +
      "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==",
1883 +
      "cpu": [
1884 +
        "x64"
1885 +
      ],
1676 1886
      "dev": true,
1677 1887
      "license": "MIT",
1678 -
      "engines": {
1679 -
        "node": ">=18"
1680 -
      },
1681 -
      "funding": {
1682 -
        "url": "https://github.com/sponsors/sindresorhus"
1683 -
      }
1888 +
      "optional": true,
1889 +
      "os": [
1890 +
        "win32"
1891 +
      ]
1684 1892
    },
1685 1893
    "node_modules/@smithy/core": {
1686 1894
      "version": "3.24.3",
1687 1895
      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.24.3.tgz",
1688 1896
      "integrity": "sha512-Ep/7tPamGY8mgESE3LyLKtxJyy6U52WWAqr/3wial47Sj4u3PiIF73AOGI27UyLy9duTkhZbgzodOfLV4TduZg==",
▸ 124 unchanged lines
1813 2021
      "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
1814 2022
      "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
1815 2023
      "devOptional": true,
1816 2024
      "license": "MIT"
1817 2025
    },
1818 -
    "node_modules/@tsconfig/node10": {
1819 -
      "version": "1.0.12",
1820 -
      "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
1821 -
      "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
1822 -
      "dev": true,
1823 -
      "license": "MIT"
1824 -
    },
1825 -
    "node_modules/@tsconfig/node12": {
1826 -
      "version": "1.0.11",
1827 -
      "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
1828 -
      "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
1829 -
      "dev": true,
1830 -
      "license": "MIT"
1831 -
    },
1832 -
    "node_modules/@tsconfig/node14": {
1833 -
      "version": "1.0.3",
1834 -
      "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
1835 -
      "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
1836 -
      "dev": true,
1837 -
      "license": "MIT"
1838 -
    },
1839 -
    "node_modules/@tsconfig/node16": {
1840 -
      "version": "1.0.4",
1841 -
      "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
1842 -
      "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
1843 -
      "dev": true,
1844 -
      "license": "MIT"
1845 -
    },
1846 2026
    "node_modules/@types/better-sqlite3": {
1847 2027
      "version": "7.6.13",
1848 2028
      "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz",
1849 2029
      "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==",
1850 2030
      "dev": true,
▸ 11 unchanged lines
1862 2042
      "dependencies": {
1863 2043
        "@types/connect": "*",
1864 2044
        "@types/node": "*"
1865 2045
      }
1866 2046
    },
2047 +
    "node_modules/@types/chai": {
2048 +
      "version": "5.2.3",
2049 +
      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
2050 +
      "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
2051 +
      "dev": true,
2052 +
      "license": "MIT",
2053 +
      "dependencies": {
2054 +
        "@types/deep-eql": "*",
2055 +
        "assertion-error": "^2.0.1"
2056 +
      }
2057 +
    },
1867 2058
    "node_modules/@types/connect": {
1868 2059
      "version": "3.4.38",
1869 2060
      "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
1870 2061
      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
1871 2062
      "dev": true,
1872 2063
      "license": "MIT",
1873 2064
      "dependencies": {
1874 2065
        "@types/node": "*"
1875 2066
      }
1876 2067
    },
2068 +
    "node_modules/@types/cookiejar": {
2069 +
      "version": "2.1.5",
2070 +
      "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
2071 +
      "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
2072 +
      "dev": true,
2073 +
      "license": "MIT"
2074 +
    },
1877 2075
    "node_modules/@types/cors": {
1878 2076
      "version": "2.8.19",
1879 2077
      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
1880 2078
      "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
1881 2079
      "license": "MIT",
1882 2080
      "dependencies": {
1883 2081
        "@types/node": "*"
1884 2082
      }
1885 2083
    },
2084 +
    "node_modules/@types/deep-eql": {
2085 +
      "version": "4.0.2",
2086 +
      "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
2087 +
      "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
2088 +
      "dev": true,
2089 +
      "license": "MIT"
2090 +
    },
1886 2091
    "node_modules/@types/estree": {
1887 -
      "version": "1.0.8",
1888 -
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1889 -
      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
2092 +
      "version": "1.0.9",
2093 +
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
2094 +
      "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
1890 2095
      "dev": true,
1891 2096
      "license": "MIT"
1892 2097
    },
1893 2098
    "node_modules/@types/express": {
1894 2099
      "version": "5.0.6",
▸ 34 unchanged lines
1929 2134
      "license": "MIT",
1930 2135
      "dependencies": {
1931 2136
        "@types/ms": "*",
1932 2137
        "@types/node": "*"
1933 2138
      }
2139 +
    },
2140 +
    "node_modules/@types/methods": {
2141 +
      "version": "1.1.4",
2142 +
      "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
2143 +
      "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
2144 +
      "dev": true,
2145 +
      "license": "MIT"
1934 2146
    },
1935 2147
    "node_modules/@types/morgan": {
1936 2148
      "version": "1.9.10",
1937 2149
      "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.10.tgz",
1938 2150
      "integrity": "sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==",
▸ 95 unchanged lines
2034 2246
      "dependencies": {
2035 2247
        "@types/http-errors": "*",
2036 2248
        "@types/node": "*"
2037 2249
      }
2038 2250
    },
2039 -
    "node_modules/@vercel/nft": {
2040 -
      "version": "0.29.4",
2041 -
      "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz",
2042 -
      "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==",
2251 +
    "node_modules/@types/superagent": {
2252 +
      "version": "8.1.10",
2253 +
      "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.10.tgz",
2254 +
      "integrity": "sha512-nbt4IWXABhW0jGmmpRzCFNlbmwCTzZ2gTUsNIr+X+ItdqPms+PAJZbWsNzpS2USqXjcoNLQcO6nXo60zcPQiIg==",
2043 2255
      "dev": true,
2044 2256
      "license": "MIT",
2045 2257
      "dependencies": {
2046 -
        "@mapbox/node-pre-gyp": "^2.0.0",
2047 -
        "@rollup/pluginutils": "^5.1.3",
2048 -
        "acorn": "^8.6.0",
2049 -
        "acorn-import-attributes": "^1.9.5",
2050 -
        "async-sema": "^3.1.1",
2051 -
        "bindings": "^1.4.0",
2052 -
        "estree-walker": "2.0.2",
2053 -
        "glob": "^10.4.5",
2054 -
        "graceful-fs": "^4.2.9",
2055 -
        "node-gyp-build": "^4.2.2",
2056 -
        "picomatch": "^4.0.2",
2057 -
        "resolve-from": "^5.0.0"
2058 -
      },
2059 -
      "bin": {
2060 -
        "nft": "out/cli.js"
2061 -
      },
2062 -
      "engines": {
2063 -
        "node": ">=18"
2258 +
        "@types/cookiejar": "^2.1.5",
2259 +
        "@types/methods": "^1.1.4",
2260 +
        "@types/node": "*",
2261 +
        "form-data": "^4.0.0"
2064 2262
      }
2065 2263
    },
2066 -
    "node_modules/abbrev": {
2067 -
      "version": "3.0.1",
2068 -
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz",
2069 -
      "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==",
2264 +
    "node_modules/@types/supertest": {
2265 +
      "version": "6.0.3",
2266 +
      "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz",
2267 +
      "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==",
2070 2268
      "dev": true,
2071 -
      "license": "ISC",
2072 -
      "engines": {
2073 -
        "node": "^18.17.0 || >=20.5.0"
2269 +
      "license": "MIT",
2270 +
      "dependencies": {
2271 +
        "@types/methods": "^1.1.4",
2272 +
        "@types/superagent": "^8.1.0"
2074 2273
      }
2075 2274
    },
2076 -
    "node_modules/accepts": {
2077 -
      "version": "2.0.0",
2078 -
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
2079 -
      "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
2275 +
    "node_modules/@vitest/expect": {
2276 +
      "version": "3.2.6",
2277 +
      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz",
2278 +
      "integrity": "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==",
2279 +
      "dev": true,
2080 2280
      "license": "MIT",
2081 2281
      "dependencies": {
2082 -
        "mime-types": "^3.0.0",
2083 -
        "negotiator": "^1.0.0"
2282 +
        "@types/chai": "^5.2.2",
2283 +
        "@vitest/spy": "3.2.6",
2284 +
        "@vitest/utils": "3.2.6",
2285 +
        "chai": "^5.2.0",
2286 +
        "tinyrainbow": "^2.0.0"
2084 2287
      },
2085 -
      "engines": {
2086 -
        "node": ">= 0.6"
2288 +
      "funding": {
2289 +
        "url": "https://opencollective.com/vitest"
2087 2290
      }
2088 2291
    },
2089 -
    "node_modules/acorn": {
2090 -
      "version": "8.15.0",
2091 -
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
2092 -
      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
2292 +
    "node_modules/@vitest/mocker": {
2293 +
      "version": "3.2.6",
2294 +
      "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.6.tgz",
2295 +
      "integrity": "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==",
2093 2296
      "dev": true,
2094 2297
      "license": "MIT",
2095 -
      "bin": {
2096 -
        "acorn": "bin/acorn"
2298 +
      "dependencies": {
2299 +
        "@vitest/spy": "3.2.6",
2300 +
        "estree-walker": "^3.0.3",
2301 +
        "magic-string": "^0.30.17"
2302 +
      },
2303 +
      "funding": {
2304 +
        "url": "https://opencollective.com/vitest"
2305 +
      },
2306 +
      "peerDependencies": {
2307 +
        "msw": "^2.4.9",
2308 +
        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
2097 2309
      },
2098 -
      "engines": {
2099 -
        "node": ">=0.4.0"
2310 +
      "peerDependenciesMeta": {
2311 +
        "msw": {
2312 +
          "optional": true
2313 +
        },
2314 +
        "vite": {
2315 +
          "optional": true
2316 +
        }
2100 2317
      }
2101 2318
    },
2102 -
    "node_modules/acorn-import-attributes": {
2103 -
      "version": "1.9.5",
2104 -
      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
2105 -
      "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
2319 +
    "node_modules/@vitest/mocker/node_modules/estree-walker": {
2320 +
      "version": "3.0.3",
2321 +
      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
2322 +
      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
2106 2323
      "dev": true,
2107 2324
      "license": "MIT",
2108 -
      "peerDependencies": {
2109 -
        "acorn": "^8"
2325 +
      "dependencies": {
2326 +
        "@types/estree": "^1.0.0"
2110 2327
      }
2111 2328
    },
2112 -
    "node_modules/acorn-walk": {
2113 -
      "version": "8.3.4",
2114 -
      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
2115 -
      "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
2329 +
    "node_modules/@vitest/pretty-format": {
2330 +
      "version": "3.2.6",
2331 +
      "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.6.tgz",
2332 +
      "integrity": "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==",
2116 2333
      "dev": true,
2117 2334
      "license": "MIT",
2118 2335
      "dependencies": {
2119 -
        "acorn": "^8.11.0"
2336 +
        "tinyrainbow": "^2.0.0"
2120 2337
      },
2121 -
      "engines": {
2122 -
        "node": ">=0.4.0"
2338 +
      "funding": {
2339 +
        "url": "https://opencollective.com/vitest"
2123 2340
      }
2124 2341
    },
2125 -
    "node_modules/agent-base": {
2126 -
      "version": "7.1.4",
2127 -
      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
2128 -
      "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
2342 +
    "node_modules/@vitest/runner": {
2343 +
      "version": "3.2.6",
2344 +
      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.6.tgz",
2345 +
      "integrity": "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==",
2129 2346
      "dev": true,
2130 2347
      "license": "MIT",
2131 -
      "engines": {
2132 -
        "node": ">= 14"
2348 +
      "dependencies": {
2349 +
        "@vitest/utils": "3.2.6",
2350 +
        "pathe": "^2.0.3",
2351 +
        "strip-literal": "^3.0.0"
2352 +
      },
2353 +
      "funding": {
2354 +
        "url": "https://opencollective.com/vitest"
2133 2355
      }
2134 2356
    },
2135 -
    "node_modules/ansi-regex": {
2136 -
      "version": "6.2.2",
2137 -
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
2138 -
      "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
2357 +
    "node_modules/@vitest/snapshot": {
2358 +
      "version": "3.2.6",
2359 +
      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.6.tgz",
2360 +
      "integrity": "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==",
2139 2361
      "dev": true,
2140 2362
      "license": "MIT",
2141 -
      "engines": {
2142 -
        "node": ">=12"
2363 +
      "dependencies": {
2364 +
        "@vitest/pretty-format": "3.2.6",
2365 +
        "magic-string": "^0.30.17",
2366 +
        "pathe": "^2.0.3"
2143 2367
      },
2144 2368
      "funding": {
2145 -
        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
2369 +
        "url": "https://opencollective.com/vitest"
2146 2370
      }
2147 2371
    },
2148 -
    "node_modules/ansi-styles": {
2149 -
      "version": "6.2.3",
2150 -
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
2151 -
      "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
2372 +
    "node_modules/@vitest/spy": {
2373 +
      "version": "3.2.6",
2374 +
      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.6.tgz",
2375 +
      "integrity": "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==",
2376 +
      "dev": true,
2377 +
      "license": "MIT",
2378 +
      "dependencies": {
2379 +
        "tinyspy": "^4.0.3"
2380 +
      },
2381 +
      "funding": {
2382 +
        "url": "https://opencollective.com/vitest"
2383 +
      }
2384 +
    },
2385 +
    "node_modules/@vitest/utils": {
2386 +
      "version": "3.2.6",
2387 +
      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.6.tgz",
2388 +
      "integrity": "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==",
2152 2389
      "dev": true,
2153 2390
      "license": "MIT",
2154 -
      "engines": {
2155 -
        "node": ">=12"
2391 +
      "dependencies": {
2392 +
        "@vitest/pretty-format": "3.2.6",
2393 +
        "loupe": "^3.1.4",
2394 +
        "tinyrainbow": "^2.0.0"
2156 2395
      },
2157 2396
      "funding": {
2158 -
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2397 +
        "url": "https://opencollective.com/vitest"
2398 +
      }
2399 +
    },
2400 +
    "node_modules/accepts": {
2401 +
      "version": "2.0.0",
2402 +
      "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
2403 +
      "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
2404 +
      "license": "MIT",
2405 +
      "dependencies": {
2406 +
        "mime-types": "^3.0.0",
2407 +
        "negotiator": "^1.0.0"
2408 +
      },
2409 +
      "engines": {
2410 +
        "node": ">= 0.6"
2159 2411
      }
2160 2412
    },
2161 2413
    "node_modules/anymatch": {
2162 2414
      "version": "3.1.3",
2163 2415
      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
▸ 25 unchanged lines
2189 2441
      "version": "1.0.0",
2190 2442
      "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
2191 2443
      "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
2192 2444
      "license": "MIT"
2193 2445
    },
2194 -
    "node_modules/arg": {
2195 -
      "version": "4.1.3",
2196 -
      "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
2197 -
      "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
2198 -
      "dev": true,
2199 -
      "license": "MIT"
2200 -
    },
2201 -
    "node_modules/argparse": {
2202 -
      "version": "1.0.10",
2203 -
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
2204 -
      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
2205 -
      "dev": true,
2206 -
      "license": "MIT",
2207 -
      "dependencies": {
2208 -
        "sprintf-js": "~1.0.2"
2209 -
      }
2210 -
    },
2211 -
    "node_modules/array-find-index": {
2212 -
      "version": "1.0.2",
2213 -
      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
2214 -
      "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
2215 -
      "dev": true,
2216 -
      "license": "MIT",
2217 -
      "engines": {
2218 -
        "node": ">=0.10.0"
2219 -
      }
2220 -
    },
2221 2446
    "node_modules/array-union": {
2222 2447
      "version": "2.1.0",
2223 2448
      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
2224 2449
      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
2225 2450
      "dev": true,
2226 2451
      "license": "MIT",
2227 2452
      "engines": {
2228 2453
        "node": ">=8"
2229 2454
      }
2230 2455
    },
2231 -
    "node_modules/arrgv": {
2232 -
      "version": "1.0.2",
2233 -
      "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz",
2234 -
      "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==",
2235 -
      "dev": true,
2236 -
      "license": "MIT",
2237 -
      "engines": {
2238 -
        "node": ">=8.0.0"
2239 -
      }
2240 -
    },
2241 -
    "node_modules/arrify": {
2242 -
      "version": "3.0.0",
2243 -
      "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz",
2244 -
      "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==",
2245 -
      "dev": true,
2246 -
      "license": "MIT",
2247 -
      "engines": {
2248 -
        "node": ">=12"
2249 -
      },
2250 -
      "funding": {
2251 -
        "url": "https://github.com/sponsors/sindresorhus"
2252 -
      }
2253 -
    },
2254 2456
    "node_modules/asap": {
2255 2457
      "version": "2.0.6",
2256 2458
      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
2257 2459
      "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
2258 2460
      "dev": true,
2259 2461
      "license": "MIT"
2260 2462
    },
2261 -
    "node_modules/async-sema": {
2262 -
      "version": "3.1.1",
2263 -
      "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz",
2264 -
      "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==",
2463 +
    "node_modules/assertion-error": {
2464 +
      "version": "2.0.1",
2465 +
      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
2466 +
      "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
2265 2467
      "dev": true,
2266 -
      "license": "MIT"
2468 +
      "license": "MIT",
2469 +
      "engines": {
2470 +
        "node": ">=12"
2471 +
      }
2267 2472
    },
2268 2473
    "node_modules/asynckit": {
2269 2474
      "version": "0.4.0",
2270 2475
      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
2271 2476
      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
▸ 5 unchanged lines
2277 2482
      "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
2278 2483
      "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
2279 2484
      "license": "MIT",
2280 2485
      "engines": {
2281 2486
        "node": ">=8.0.0"
2282 -
      }
2283 -
    },
2284 -
    "node_modules/ava": {
2285 -
      "version": "6.4.1",
2286 -
      "resolved": "https://registry.npmjs.org/ava/-/ava-6.4.1.tgz",
2287 -
      "integrity": "sha512-vxmPbi1gZx9zhAjHBgw81w/iEDKcrokeRk/fqDTyA2DQygZ0o+dUGRHFOtX8RA5N0heGJTTsIk7+xYxitDb61Q==",
2288 -
      "dev": true,
2289 -
      "license": "MIT",
2290 -
      "dependencies": {
2291 -
        "@vercel/nft": "^0.29.4",
2292 -
        "acorn": "^8.15.0",
2293 -
        "acorn-walk": "^8.3.4",
2294 -
        "ansi-styles": "^6.2.1",
2295 -
        "arrgv": "^1.0.2",
2296 -
        "arrify": "^3.0.0",
2297 -
        "callsites": "^4.2.0",
2298 -
        "cbor": "^10.0.9",
2299 -
        "chalk": "^5.4.1",
2300 -
        "chunkd": "^2.0.1",
2301 -
        "ci-info": "^4.3.0",
2302 -
        "ci-parallel-vars": "^1.0.1",
2303 -
        "cli-truncate": "^4.0.0",
2304 -
        "code-excerpt": "^4.0.0",
2305 -
        "common-path-prefix": "^3.0.0",
2306 -
        "concordance": "^5.0.4",
2307 -
        "currently-unhandled": "^0.4.1",
2308 -
        "debug": "^4.4.1",
2309 -
        "emittery": "^1.2.0",
2310 -
        "figures": "^6.1.0",
2311 -
        "globby": "^14.1.0",
2312 -
        "ignore-by-default": "^2.1.0",
2313 -
        "indent-string": "^5.0.0",
2314 -
        "is-plain-object": "^5.0.0",
2315 -
        "is-promise": "^4.0.0",
2316 -
        "matcher": "^5.0.0",
2317 -
        "memoize": "^10.1.0",
2318 -
        "ms": "^2.1.3",
2319 -
        "p-map": "^7.0.3",
2320 -
        "package-config": "^5.0.0",
2321 -
        "picomatch": "^4.0.2",
2322 -
        "plur": "^5.1.0",
2323 -
        "pretty-ms": "^9.2.0",
2324 -
        "resolve-cwd": "^3.0.0",
2325 -
        "stack-utils": "^2.0.6",
2326 -
        "strip-ansi": "^7.1.0",
2327 -
        "supertap": "^3.0.1",
2328 -
        "temp-dir": "^3.0.0",
2329 -
        "write-file-atomic": "^6.0.0",
2330 -
        "yargs": "^17.7.2"
2331 -
      },
2332 -
      "bin": {
2333 -
        "ava": "entrypoints/cli.mjs"
2334 -
      },
2335 -
      "engines": {
2336 -
        "node": "^18.18 || ^20.8 || ^22 || ^23 || >=24"
2337 -
      },
2338 -
      "peerDependencies": {
2339 -
        "@ava/typescript": "*"
2340 -
      },
2341 -
      "peerDependenciesMeta": {
2342 -
        "@ava/typescript": {
2343 -
          "optional": true
2344 -
        }
2345 2487
      }
2346 2488
    },
2347 2489
    "node_modules/aws-ssl-profiles": {
2348 2490
      "version": "1.1.2",
2349 2491
      "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
▸ 1139 unchanged lines
3489 3631
        "buffer": "^5.5.0",
3490 3632
        "inherits": "^2.0.4",
3491 3633
        "readable-stream": "^3.4.0"
3492 3634
      }
3493 3635
    },
3494 -
    "node_modules/blueimp-md5": {
3495 -
      "version": "2.19.0",
3496 -
      "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz",
3497 -
      "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==",
3498 -
      "dev": true,
3499 -
      "license": "MIT"
3500 -
    },
3501 3636
    "node_modules/body-parser": {
3502 3637
      "version": "2.2.2",
3503 3638
      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
3504 3639
      "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
3505 3640
      "license": "MIT",
▸ 19 unchanged lines
3525 3660
    "node_modules/bowser": {
3526 3661
      "version": "2.14.1",
3527 3662
      "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz",
3528 3663
      "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==",
3529 3664
      "license": "MIT"
3530 -
    },
3531 -
    "node_modules/brace-expansion": {
3532 -
      "version": "2.0.2",
3533 -
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
3534 -
      "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
3535 -
      "dev": true,
3536 -
      "license": "MIT",
3537 -
      "dependencies": {
3538 -
        "balanced-match": "^1.0.0"
3539 -
      }
3540 3665
    },
3541 3666
    "node_modules/braces": {
3542 3667
      "version": "3.0.3",
3543 3668
      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
3544 3669
      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
▸ 106 unchanged lines
3651 3776
        "magicast": {
3652 3777
          "optional": true
3653 3778
        }
3654 3779
      }
3655 3780
    },
3781 +
    "node_modules/cac": {
3782 +
      "version": "6.7.14",
3783 +
      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
3784 +
      "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
3785 +
      "dev": true,
3786 +
      "license": "MIT",
3787 +
      "engines": {
3788 +
        "node": ">=8"
3789 +
      }
3790 +
    },
3656 3791
    "node_modules/call-bind-apply-helpers": {
3657 3792
      "version": "1.0.2",
3658 3793
      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
3659 3794
      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
3660 3795
      "license": "MIT",
▸ 19 unchanged lines
3680 3815
      },
3681 3816
      "funding": {
3682 3817
        "url": "https://github.com/sponsors/ljharb"
3683 3818
      }
3684 3819
    },
3685 -
    "node_modules/callsites": {
3686 -
      "version": "4.2.0",
3687 -
      "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz",
3688 -
      "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==",
3689 -
      "dev": true,
3690 -
      "license": "MIT",
3691 -
      "engines": {
3692 -
        "node": ">=12.20"
3693 -
      },
3694 -
      "funding": {
3695 -
        "url": "https://github.com/sponsors/sindresorhus"
3696 -
      }
3697 -
    },
3698 -
    "node_modules/cbor": {
3699 -
      "version": "10.0.11",
3700 -
      "resolved": "https://registry.npmjs.org/cbor/-/cbor-10.0.11.tgz",
3701 -
      "integrity": "sha512-vIwORDd/WyB8Nc23o2zNN5RrtFGlR6Fca61TtjkUXueI3Jf2DOZDl1zsshvBntZ3wZHBM9ztjnkXSmzQDaq3WA==",
3820 +
    "node_modules/chai": {
3821 +
      "version": "5.3.3",
3822 +
      "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
3823 +
      "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
3702 3824
      "dev": true,
3703 3825
      "license": "MIT",
3704 3826
      "dependencies": {
3705 -
        "nofilter": "^3.0.2"
3827 +
        "assertion-error": "^2.0.1",
3828 +
        "check-error": "^2.1.1",
3829 +
        "deep-eql": "^5.0.1",
3830 +
        "loupe": "^3.1.0",
3831 +
        "pathval": "^2.0.0"
3706 3832
      },
3707 3833
      "engines": {
3708 -
        "node": ">=20"
3834 +
        "node": ">=18"
3709 3835
      }
3710 3836
    },
3711 -
    "node_modules/chalk": {
3712 -
      "version": "5.6.2",
3713 -
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
3714 -
      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
3837 +
    "node_modules/check-error": {
3838 +
      "version": "2.1.3",
3839 +
      "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
3840 +
      "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
3715 3841
      "dev": true,
3716 3842
      "license": "MIT",
3717 3843
      "engines": {
3718 -
        "node": "^12.17.0 || ^14.13 || >=16.0.0"
3719 -
      },
3720 -
      "funding": {
3721 -
        "url": "https://github.com/chalk/chalk?sponsor=1"
3844 +
        "node": ">= 16"
3722 3845
      }
3723 3846
    },
3724 3847
    "node_modules/chevrotain": {
3725 3848
      "version": "10.5.0",
3726 3849
      "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-10.5.0.tgz",
▸ 29 unchanged lines
3756 3879
      "version": "1.1.4",
3757 3880
      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
3758 3881
      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
3759 3882
      "license": "ISC"
3760 3883
    },
3761 -
    "node_modules/chunkd": {
3762 -
      "version": "2.0.1",
3763 -
      "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz",
3764 -
      "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==",
3765 -
      "dev": true,
3766 -
      "license": "MIT"
3767 -
    },
3768 -
    "node_modules/ci-info": {
3769 -
      "version": "4.3.1",
3770 -
      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
3771 -
      "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
3772 -
      "dev": true,
3773 -
      "funding": [
3774 -
        {
3775 -
          "type": "github",
3776 -
          "url": "https://github.com/sponsors/sibiraj-s"
3777 -
        }
3778 -
      ],
3779 -
      "license": "MIT",
3780 -
      "engines": {
3781 -
        "node": ">=8"
3782 -
      }
3783 -
    },
3784 -
    "node_modules/ci-parallel-vars": {
3785 -
      "version": "1.0.1",
3786 -
      "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz",
3787 -
      "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==",
3788 -
      "dev": true,
3789 -
      "license": "MIT"
3790 -
    },
3791 3884
    "node_modules/citty": {
3792 3885
      "version": "0.1.6",
3793 3886
      "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
3794 3887
      "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
3795 3888
      "devOptional": true,
3796 3889
      "license": "MIT",
3797 3890
      "dependencies": {
3798 3891
        "consola": "^3.2.3"
3799 3892
      }
3800 3893
    },
3801 -
    "node_modules/cli-truncate": {
3802 -
      "version": "4.0.0",
3803 -
      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
3804 -
      "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
3805 -
      "dev": true,
3806 -
      "license": "MIT",
3807 -
      "dependencies": {
3808 -
        "slice-ansi": "^5.0.0",
3809 -
        "string-width": "^7.0.0"
3810 -
      },
3811 -
      "engines": {
3812 -
        "node": ">=18"
3813 -
      },
3814 -
      "funding": {
3815 -
        "url": "https://github.com/sponsors/sindresorhus"
3816 -
      }
3817 -
    },
3818 -
    "node_modules/cliui": {
3819 -
      "version": "8.0.1",
3820 -
      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
3821 -
      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
3822 -
      "dev": true,
3823 -
      "license": "ISC",
3824 -
      "dependencies": {
3825 -
        "string-width": "^4.2.0",
3826 -
        "strip-ansi": "^6.0.1",
3827 -
        "wrap-ansi": "^7.0.0"
3828 -
      },
3829 -
      "engines": {
3830 -
        "node": ">=12"
3831 -
      }
3832 -
    },
3833 -
    "node_modules/cliui/node_modules/ansi-regex": {
3834 -
      "version": "5.0.1",
3835 -
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
3836 -
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
3837 -
      "dev": true,
3838 -
      "license": "MIT",
3839 -
      "engines": {
3840 -
        "node": ">=8"
3841 -
      }
3842 -
    },
3843 -
    "node_modules/cliui/node_modules/ansi-styles": {
3844 -
      "version": "4.3.0",
3845 -
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
3846 -
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
3847 -
      "dev": true,
3848 -
      "license": "MIT",
3849 -
      "dependencies": {
3850 -
        "color-convert": "^2.0.1"
3851 -
      },
3852 -
      "engines": {
3853 -
        "node": ">=8"
3854 -
      },
3855 -
      "funding": {
3856 -
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
3857 -
      }
3858 -
    },
3859 -
    "node_modules/cliui/node_modules/emoji-regex": {
3860 -
      "version": "8.0.0",
3861 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3862 -
      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
3863 -
      "dev": true,
3864 -
      "license": "MIT"
3865 -
    },
3866 -
    "node_modules/cliui/node_modules/is-fullwidth-code-point": {
3867 -
      "version": "3.0.0",
3868 -
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
3869 -
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
3870 -
      "dev": true,
3871 -
      "license": "MIT",
3872 -
      "engines": {
3873 -
        "node": ">=8"
3874 -
      }
3875 -
    },
3876 -
    "node_modules/cliui/node_modules/string-width": {
3877 -
      "version": "4.2.3",
3878 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3879 -
      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3880 -
      "dev": true,
3881 -
      "license": "MIT",
3882 -
      "dependencies": {
3883 -
        "emoji-regex": "^8.0.0",
3884 -
        "is-fullwidth-code-point": "^3.0.0",
3885 -
        "strip-ansi": "^6.0.1"
3886 -
      },
3887 -
      "engines": {
3888 -
        "node": ">=8"
3889 -
      }
3890 -
    },
3891 -
    "node_modules/cliui/node_modules/strip-ansi": {
3892 -
      "version": "6.0.1",
3893 -
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3894 -
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3895 -
      "dev": true,
3896 -
      "license": "MIT",
3897 -
      "dependencies": {
3898 -
        "ansi-regex": "^5.0.1"
3899 -
      },
3900 -
      "engines": {
3901 -
        "node": ">=8"
3902 -
      }
3903 -
    },
3904 -
    "node_modules/cliui/node_modules/wrap-ansi": {
3905 -
      "version": "7.0.0",
3906 -
      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3907 -
      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3908 -
      "dev": true,
3909 -
      "license": "MIT",
3910 -
      "dependencies": {
3911 -
        "ansi-styles": "^4.0.0",
3912 -
        "string-width": "^4.1.0",
3913 -
        "strip-ansi": "^6.0.0"
3914 -
      },
3915 -
      "engines": {
3916 -
        "node": ">=10"
3917 -
      },
3918 -
      "funding": {
3919 -
        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3920 -
      }
3921 -
    },
3922 3894
    "node_modules/cluster-key-slot": {
3923 3895
      "version": "1.1.2",
3924 3896
      "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
3925 3897
      "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
3926 3898
      "license": "Apache-2.0",
3927 3899
      "engines": {
3928 3900
        "node": ">=0.10.0"
3929 3901
      }
3930 3902
    },
3931 -
    "node_modules/code-excerpt": {
3932 -
      "version": "4.0.0",
3933 -
      "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz",
3934 -
      "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==",
3935 -
      "dev": true,
3936 -
      "license": "MIT",
3937 -
      "dependencies": {
3938 -
        "convert-to-spaces": "^2.0.1"
3939 -
      },
3940 -
      "engines": {
3941 -
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
3942 -
      }
3943 -
    },
3944 -
    "node_modules/color-convert": {
3945 -
      "version": "2.0.1",
3946 -
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
3947 -
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
3948 -
      "dev": true,
3949 -
      "license": "MIT",
3950 -
      "dependencies": {
3951 -
        "color-name": "~1.1.4"
3952 -
      },
3953 -
      "engines": {
3954 -
        "node": ">=7.0.0"
3955 -
      }
3956 -
    },
3957 -
    "node_modules/color-name": {
3958 -
      "version": "1.1.4",
3959 -
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3960 -
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
3961 -
      "dev": true,
3962 -
      "license": "MIT"
3963 -
    },
3964 3903
    "node_modules/colorette": {
3965 3904
      "version": "2.0.20",
3966 3905
      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
3967 3906
      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
3968 3907
      "dev": true,
▸ 20 unchanged lines
3989 3928
      "license": "MIT",
3990 3929
      "engines": {
3991 3930
        "node": "^12.20.0 || >=14"
3992 3931
      }
3993 3932
    },
3994 -
    "node_modules/common-path-prefix": {
3995 -
      "version": "3.0.0",
3996 -
      "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
3997 -
      "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
3998 -
      "dev": true,
3999 -
      "license": "ISC"
4000 -
    },
4001 3933
    "node_modules/component-emitter": {
4002 3934
      "version": "1.3.1",
4003 3935
      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
4004 3936
      "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
4005 3937
      "dev": true,
▸ 22 unchanged lines
4028 3960
        "inherits": "^2.0.3",
4029 3961
        "readable-stream": "^3.0.2",
4030 3962
        "typedarray": "^0.0.6"
4031 3963
      }
4032 3964
    },
4033 -
    "node_modules/concordance": {
4034 -
      "version": "5.0.4",
4035 -
      "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz",
4036 -
      "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==",
4037 -
      "dev": true,
4038 -
      "license": "ISC",
4039 -
      "dependencies": {
4040 -
        "date-time": "^3.1.0",
4041 -
        "esutils": "^2.0.3",
4042 -
        "fast-diff": "^1.2.0",
4043 -
        "js-string-escape": "^1.0.1",
4044 -
        "lodash": "^4.17.15",
4045 -
        "md5-hex": "^3.0.1",
4046 -
        "semver": "^7.3.2",
4047 -
        "well-known-symbols": "^2.0.0"
4048 -
      },
4049 -
      "engines": {
4050 -
        "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14"
4051 -
      }
4052 -
    },
4053 3965
    "node_modules/confbox": {
4054 3966
      "version": "0.2.4",
4055 3967
      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz",
4056 3968
      "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==",
4057 3969
      "devOptional": true,
▸ 36 unchanged lines
4094 4006
      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
4095 4007
      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
4096 4008
      "dev": true,
4097 4009
      "license": "MIT"
4098 4010
    },
4099 -
    "node_modules/convert-to-spaces": {
4100 -
      "version": "2.0.1",
4101 -
      "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz",
4102 -
      "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==",
4103 -
      "dev": true,
4104 -
      "license": "MIT",
4105 -
      "engines": {
4106 -
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
4107 -
      }
4108 -
    },
4109 4011
    "node_modules/cookie": {
4110 4012
      "version": "0.7.2",
4111 4013
      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
4112 4014
      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
4113 4015
      "license": "MIT",
▸ 41 unchanged lines
4155 4057
      "funding": {
4156 4058
        "type": "opencollective",
4157 4059
        "url": "https://opencollective.com/express"
4158 4060
      }
4159 4061
    },
4160 -
    "node_modules/create-require": {
4161 -
      "version": "1.1.1",
4162 -
      "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
4163 -
      "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
4164 -
      "dev": true,
4165 -
      "license": "MIT"
4166 -
    },
4167 4062
    "node_modules/cron-parser": {
4168 4063
      "version": "4.9.0",
4169 4064
      "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz",
4170 4065
      "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
4171 4066
      "license": "MIT",
▸ 108 unchanged lines
4280 4175
      "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
4281 4176
      "devOptional": true,
4282 4177
      "license": "MIT",
4283 4178
      "peer": true
4284 4179
    },
4285 -
    "node_modules/currently-unhandled": {
4286 -
      "version": "0.4.1",
4287 -
      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
4288 -
      "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
4289 -
      "dev": true,
4290 -
      "license": "MIT",
4291 -
      "dependencies": {
4292 -
        "array-find-index": "^1.0.1"
4293 -
      },
4294 -
      "engines": {
4295 -
        "node": ">=0.10.0"
4296 -
      }
4297 -
    },
4298 4180
    "node_modules/date-fns": {
4299 4181
      "version": "4.1.0",
4300 4182
      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
4301 4183
      "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
4302 4184
      "license": "MIT",
4303 4185
      "funding": {
4304 4186
        "type": "github",
4305 4187
        "url": "https://github.com/sponsors/kossnocorp"
4306 4188
      }
4307 4189
    },
4308 -
    "node_modules/date-time": {
4309 -
      "version": "3.1.0",
4310 -
      "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz",
4311 -
      "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==",
4312 -
      "dev": true,
4313 -
      "license": "MIT",
4314 -
      "dependencies": {
4315 -
        "time-zone": "^1.0.0"
4316 -
      },
4317 -
      "engines": {
4318 -
        "node": ">=6"
4319 -
      }
4320 -
    },
4321 4190
    "node_modules/dateformat": {
4322 4191
      "version": "4.6.3",
4323 4192
      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
4324 4193
      "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
4325 4194
      "dev": true,
▸ 30 unchanged lines
4356 4225
      "engines": {
4357 4226
        "node": ">=10"
4358 4227
      },
4359 4228
      "funding": {
4360 4229
        "url": "https://github.com/sponsors/sindresorhus"
4230 +
      }
4231 +
    },
4232 +
    "node_modules/deep-eql": {
4233 +
      "version": "5.0.2",
4234 +
      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
4235 +
      "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
4236 +
      "dev": true,
4237 +
      "license": "MIT",
4238 +
      "engines": {
4239 +
        "node": ">=6"
4361 4240
      }
4362 4241
    },
4363 4242
    "node_modules/deep-extend": {
4364 4243
      "version": "0.6.0",
4365 4244
      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
▸ 86 unchanged lines
4452 4331
      "dependencies": {
4453 4332
        "asap": "^2.0.0",
4454 4333
        "wrappy": "1"
4455 4334
      }
4456 4335
    },
4457 -
    "node_modules/diff": {
4458 -
      "version": "4.0.4",
4459 -
      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz",
4460 -
      "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==",
4461 -
      "dev": true,
4462 -
      "license": "BSD-3-Clause",
4463 -
      "engines": {
4464 -
        "node": ">=0.3.1"
4465 -
      }
4466 -
    },
4467 4336
    "node_modules/dir-glob": {
4468 4337
      "version": "3.0.1",
4469 4338
      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
4470 4339
      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
4471 4340
      "dev": true,
▸ 85 unchanged lines
4557 4426
      },
4558 4427
      "engines": {
4559 4428
        "node": ">= 0.4"
4560 4429
      }
4561 4430
    },
4562 -
    "node_modules/eastasianwidth": {
4563 -
      "version": "0.2.0",
4564 -
      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
4565 -
      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
4566 -
      "dev": true,
4567 -
      "license": "MIT"
4568 -
    },
4569 4431
    "node_modules/ecdsa-sig-formatter": {
4570 4432
      "version": "1.0.11",
4571 4433
      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
4572 4434
      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
4573 4435
      "license": "Apache-2.0",
▸ 16 unchanged lines
4590 4452
      "dependencies": {
4591 4453
        "@standard-schema/spec": "^1.0.0",
4592 4454
        "fast-check": "^3.23.1"
4593 4455
      }
4594 4456
    },
4595 -
    "node_modules/emittery": {
4596 -
      "version": "1.2.0",
4597 -
      "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.2.0.tgz",
4598 -
      "integrity": "sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==",
4599 -
      "dev": true,
4600 -
      "license": "MIT",
4601 -
      "engines": {
4602 -
        "node": ">=14.16"
4603 -
      },
4604 -
      "funding": {
4605 -
        "url": "https://github.com/sindresorhus/emittery?sponsor=1"
4606 -
      }
4607 -
    },
4608 -
    "node_modules/emoji-regex": {
4609 -
      "version": "10.6.0",
4610 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
4611 -
      "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
4612 -
      "dev": true,
4613 -
      "license": "MIT"
4614 -
    },
4615 4457
    "node_modules/empathic": {
4616 4458
      "version": "2.0.0",
4617 4459
      "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz",
4618 4460
      "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==",
4619 4461
      "devOptional": true,
▸ 35 unchanged lines
4655 4497
      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
4656 4498
      "license": "MIT",
4657 4499
      "engines": {
4658 4500
        "node": ">= 0.4"
4659 4501
      }
4502 +
    },
4503 +
    "node_modules/es-module-lexer": {
4504 +
      "version": "1.7.0",
4505 +
      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
4506 +
      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
4507 +
      "dev": true,
4508 +
      "license": "MIT"
4660 4509
    },
4661 4510
    "node_modules/es-object-atoms": {
4662 4511
      "version": "1.1.1",
4663 4512
      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
4664 4513
      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
▸ 61 unchanged lines
4726 4575
        "@esbuild/win32-arm64": "0.27.7",
4727 4576
        "@esbuild/win32-ia32": "0.27.7",
4728 4577
        "@esbuild/win32-x64": "0.27.7"
4729 4578
      }
4730 4579
    },
4731 -
    "node_modules/escalade": {
4732 -
      "version": "3.2.0",
4733 -
      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
4734 -
      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
4735 -
      "dev": true,
4736 -
      "license": "MIT",
4737 -
      "engines": {
4738 -
        "node": ">=6"
4739 -
      }
4740 -
    },
4741 4580
    "node_modules/escape-html": {
4742 4581
      "version": "1.0.3",
4743 4582
      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
4744 4583
      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
4745 4584
      "license": "MIT"
4746 4585
    },
4747 -
    "node_modules/escape-string-regexp": {
4748 -
      "version": "5.0.0",
4749 -
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
4750 -
      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
4751 -
      "dev": true,
4752 -
      "license": "MIT",
4753 -
      "engines": {
4754 -
        "node": ">=12"
4755 -
      },
4756 -
      "funding": {
4757 -
        "url": "https://github.com/sponsors/sindresorhus"
4758 -
      }
4759 -
    },
4760 -
    "node_modules/esprima": {
4761 -
      "version": "4.0.1",
4762 -
      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
4763 -
      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
4764 -
      "dev": true,
4765 -
      "license": "BSD-2-Clause",
4766 -
      "bin": {
4767 -
        "esparse": "bin/esparse.js",
4768 -
        "esvalidate": "bin/esvalidate.js"
4769 -
      },
4770 -
      "engines": {
4771 -
        "node": ">=4"
4772 -
      }
4773 -
    },
4774 -
    "node_modules/estree-walker": {
4775 -
      "version": "2.0.2",
4776 -
      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
4777 -
      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
4778 -
      "dev": true,
4779 -
      "license": "MIT"
4780 -
    },
4781 4586
    "node_modules/esutils": {
4782 4587
      "version": "2.0.3",
4783 4588
      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
4784 4589
      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
4785 4590
      "dev": true,
▸ 18 unchanged lines
4804 4609
      "license": "MIT",
4805 4610
      "engines": {
4806 4611
        "node": ">=0.8.x"
4807 4612
      }
4808 4613
    },
4809 -
    "node_modules/execa": {
4810 -
      "version": "9.6.1",
4811 -
      "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz",
4812 -
      "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==",
4813 -
      "dev": true,
4814 -
      "license": "MIT",
4815 -
      "dependencies": {
4816 -
        "@sindresorhus/merge-streams": "^4.0.0",
4817 -
        "cross-spawn": "^7.0.6",
4818 -
        "figures": "^6.1.0",
4819 -
        "get-stream": "^9.0.0",
4820 -
        "human-signals": "^8.0.1",
4821 -
        "is-plain-obj": "^4.1.0",
4822 -
        "is-stream": "^4.0.1",
4823 -
        "npm-run-path": "^6.0.0",
4824 -
        "pretty-ms": "^9.2.0",
4825 -
        "signal-exit": "^4.1.0",
4826 -
        "strip-final-newline": "^4.0.0",
4827 -
        "yoctocolors": "^2.1.1"
4828 -
      },
4829 -
      "engines": {
4830 -
        "node": "^18.19.0 || >=20.5.0"
4831 -
      },
4832 -
      "funding": {
4833 -
        "url": "https://github.com/sindresorhus/execa?sponsor=1"
4834 -
      }
4835 -
    },
4836 -
    "node_modules/execa/node_modules/@sindresorhus/merge-streams": {
4837 -
      "version": "4.0.0",
4838 -
      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
4839 -
      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
4840 -
      "dev": true,
4841 -
      "license": "MIT",
4842 -
      "engines": {
4843 -
        "node": ">=18"
4844 -
      },
4845 -
      "funding": {
4846 -
        "url": "https://github.com/sponsors/sindresorhus"
4847 -
      }
4848 -
    },
4849 4614
    "node_modules/exit": {
4850 4615
      "version": "0.1.2",
4851 4616
      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
4852 4617
      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
4853 4618
      "dev": true,
▸ 8 unchanged lines
4862 4627
      "license": "(MIT OR WTFPL)",
4863 4628
      "engines": {
4864 4629
        "node": ">=6"
4865 4630
      }
4866 4631
    },
4632 +
    "node_modules/expect-type": {
4633 +
      "version": "1.4.0",
4634 +
      "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
4635 +
      "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
4636 +
      "dev": true,
4637 +
      "license": "Apache-2.0",
4638 +
      "engines": {
4639 +
        "node": ">=12.0.0"
4640 +
      }
4641 +
    },
4867 4642
    "node_modules/express": {
4868 4643
      "version": "5.2.1",
4869 4644
      "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
4870 4645
      "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
4871 4646
      "license": "MIT",
▸ 70 unchanged lines
4942 4717
      "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.3.tgz",
4943 4718
      "integrity": "sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw==",
4944 4719
      "dev": true,
4945 4720
      "license": "MIT"
4946 4721
    },
4947 -
    "node_modules/fast-diff": {
4948 -
      "version": "1.3.0",
4949 -
      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
4950 -
      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
4951 -
      "dev": true,
4952 -
      "license": "Apache-2.0"
4953 -
    },
4954 4722
    "node_modules/fast-glob": {
4955 4723
      "version": "3.3.3",
4956 4724
      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
4957 4725
      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
4958 4726
      "dev": true,
▸ 67 unchanged lines
5026 4794
      "license": "ISC",
5027 4795
      "dependencies": {
5028 4796
        "reusify": "^1.0.4"
5029 4797
      }
5030 4798
    },
5031 -
    "node_modules/figures": {
5032 -
      "version": "6.1.0",
5033 -
      "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
5034 -
      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
4799 +
    "node_modules/fdir": {
4800 +
      "version": "6.5.0",
4801 +
      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
4802 +
      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
5035 4803
      "dev": true,
5036 4804
      "license": "MIT",
5037 -
      "dependencies": {
5038 -
        "is-unicode-supported": "^2.0.0"
4805 +
      "engines": {
4806 +
        "node": ">=12.0.0"
5039 4807
      },
5040 -
      "engines": {
5041 -
        "node": ">=18"
4808 +
      "peerDependencies": {
4809 +
        "picomatch": "^3 || ^4"
5042 4810
      },
5043 -
      "funding": {
5044 -
        "url": "https://github.com/sponsors/sindresorhus"
4811 +
      "peerDependenciesMeta": {
4812 +
        "picomatch": {
4813 +
          "optional": true
4814 +
        }
5045 4815
      }
5046 4816
    },
5047 4817
    "node_modules/file-type": {
5048 4818
      "version": "3.9.0",
5049 4819
      "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
▸ 39 unchanged lines
5089 4859
        "node": ">= 18.0.0"
5090 4860
      },
5091 4861
      "funding": {
5092 4862
        "type": "opencollective",
5093 4863
        "url": "https://opencollective.com/express"
5094 -
      }
5095 -
    },
5096 -
    "node_modules/find-up-simple": {
5097 -
      "version": "1.0.1",
5098 -
      "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
5099 -
      "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
5100 -
      "dev": true,
5101 -
      "license": "MIT",
5102 -
      "engines": {
5103 -
        "node": ">=18"
5104 -
      },
5105 -
      "funding": {
5106 -
        "url": "https://github.com/sponsors/sindresorhus"
5107 4864
      }
5108 4865
    },
5109 4866
    "node_modules/foreground-child": {
5110 4867
      "version": "3.3.1",
5111 4868
      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
▸ 134 unchanged lines
5246 5003
      "license": "ISC",
5247 5004
      "engines": {
5248 5005
        "node": "6.* || 8.* || >= 10.*"
5249 5006
      }
5250 5007
    },
5251 -
    "node_modules/get-east-asian-width": {
5252 -
      "version": "1.4.0",
5253 -
      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
5254 -
      "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
5255 -
      "dev": true,
5256 -
      "license": "MIT",
5257 -
      "engines": {
5258 -
        "node": ">=18"
5259 -
      },
5260 -
      "funding": {
5261 -
        "url": "https://github.com/sponsors/sindresorhus"
5262 -
      }
5263 -
    },
5264 5008
    "node_modules/get-intrinsic": {
5265 5009
      "version": "1.3.0",
5266 5010
      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
5267 5011
      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
5268 5012
      "license": "MIT",
▸ 34 unchanged lines
5303 5047
      },
5304 5048
      "engines": {
5305 5049
        "node": ">= 0.4"
5306 5050
      }
5307 5051
    },
5308 -
    "node_modules/get-stream": {
5309 -
      "version": "9.0.1",
5310 -
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
5311 -
      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
5312 -
      "dev": true,
5313 -
      "license": "MIT",
5314 -
      "dependencies": {
5315 -
        "@sec-ant/readable-stream": "^0.4.1",
5316 -
        "is-stream": "^4.0.1"
5317 -
      },
5318 -
      "engines": {
5319 -
        "node": ">=18"
5320 -
      },
5321 -
      "funding": {
5322 -
        "url": "https://github.com/sponsors/sindresorhus"
5323 -
      }
5324 -
    },
5325 5052
    "node_modules/get-tsconfig": {
5326 5053
      "version": "4.13.6",
5327 5054
      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
5328 5055
      "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
5329 5056
      "dev": true,
▸ 26 unchanged lines
5356 5083
    "node_modules/github-from-package": {
5357 5084
      "version": "0.0.0",
5358 5085
      "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
5359 5086
      "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
5360 5087
      "license": "MIT"
5361 -
    },
5362 -
    "node_modules/glob": {
5363 -
      "version": "10.5.0",
5364 -
      "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
5365 -
      "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
5366 -
      "dev": true,
5367 -
      "license": "ISC",
5368 -
      "dependencies": {
5369 -
        "foreground-child": "^3.1.0",
5370 -
        "jackspeak": "^3.1.2",
5371 -
        "minimatch": "^9.0.4",
5372 -
        "minipass": "^7.1.2",
5373 -
        "package-json-from-dist": "^1.0.0",
5374 -
        "path-scurry": "^1.11.1"
5375 -
      },
5376 -
      "bin": {
5377 -
        "glob": "dist/esm/bin.mjs"
5378 -
      },
5379 -
      "funding": {
5380 -
        "url": "https://github.com/sponsors/isaacs"
5381 -
      }
5382 5088
    },
5383 5089
    "node_modules/glob-parent": {
5384 5090
      "version": "5.1.2",
5385 5091
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
5386 5092
      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
▸ 14 unchanged lines
5401 5107
      "license": "MIT",
5402 5108
      "engines": {
5403 5109
        "node": ">=0.10.0"
5404 5110
      }
5405 5111
    },
5406 -
    "node_modules/globby": {
5407 -
      "version": "14.1.0",
5408 -
      "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
5409 -
      "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
5112 +
    "node_modules/globrex": {
5113 +
      "version": "0.1.2",
5114 +
      "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
5115 +
      "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
5410 5116
      "dev": true,
5411 -
      "license": "MIT",
5412 -
      "dependencies": {
5413 -
        "@sindresorhus/merge-streams": "^2.1.0",
5414 -
        "fast-glob": "^3.3.3",
5415 -
        "ignore": "^7.0.3",
5416 -
        "path-type": "^6.0.0",
5417 -
        "slash": "^5.1.0",
5418 -
        "unicorn-magic": "^0.3.0"
5419 -
      },
5420 -
      "engines": {
5421 -
        "node": ">=18"
5422 -
      },
5423 -
      "funding": {
5424 -
        "url": "https://github.com/sponsors/sindresorhus"
5425 -
      }
5117 +
      "license": "MIT"
5426 5118
    },
5427 5119
    "node_modules/gopd": {
5428 5120
      "version": "1.2.0",
5429 5121
      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
5430 5122
      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
▸ 160 unchanged lines
5591 5283
      "version": "2.3.0",
5592 5284
      "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz",
5593 5285
      "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==",
5594 5286
      "devOptional": true,
5595 5287
      "license": "MIT"
5596 -
    },
5597 -
    "node_modules/https-proxy-agent": {
5598 -
      "version": "7.0.6",
5599 -
      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
5600 -
      "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
5601 -
      "dev": true,
5602 -
      "license": "MIT",
5603 -
      "dependencies": {
5604 -
        "agent-base": "^7.1.2",
5605 -
        "debug": "4"
5606 -
      },
5607 -
      "engines": {
5608 -
        "node": ">= 14"
5609 -
      }
5610 -
    },
5611 -
    "node_modules/human-signals": {
5612 -
      "version": "8.0.1",
5613 -
      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
5614 -
      "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
5615 -
      "dev": true,
5616 -
      "license": "Apache-2.0",
5617 -
      "engines": {
5618 -
        "node": ">=18.18.0"
5619 -
      }
5620 5288
    },
5621 5289
    "node_modules/iconv-lite": {
5622 5290
      "version": "0.7.0",
5623 5291
      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
5624 5292
      "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
▸ 27 unchanged lines
5652 5320
          "url": "https://feross.org/support"
5653 5321
        }
5654 5322
      ],
5655 5323
      "license": "BSD-3-Clause"
5656 5324
    },
5657 -
    "node_modules/ignore": {
5658 -
      "version": "7.0.5",
5659 -
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
5660 -
      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
5661 -
      "dev": true,
5662 -
      "license": "MIT",
5663 -
      "engines": {
5664 -
        "node": ">= 4"
5665 -
      }
5666 -
    },
5667 -
    "node_modules/ignore-by-default": {
5668 -
      "version": "2.1.0",
5669 -
      "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz",
5670 -
      "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==",
5671 -
      "dev": true,
5672 -
      "license": "ISC",
5673 -
      "engines": {
5674 -
        "node": ">=10 <11 || >=12 <13 || >=14"
5675 -
      }
5676 -
    },
5677 -
    "node_modules/imurmurhash": {
5678 -
      "version": "0.1.4",
5679 -
      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
5680 -
      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
5681 -
      "dev": true,
5682 -
      "license": "MIT",
5683 -
      "engines": {
5684 -
        "node": ">=0.8.19"
5685 -
      }
5686 -
    },
5687 -
    "node_modules/indent-string": {
5688 -
      "version": "5.0.0",
5689 -
      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
5690 -
      "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
5691 -
      "dev": true,
5692 -
      "license": "MIT",
5693 -
      "engines": {
5694 -
        "node": ">=12"
5695 -
      },
5696 -
      "funding": {
5697 -
        "url": "https://github.com/sponsors/sindresorhus"
5698 -
      }
5699 -
    },
5700 5325
    "node_modules/inherits": {
5701 5326
      "version": "2.0.4",
5702 5327
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
5703 5328
      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
5704 5329
      "license": "ISC"
▸ 45 unchanged lines
5750 5375
      "license": "MIT",
5751 5376
      "engines": {
5752 5377
        "node": ">= 0.10"
5753 5378
      }
5754 5379
    },
5755 -
    "node_modules/irregular-plurals": {
5756 -
      "version": "3.5.0",
5757 -
      "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz",
5758 -
      "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==",
5759 -
      "dev": true,
5760 -
      "license": "MIT",
5761 -
      "engines": {
5762 -
        "node": ">=8"
5763 -
      }
5764 -
    },
5765 5380
    "node_modules/is-binary-path": {
5766 5381
      "version": "2.1.0",
5767 5382
      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
5768 5383
      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
5769 5384
      "dev": true,
▸ 26 unchanged lines
5796 5411
      },
5797 5412
      "funding": {
5798 5413
        "url": "https://github.com/sponsors/sindresorhus"
5799 5414
      }
5800 5415
    },
5801 -
    "node_modules/is-fullwidth-code-point": {
5802 -
      "version": "4.0.0",
5803 -
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
5804 -
      "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
5805 -
      "dev": true,
5806 -
      "license": "MIT",
5807 -
      "engines": {
5808 -
        "node": ">=12"
5809 -
      },
5810 -
      "funding": {
5811 -
        "url": "https://github.com/sponsors/sindresorhus"
5812 -
      }
5813 -
    },
5814 5416
    "node_modules/is-glob": {
5815 5417
      "version": "4.0.3",
5816 5418
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
5817 5419
      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
5818 5420
      "dev": true,
▸ 13 unchanged lines
5832 5434
      "license": "MIT",
5833 5435
      "engines": {
5834 5436
        "node": ">=0.12.0"
5835 5437
      }
5836 5438
    },
5837 -
    "node_modules/is-plain-obj": {
5838 -
      "version": "4.1.0",
5839 -
      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
5840 -
      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
5841 -
      "dev": true,
5842 -
      "license": "MIT",
5843 -
      "engines": {
5844 -
        "node": ">=12"
5845 -
      },
5846 -
      "funding": {
5847 -
        "url": "https://github.com/sponsors/sindresorhus"
5848 -
      }
5849 -
    },
5850 -
    "node_modules/is-plain-object": {
5851 -
      "version": "5.0.0",
5852 -
      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
5853 -
      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
5854 -
      "dev": true,
5855 -
      "license": "MIT",
5856 -
      "engines": {
5857 -
        "node": ">=0.10.0"
5858 -
      }
5859 -
    },
5860 5439
    "node_modules/is-promise": {
5861 5440
      "version": "4.0.0",
5862 5441
      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
5863 5442
      "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
5864 5443
      "license": "MIT"
▸ 3 unchanged lines
5868 5447
      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
5869 5448
      "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
5870 5449
      "devOptional": true,
5871 5450
      "license": "MIT"
5872 5451
    },
5873 -
    "node_modules/is-stream": {
5874 -
      "version": "4.0.1",
5875 -
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
5876 -
      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
5877 -
      "dev": true,
5878 -
      "license": "MIT",
5879 -
      "engines": {
5880 -
        "node": ">=18"
5881 -
      },
5882 -
      "funding": {
5883 -
        "url": "https://github.com/sponsors/sindresorhus"
5884 -
      }
5885 -
    },
5886 -
    "node_modules/is-unicode-supported": {
5887 -
      "version": "2.1.0",
5888 -
      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
5889 -
      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
5890 -
      "dev": true,
5891 -
      "license": "MIT",
5892 -
      "engines": {
5893 -
        "node": ">=18"
5894 -
      },
5895 -
      "funding": {
5896 -
        "url": "https://github.com/sponsors/sindresorhus"
5897 -
      }
5898 -
    },
5899 5452
    "node_modules/isexe": {
5900 5453
      "version": "2.0.0",
5901 5454
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5902 5455
      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
5903 5456
      "devOptional": true,
5904 5457
      "license": "ISC"
5905 5458
    },
5906 -
    "node_modules/jackspeak": {
5907 -
      "version": "3.4.3",
5908 -
      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
5909 -
      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
5910 -
      "dev": true,
5911 -
      "license": "BlueOak-1.0.0",
5912 -
      "dependencies": {
5913 -
        "@isaacs/cliui": "^8.0.2"
5914 -
      },
5915 -
      "funding": {
5916 -
        "url": "https://github.com/sponsors/isaacs"
5917 -
      },
5918 -
      "optionalDependencies": {
5919 -
        "@pkgjs/parseargs": "^0.11.0"
5920 -
      }
5921 -
    },
5922 5459
    "node_modules/jiti": {
5923 5460
      "version": "2.6.1",
5924 5461
      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
5925 5462
      "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
5926 5463
      "devOptional": true,
▸ 10 unchanged lines
5937 5474
      "license": "MIT",
5938 5475
      "engines": {
5939 5476
        "node": ">=10"
5940 5477
      }
5941 5478
    },
5942 -
    "node_modules/js-string-escape": {
5943 -
      "version": "1.0.1",
5944 -
      "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
5945 -
      "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==",
5946 -
      "dev": true,
5947 -
      "license": "MIT",
5948 -
      "engines": {
5949 -
        "node": ">= 0.8"
5950 -
      }
5951 -
    },
5952 5479
    "node_modules/js-tokens": {
5953 5480
      "version": "3.0.2",
5954 5481
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
5955 5482
      "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==",
5956 5483
      "dev": true,
5957 5484
      "license": "MIT"
5958 5485
    },
5959 -
    "node_modules/js-yaml": {
5960 -
      "version": "3.14.2",
5961 -
      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
5962 -
      "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
5963 -
      "dev": true,
5964 -
      "license": "MIT",
5965 -
      "dependencies": {
5966 -
        "argparse": "^1.0.7",
5967 -
        "esprima": "^4.0.0"
5968 -
      },
5969 -
      "bin": {
5970 -
        "js-yaml": "bin/js-yaml.js"
5971 -
      }
5972 -
    },
5973 5486
    "node_modules/jsesc": {
5974 5487
      "version": "1.3.0",
5975 5488
      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
5976 5489
      "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==",
5977 5490
      "dev": true,
5978 5491
      "license": "MIT",
5979 5492
      "bin": {
5980 5493
        "jsesc": "bin/jsesc"
5981 -
      }
5982 -
    },
5983 -
    "node_modules/json5": {
5984 -
      "version": "2.2.3",
5985 -
      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
5986 -
      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
5987 -
      "dev": true,
5988 -
      "license": "MIT",
5989 -
      "bin": {
5990 -
        "json5": "lib/cli.js"
5991 -
      },
5992 -
      "engines": {
5993 -
        "node": ">=6"
5994 5494
      }
5995 5495
    },
5996 5496
    "node_modules/jsonwebtoken": {
5997 5497
      "version": "9.0.3",
5998 5498
      "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
▸ 45 unchanged lines
6044 5544
      "license": "MIT",
6045 5545
      "engines": {
6046 5546
        "node": ">=10"
6047 5547
      }
6048 5548
    },
6049 -
    "node_modules/load-json-file": {
6050 -
      "version": "7.0.1",
6051 -
      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz",
6052 -
      "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==",
6053 -
      "dev": true,
6054 -
      "license": "MIT",
6055 -
      "engines": {
6056 -
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
6057 -
      },
6058 -
      "funding": {
6059 -
        "url": "https://github.com/sponsors/sindresorhus"
6060 -
      }
6061 -
    },
6062 5549
    "node_modules/lodash": {
6063 5550
      "version": "4.17.21",
6064 5551
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
6065 5552
      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
6066 5553
      "devOptional": true,
▸ 71 unchanged lines
6138 5625
      },
6139 5626
      "bin": {
6140 5627
        "loose-envify": "cli.js"
6141 5628
      }
6142 5629
    },
6143 -
    "node_modules/lru-cache": {
6144 -
      "version": "10.4.3",
6145 -
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
6146 -
      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
5630 +
    "node_modules/loupe": {
5631 +
      "version": "3.2.1",
5632 +
      "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
5633 +
      "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
6147 5634
      "dev": true,
6148 -
      "license": "ISC"
5635 +
      "license": "MIT"
6149 5636
    },
6150 5637
    "node_modules/lru.min": {
6151 5638
      "version": "1.1.4",
6152 5639
      "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz",
6153 5640
      "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==",
▸ 16 unchanged lines
6170 5657
      "license": "MIT",
6171 5658
      "engines": {
6172 5659
        "node": ">=12"
6173 5660
      }
6174 5661
    },
6175 -
    "node_modules/make-error": {
6176 -
      "version": "1.3.6",
6177 -
      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
6178 -
      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
6179 -
      "dev": true,
6180 -
      "license": "ISC"
6181 -
    },
6182 -
    "node_modules/matcher": {
6183 -
      "version": "5.0.0",
6184 -
      "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz",
6185 -
      "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==",
5662 +
    "node_modules/magic-string": {
5663 +
      "version": "0.30.21",
5664 +
      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
5665 +
      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
6186 5666
      "dev": true,
6187 5667
      "license": "MIT",
6188 5668
      "dependencies": {
6189 -
        "escape-string-regexp": "^5.0.0"
6190 -
      },
6191 -
      "engines": {
6192 -
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
6193 -
      },
6194 -
      "funding": {
6195 -
        "url": "https://github.com/sponsors/sindresorhus"
5669 +
        "@jridgewell/sourcemap-codec": "^1.5.5"
6196 5670
      }
6197 5671
    },
6198 5672
    "node_modules/math-intrinsics": {
6199 5673
      "version": "1.1.0",
6200 5674
      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
▸ 1 unchanged lines
6202 5676
      "license": "MIT",
6203 5677
      "engines": {
6204 5678
        "node": ">= 0.4"
6205 5679
      }
6206 5680
    },
6207 -
    "node_modules/md5-hex": {
6208 -
      "version": "3.0.1",
6209 -
      "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz",
6210 -
      "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==",
6211 -
      "dev": true,
6212 -
      "license": "MIT",
6213 -
      "dependencies": {
6214 -
        "blueimp-md5": "^2.10.0"
6215 -
      },
6216 -
      "engines": {
6217 -
        "node": ">=8"
6218 -
      }
6219 -
    },
6220 5681
    "node_modules/media-typer": {
6221 5682
      "version": "1.1.0",
6222 5683
      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
6223 5684
      "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
6224 5685
      "license": "MIT",
6225 5686
      "engines": {
6226 5687
        "node": ">= 0.8"
6227 -
      }
6228 -
    },
6229 -
    "node_modules/memoize": {
6230 -
      "version": "10.2.0",
6231 -
      "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.2.0.tgz",
6232 -
      "integrity": "sha512-DeC6b7QBrZsRs3Y02A6A7lQyzFbsQbqgjI6UW0GigGWV+u1s25TycMr0XHZE4cJce7rY/vyw2ctMQqfDkIhUEA==",
6233 -
      "dev": true,
6234 -
      "license": "MIT",
6235 -
      "dependencies": {
6236 -
        "mimic-function": "^5.0.1"
6237 -
      },
6238 -
      "engines": {
6239 -
        "node": ">=18"
6240 -
      },
6241 -
      "funding": {
6242 -
        "url": "https://github.com/sindresorhus/memoize?sponsor=1"
6243 5688
      }
6244 5689
    },
6245 5690
    "node_modules/merge-descriptors": {
6246 5691
      "version": "2.0.0",
6247 5692
      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
▸ 89 unchanged lines
6337 5782
      "funding": {
6338 5783
        "type": "opencollective",
6339 5784
        "url": "https://opencollective.com/express"
6340 5785
      }
6341 5786
    },
6342 -
    "node_modules/mimic-function": {
6343 -
      "version": "5.0.1",
6344 -
      "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
6345 -
      "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
6346 -
      "dev": true,
6347 -
      "license": "MIT",
6348 -
      "engines": {
6349 -
        "node": ">=18"
6350 -
      },
6351 -
      "funding": {
6352 -
        "url": "https://github.com/sponsors/sindresorhus"
6353 -
      }
6354 -
    },
6355 5787
    "node_modules/mimic-response": {
6356 5788
      "version": "3.1.0",
6357 5789
      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
6358 5790
      "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
6359 5791
      "license": "MIT",
▸ 2 unchanged lines
6362 5794
      },
6363 5795
      "funding": {
6364 5796
        "url": "https://github.com/sponsors/sindresorhus"
6365 5797
      }
6366 5798
    },
6367 -
    "node_modules/minimatch": {
6368 -
      "version": "9.0.5",
6369 -
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
6370 -
      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
6371 -
      "dev": true,
6372 -
      "license": "ISC",
6373 -
      "dependencies": {
6374 -
        "brace-expansion": "^2.0.1"
6375 -
      },
6376 -
      "engines": {
6377 -
        "node": ">=16 || 14 >=14.17"
6378 -
      },
6379 -
      "funding": {
6380 -
        "url": "https://github.com/sponsors/isaacs"
6381 -
      }
6382 -
    },
6383 5799
    "node_modules/minimist": {
6384 5800
      "version": "1.2.8",
6385 5801
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
6386 5802
      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
6387 5803
      "license": "MIT",
6388 5804
      "funding": {
6389 5805
        "url": "https://github.com/sponsors/ljharb"
6390 5806
      }
6391 5807
    },
6392 -
    "node_modules/minipass": {
6393 -
      "version": "7.1.2",
6394 -
      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
6395 -
      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
6396 -
      "dev": true,
6397 -
      "license": "ISC",
6398 -
      "engines": {
6399 -
        "node": ">=16 || 14 >=14.17"
6400 -
      }
6401 -
    },
6402 -
    "node_modules/minizlib": {
6403 -
      "version": "3.1.0",
6404 -
      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
6405 -
      "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
6406 -
      "dev": true,
6407 -
      "license": "MIT",
6408 -
      "dependencies": {
6409 -
        "minipass": "^7.1.2"
6410 -
      },
6411 -
      "engines": {
6412 -
        "node": ">= 18"
6413 -
      }
6414 -
    },
6415 5808
    "node_modules/mkdirp": {
6416 5809
      "version": "0.5.6",
6417 5810
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
6418 5811
      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
6419 5812
      "dev": true,
▸ 217 unchanged lines
6637 6030
      },
6638 6031
      "engines": {
6639 6032
        "node": ">=8.0.0"
6640 6033
      }
6641 6034
    },
6035 +
    "node_modules/nanoid": {
6036 +
      "version": "3.3.15",
6037 +
      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
6038 +
      "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
6039 +
      "dev": true,
6040 +
      "funding": [
6041 +
        {
6042 +
          "type": "github",
6043 +
          "url": "https://github.com/sponsors/ai"
6044 +
        }
6045 +
      ],
6046 +
      "license": "MIT",
6047 +
      "bin": {
6048 +
        "nanoid": "bin/nanoid.cjs"
6049 +
      },
6050 +
      "engines": {
6051 +
        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
6052 +
      }
6053 +
    },
6642 6054
    "node_modules/napi-build-utils": {
6643 6055
      "version": "2.0.0",
6644 6056
      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
6645 6057
      "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
6646 6058
      "license": "MIT"
▸ 23 unchanged lines
6670 6082
      "version": "3.1.1",
6671 6083
      "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
6672 6084
      "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
6673 6085
      "license": "MIT"
6674 6086
    },
6675 -
    "node_modules/node-fetch": {
6676 -
      "version": "2.7.0",
6677 -
      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
6678 -
      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
6679 -
      "dev": true,
6680 -
      "license": "MIT",
6681 -
      "dependencies": {
6682 -
        "whatwg-url": "^5.0.0"
6683 -
      },
6684 -
      "engines": {
6685 -
        "node": "4.x || >=6.0.0"
6686 -
      },
6687 -
      "peerDependencies": {
6688 -
        "encoding": "^0.1.0"
6689 -
      },
6690 -
      "peerDependenciesMeta": {
6691 -
        "encoding": {
6692 -
          "optional": true
6693 -
        }
6694 -
      }
6695 -
    },
6696 6087
    "node_modules/node-fetch-native": {
6697 6088
      "version": "1.6.7",
6698 6089
      "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
6699 6090
      "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
6700 6091
      "devOptional": true,
6701 6092
      "license": "MIT"
6702 6093
    },
6703 -
    "node_modules/node-gyp-build": {
6704 -
      "version": "4.8.4",
6705 -
      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
6706 -
      "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
6707 -
      "dev": true,
6708 -
      "license": "MIT",
6709 -
      "bin": {
6710 -
        "node-gyp-build": "bin.js",
6711 -
        "node-gyp-build-optional": "optional.js",
6712 -
        "node-gyp-build-test": "build-test.js"
6713 -
      }
6714 -
    },
6715 6094
    "node_modules/node-gyp-build-optional-packages": {
6716 6095
      "version": "5.2.2",
6717 6096
      "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz",
6718 6097
      "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==",
6719 6098
      "license": "MIT",
▸ 144 unchanged lines
6864 6243
      },
6865 6244
      "engines": {
6866 6245
        "node": ">=4"
6867 6246
      }
6868 6247
    },
6869 -
    "node_modules/nofilter": {
6870 -
      "version": "3.1.0",
6871 -
      "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz",
6872 -
      "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==",
6873 -
      "dev": true,
6874 -
      "license": "MIT",
6875 -
      "engines": {
6876 -
        "node": ">=12.19"
6877 -
      }
6878 -
    },
6879 -
    "node_modules/nopt": {
6880 -
      "version": "8.1.0",
6881 -
      "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz",
6882 -
      "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==",
6883 -
      "dev": true,
6884 -
      "license": "ISC",
6885 -
      "dependencies": {
6886 -
        "abbrev": "^3.0.0"
6887 -
      },
6888 -
      "bin": {
6889 -
        "nopt": "bin/nopt.js"
6890 -
      },
6891 -
      "engines": {
6892 -
        "node": "^18.17.0 || >=20.5.0"
6893 -
      }
6894 -
    },
6895 6248
    "node_modules/normalize-path": {
6896 6249
      "version": "3.0.0",
6897 6250
      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
6898 6251
      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
6899 6252
      "dev": true,
6900 6253
      "license": "MIT",
6901 6254
      "engines": {
6902 6255
        "node": ">=0.10.0"
6903 6256
      }
6904 6257
    },
6905 -
    "node_modules/npm-run-path": {
6906 -
      "version": "6.0.0",
6907 -
      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
6908 -
      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
6909 -
      "dev": true,
6910 -
      "license": "MIT",
6911 -
      "dependencies": {
6912 -
        "path-key": "^4.0.0",
6913 -
        "unicorn-magic": "^0.3.0"
6914 -
      },
6915 -
      "engines": {
6916 -
        "node": ">=18"
6917 -
      },
6918 -
      "funding": {
6919 -
        "url": "https://github.com/sponsors/sindresorhus"
6920 -
      }
6921 -
    },
6922 -
    "node_modules/npm-run-path/node_modules/path-key": {
6923 -
      "version": "4.0.0",
6924 -
      "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
6925 -
      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
6926 -
      "dev": true,
6927 -
      "license": "MIT",
6928 -
      "engines": {
6929 -
        "node": ">=12"
6930 -
      },
6931 -
      "funding": {
6932 -
        "url": "https://github.com/sponsors/sindresorhus"
6933 -
      }
6934 -
    },
6935 6258
    "node_modules/nypm": {
6936 6259
      "version": "0.6.5",
6937 6260
      "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz",
6938 6261
      "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==",
6939 6262
      "devOptional": true,
▸ 102 unchanged lines
7042 6365
      "license": "MIT",
7043 6366
      "engines": {
7044 6367
        "node": ">=0.10.0"
7045 6368
      }
7046 6369
    },
7047 -
    "node_modules/p-map": {
7048 -
      "version": "7.0.4",
7049 -
      "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz",
7050 -
      "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==",
7051 -
      "dev": true,
7052 -
      "license": "MIT",
7053 -
      "engines": {
7054 -
        "node": ">=18"
7055 -
      },
7056 -
      "funding": {
7057 -
        "url": "https://github.com/sponsors/sindresorhus"
7058 -
      }
7059 -
    },
7060 -
    "node_modules/package-config": {
7061 -
      "version": "5.0.0",
7062 -
      "resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz",
7063 -
      "integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==",
7064 -
      "dev": true,
7065 -
      "license": "MIT",
7066 -
      "dependencies": {
7067 -
        "find-up-simple": "^1.0.0",
7068 -
        "load-json-file": "^7.0.1"
7069 -
      },
7070 -
      "engines": {
7071 -
        "node": ">=18"
7072 -
      },
7073 -
      "funding": {
7074 -
        "url": "https://github.com/sponsors/sindresorhus"
7075 -
      }
7076 -
    },
7077 -
    "node_modules/package-json-from-dist": {
7078 -
      "version": "1.0.1",
7079 -
      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
7080 -
      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
7081 -
      "dev": true,
7082 -
      "license": "BlueOak-1.0.0"
7083 -
    },
7084 -
    "node_modules/parse-ms": {
7085 -
      "version": "4.0.0",
7086 -
      "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
7087 -
      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
7088 -
      "dev": true,
7089 -
      "license": "MIT",
7090 -
      "engines": {
7091 -
        "node": ">=18"
7092 -
      },
7093 -
      "funding": {
7094 -
        "url": "https://github.com/sponsors/sindresorhus"
7095 -
      }
7096 -
    },
7097 6370
    "node_modules/parseurl": {
7098 6371
      "version": "1.3.3",
7099 6372
      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
7100 6373
      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
7101 6374
      "license": "MIT",
▸ 34 unchanged lines
7136 6409
      "license": "MIT",
7137 6410
      "engines": {
7138 6411
        "node": ">=8"
7139 6412
      }
7140 6413
    },
7141 -
    "node_modules/path-scurry": {
7142 -
      "version": "1.11.1",
7143 -
      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
7144 -
      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
7145 -
      "dev": true,
7146 -
      "license": "BlueOak-1.0.0",
7147 -
      "dependencies": {
7148 -
        "lru-cache": "^10.2.0",
7149 -
        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
7150 -
      },
7151 -
      "engines": {
7152 -
        "node": ">=16 || 14 >=14.18"
7153 -
      },
7154 -
      "funding": {
7155 -
        "url": "https://github.com/sponsors/isaacs"
7156 -
      }
7157 -
    },
7158 6414
    "node_modules/path-to-regexp": {
7159 6415
      "version": "8.3.0",
7160 6416
      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
7161 6417
      "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
7162 6418
      "license": "MIT",
7163 6419
      "funding": {
7164 6420
        "type": "opencollective",
7165 6421
        "url": "https://opencollective.com/express"
7166 6422
      }
7167 6423
    },
7168 -
    "node_modules/path-type": {
7169 -
      "version": "6.0.0",
7170 -
      "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
7171 -
      "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
7172 -
      "dev": true,
7173 -
      "license": "MIT",
7174 -
      "engines": {
7175 -
        "node": ">=18"
7176 -
      },
7177 -
      "funding": {
7178 -
        "url": "https://github.com/sponsors/sindresorhus"
7179 -
      }
7180 -
    },
7181 6424
    "node_modules/pathe": {
7182 6425
      "version": "2.0.3",
7183 6426
      "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
7184 6427
      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
7185 6428
      "devOptional": true,
7186 6429
      "license": "MIT"
7187 6430
    },
6431 +
    "node_modules/pathval": {
6432 +
      "version": "2.0.1",
6433 +
      "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
6434 +
      "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
6435 +
      "dev": true,
6436 +
      "license": "MIT",
6437 +
      "engines": {
6438 +
        "node": ">= 14.16"
6439 +
      }
6440 +
    },
7188 6441
    "node_modules/perfect-debounce": {
7189 6442
      "version": "1.0.0",
7190 6443
      "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
7191 6444
      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
7192 6445
      "devOptional": true,
▸ 95 unchanged lines
7288 6541
      "license": "MIT",
7289 6542
      "dependencies": {
7290 6543
        "split2": "^4.1.0"
7291 6544
      }
7292 6545
    },
6546 +
    "node_modules/picocolors": {
6547 +
      "version": "1.1.1",
6548 +
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
6549 +
      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
6550 +
      "dev": true,
6551 +
      "license": "ISC"
6552 +
    },
7293 6553
    "node_modules/picomatch": {
7294 -
      "version": "4.0.3",
7295 -
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
7296 -
      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
6554 +
      "version": "4.0.4",
6555 +
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
6556 +
      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
7297 6557
      "dev": true,
7298 6558
      "license": "MIT",
7299 6559
      "engines": {
7300 6560
        "node": ">=12"
7301 6561
      },
▸ 111 unchanged lines
7413 6673
      },
7414 6674
      "engines": {
7415 6675
        "node": ">=12"
7416 6676
      }
7417 6677
    },
7418 -
    "node_modules/plur": {
7419 -
      "version": "5.1.0",
7420 -
      "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz",
7421 -
      "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==",
6678 +
    "node_modules/postal-mime": {
6679 +
      "version": "2.7.4",
6680 +
      "resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.4.tgz",
6681 +
      "integrity": "sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==",
6682 +
      "license": "MIT-0"
6683 +
    },
6684 +
    "node_modules/postcss": {
6685 +
      "version": "8.5.16",
6686 +
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
6687 +
      "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==",
7422 6688
      "dev": true,
6689 +
      "funding": [
6690 +
        {
6691 +
          "type": "opencollective",
6692 +
          "url": "https://opencollective.com/postcss/"
6693 +
        },
6694 +
        {
6695 +
          "type": "tidelift",
6696 +
          "url": "https://tidelift.com/funding/github/npm/postcss"
6697 +
        },
6698 +
        {
6699 +
          "type": "github",
6700 +
          "url": "https://github.com/sponsors/ai"
6701 +
        }
6702 +
      ],
7423 6703
      "license": "MIT",
7424 6704
      "dependencies": {
7425 -
        "irregular-plurals": "^3.3.0"
6705 +
        "nanoid": "^3.3.12",
6706 +
        "picocolors": "^1.1.1",
6707 +
        "source-map-js": "^1.2.1"
7426 6708
      },
7427 6709
      "engines": {
7428 -
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
7429 -
      },
7430 -
      "funding": {
7431 -
        "url": "https://github.com/sponsors/sindresorhus"
6710 +
        "node": "^10 || ^12 || >=14"
7432 6711
      }
7433 -
    },
7434 -
    "node_modules/postal-mime": {
7435 -
      "version": "2.7.4",
7436 -
      "resolved": "https://registry.npmjs.org/postal-mime/-/postal-mime-2.7.4.tgz",
7437 -
      "integrity": "sha512-0WdnFQYUrPGGTFu1uOqD2s7omwua8xaeYGdO6rb88oD5yJ/4pPHDA4sdWqfD8wQVfCny563n/HQS7zTFft+f/g==",
7438 -
      "license": "MIT-0"
7439 6712
    },
7440 6713
    "node_modules/postgres": {
7441 6714
      "version": "3.4.7",
7442 6715
      "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz",
7443 6716
      "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==",
▸ 68 unchanged lines
7512 6785
      "bin": {
7513 6786
        "prebuild-install": "bin.js"
7514 6787
      },
7515 6788
      "engines": {
7516 6789
        "node": ">=10"
7517 -
      }
7518 -
    },
7519 -
    "node_modules/pretty-ms": {
7520 -
      "version": "9.3.0",
7521 -
      "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz",
7522 -
      "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
7523 -
      "dev": true,
7524 -
      "license": "MIT",
7525 -
      "dependencies": {
7526 -
        "parse-ms": "^4.0.0"
7527 -
      },
7528 -
      "engines": {
7529 -
        "node": ">=18"
7530 -
      },
7531 -
      "funding": {
7532 -
        "url": "https://github.com/sponsors/sindresorhus"
7533 6790
      }
7534 6791
    },
7535 6792
    "node_modules/prisma": {
7536 6793
      "version": "7.5.0",
7537 6794
      "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.5.0.tgz",
▸ 406 unchanged lines
7944 7201
      },
7945 7202
      "engines": {
7946 7203
        "node": ">=0.10.0"
7947 7204
      }
7948 7205
    },
7949 -
    "node_modules/require-directory": {
7950 -
      "version": "2.1.1",
7951 -
      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
7952 -
      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
7953 -
      "dev": true,
7954 -
      "license": "MIT",
7955 -
      "engines": {
7956 -
        "node": ">=0.10.0"
7957 -
      }
7958 -
    },
7959 7206
    "node_modules/resend": {
7960 7207
      "version": "6.12.3",
7961 7208
      "resolved": "https://registry.npmjs.org/resend/-/resend-6.12.3.tgz",
7962 7209
      "integrity": "sha512-FkEi6YPnVL96/LvH8+QP7NaeaBy5brYXwlRqUCqZZeNL0/iyKij18IPmyPXYauT/2ODn1JG04qKz+qlJfzqzTw==",
7963 7210
      "license": "MIT",
▸ 11 unchanged lines
7975 7222
        "@react-email/render": {
7976 7223
          "optional": true
7977 7224
        }
7978 7225
      }
7979 7226
    },
7980 -
    "node_modules/resolve-cwd": {
7981 -
      "version": "3.0.0",
7982 -
      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
7983 -
      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
7984 -
      "dev": true,
7985 -
      "license": "MIT",
7986 -
      "dependencies": {
7987 -
        "resolve-from": "^5.0.0"
7988 -
      },
7989 -
      "engines": {
7990 -
        "node": ">=8"
7991 -
      }
7992 -
    },
7993 -
    "node_modules/resolve-from": {
7994 -
      "version": "5.0.0",
7995 -
      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
7996 -
      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
7997 -
      "dev": true,
7998 -
      "license": "MIT",
7999 -
      "engines": {
8000 -
        "node": ">=8"
8001 -
      }
8002 -
    },
8003 7227
    "node_modules/resolve-pkg-maps": {
8004 7228
      "version": "1.0.0",
8005 7229
      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
8006 7230
      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
8007 7231
      "dev": true,
▸ 21 unchanged lines
8029 7253
      "engines": {
8030 7254
        "iojs": ">=1.0.0",
8031 7255
        "node": ">=0.10.0"
8032 7256
      }
8033 7257
    },
7258 +
    "node_modules/rollup": {
7259 +
      "version": "4.62.2",
7260 +
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz",
7261 +
      "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==",
7262 +
      "dev": true,
7263 +
      "license": "MIT",
7264 +
      "dependencies": {
7265 +
        "@types/estree": "1.0.9"
7266 +
      },
7267 +
      "bin": {
7268 +
        "rollup": "dist/bin/rollup"
7269 +
      },
7270 +
      "engines": {
7271 +
        "node": ">=18.0.0",
7272 +
        "npm": ">=8.0.0"
7273 +
      },
7274 +
      "optionalDependencies": {
7275 +
        "@rollup/rollup-android-arm-eabi": "4.62.2",
7276 +
        "@rollup/rollup-android-arm64": "4.62.2",
7277 +
        "@rollup/rollup-darwin-arm64": "4.62.2",
7278 +
        "@rollup/rollup-darwin-x64": "4.62.2",
7279 +
        "@rollup/rollup-freebsd-arm64": "4.62.2",
7280 +
        "@rollup/rollup-freebsd-x64": "4.62.2",
7281 +
        "@rollup/rollup-linux-arm-gnueabihf": "4.62.2",
7282 +
        "@rollup/rollup-linux-arm-musleabihf": "4.62.2",
7283 +
        "@rollup/rollup-linux-arm64-gnu": "4.62.2",
7284 +
        "@rollup/rollup-linux-arm64-musl": "4.62.2",
7285 +
        "@rollup/rollup-linux-loong64-gnu": "4.62.2",
7286 +
        "@rollup/rollup-linux-loong64-musl": "4.62.2",
7287 +
        "@rollup/rollup-linux-ppc64-gnu": "4.62.2",
7288 +
        "@rollup/rollup-linux-ppc64-musl": "4.62.2",
7289 +
        "@rollup/rollup-linux-riscv64-gnu": "4.62.2",
7290 +
        "@rollup/rollup-linux-riscv64-musl": "4.62.2",
7291 +
        "@rollup/rollup-linux-s390x-gnu": "4.62.2",
7292 +
        "@rollup/rollup-linux-x64-gnu": "4.62.2",
7293 +
        "@rollup/rollup-linux-x64-musl": "4.62.2",
7294 +
        "@rollup/rollup-openbsd-x64": "4.62.2",
7295 +
        "@rollup/rollup-openharmony-arm64": "4.62.2",
7296 +
        "@rollup/rollup-win32-arm64-msvc": "4.62.2",
7297 +
        "@rollup/rollup-win32-ia32-msvc": "4.62.2",
7298 +
        "@rollup/rollup-win32-x64-gnu": "4.62.2",
7299 +
        "@rollup/rollup-win32-x64-msvc": "4.62.2",
7300 +
        "fsevents": "~2.3.2"
7301 +
      }
7302 +
    },
8034 7303
    "node_modules/router": {
8035 7304
      "version": "2.2.0",
8036 7305
      "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
8037 7306
      "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
8038 7307
      "license": "MIT",
▸ 129 unchanged lines
8168 7437
      "version": "0.0.5",
8169 7438
      "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
8170 7439
      "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==",
8171 7440
      "devOptional": true
8172 7441
    },
8173 -
    "node_modules/serialize-error": {
8174 -
      "version": "7.0.1",
8175 -
      "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
8176 -
      "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
8177 -
      "dev": true,
8178 -
      "license": "MIT",
8179 -
      "dependencies": {
8180 -
        "type-fest": "^0.13.1"
8181 -
      },
8182 -
      "engines": {
8183 -
        "node": ">=10"
8184 -
      },
8185 -
      "funding": {
8186 -
        "url": "https://github.com/sponsors/sindresorhus"
8187 -
      }
8188 -
    },
8189 7442
    "node_modules/serve-static": {
8190 7443
      "version": "2.2.0",
8191 7444
      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
8192 7445
      "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
8193 7446
      "license": "MIT",
▸ 106 unchanged lines
8300 7553
      },
8301 7554
      "funding": {
8302 7555
        "url": "https://github.com/sponsors/ljharb"
8303 7556
      }
8304 7557
    },
7558 +
    "node_modules/siginfo": {
7559 +
      "version": "2.0.0",
7560 +
      "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
7561 +
      "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
7562 +
      "dev": true,
7563 +
      "license": "ISC"
7564 +
    },
8305 7565
    "node_modules/signal-exit": {
8306 7566
      "version": "4.1.0",
8307 7567
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
8308 7568
      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
8309 7569
      "devOptional": true,
▸ 61 unchanged lines
8371 7631
      },
8372 7632
      "engines": {
8373 7633
        "node": ">=10"
8374 7634
      }
8375 7635
    },
8376 -
    "node_modules/slash": {
8377 -
      "version": "5.1.0",
8378 -
      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
8379 -
      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
8380 -
      "dev": true,
8381 -
      "license": "MIT",
8382 -
      "engines": {
8383 -
        "node": ">=14.16"
8384 -
      },
8385 -
      "funding": {
8386 -
        "url": "https://github.com/sponsors/sindresorhus"
8387 -
      }
8388 -
    },
8389 -
    "node_modules/slice-ansi": {
8390 -
      "version": "5.0.0",
8391 -
      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
8392 -
      "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
8393 -
      "dev": true,
8394 -
      "license": "MIT",
8395 -
      "dependencies": {
8396 -
        "ansi-styles": "^6.0.0",
8397 -
        "is-fullwidth-code-point": "^4.0.0"
8398 -
      },
8399 -
      "engines": {
8400 -
        "node": ">=12"
8401 -
      },
8402 -
      "funding": {
8403 -
        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
8404 -
      }
8405 -
    },
8406 7636
    "node_modules/sonic-boom": {
8407 7637
      "version": "4.2.1",
8408 7638
      "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
8409 7639
      "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
8410 7640
      "license": "MIT",
▸ 9 unchanged lines
8420 7650
      "license": "BSD-3-Clause",
8421 7651
      "engines": {
8422 7652
        "node": ">=0.10.0"
8423 7653
      }
8424 7654
    },
7655 +
    "node_modules/source-map-js": {
7656 +
      "version": "1.2.1",
7657 +
      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
7658 +
      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
7659 +
      "dev": true,
7660 +
      "license": "BSD-3-Clause",
7661 +
      "engines": {
7662 +
        "node": ">=0.10.0"
7663 +
      }
7664 +
    },
8425 7665
    "node_modules/source-map-support": {
8426 7666
      "version": "0.4.18",
8427 7667
      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
8428 7668
      "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
8429 7669
      "dev": true,
▸ 9 unchanged lines
8439 7679
      "license": "ISC",
8440 7680
      "engines": {
8441 7681
        "node": ">= 10.x"
8442 7682
      }
8443 7683
    },
8444 -
    "node_modules/sprintf-js": {
8445 -
      "version": "1.0.3",
8446 -
      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
8447 -
      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
8448 -
      "dev": true,
8449 -
      "license": "BSD-3-Clause"
8450 -
    },
8451 7684
    "node_modules/sqlstring": {
8452 7685
      "version": "2.3.3",
8453 7686
      "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
8454 7687
      "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
8455 7688
      "devOptional": true,
8456 7689
      "license": "MIT",
8457 7690
      "engines": {
8458 7691
        "node": ">= 0.6"
8459 7692
      }
8460 7693
    },
8461 -
    "node_modules/stack-utils": {
8462 -
      "version": "2.0.6",
8463 -
      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
8464 -
      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
7694 +
    "node_modules/stackback": {
7695 +
      "version": "0.0.2",
7696 +
      "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
7697 +
      "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
8465 7698
      "dev": true,
8466 -
      "license": "MIT",
8467 -
      "dependencies": {
8468 -
        "escape-string-regexp": "^2.0.0"
8469 -
      },
8470 -
      "engines": {
8471 -
        "node": ">=10"
8472 -
      }
8473 -
    },
8474 -
    "node_modules/stack-utils/node_modules/escape-string-regexp": {
8475 -
      "version": "2.0.0",
8476 -
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
8477 -
      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
8478 -
      "dev": true,
8479 -
      "license": "MIT",
8480 -
      "engines": {
8481 -
        "node": ">=8"
8482 -
      }
7699 +
      "license": "MIT"
8483 7700
    },
8484 7701
    "node_modules/standard-as-callback": {
8485 7702
      "version": "2.1.0",
8486 7703
      "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
8487 7704
      "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==",
▸ 50 unchanged lines
8538 7755
      "license": "MIT",
8539 7756
      "dependencies": {
8540 7757
        "safe-buffer": "~5.2.0"
8541 7758
      }
8542 7759
    },
8543 -
    "node_modules/string-width": {
8544 -
      "version": "7.2.0",
8545 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
8546 -
      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
8547 -
      "dev": true,
7760 +
    "node_modules/strip-json-comments": {
7761 +
      "version": "2.0.1",
7762 +
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
7763 +
      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
8548 7764
      "license": "MIT",
8549 -
      "dependencies": {
8550 -
        "emoji-regex": "^10.3.0",
8551 -
        "get-east-asian-width": "^1.0.0",
8552 -
        "strip-ansi": "^7.1.0"
8553 -
      },
8554 7765
      "engines": {
8555 -
        "node": ">=18"
8556 -
      },
8557 -
      "funding": {
8558 -
        "url": "https://github.com/sponsors/sindresorhus"
7766 +
        "node": ">=0.10.0"
8559 7767
      }
8560 7768
    },
8561 -
    "node_modules/string-width-cjs": {
8562 -
      "name": "string-width",
8563 -
      "version": "4.2.3",
8564 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
8565 -
      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
7769 +
    "node_modules/strip-literal": {
7770 +
      "version": "3.1.0",
7771 +
      "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz",
7772 +
      "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==",
8566 7773
      "dev": true,
8567 7774
      "license": "MIT",
8568 7775
      "dependencies": {
8569 -
        "emoji-regex": "^8.0.0",
8570 -
        "is-fullwidth-code-point": "^3.0.0",
8571 -
        "strip-ansi": "^6.0.1"
7776 +
        "js-tokens": "^9.0.1"
8572 7777
      },
8573 -
      "engines": {
8574 -
        "node": ">=8"
7778 +
      "funding": {
7779 +
        "url": "https://github.com/sponsors/antfu"
8575 7780
      }
8576 7781
    },
8577 -
    "node_modules/string-width-cjs/node_modules/ansi-regex": {
8578 -
      "version": "5.0.1",
8579 -
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
8580 -
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
8581 -
      "dev": true,
8582 -
      "license": "MIT",
8583 -
      "engines": {
8584 -
        "node": ">=8"
8585 -
      }
8586 -
    },
8587 -
    "node_modules/string-width-cjs/node_modules/emoji-regex": {
8588 -
      "version": "8.0.0",
8589 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
8590 -
      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
7782 +
    "node_modules/strip-literal/node_modules/js-tokens": {
7783 +
      "version": "9.0.1",
7784 +
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
7785 +
      "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
8591 7786
      "dev": true,
8592 7787
      "license": "MIT"
8593 7788
    },
8594 -
    "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
8595 -
      "version": "3.0.0",
8596 -
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
8597 -
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
8598 -
      "dev": true,
8599 -
      "license": "MIT",
8600 -
      "engines": {
8601 -
        "node": ">=8"
8602 -
      }
8603 -
    },
8604 -
    "node_modules/string-width-cjs/node_modules/strip-ansi": {
8605 -
      "version": "6.0.1",
8606 -
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
8607 -
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
8608 -
      "dev": true,
8609 -
      "license": "MIT",
8610 -
      "dependencies": {
8611 -
        "ansi-regex": "^5.0.1"
8612 -
      },
8613 -
      "engines": {
8614 -
        "node": ">=8"
8615 -
      }
8616 -
    },
8617 -
    "node_modules/strip-ansi": {
8618 -
      "version": "7.1.2",
8619 -
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
8620 -
      "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
8621 -
      "dev": true,
8622 -
      "license": "MIT",
8623 -
      "dependencies": {
8624 -
        "ansi-regex": "^6.0.1"
8625 -
      },
8626 -
      "engines": {
8627 -
        "node": ">=12"
8628 -
      },
8629 -
      "funding": {
8630 -
        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
8631 -
      }
8632 -
    },
8633 -
    "node_modules/strip-ansi-cjs": {
8634 -
      "name": "strip-ansi",
8635 -
      "version": "6.0.1",
8636 -
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
8637 -
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
8638 -
      "dev": true,
8639 -
      "license": "MIT",
8640 -
      "dependencies": {
8641 -
        "ansi-regex": "^5.0.1"
8642 -
      },
8643 -
      "engines": {
8644 -
        "node": ">=8"
8645 -
      }
8646 -
    },
8647 -
    "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
8648 -
      "version": "5.0.1",
8649 -
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
8650 -
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
8651 -
      "dev": true,
8652 -
      "license": "MIT",
8653 -
      "engines": {
8654 -
        "node": ">=8"
8655 -
      }
8656 -
    },
8657 -
    "node_modules/strip-bom": {
8658 -
      "version": "3.0.0",
8659 -
      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
8660 -
      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
8661 -
      "dev": true,
8662 -
      "license": "MIT",
8663 -
      "engines": {
8664 -
        "node": ">=4"
8665 -
      }
8666 -
    },
8667 -
    "node_modules/strip-final-newline": {
8668 -
      "version": "4.0.0",
8669 -
      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
8670 -
      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
8671 -
      "dev": true,
8672 -
      "license": "MIT",
8673 -
      "engines": {
8674 -
        "node": ">=18"
8675 -
      },
8676 -
      "funding": {
8677 -
        "url": "https://github.com/sponsors/sindresorhus"
8678 -
      }
8679 -
    },
8680 -
    "node_modules/strip-json-comments": {
8681 -
      "version": "2.0.1",
8682 -
      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
8683 -
      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
8684 -
      "license": "MIT",
8685 -
      "engines": {
8686 -
        "node": ">=0.10.0"
8687 -
      }
8688 -
    },
8689 7789
    "node_modules/strnum": {
8690 7790
      "version": "2.3.0",
8691 7791
      "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz",
8692 7792
      "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==",
8693 7793
      "funding": [
▸ 21 unchanged lines
8715 7815
        "mime": "2.6.0",
8716 7816
        "qs": "^6.11.2"
8717 7817
      },
8718 7818
      "engines": {
8719 7819
        "node": ">=14.18.0"
8720 -
      }
8721 -
    },
8722 -
    "node_modules/supertap": {
8723 -
      "version": "3.0.1",
8724 -
      "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz",
8725 -
      "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==",
8726 -
      "dev": true,
8727 -
      "license": "MIT",
8728 -
      "dependencies": {
8729 -
        "indent-string": "^5.0.0",
8730 -
        "js-yaml": "^3.14.1",
8731 -
        "serialize-error": "^7.0.1",
8732 -
        "strip-ansi": "^7.0.1"
8733 -
      },
8734 -
      "engines": {
8735 -
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
8736 7820
      }
8737 7821
    },
8738 7822
    "node_modules/supertest": {
8739 7823
      "version": "7.1.4",
8740 7824
      "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.4.tgz",
▸ 25 unchanged lines
8766 7850
      "license": "MIT",
8767 7851
      "dependencies": {
8768 7852
        "standardwebhooks": "1.0.0"
8769 7853
      }
8770 7854
    },
8771 -
    "node_modules/tar": {
8772 -
      "version": "7.5.2",
8773 -
      "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz",
8774 -
      "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==",
8775 -
      "dev": true,
8776 -
      "license": "BlueOak-1.0.0",
8777 -
      "dependencies": {
8778 -
        "@isaacs/fs-minipass": "^4.0.0",
8779 -
        "chownr": "^3.0.0",
8780 -
        "minipass": "^7.1.2",
8781 -
        "minizlib": "^3.1.0",
8782 -
        "yallist": "^5.0.0"
8783 -
      },
8784 -
      "engines": {
8785 -
        "node": ">=18"
8786 -
      }
8787 -
    },
8788 7855
    "node_modules/tar-fs": {
8789 7856
      "version": "2.1.4",
8790 7857
      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz",
8791 7858
      "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==",
8792 7859
      "license": "MIT",
▸ 18 unchanged lines
8811 7878
      },
8812 7879
      "engines": {
8813 7880
        "node": ">=6"
8814 7881
      }
8815 7882
    },
8816 -
    "node_modules/tar/node_modules/chownr": {
8817 -
      "version": "3.0.0",
8818 -
      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
8819 -
      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
8820 -
      "dev": true,
8821 -
      "license": "BlueOak-1.0.0",
8822 -
      "engines": {
8823 -
        "node": ">=18"
8824 -
      }
8825 -
    },
8826 -
    "node_modules/temp-dir": {
8827 -
      "version": "3.0.0",
8828 -
      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz",
8829 -
      "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==",
8830 -
      "dev": true,
8831 -
      "license": "MIT",
8832 -
      "engines": {
8833 -
        "node": ">=14.16"
8834 -
      }
8835 -
    },
8836 7883
    "node_modules/thread-stream": {
8837 7884
      "version": "4.2.0",
8838 7885
      "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz",
8839 7886
      "integrity": "sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==",
8840 7887
      "license": "MIT",
▸ 8 unchanged lines
8849 7896
      "version": "1.0.0",
8850 7897
      "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz",
8851 7898
      "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==",
8852 7899
      "license": "MIT"
8853 7900
    },
8854 -
    "node_modules/time-zone": {
8855 -
      "version": "1.0.0",
8856 -
      "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
8857 -
      "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==",
7901 +
    "node_modules/tinybench": {
7902 +
      "version": "2.9.0",
7903 +
      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
7904 +
      "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
8858 7905
      "dev": true,
8859 -
      "license": "MIT",
8860 -
      "engines": {
8861 -
        "node": ">=4"
8862 -
      }
7906 +
      "license": "MIT"
8863 7907
    },
8864 7908
    "node_modules/tinyexec": {
8865 7909
      "version": "1.0.4",
8866 7910
      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz",
8867 7911
      "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==",
▸ 1 unchanged lines
8869 7913
      "license": "MIT",
8870 7914
      "engines": {
8871 7915
        "node": ">=18"
8872 7916
      }
8873 7917
    },
7918 +
    "node_modules/tinyglobby": {
7919 +
      "version": "0.2.17",
7920 +
      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
7921 +
      "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
7922 +
      "dev": true,
7923 +
      "license": "MIT",
7924 +
      "dependencies": {
7925 +
        "fdir": "^6.5.0",
7926 +
        "picomatch": "^4.0.4"
7927 +
      },
7928 +
      "engines": {
7929 +
        "node": ">=12.0.0"
7930 +
      },
7931 +
      "funding": {
7932 +
        "url": "https://github.com/sponsors/SuperchupuDev"
7933 +
      }
7934 +
    },
7935 +
    "node_modules/tinypool": {
7936 +
      "version": "1.1.1",
7937 +
      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
7938 +
      "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
7939 +
      "dev": true,
7940 +
      "license": "MIT",
7941 +
      "engines": {
7942 +
        "node": "^18.0.0 || >=20.0.0"
7943 +
      }
7944 +
    },
7945 +
    "node_modules/tinyrainbow": {
7946 +
      "version": "2.0.0",
7947 +
      "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
7948 +
      "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
7949 +
      "dev": true,
7950 +
      "license": "MIT",
7951 +
      "engines": {
7952 +
        "node": ">=14.0.0"
7953 +
      }
7954 +
    },
7955 +
    "node_modules/tinyspy": {
7956 +
      "version": "4.0.4",
7957 +
      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
7958 +
      "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
7959 +
      "dev": true,
7960 +
      "license": "MIT",
7961 +
      "engines": {
7962 +
        "node": ">=14.0.0"
7963 +
      }
7964 +
    },
8874 7965
    "node_modules/to-fast-properties": {
8875 7966
      "version": "1.0.3",
8876 7967
      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
8877 7968
      "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==",
8878 7969
      "dev": true,
▸ 32 unchanged lines
8911 8002
      "license": "ISC",
8912 8003
      "bin": {
8913 8004
        "nodetouch": "bin/nodetouch.js"
8914 8005
      }
8915 8006
    },
8916 -
    "node_modules/tr46": {
8917 -
      "version": "0.0.3",
8918 -
      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
8919 -
      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
8920 -
      "dev": true,
8921 -
      "license": "MIT"
8922 -
    },
8923 8007
    "node_modules/trim-right": {
8924 8008
      "version": "1.0.1",
8925 8009
      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
8926 8010
      "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==",
8927 8011
      "dev": true,
8928 8012
      "license": "MIT",
8929 8013
      "engines": {
8930 8014
        "node": ">=0.10.0"
8931 8015
      }
8932 8016
    },
8933 -
    "node_modules/ts-node": {
8934 -
      "version": "10.9.2",
8935 -
      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
8936 -
      "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
8937 -
      "dev": true,
8938 -
      "license": "MIT",
8939 -
      "dependencies": {
8940 -
        "@cspotcode/source-map-support": "^0.8.0",
8941 -
        "@tsconfig/node10": "^1.0.7",
8942 -
        "@tsconfig/node12": "^1.0.7",
8943 -
        "@tsconfig/node14": "^1.0.0",
8944 -
        "@tsconfig/node16": "^1.0.2",
8945 -
        "acorn": "^8.4.1",
8946 -
        "acorn-walk": "^8.1.1",
8947 -
        "arg": "^4.1.0",
8948 -
        "create-require": "^1.1.0",
8949 -
        "diff": "^4.0.1",
8950 -
        "make-error": "^1.1.1",
8951 -
        "v8-compile-cache-lib": "^3.0.1",
8952 -
        "yn": "3.1.1"
8953 -
      },
8954 -
      "bin": {
8955 -
        "ts-node": "dist/bin.js",
8956 -
        "ts-node-cwd": "dist/bin-cwd.js",
8957 -
        "ts-node-esm": "dist/bin-esm.js",
8958 -
        "ts-node-script": "dist/bin-script.js",
8959 -
        "ts-node-transpile-only": "dist/bin-transpile.js",
8960 -
        "ts-script": "dist/bin-script-deprecated.js"
8961 -
      },
8962 -
      "peerDependencies": {
8963 -
        "@swc/core": ">=1.2.50",
8964 -
        "@swc/wasm": ">=1.2.50",
8965 -
        "@types/node": "*",
8966 -
        "typescript": ">=2.7"
8967 -
      },
8968 -
      "peerDependenciesMeta": {
8969 -
        "@swc/core": {
8970 -
          "optional": true
8971 -
        },
8972 -
        "@swc/wasm": {
8973 -
          "optional": true
8974 -
        }
8975 -
      }
8976 -
    },
8977 8017
    "node_modules/tsc-alias": {
8978 8018
      "version": "1.8.16",
8979 8019
      "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.16.tgz",
8980 8020
      "integrity": "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==",
8981 8021
      "dev": true,
▸ 104 unchanged lines
9086 8126
      "license": "MIT",
9087 8127
      "engines": {
9088 8128
        "node": ">=8"
9089 8129
      }
9090 8130
    },
9091 -
    "node_modules/tsconfig-paths": {
9092 -
      "version": "4.2.0",
9093 -
      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
9094 -
      "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
9095 -
      "dev": true,
9096 -
      "license": "MIT",
9097 -
      "dependencies": {
9098 -
        "json5": "^2.2.2",
9099 -
        "minimist": "^1.2.6",
9100 -
        "strip-bom": "^3.0.0"
9101 -
      },
9102 -
      "engines": {
9103 -
        "node": ">=6"
9104 -
      }
9105 -
    },
9106 8131
    "node_modules/tslib": {
9107 8132
      "version": "2.8.1",
9108 8133
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
9109 8134
      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
9110 8135
      "license": "0BSD"
▸ 28 unchanged lines
9139 8164
      },
9140 8165
      "engines": {
9141 8166
        "node": "*"
9142 8167
      }
9143 8168
    },
9144 -
    "node_modules/type-fest": {
9145 -
      "version": "0.13.1",
9146 -
      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
9147 -
      "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
9148 -
      "dev": true,
9149 -
      "license": "(MIT OR CC0-1.0)",
9150 -
      "engines": {
9151 -
        "node": ">=10"
9152 -
      },
9153 -
      "funding": {
9154 -
        "url": "https://github.com/sponsors/sindresorhus"
9155 -
      }
9156 -
    },
9157 8169
    "node_modules/type-is": {
9158 8170
      "version": "2.0.1",
9159 8171
      "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
9160 8172
      "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
9161 8173
      "license": "MIT",
▸ 37 unchanged lines
9199 8211
      "version": "7.18.2",
9200 8212
      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
9201 8213
      "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
9202 8214
      "license": "MIT"
9203 8215
    },
9204 -
    "node_modules/unicorn-magic": {
9205 -
      "version": "0.3.0",
9206 -
      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
9207 -
      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
9208 -
      "dev": true,
9209 -
      "license": "MIT",
9210 -
      "engines": {
9211 -
        "node": ">=18"
9212 -
      },
9213 -
      "funding": {
9214 -
        "url": "https://github.com/sponsors/sindresorhus"
9215 -
      }
9216 -
    },
9217 8216
    "node_modules/unpipe": {
9218 8217
      "version": "1.0.0",
9219 8218
      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
9220 8219
      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
9221 8220
      "license": "MIT",
▸ 5 unchanged lines
9227 8226
      "version": "1.0.2",
9228 8227
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
9229 8228
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
9230 8229
      "license": "MIT"
9231 8230
    },
9232 -
    "node_modules/v8-compile-cache-lib": {
9233 -
      "version": "3.0.1",
9234 -
      "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
9235 -
      "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
9236 -
      "dev": true,
9237 -
      "license": "MIT"
9238 -
    },
9239 8231
    "node_modules/valibot": {
9240 8232
      "version": "1.2.0",
9241 8233
      "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz",
9242 8234
      "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==",
9243 8235
      "devOptional": true,
▸ 14 unchanged lines
9258 8250
      "license": "MIT",
9259 8251
      "engines": {
9260 8252
        "node": ">= 0.8"
9261 8253
      }
9262 8254
    },
9263 -
    "node_modules/webidl-conversions": {
9264 -
      "version": "3.0.1",
9265 -
      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
9266 -
      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
9267 -
      "dev": true,
9268 -
      "license": "BSD-2-Clause"
9269 -
    },
9270 -
    "node_modules/well-known-symbols": {
9271 -
      "version": "2.0.0",
9272 -
      "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz",
9273 -
      "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==",
9274 -
      "dev": true,
9275 -
      "license": "ISC",
9276 -
      "engines": {
9277 -
        "node": ">=6"
9278 -
      }
9279 -
    },
9280 -
    "node_modules/whatwg-url": {
9281 -
      "version": "5.0.0",
9282 -
      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
9283 -
      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
8255 +
    "node_modules/vite": {
8256 +
      "version": "7.3.6",
8257 +
      "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz",
8258 +
      "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==",
9284 8259
      "dev": true,
9285 8260
      "license": "MIT",
9286 8261
      "dependencies": {
9287 -
        "tr46": "~0.0.3",
9288 -
        "webidl-conversions": "^3.0.0"
9289 -
      }
9290 -
    },
9291 -
    "node_modules/which": {
9292 -
      "version": "2.0.2",
9293 -
      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
9294 -
      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
9295 -
      "devOptional": true,
9296 -
      "license": "ISC",
9297 -
      "dependencies": {
9298 -
        "isexe": "^2.0.0"
8262 +
        "esbuild": "^0.27.0 || ^0.28.0",
8263 +
        "fdir": "^6.5.0",
8264 +
        "picomatch": "^4.0.3",
8265 +
        "postcss": "^8.5.6",
8266 +
        "rollup": "^4.43.0",
8267 +
        "tinyglobby": "^0.2.15"
9299 8268
      },
9300 8269
      "bin": {
9301 -
        "node-which": "bin/node-which"
8270 +
        "vite": "bin/vite.js"
9302 8271
      },
9303 8272
      "engines": {
9304 -
        "node": ">= 8"
8273 +
        "node": "^20.19.0 || >=22.12.0"
8274 +
      },
8275 +
      "funding": {
8276 +
        "url": "https://github.com/vitejs/vite?sponsor=1"
8277 +
      },
8278 +
      "optionalDependencies": {
8279 +
        "fsevents": "~2.3.3"
8280 +
      },
8281 +
      "peerDependencies": {
8282 +
        "@types/node": "^20.19.0 || >=22.12.0",
8283 +
        "jiti": ">=1.21.0",
8284 +
        "less": "^4.0.0",
8285 +
        "lightningcss": "^1.21.0",
8286 +
        "sass": "^1.70.0",
8287 +
        "sass-embedded": "^1.70.0",
8288 +
        "stylus": ">=0.54.8",
8289 +
        "sugarss": "^5.0.0",
8290 +
        "terser": "^5.16.0",
8291 +
        "tsx": "^4.8.1",
8292 +
        "yaml": "^2.4.2"
8293 +
      },
8294 +
      "peerDependenciesMeta": {
8295 +
        "@types/node": {
8296 +
          "optional": true
8297 +
        },
8298 +
        "jiti": {
8299 +
          "optional": true
8300 +
        },
8301 +
        "less": {
8302 +
          "optional": true
8303 +
        },
8304 +
        "lightningcss": {
8305 +
          "optional": true
8306 +
        },
8307 +
        "sass": {
8308 +
          "optional": true
8309 +
        },
8310 +
        "sass-embedded": {
8311 +
          "optional": true
8312 +
        },
8313 +
        "stylus": {
8314 +
          "optional": true
8315 +
        },
8316 +
        "sugarss": {
8317 +
          "optional": true
8318 +
        },
8319 +
        "terser": {
8320 +
          "optional": true
8321 +
        },
8322 +
        "tsx": {
8323 +
          "optional": true
8324 +
        },
8325 +
        "yaml": {
8326 +
          "optional": true
8327 +
        }
9305 8328
      }
9306 8329
    },
9307 -
    "node_modules/wrap-ansi": {
9308 -
      "version": "8.1.0",
9309 -
      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
9310 -
      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
8330 +
    "node_modules/vite-node": {
8331 +
      "version": "3.2.4",
8332 +
      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
8333 +
      "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
9311 8334
      "dev": true,
9312 8335
      "license": "MIT",
9313 8336
      "dependencies": {
9314 -
        "ansi-styles": "^6.1.0",
9315 -
        "string-width": "^5.0.1",
9316 -
        "strip-ansi": "^7.0.1"
8337 +
        "cac": "^6.7.14",
8338 +
        "debug": "^4.4.1",
8339 +
        "es-module-lexer": "^1.7.0",
8340 +
        "pathe": "^2.0.3",
8341 +
        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
8342 +
      },
8343 +
      "bin": {
8344 +
        "vite-node": "vite-node.mjs"
9317 8345
      },
9318 8346
      "engines": {
9319 -
        "node": ">=12"
8347 +
        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
9320 8348
      },
9321 8349
      "funding": {
9322 -
        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
8350 +
        "url": "https://opencollective.com/vitest"
9323 8351
      }
9324 8352
    },
9325 -
    "node_modules/wrap-ansi-cjs": {
9326 -
      "name": "wrap-ansi",
9327 -
      "version": "7.0.0",
9328 -
      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
9329 -
      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
8353 +
    "node_modules/vite-tsconfig-paths": {
8354 +
      "version": "5.1.4",
8355 +
      "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz",
8356 +
      "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==",
9330 8357
      "dev": true,
9331 8358
      "license": "MIT",
9332 8359
      "dependencies": {
9333 -
        "ansi-styles": "^4.0.0",
9334 -
        "string-width": "^4.1.0",
9335 -
        "strip-ansi": "^6.0.0"
8360 +
        "debug": "^4.1.1",
8361 +
        "globrex": "^0.1.2",
8362 +
        "tsconfck": "^3.0.3"
9336 8363
      },
9337 -
      "engines": {
9338 -
        "node": ">=10"
8364 +
      "peerDependencies": {
8365 +
        "vite": "*"
9339 8366
      },
9340 -
      "funding": {
9341 -
        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
8367 +
      "peerDependenciesMeta": {
8368 +
        "vite": {
8369 +
          "optional": true
8370 +
        }
9342 8371
      }
9343 8372
    },
9344 -
    "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
9345 -
      "version": "5.0.1",
9346 -
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
9347 -
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
8373 +
    "node_modules/vite-tsconfig-paths/node_modules/tsconfck": {
8374 +
      "version": "3.1.6",
8375 +
      "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
8376 +
      "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
8377 +
      "deprecated": "unmaintained",
9348 8378
      "dev": true,
9349 8379
      "license": "MIT",
8380 +
      "bin": {
8381 +
        "tsconfck": "bin/tsconfck.js"
8382 +
      },
9350 8383
      "engines": {
9351 -
        "node": ">=8"
8384 +
        "node": "^18 || >=20"
8385 +
      },
8386 +
      "peerDependencies": {
8387 +
        "typescript": "^5.0.0"
8388 +
      },
8389 +
      "peerDependenciesMeta": {
8390 +
        "typescript": {
8391 +
          "optional": true
8392 +
        }
9352 8393
      }
9353 8394
    },
9354 -
    "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
9355 -
      "version": "4.3.0",
9356 -
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
9357 -
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
8395 +
    "node_modules/vitest": {
8396 +
      "version": "3.2.6",
8397 +
      "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.6.tgz",
8398 +
      "integrity": "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==",
9358 8399
      "dev": true,
9359 8400
      "license": "MIT",
9360 8401
      "dependencies": {
9361 -
        "color-convert": "^2.0.1"
8402 +
        "@types/chai": "^5.2.2",
8403 +
        "@vitest/expect": "3.2.6",
8404 +
        "@vitest/mocker": "3.2.6",
8405 +
        "@vitest/pretty-format": "^3.2.6",
8406 +
        "@vitest/runner": "3.2.6",
8407 +
        "@vitest/snapshot": "3.2.6",
8408 +
        "@vitest/spy": "3.2.6",
8409 +
        "@vitest/utils": "3.2.6",
8410 +
        "chai": "^5.2.0",
8411 +
        "debug": "^4.4.1",
8412 +
        "expect-type": "^1.2.1",
8413 +
        "magic-string": "^0.30.17",
8414 +
        "pathe": "^2.0.3",
8415 +
        "picomatch": "^4.0.2",
8416 +
        "std-env": "^3.9.0",
8417 +
        "tinybench": "^2.9.0",
8418 +
        "tinyexec": "^0.3.2",
8419 +
        "tinyglobby": "^0.2.14",
8420 +
        "tinypool": "^1.1.1",
8421 +
        "tinyrainbow": "^2.0.0",
8422 +
        "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
8423 +
        "vite-node": "3.2.4",
8424 +
        "why-is-node-running": "^2.3.0"
8425 +
      },
8426 +
      "bin": {
8427 +
        "vitest": "vitest.mjs"
9362 8428
      },
9363 8429
      "engines": {
9364 -
        "node": ">=8"
8430 +
        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
9365 8431
      },
9366 8432
      "funding": {
9367 -
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
8433 +
        "url": "https://opencollective.com/vitest"
8434 +
      },
8435 +
      "peerDependencies": {
8436 +
        "@edge-runtime/vm": "*",
8437 +
        "@types/debug": "^4.1.12",
8438 +
        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
8439 +
        "@vitest/browser": "3.2.6",
8440 +
        "@vitest/ui": "3.2.6",
8441 +
        "happy-dom": "*",
8442 +
        "jsdom": "*"
8443 +
      },
8444 +
      "peerDependenciesMeta": {
8445 +
        "@edge-runtime/vm": {
8446 +
          "optional": true
8447 +
        },
8448 +
        "@types/debug": {
8449 +
          "optional": true
8450 +
        },
8451 +
        "@types/node": {
8452 +
          "optional": true
8453 +
        },
8454 +
        "@vitest/browser": {
8455 +
          "optional": true
8456 +
        },
8457 +
        "@vitest/ui": {
8458 +
          "optional": true
8459 +
        },
8460 +
        "happy-dom": {
8461 +
          "optional": true
8462 +
        },
8463 +
        "jsdom": {
8464 +
          "optional": true
8465 +
        }
9368 8466
      }
9369 8467
    },
9370 -
    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
9371 -
      "version": "8.0.0",
9372 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
9373 -
      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
8468 +
    "node_modules/vitest/node_modules/tinyexec": {
8469 +
      "version": "0.3.2",
8470 +
      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
8471 +
      "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
9374 8472
      "dev": true,
9375 8473
      "license": "MIT"
9376 8474
    },
9377 -
    "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": {
9378 -
      "version": "3.0.0",
9379 -
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
9380 -
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
9381 -
      "dev": true,
9382 -
      "license": "MIT",
9383 -
      "engines": {
9384 -
        "node": ">=8"
9385 -
      }
9386 -
    },
9387 -
    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
9388 -
      "version": "4.2.3",
9389 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
9390 -
      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
9391 -
      "dev": true,
9392 -
      "license": "MIT",
8475 +
    "node_modules/which": {
8476 +
      "version": "2.0.2",
8477 +
      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
8478 +
      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
8479 +
      "devOptional": true,
8480 +
      "license": "ISC",
9393 8481
      "dependencies": {
9394 -
        "emoji-regex": "^8.0.0",
9395 -
        "is-fullwidth-code-point": "^3.0.0",
9396 -
        "strip-ansi": "^6.0.1"
8482 +
        "isexe": "^2.0.0"
9397 8483
      },
9398 -
      "engines": {
9399 -
        "node": ">=8"
9400 -
      }
9401 -
    },
9402 -
    "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
9403 -
      "version": "6.0.1",
9404 -
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
9405 -
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
9406 -
      "dev": true,
9407 -
      "license": "MIT",
9408 -
      "dependencies": {
9409 -
        "ansi-regex": "^5.0.1"
8484 +
      "bin": {
8485 +
        "node-which": "bin/node-which"
9410 8486
      },
9411 8487
      "engines": {
9412 -
        "node": ">=8"
8488 +
        "node": ">= 8"
9413 8489
      }
9414 8490
    },
9415 -
    "node_modules/wrap-ansi/node_modules/emoji-regex": {
9416 -
      "version": "9.2.2",
9417 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
9418 -
      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
9419 -
      "dev": true,
9420 -
      "license": "MIT"
9421 -
    },
9422 -
    "node_modules/wrap-ansi/node_modules/string-width": {
9423 -
      "version": "5.1.2",
9424 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
9425 -
      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
8491 +
    "node_modules/why-is-node-running": {
8492 +
      "version": "2.3.0",
8493 +
      "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
8494 +
      "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
9426 8495
      "dev": true,
9427 8496
      "license": "MIT",
9428 8497
      "dependencies": {
9429 -
        "eastasianwidth": "^0.2.0",
9430 -
        "emoji-regex": "^9.2.2",
9431 -
        "strip-ansi": "^7.0.1"
8498 +
        "siginfo": "^2.0.0",
8499 +
        "stackback": "0.0.2"
9432 8500
      },
9433 -
      "engines": {
9434 -
        "node": ">=12"
8501 +
      "bin": {
8502 +
        "why-is-node-running": "cli.js"
9435 8503
      },
9436 -
      "funding": {
9437 -
        "url": "https://github.com/sponsors/sindresorhus"
8504 +
      "engines": {
8505 +
        "node": ">=8"
9438 8506
      }
9439 8507
    },
9440 8508
    "node_modules/wrappy": {
9441 8509
      "version": "1.0.2",
9442 8510
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
9443 8511
      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
9444 8512
      "license": "ISC"
9445 8513
    },
9446 -
    "node_modules/write-file-atomic": {
9447 -
      "version": "6.0.0",
9448 -
      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz",
9449 -
      "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==",
9450 -
      "dev": true,
9451 -
      "license": "ISC",
9452 -
      "dependencies": {
9453 -
        "imurmurhash": "^0.1.4",
9454 -
        "signal-exit": "^4.0.1"
9455 -
      },
9456 -
      "engines": {
9457 -
        "node": "^18.17.0 || >=20.5.0"
9458 -
      }
9459 -
    },
9460 8514
    "node_modules/xml-naming": {
9461 8515
      "version": "0.1.0",
9462 8516
      "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz",
9463 8517
      "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==",
9464 8518
      "funding": [
▸ 12 unchanged lines
9477 8531
      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
9478 8532
      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
9479 8533
      "license": "MIT",
9480 8534
      "engines": {
9481 8535
        "node": ">=0.4"
9482 -
      }
9483 -
    },
9484 -
    "node_modules/y18n": {
9485 -
      "version": "5.0.8",
9486 -
      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
9487 -
      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
9488 -
      "dev": true,
9489 -
      "license": "ISC",
9490 -
      "engines": {
9491 -
        "node": ">=10"
9492 -
      }
9493 -
    },
9494 -
    "node_modules/yallist": {
9495 -
      "version": "5.0.0",
9496 -
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
9497 -
      "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
9498 -
      "dev": true,
9499 -
      "license": "BlueOak-1.0.0",
9500 -
      "engines": {
9501 -
        "node": ">=18"
9502 -
      }
9503 -
    },
9504 -
    "node_modules/yargs": {
9505 -
      "version": "17.7.2",
9506 -
      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
9507 -
      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
9508 -
      "dev": true,
9509 -
      "license": "MIT",
9510 -
      "dependencies": {
9511 -
        "cliui": "^8.0.1",
9512 -
        "escalade": "^3.1.1",
9513 -
        "get-caller-file": "^2.0.5",
9514 -
        "require-directory": "^2.1.1",
9515 -
        "string-width": "^4.2.3",
9516 -
        "y18n": "^5.0.5",
9517 -
        "yargs-parser": "^21.1.1"
9518 -
      },
9519 -
      "engines": {
9520 -
        "node": ">=12"
9521 -
      }
9522 -
    },
9523 -
    "node_modules/yargs-parser": {
9524 -
      "version": "21.1.1",
9525 -
      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
9526 -
      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
9527 -
      "dev": true,
9528 -
      "license": "ISC",
9529 -
      "engines": {
9530 -
        "node": ">=12"
9531 -
      }
9532 -
    },
9533 -
    "node_modules/yargs/node_modules/ansi-regex": {
9534 -
      "version": "5.0.1",
9535 -
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
9536 -
      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
9537 -
      "dev": true,
9538 -
      "license": "MIT",
9539 -
      "engines": {
9540 -
        "node": ">=8"
9541 -
      }
9542 -
    },
9543 -
    "node_modules/yargs/node_modules/emoji-regex": {
9544 -
      "version": "8.0.0",
9545 -
      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
9546 -
      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
9547 -
      "dev": true,
9548 -
      "license": "MIT"
9549 -
    },
9550 -
    "node_modules/yargs/node_modules/is-fullwidth-code-point": {
9551 -
      "version": "3.0.0",
9552 -
      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
9553 -
      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
9554 -
      "dev": true,
9555 -
      "license": "MIT",
9556 -
      "engines": {
9557 -
        "node": ">=8"
9558 -
      }
9559 -
    },
9560 -
    "node_modules/yargs/node_modules/string-width": {
9561 -
      "version": "4.2.3",
9562 -
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
9563 -
      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
9564 -
      "dev": true,
9565 -
      "license": "MIT",
9566 -
      "dependencies": {
9567 -
        "emoji-regex": "^8.0.0",
9568 -
        "is-fullwidth-code-point": "^3.0.0",
9569 -
        "strip-ansi": "^6.0.1"
9570 -
      },
9571 -
      "engines": {
9572 -
        "node": ">=8"
9573 -
      }
9574 -
    },
9575 -
    "node_modules/yargs/node_modules/strip-ansi": {
9576 -
      "version": "6.0.1",
9577 -
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
9578 -
      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
9579 -
      "dev": true,
9580 -
      "license": "MIT",
9581 -
      "dependencies": {
9582 -
        "ansi-regex": "^5.0.1"
9583 -
      },
9584 -
      "engines": {
9585 -
        "node": ">=8"
9586 -
      }
9587 -
    },
9588 -
    "node_modules/yn": {
9589 -
      "version": "3.1.1",
9590 -
      "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
9591 -
      "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
9592 -
      "dev": true,
9593 -
      "license": "MIT",
9594 -
      "engines": {
9595 -
        "node": ">=6"
9596 -
      }
9597 -
    },
9598 -
    "node_modules/yoctocolors": {
9599 -
      "version": "2.1.2",
9600 -
      "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
9601 -
      "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
9602 -
      "dev": true,
9603 -
      "license": "MIT",
9604 -
      "engines": {
9605 -
        "node": ">=18"
9606 -
      },
9607 -
      "funding": {
9608 -
        "url": "https://github.com/sponsors/sindresorhus"
9609 8536
      }
9610 8537
    },
9611 8538
    "node_modules/zeptomatch": {
9612 8539
      "version": "2.1.0",
9613 8540
      "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz",
▸ 26 unchanged lines
9640 8567
        "zod": "^3.25.0 || ^4.0.0"
9641 8568
      }
9642 8569
    }
9643 8570
  }
9644 8571
}
api/package.json
1 1
{
2 2
  "name": "orbit-api",
3 3
  "version": "0.0.0",
4 4
  "description": "",
5 5
  "license": "ISC",
▸ 4 unchanged lines
10 10
  },
11 11
  "scripts": {
12 12
    "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
13 13
    "prod": "node dist/index.js",
14 14
    "start": "nodemon src/index.ts",
15 -
    "test": "npm run test:setup && dotenv -e .env.test -o -- npx ava",
16 -
    "test:setup": "npm run test:setup:generate && npm run test:setup:migrate",
15 +
    "test": "dotenv -e .env.test -o -- vitest run",
16 +
    "test:watch": "dotenv -e .env.test -o -- vitest",
17 +
    "test:setup": "npm run test:setup:db && npm run test:setup:generate && npm run test:setup:migrate",
18 +
    "test:setup:db": "dotenv -e .env.test -o -- node scripts/create-test-db.mjs",
17 19
    "test:setup:generate": "dotenv -e .env.test -o -- npx prisma generate",
18 20
    "test:setup:migrate": "dotenv -e .env.test -o -- npx prisma db push",
19 -
    "test:watch": "npm run test:setup && NODE_ENV=test npx ava --watch",
20 21
    "dev": "prisma generate && prisma migrate deploy && npm run start"
21 22
  },
22 23
  "dependencies": {
23 24
    "@aws-sdk/client-s3": "^3.1048.0",
24 25
    "@prisma/adapter-better-sqlite3": "^7.5.0",
▸ 18 unchanged lines
43 44
    "resend": "^6.12.3",
44 45
    "zod": "^4.4.3",
45 46
    "zod-validation-error": "^5.0.0"
46 47
  },
47 48
  "devDependencies": {
48 -
    "@ava/typescript": "^6.0.0",
49 49
    "@types/better-sqlite3": "^7.6.13",
50 50
    "@types/express": "^5.0.6",
51 51
    "@types/morgan": "^1.9.10",
52 52
    "@types/multer": "^2.1.0",
53 53
    "@types/multer-s3": "^3.0.3",
54 54
    "@types/node": "^25.5.2",
55 -
    "ava": "^6.4.1",
55 +
    "@types/supertest": "^6.0.3",
56 56
    "cross-var": "^1.1.0",
57 57
    "dotenv-cli": "^11.0.0",
58 58
    "nodemon": "^3.1.14",
59 59
    "pino-pretty": "^13.1.3",
60 60
    "prisma": "^7.5.0",
61 61
    "supertest": "^7.1.4",
62 -
    "ts-node": "^10.9.2",
63 62
    "tsc-alias": "^1.8.16",
64 -
    "tsconfig-paths": "^4.2.0",
65 63
    "tsx": "^4.21.0",
66 -
    "typescript": "^6.0.2"
64 +
    "typescript": "^6.0.2",
65 +
    "vite-tsconfig-paths": "^5.1.4",
66 +
    "vitest": "^3.0.0"
67 67
  }
68 68
}
api/scripts/create-test-db.mjs
@@ -0,0 +1,22 @@
1 + import pg from 'pg'
2 +
3 + const { Client } = pg
4 +
5 + const dbUrl = process.env.DATABASE_URL
6 + if (!dbUrl) {
7 + console.error('DATABASE_URL is not set')
8 + process.exit(1)
9 + }
10 +
11 + const url = new URL(dbUrl)
12 + const dbName = url.pathname.slice(1)
13 + url.pathname = '/postgres'
14 +
15 + const client = new Client({ connectionString: url.toString() })
16 + await client.connect()
17 + await client.query(`CREATE DATABASE "${dbName}"`).catch((err) => {
18 + if (err.code !== '42P04') throw err // 42P04 = database already exists
19 + })
20 + await client.end()
21 +
22 + console.log(`Database "${dbName}" is ready.`)
api/tests/auth/login.test.ts
@@ -0,0 +1,42 @@
1 + import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2 + import request from 'supertest'
3 + import { createApp } from '@app/createApp'
4 + import { buildPrisma, cleanupTestDb, createTestUser } from '../test-helper'
5 +
6 + const app = createApp()
7 + const db = buildPrisma()
8 +
9 + afterAll(() => db.$disconnect())
10 + beforeEach(() => cleanupTestDb(db))
11 +
12 + describe('POST /auth/login', () => {
13 + it('returns a token for valid credentials', async () => {
14 + await createTestUser(db, { email: 'login@example.com', password: 'senha123' })
15 +
16 + const res = await request(app)
17 + .post('/auth/login')
18 + .send({ email: 'login@example.com', password: 'senha123' })
19 +
20 + expect(res.status).toBe(200)
21 + expect(res.body.token).toBeTruthy()
22 + expect(res.body.user.email).toBe('login@example.com')
23 + })
24 +
25 + it('returns 401 for wrong password', async () => {
26 + await createTestUser(db, { email: 'login@example.com', password: 'senha123' })
27 +
28 + const res = await request(app)
29 + .post('/auth/login')
30 + .send({ email: 'login@example.com', password: 'errada' })
31 +
32 + expect(res.status).toBe(401)
33 + })
34 +
35 + it('returns 401 for unknown email', async () => {
36 + const res = await request(app)
37 + .post('/auth/login')
38 + .send({ email: 'naoexiste@example.com', password: 'qualquer' })
39 +
40 + expect(res.status).toBe(401)
41 + })
42 + })
@@ -1,260 +0,0 @@
1 - import test from "ava";
2 - import { PrismaClient } from '@prisma/client';
3 - import { PrismaPg } from '@prisma/adapter-pg';
4 - import bcrypt from 'bcryptjs';
5 - import 'dotenv/config';
6 -
7 - let prisma: PrismaClient;
8 -
9 - test.before(() => {
10 - process.env.NODE_ENV = 'test';
11 -
12 - const connectionString = process.env.DATABASE_URL || 'postgres://user:password@orbit_db:5432/orbit_test';
13 - const adapter = new PrismaPg({ connectionString });
14 - prisma = new PrismaClient({ adapter });
15 - });
16 -
17 - test.beforeEach(async () => {
18 - // Clean database before each test
19 - try {
20 - await prisma.user.deleteMany({});
21 - } catch (err) {
22 - console.error('Error cleaning test DB:', err);
23 - }
24 - });
25 -
26 - test.after.always(async () => {
27 - const deleteUsers = prisma.user.deleteMany();
28 -
29 - await prisma.$transaction([
30 - deleteUsers
31 - ])
32 -
33 - await prisma?.$disconnect();
34 - });
35 -
36 - // Basic database connectivity test
37 - test("database connection works", async (t) => {
38 - const result = await prisma.$queryRaw`SELECT 1 as test`;
39 - t.truthy(result);
40 - });
41 -
42 - // User creation and authentication tests
43 - test("can create user with encrypted password", async (t) => {
44 - const encryptedPassword = bcrypt.hashSync("testPassword123", 10);
45 -
46 - const user = await prisma.user.create({
47 - data: {
48 - email: "test@example.com",
49 - firstName: "Test",
50 - lastName: "User",
51 - encryptedPassword: encryptedPassword
52 - }
53 - });
54 -
55 - t.is(user.email, "test@example.com");
56 - t.is(user.firstName, "Test");
57 - t.truthy(user.id);
58 -
59 - // Verify password can be validated
60 - t.true(bcrypt.compareSync("testPassword123", user.encryptedPassword));
61 - t.false(bcrypt.compareSync("wrongPassword", user.encryptedPassword));
62 - });
63 -
64 - test("can find user by email for authentication", async (t) => {
65 - // Create user
66 - await prisma.user.create({
67 - data: {
68 - email: "login@example.com",
69 - firstName: "Login",
70 - lastName: "User",
71 - encryptedPassword: bcrypt.hashSync("password123", 10)
72 - }
73 - });
74 -
75 - // Simulate login lookup
76 - const foundUser = await prisma.user.findUnique({
77 - where: { email: "login@example.com" }
78 - });
79 -
80 - t.truthy(foundUser);
81 - t.is(foundUser!.email, "login@example.com");
82 - t.true(bcrypt.compareSync("password123", foundUser!.encryptedPassword));
83 - t.false(bcrypt.compareSync("wrongPassword", foundUser!.encryptedPassword));
84 - });
85 -
86 - test("email uniqueness constraint prevents duplicate registrations", async (t) => {
87 - const email = "duplicate@example.com";
88 -
89 - // Create first user
90 - await prisma.user.create({
91 - data: {
92 - email,
93 - firstName: "First",
94 - lastName: "User",
95 - encryptedPassword: bcrypt.hashSync("password", 10)
96 - }
97 - });
98 -
99 - // Try to create second user with same email - should fail
100 - await t.throwsAsync(
101 - async () => {
102 - await prisma.user.create({
103 - data: {
104 - email,
105 - firstName: "Second",
106 - lastName: "User",
107 - encryptedPassword: bcrypt.hashSync("password", 10)
108 - }
109 - });
110 - }
111 - );
112 - });
113 -
114 - test("password reset flow works with database", async (t) => {
115 - const resetToken = "reset-token-123";
116 - const resetExpires = new Date(Date.now() + 3600000); // 1 hour from now
117 -
118 - // Create user
119 - const user = await prisma.user.create({
120 - data: {
121 - email: "reset@example.com",
122 - firstName: "Reset",
123 - lastName: "User",
124 - encryptedPassword: bcrypt.hashSync("oldPassword", 10)
125 - }
126 - });
127 -
128 - // Step 1: Set reset token (forgot password)
129 - await prisma.user.update({
130 - where: { id: user.id },
131 - data: {
132 - passwordResetToken: resetToken,
133 - passwordResetExpires: resetExpires
134 - }
135 - });
136 -
137 - // Step 2: Find user by reset token
138 - const userWithToken = await prisma.user.findFirst({
139 - where: {
140 - passwordResetToken: resetToken,
141 - passwordResetExpires: { gte: new Date() } // Token not expired
142 - }
143 - });
144 -
145 - t.truthy(userWithToken);
146 - t.is(userWithToken!.email, "reset@example.com");
147 -
148 - // Step 3: Reset password
149 - const newPassword = bcrypt.hashSync("newPassword123", 10);
150 - const updatedUser = await prisma.user.update({
151 - where: { id: user.id },
152 - data: {
153 - encryptedPassword: newPassword,
154 - passwordResetToken: null,
155 - passwordResetExpires: null
156 - }
157 - });
158 -
159 - // Verify new password works and reset fields are cleared
160 - t.true(bcrypt.compareSync("newPassword123", updatedUser.encryptedPassword));
161 - t.false(bcrypt.compareSync("oldPassword", updatedUser.encryptedPassword));
162 - t.is(updatedUser.passwordResetToken, null);
163 - t.is(updatedUser.passwordResetExpires, null);
164 - });
165 -
166 - test("expired reset tokens are not found", async (t) => {
167 - const expiredResetToken = "expired-token";
168 - const pastDate = new Date(Date.now() - 3600000); // 1 hour ago
169 -
170 - // Create user with expired token
171 - const user = await prisma.user.create({
172 - data: {
173 - email: "expired@example.com",
174 - firstName: "Expired",
175 - lastName: "User",
176 - encryptedPassword: bcrypt.hashSync("password", 10),
177 - passwordResetToken: expiredResetToken,
178 - passwordResetExpires: pastDate
179 - }
180 - });
181 -
182 - // Try to find user by expired token
183 - const foundUser = await prisma.user.findFirst({
184 - where: {
185 - passwordResetToken: expiredResetToken,
186 - passwordResetExpires: { gte: new Date() } // Token not expired
187 - }
188 - });
189 -
190 - // Should not find the user because token is expired
191 - t.is(foundUser, null);
192 -
193 - // But user still exists
194 - const stillExists = await prisma.user.findUnique({ where: { id: user.id } });
195 - t.truthy(stillExists);
196 - });
197 -
198 - test("user profile update works", async (t) => {
199 - // Create user
200 - const user = await prisma.user.create({
201 - data: {
202 - email: "profile@example.com",
203 - firstName: "Original",
204 - lastName: "Name",
205 - encryptedPassword: bcrypt.hashSync("password", 10)
206 - }
207 - });
208 -
209 - // Update profile
210 - const updatedUser = await prisma.user.update({
211 - where: { id: user.id },
212 - data: {
213 - firstName: "Updated",
214 - lastName: "Profile"
215 - }
216 - });
217 -
218 - t.is(updatedUser.firstName, "Updated");
219 - t.is(updatedUser.lastName, "Profile");
220 - t.is(updatedUser.email, "profile@example.com"); // Should remain unchanged
221 - t.true(updatedUser.updatedAt > user.updatedAt); // updatedAt should be newer
222 - });
223 -
224 - test("timestamps are automatically managed", async (t) => {
225 - const beforeCreate = new Date();
226 -
227 - const user = await prisma.user.create({
228 - data: {
229 - email: "timestamps@example.com",
230 - firstName: "Time",
231 - lastName: "Stamps",
232 - encryptedPassword: bcrypt.hashSync("password", 10)
233 - }
234 - });
235 -
236 - const afterCreate = new Date();
237 -
238 - // Check creation timestamps
239 - t.true(user.createdAt >= beforeCreate);
240 - t.true(user.createdAt <= afterCreate);
241 - t.true(user.updatedAt >= beforeCreate);
242 - t.true(user.updatedAt <= afterCreate);
243 -
244 - // Wait and update to test updatedAt behavior
245 - await new Promise(resolve => setTimeout(resolve, 100));
246 - const beforeUpdate = new Date();
247 -
248 - const updatedUser = await prisma.user.update({
249 - where: { id: user.id },
250 - data: { firstName: "Updated" }
251 - });
252 -
253 - const afterUpdate = new Date();
254 -
255 - // createdAt should remain the same, updatedAt should be newer
256 - t.deepEqual(updatedUser.createdAt, user.createdAt);
257 - t.true(updatedUser.updatedAt >= beforeUpdate);
258 - t.true(updatedUser.updatedAt <= afterUpdate);
259 - t.true(updatedUser.updatedAt > user.updatedAt);
260 - });
api/tests/jobs/mood-trend.test.ts
@@ -0,0 +1,101 @@
1 + import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2 + import { processMoodTrend } from '@app/lib/queue/processors/insights/moodTrend'
3 + import { buildPrisma, cleanupTestDb, createTestUser } from '../test-helper'
4 +
5 + const db = buildPrisma()
6 +
7 + afterAll(() => db.$disconnect())
8 + beforeEach(() => cleanupTestDb(db))
9 +
10 + describe('processMoodTrend', () => {
11 + it('skips processing when fewer than 3 mood entries exist', async () => {
12 + const user = await createTestUser(db)
13 + const now = new Date()
14 + const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
15 +
16 + await db.mood.create({
17 + data: {
18 + userId: user.id,
19 + selectedMood: 'GOOD',
20 + anxietyLevel: 2,
21 + stressLevel: 2,
22 + energyLevel: 7,
23 + moment: new Date(weekAgo.getTime() + 60_000),
24 + moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
25 + },
26 + })
27 +
28 + await processMoodTrend({
29 + userId: user.id,
30 + periodStart: weekAgo.toISOString(),
31 + periodEnd: now.toISOString(),
32 + })
33 +
34 + const insight = await db.insight.findFirst({ where: { userId: user.id } })
35 + expect(insight).toBeNull()
36 + })
37 +
38 + it('creates a MOOD_TREND insight when enough entries exist', async () => {
39 + const user = await createTestUser(db)
40 + const now = new Date()
41 + const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
42 +
43 + const moods = ['GREAT', 'GOOD', 'NEUTRAL', 'GOOD', 'GREAT'] as const
44 + for (let i = 0; i < moods.length; i++) {
45 + await db.mood.create({
46 + data: {
47 + userId: user.id,
48 + selectedMood: moods[i],
49 + anxietyLevel: 2,
50 + stressLevel: 2,
51 + energyLevel: 7,
52 + moment: new Date(weekAgo.getTime() + i * 24 * 60 * 60 * 1000),
53 + moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
54 + },
55 + })
56 + }
57 +
58 + await processMoodTrend({
59 + userId: user.id,
60 + periodStart: weekAgo.toISOString(),
61 + periodEnd: now.toISOString(),
62 + })
63 +
64 + const insight = await db.insight.findFirst({ where: { userId: user.id, type: 'MOOD_TREND' } })
65 + expect(insight).not.toBeNull()
66 + expect(insight!.title).toBe('Tendência de Humor')
67 + expect(insight!.metadata).toMatchObject({
68 + dominantMood: expect.any(String),
69 + delta: expect.any(Number),
70 + })
71 + })
72 +
73 + it('upserts the insight on repeated calls for the same period', async () => {
74 + const user = await createTestUser(db)
75 + const now = new Date()
76 + const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
77 +
78 + for (let i = 0; i < 4; i++) {
79 + await db.mood.create({
80 + data: {
81 + userId: user.id,
82 + selectedMood: 'GOOD',
83 + anxietyLevel: 2,
84 + stressLevel: 2,
85 + energyLevel: 6,
86 + moment: new Date(weekAgo.getTime() + i * 24 * 60 * 60 * 1000),
87 + moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
88 + },
89 + })
90 + }
91 +
92 + const periodStart = weekAgo.toISOString()
93 + const periodEnd = now.toISOString()
94 +
95 + await processMoodTrend({ userId: user.id, periodStart, periodEnd })
96 + await processMoodTrend({ userId: user.id, periodStart, periodEnd })
97 +
98 + const count = await db.insight.count({ where: { userId: user.id, type: 'MOOD_TREND' } })
99 + expect(count).toBe(1)
100 + })
101 + })
api/tests/moods/create.test.ts
@@ -0,0 +1,57 @@
1 + import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2 + import request from 'supertest'
3 + import { createApp } from '@app/createApp'
4 + import { buildPrisma, cleanupTestDb, createTestUser, generateTestToken } from '../test-helper'
5 +
6 + const app = createApp()
7 + const db = buildPrisma()
8 +
9 + const validMood = {
10 + selectedMood: 'GOOD',
11 + anxietyLevel: 2,
12 + stressLevel: 3,
13 + energyLevel: 7,
14 + moment: new Date().toISOString(),
15 + moodComponents: [{ component: 'JOY', intensity: 'MODERATE' }],
16 + }
17 +
18 + afterAll(() => db.$disconnect())
19 + beforeEach(() => cleanupTestDb(db))
20 +
21 + describe('POST /moods', () => {
22 + it('creates a mood entry and returns it', async () => {
23 + const user = await createTestUser(db)
24 + const token = generateTestToken(user.id, user.email)
25 +
26 + const res = await request(app)
27 + .post('/moods')
28 + .set('Authorization', `Bearer ${token}`)
29 + .send({ mood: validMood })
30 +
31 + expect(res.status).toBe(201)
32 + expect(res.body.mood.selectedMood).toBe('GOOD')
33 + expect(res.body.mood.energyLevel).toBe(7)
34 + expect(res.body.mood.moodComponents).toHaveLength(1)
35 +
36 + const dbMood = await db.mood.findFirst({ where: { userId: user.id } })
37 + expect(dbMood).not.toBeNull()
38 + })
39 +
40 + it('returns 400 for missing required fields', async () => {
41 + const user = await createTestUser(db)
42 + const token = generateTestToken(user.id, user.email)
43 +
44 + const res = await request(app)
45 + .post('/moods')
46 + .set('Authorization', `Bearer ${token}`)
47 + .send({ mood: { selectedMood: 'GOOD' } })
48 +
49 + expect(res.status).toBe(400)
50 + expect(res.body.errors).toBeTruthy()
51 + })
52 +
53 + it('returns 401 without token', async () => {
54 + const res = await request(app).post('/moods').send({ mood: validMood })
55 + expect(res.status).toBe(401)
56 + })
57 + })
api/tests/moods/list.test.ts
@@ -0,0 +1,91 @@
1 + import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2 + import request from 'supertest'
3 + import { createApp } from '@app/createApp'
4 + import { buildPrisma, cleanupTestDb, createTestUser, generateTestToken } from '../test-helper'
5 +
6 + const app = createApp()
7 + const db = buildPrisma()
8 +
9 + afterAll(() => db.$disconnect())
10 + beforeEach(() => cleanupTestDb(db))
11 +
12 + describe('GET /moods', () => {
13 + it('returns an empty list when no moods exist', async () => {
14 + const user = await createTestUser(db)
15 + const token = generateTestToken(user.id, user.email)
16 +
17 + const res = await request(app)
18 + .get('/moods')
19 + .set('Authorization', `Bearer ${token}`)
20 +
21 + expect(res.status).toBe(200)
22 + expect(res.body.entries).toEqual([])
23 + expect(res.body.total).toBe(0)
24 + })
25 +
26 + it('returns moods belonging to the authenticated user', async () => {
27 + const user = await createTestUser(db)
28 + const other = await createTestUser(db, { email: 'other@example.com' })
29 + const token = generateTestToken(user.id, user.email)
30 +
31 + await db.mood.create({
32 + data: {
33 + userId: user.id,
34 + selectedMood: 'GOOD',
35 + anxietyLevel: 1,
36 + stressLevel: 1,
37 + energyLevel: 8,
38 + moment: new Date(),
39 + moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
40 + },
41 + })
42 + await db.mood.create({
43 + data: {
44 + userId: other.id,
45 + selectedMood: 'SAD',
46 + anxietyLevel: 5,
47 + stressLevel: 5,
48 + energyLevel: 2,
49 + moment: new Date(),
50 + moodComponents: { create: [{ component: 'SADNESS', intensity: 'HIGH' }] },
51 + },
52 + })
53 +
54 + const res = await request(app)
55 + .get('/moods')
56 + .set('Authorization', `Bearer ${token}`)
57 +
58 + expect(res.status).toBe(200)
59 + expect(res.body.entries).toHaveLength(1)
60 + expect(res.body.entries[0].selectedMood).toBe('GOOD')
61 + expect(res.body.total).toBe(1)
62 + })
63 +
64 + it('paginates results', async () => {
65 + const user = await createTestUser(db)
66 + const token = generateTestToken(user.id, user.email)
67 +
68 + for (let i = 0; i < 5; i++) {
69 + await db.mood.create({
70 + data: {
71 + userId: user.id,
72 + selectedMood: 'NEUTRAL',
73 + anxietyLevel: 3,
74 + stressLevel: 3,
75 + energyLevel: 5,
76 + moment: new Date(Date.now() - i * 60_000),
77 + moodComponents: { create: [{ component: 'JOY', intensity: 'LIGHT' }] },
78 + },
79 + })
80 + }
81 +
82 + const res = await request(app)
83 + .get('/moods?limit=2&page=1')
84 + .set('Authorization', `Bearer ${token}`)
85 +
86 + expect(res.status).toBe(200)
87 + expect(res.body.entries).toHaveLength(2)
88 + expect(res.body.total).toBe(5)
89 + expect(res.body.nextPage).toBe(2)
90 + })
91 + })
api/tests/setup.ts
@@ -0,0 +1,14 @@
1 + import { vi } from 'vitest'
2 +
3 + vi.mock('@app/lib/queue', () => ({
4 + bootWorkers: vi.fn(),
5 + closeAllWorkers: vi.fn(),
6 + closeAllQueues: vi.fn(),
7 + scheduleInsights: vi.fn(),
8 + getQueue: vi.fn(() => ({ add: vi.fn(), addBulk: vi.fn() })),
9 + MailJobName: {
10 + WelcomeEmail: 'mail:welcome',
11 + PasswordReset: 'mail:password-reset',
12 + ActivateAccountEmail: 'mail:activate-account',
13 + },
14 + }))
api/tests/test-helper.ts
1 -
import { PrismaClient } from '@prisma/client';
2 -
import { PrismaPg } from '@prisma/adapter-pg';
3 -
import 'dotenv/config';
4 -

5 -
let prismaTestClient: PrismaClient | null = null;
1 +
import { PrismaClient } from '@prisma/client'
2 +
import { PrismaPg } from '@prisma/adapter-pg'
3 +
import jwt from 'jsonwebtoken'
4 +
import bcrypt from 'bcryptjs'
6 5

7 -
export function getTestPrisma(): PrismaClient {
8 -
  if (!prismaTestClient) {
9 -
    // Use test database URL
10 -
    const connectionString = process.env.DATABASE_URL || 'postgres://user:password@localhost:5430/orbit_test';
11 -
    const adapter = new PrismaPg({ connectionString });
12 -
    prismaTestClient = new PrismaClient({ adapter });
13 -
  }
14 -
  return prismaTestClient;
6 +
export function buildPrisma(): PrismaClient {
7 +
  const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL! })
8 +
  return new PrismaClient({ adapter })
15 9
}
16 10

17 -
export async function cleanupTestDb() {
18 -
  const prisma = getTestPrisma();
19 -

20 -
  // Delete in correct order due to foreign keys
21 -
  // Add more tables as they're added to schema
22 -
  try {
23 -
    // When we add more models, delete them here in reverse order of dependencies
24 -
    await prisma.user.deleteMany({});
25 -
  } catch (err) {
26 -
    console.error('Error cleaning test DB:', err);
27 -
  }
11 +
export async function cleanupTestDb(prisma: PrismaClient) {
12 +
  await prisma.$executeRawUnsafe('TRUNCATE users CASCADE')
28 13
}
29 14

30 -
export async function disconnectTestDb() {
31 -
  if (prismaTestClient) {
32 -
    await prismaTestClient.$disconnect();
33 -
    prismaTestClient = null;
34 -
  }
15 +
export function generateTestToken(userId: number, email: string): string {
16 +
  return jwt.sign({ userId, email }, process.env.JWT_SECRET!, { expiresIn: '1h' })
35 17
}
36 18

37 -
// Helper to create test users
38 -
export async function createTestUser(data?: {
39 -
  email?: string;
40 -
  firstName?: string;
41 -
  lastName?: string;
42 -
  encryptedPassword?: string;
43 -
}) {
44 -
  const prisma = getTestPrisma();
45 -
  return await prisma.user.create({
19 +
export async function createTestUser(
20 +
  prisma: PrismaClient,
21 +
  overrides: { email?: string; firstName?: string; lastName?: string; password?: string } = {}
22 +
) {
23 +
  return prisma.user.create({
46 24
    data: {
47 -
      email: data?.email || 'test@example.com',
48 -
      firstName: data?.firstName || 'Test',
49 -
      lastName: data?.lastName || 'User',
50 -
      encryptedPassword: data?.encryptedPassword || '$2a$10$test'
51 -
    }
52 -
  });
53 -
}
25 +
      email: overrides.email ?? 'test@example.com',
26 +
      firstName: overrides.firstName ?? 'Test',
27 +
      lastName: overrides.lastName ?? 'User',
28 +
      encryptedPassword: await bcrypt.hash(overrides.password ?? 'password123', 10),
29 +
    },
30 +
  })
31 +
}
api/tests/users/create.test.ts
1 -
import test from "ava";
2 -
import { PrismaClient } from '@prisma/client';
3 -
import { PrismaPg } from '@prisma/adapter-pg';
4 -
import request from 'supertest';
5 -
import jwt from 'jsonwebtoken';
6 -
import 'dotenv/config';
7 -
import { Express } from 'express';
8 -
import { createApp } from '../../src/createApp';
1 +
import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2 +
import request from 'supertest'
3 +
import { createApp } from '@app/createApp'
4 +
import { buildPrisma, cleanupTestDb } from '../test-helper'
9 5

10 -
let prisma: PrismaClient;
11 -
let app: Express;
6 +
const app = createApp()
7 +
const db = buildPrisma()
12 8

13 -
test.before(() => {
14 -
  process.env.NODE_ENV = 'test';
15 -
  process.env.JWT_SECRET = 'test-secret-key';
9 +
afterAll(() => db.$disconnect())
10 +
beforeEach(() => cleanupTestDb(db))
16 11

17 -
  const connectionString = process.env.DATABASE_URL || 'postgres://user:password@orbit_db:5432/orbit_test';
18 -
  const adapter = new PrismaPg({ connectionString });
19 -
  prisma = new PrismaClient({ adapter });
12 +
describe('POST /users', () => {
13 +
  it('creates a user and returns a JWT token', async () => {
14 +
    const res = await request(app)
15 +
      .post('/users')
16 +
      .send({ user: { email: 'new@example.com', firstName: 'Novo', password: 'senha123' } })
20 17

21 -
  // Create Express app with test Prisma client
22 -
  app = createApp(prisma);
23 -
});
18 +
    expect(res.status).toBe(201)
19 +
    expect(res.body.token).toBeTruthy()
24 20

25 -
test.beforeEach(async () => {
26 -
  // Clean database before each test
27 -
  try {
28 -
    await prisma.user.deleteMany({});
29 -
  } catch (err) {
30 -
    console.error('Error cleaning test DB:', err);
31 -
  }
32 -
});
21 +
    const dbUser = await db.user.findUnique({ where: { email: 'new@example.com' } })
22 +
    expect(dbUser).not.toBeNull()
23 +
    expect(dbUser!.firstName).toBe('Novo')
24 +
  })
33 25

34 -
test.after.always(async () => {
35 -
  await prisma?.$disconnect();
36 -
});
37 -

38 -
test("POST /users creates a new user and returns JWT token", async (t) => {
39 -
  const userData = {
40 -
    email: "falamansa@example.com",
41 -
    firstName: "Fala",
42 -
    lastName: "Mansa",
43 -
    password: "IscreviSeuNomeNaAreia"
44 -
  };
45 -

46 -
  const response = await request(app)
47 -
    .post('/users')
48 -
    .send(userData)
49 -
    .expect('Content-Type', /json/)
50 -
    .expect(201);
51 -

52 -
  // Should return a JWT token
53 -
  t.truthy(response.body.token);
54 -

55 -
  // Verify the token is valid
56 -
  const decoded = jwt.verify(response.body.token, process.env.JWT_SECRET!) as any;
57 -
  t.is(decoded.email, userData.email);
58 -
  t.truthy(decoded.userId);
59 -

60 -
  // Verify user was created in database
61 -
  const dbUser = await prisma.user.findUnique({
62 -
    where: { email: userData.email }
63 -
  });
64 -
  t.truthy(dbUser);
65 -
  t.is(dbUser!.email, userData.email);
66 -
  t.is(dbUser!.firstName, userData.firstName);
67 -
  t.is(dbUser!.lastName, userData.lastName);
68 -
});
69 -

70 -
test("POST /users returns 400 for missing required fields", async (t) => {
71 -
  const response = await request(app)
72 -
    .post('/users')
73 -
    .send({
74 -
      email: "invalid@example.com"
75 -
      // Missing firstName and password
26 +
  it('returns 409 for duplicate email', async () => {
27 +
    await db.user.create({
28 +
      data: { email: 'dup@example.com', firstName: 'A', encryptedPassword: 'x' },
76 29
    })
77 -
    .expect('Content-Type', /json/)
78 -
    .expect(400);
79 30

80 -
  t.truthy(response.body.error);
81 -
  t.is(response.body.error, "Campos faltantes"); // TODO: i18n?
82 -
  t.truthy(response.body.missing);
83 -
  t.true(response.body.missing.includes('password'));
84 -
  t.true(response.body.missing.includes('firstName'));
85 -
});
86 -

87 -
test("POST /users returns 409 for duplicate email", async (t) => {
88 -
  const email = "duplicate@example.com";
89 -

90 -
  // Create first user
91 -
  await prisma.user.create({
92 -
    data: {
93 -
      email,
94 -
      firstName: "First",
95 -
      lastName: "User",
96 -
      encryptedPassword: "$2a$10$test"
97 -
    }
98 -
  });
31 +
    const res = await request(app)
32 +
      .post('/users')
33 +
      .send({ user: { email: 'dup@example.com', firstName: 'B', password: 'senha123' } })
99 34

100 -
  // Try to create second user with same email
101 -
  const response = await request(app)
102 -
    .post('/users')
103 -
    .send({
104 -
      email,
105 -
      firstName: "Second",
106 -
      lastName: "User",
107 -
      password: "hunter2"
108 -
    })
109 -
    .expect('Content-Type', /json/)
110 -
    .expect(409);
35 +
    expect(res.status).toBe(409)
36 +
  })
111 37

112 -
  t.truthy(response.body.error);
113 -
});
114 -

115 -
test("createApp successfully integrates with Prisma and Express", async (t) => {
116 -
  // Test that the app factory works correctly
117 -
  const testApp = createApp(prisma);
118 -

119 -
  t.truthy(testApp);
120 -
  t.is(typeof testApp.use, 'function');
121 -
  t.is(typeof testApp.listen, 'function');
38 +
  it('returns 422 for missing required fields', async () => {
39 +
    const res = await request(app)
40 +
      .post('/users')
41 +
      .send({ user: { email: 'x@example.com' } })
122 42

123 -
  // Verify the app has the prisma client in locals
124 -
  t.is(testApp.locals.prisma, prisma);
125 -
});
43 +
    expect(res.status).toBe(422)
44 +
    expect(res.body.errors).toBeTruthy()
45 +
  })
46 +
})
@@ -1,58 +0,0 @@
1 - import test from "ava";
2 - import { PrismaClient } from '@prisma/client';
3 - import { PrismaPg } from '@prisma/adapter-pg';
4 - import request from 'supertest';
5 - import bcrypt from 'bcryptjs';
6 - import 'dotenv/config';
7 - import { Express } from 'express';
8 - import { createApp } from '../../src/createApp';
9 -
10 - let prisma: PrismaClient;
11 - let app: Express;
12 -
13 - test.before(() => {
14 - process.env.NODE_ENV = 'test';
15 -
16 - const connectionString = process.env.DATABASE_URL || 'postgres://user:password@orbit_db:5432/orbit_test';
17 - const adapter = new PrismaPg({ connectionString });
18 - prisma = new PrismaClient({ adapter });
19 -
20 - // Create Express app with test Prisma client
21 - app = createApp(prisma);
22 - });
23 -
24 - test.beforeEach(async () => {
25 - // Clean database before each test
26 - try {
27 - await prisma.user.deleteMany({});
28 - } catch (err) {
29 - console.error('Error cleaning test DB:', err);
30 - }
31 - });
32 -
33 - test.after.always(async () => {
34 - await prisma?.$disconnect();
35 - });
36 -
37 - //test("DELETE /users/:id deletes a user", async (t) => {
38 - // t.pass()
39 - // // Create a user first
40 - // const user = await prisma.user.create({
41 - // data: {
42 - // email: "delete@example.com",
43 - // firstName: "Delete",
44 - // lastName: "Me",
45 - // encryptedPassword: bcrypt.hashSync("password", 10)
46 - // }
47 - // });
48 - //
49 - // await request(app)
50 - // .delete(`/users/${user.id}`)
51 - // .expect(204);
52 - //
53 - // // Verify user was deleted
54 - // const dbUser = await prisma.user.findUnique({
55 - // where: { id: user.id }
56 - // });
57 - // t.is(dbUser, null);
58 - //});
@@ -1,68 +0,0 @@
1 - import test from "ava";
2 - import { PrismaClient } from '@prisma/client';
3 - import { PrismaPg } from '@prisma/adapter-pg';
4 - import request from 'supertest';
5 - import bcrypt from 'bcryptjs';
6 - import 'dotenv/config';
7 - import { Express } from 'express';
8 - import { createApp } from '../../src/createApp';
9 -
10 - let prisma: PrismaClient;
11 - let app: Express;
12 -
13 - test.before(() => {
14 - process.env.NODE_ENV = 'test';
15 -
16 - const connectionString = process.env.DATABASE_URL || 'postgres://user:password@orbit_db:5432/orbit_test';
17 - const adapter = new PrismaPg({ connectionString });
18 - prisma = new PrismaClient({ adapter });
19 -
20 - // Create Express app with test Prisma client
21 - app = createApp(prisma);
22 - });
23 -
24 - test.beforeEach(async () => {
25 - // Clean database before each test
26 - try {
27 - await prisma.user.deleteMany({});
28 - } catch (err) {
29 - console.error('Error cleaning test DB:', err);
30 - }
31 - });
32 -
33 - test.after.always(async () => {
34 - await prisma?.$disconnect();
35 - });
36 -
37 - //test("GET /users/:id retrieves a user", async (t) => {
38 - // t.pass()
39 - // // Create a user first
40 - // const user = await prisma.user.create({
41 - // data: {
42 - // email: "get@example.com",
43 - // firstName: "Get",
44 - // lastName: "User",
45 - // encryptedPassword: bcrypt.hashSync("password", 10)
46 - // }
47 - // });
48 - //
49 - // const response = await request(app)
50 - // .get(`/users/${user.id}`)
51 - // .expect('Content-Type', /json/)
52 - // .expect(200);
53 - //
54 - // t.is(response.body.id, user.id);
55 - // t.is(response.body.email, user.email);
56 - // t.is(response.body.firstName, user.firstName);
57 - // t.is(response.body.lastName, user.lastName);
58 - // t.falsy(response.body.encryptedPassword); // Should not expose password
59 - //});
60 - //
61 - //test("GET /users/:id returns 404 for non-existent user", async (t) => {
62 - // const response = await request(app)
63 - // .get('/users/999999')
64 - // .expect('Content-Type', /json/)
65 - // .expect(404);
66 - //
67 - // t.truthy(response.body.error);
68 - //});
api/tests/users/me.test.ts
@@ -0,0 +1,31 @@
1 + import { describe, it, expect, afterAll, beforeEach } from 'vitest'
2 + import request from 'supertest'
3 + import { createApp } from '@app/createApp'
4 + import { buildPrisma, cleanupTestDb, createTestUser, generateTestToken } from '../test-helper'
5 +
6 + const app = createApp()
7 + const db = buildPrisma()
8 +
9 + afterAll(() => db.$disconnect())
10 + beforeEach(() => cleanupTestDb(db))
11 +
12 + describe('GET /users/me', () => {
13 + it('returns the authenticated user', async () => {
14 + const user = await createTestUser(db, { email: 'me@example.com', firstName: 'Pedro' })
15 + const token = generateTestToken(user.id, user.email)
16 +
17 + const res = await request(app)
18 + .get('/users/me')
19 + .set('Authorization', `Bearer ${token}`)
20 +
21 + expect(res.status).toBe(200)
22 + expect(res.body.user.email).toBe('me@example.com')
23 + expect(res.body.user.firstName).toBe('Pedro')
24 + expect(res.body.user.encryptedPassword).toBeUndefined()
25 + })
26 +
27 + it('returns 401 without token', async () => {
28 + const res = await request(app).get('/users/me')
29 + expect(res.status).toBe(401)
30 + })
31 + })
@@ -1,85 +0,0 @@
1 - import test from "ava";
2 - import { PrismaClient } from '@prisma/client';
3 - import { PrismaPg } from '@prisma/adapter-pg';
4 - import request from 'supertest';
5 - import bcrypt from 'bcryptjs';
6 - import 'dotenv/config';
7 - import { Express } from 'express';
8 - import { createApp } from '../../src/createApp';
9 -
10 - let prisma: PrismaClient;
11 - let app: Express;
12 -
13 - test.before(() => {
14 - process.env.NODE_ENV = 'test';
15 -
16 - const connectionString = process.env.DATABASE_URL || 'postgres://user:password@orbit_db:5432/orbit_test';
17 - const adapter = new PrismaPg({ connectionString });
18 - prisma = new PrismaClient({ adapter });
19 -
20 - // Create Express app with test Prisma client
21 - app = createApp(prisma);
22 - });
23 -
24 - test.beforeEach(async () => {
25 - // Clean database before each test
26 - try {
27 - await prisma.user.deleteMany({});
28 - } catch (err) {
29 - console.error('Error cleaning test DB:', err);
30 - }
31 - });
32 -
33 - test.after.always(async () => {
34 - await prisma?.$disconnect();
35 - });
36 -
37 - test("PUT /users/:id updates user profile", async (t) => {
38 - // Create a user first
39 - const user = await prisma.user.create({
40 - data: {
41 - email: "update@example.com",
42 - firstName: "Original",
43 - lastName: "Name",
44 - encryptedPassword: bcrypt.hashSync("password", 10)
45 - }
46 - });
47 -
48 - const updateData = {
49 - firstName: "Updated",
50 - lastName: "Profile"
51 - };
52 -
53 - // TODO: Gotta check why its failing. Most likely due to the
54 - // cors/credentials: true line
55 - const response = await request(app)
56 - .put(`/users/${user.id}`)
57 - .send(updateData)
58 - .expect('Content-Type', /json/)
59 - .expect(200);
60 -
61 - t.is(response.body.user.firstName, updateData.firstName);
62 - t.is(response.body.user.lastName, updateData.lastName);
63 - t.is(response.body.user.email, user.email); // Should remain unchanged
64 -
65 - // Verify in database
66 - const dbUser = await prisma.user.findUnique({
67 - where: { id: user.id }
68 - });
69 -
70 - t.is(dbUser!.firstName, updateData.firstName);
71 - t.is(dbUser!.lastName, updateData.lastName);
72 - });
73 -
74 - test("PUT /users/:id returns 404 for non-existent user", async (t) => {
75 - const response = await request(app)
76 - .put('/users/999999')
77 - .send({
78 - firstName: "Updated",
79 - lastName: "Name"
80 - })
81 - .expect('Content-Type', /json/)
82 - .expect(404);
83 -
84 - t.truthy(response.body.error);
85 - });
api/tsconfig.json
1 1
{
2 2
  "compilerOptions": {
3 3
    "target": "ES2020",
4 4
    "module": "CommonJS",
5 5
    "moduleResolution": "node",
6 6
    "outDir": "dist",
7 -
    "rootDir": "src",
8 7
    "strict": true,
9 8
    "esModuleInterop": true,
10 9
    "baseUrl": ".",
11 10
    "paths": {
12 11
      "@app/*": ["src/*"]
13 12
    }
14 13
  }
15 14
}
16 15

api/tsconfig.test.json
1 1
{
2 2
  "extends": "./tsconfig.json",
3 3
  "compilerOptions": {
4 -
    "module": "ESNext",
5 -
    "moduleResolution": "node",
6 -
    "allowImportingTsExtensions": true,
7 -
    "resolveJsonModule": true,
8 -
    "noEmit": true
4 +
    "types": ["vitest/globals"]
9 5
  },
10 -
  "ts-node": {
11 -
    "esm": true,
12 -
    "experimentalSpecifierResolution": "node",
13 -
    "transpileOnly": true,
14 -
    "require": ["tsconfig-paths/register"]
15 -
  }
16 -
}
6 +
  "include": ["src/**/*", "tests/**/*"]
7 +
}
api/vitest.config.ts
@@ -0,0 +1,15 @@
1 + import { defineConfig } from 'vitest/config'
2 + import tsconfigPaths from 'vite-tsconfig-paths'
3 +
4 + export default defineConfig({
5 + plugins: [tsconfigPaths({ projects: ['./tsconfig.test.json'] })],
6 + test: {
7 + environment: 'node',
8 + setupFiles: ['./tests/setup.ts'],
9 + fileParallelism: false,
10 + testTimeout: 15_000,
11 + typecheck: {
12 + tsconfig: './tsconfig.test.json',
13 + },
14 + },
15 + })