From 96aea4968b07927b0b5441cd1138bb7ab079ad92 Mon Sep 17 00:00:00 2001 From: piyook Date: Fri, 13 Jun 2025 11:10:57 +0100 Subject: [PATCH 1/9] feat(): add mcp server with a get all endpoints tool --- package-lock.json | 14218 +++++++++++++++++---------------- package.json | 117 +- src/mcp/get-all-endpoints.js | 13 + src/mcp/get-all-endpoints.ts | 14 + src/mcp/server.js | 37 + src/mcp/server.ts | 41 + 6 files changed, 7509 insertions(+), 6931 deletions(-) create mode 100644 src/mcp/get-all-endpoints.js create mode 100644 src/mcp/get-all-endpoints.ts create mode 100644 src/mcp/server.js create mode 100644 src/mcp/server.ts diff --git a/package-lock.json b/package-lock.json index a87dcfc..049765c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6876 +1,7346 @@ { - "name": "mock-api-framework-template", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@faker-js/faker": "^9.8.0", - "@mswjs/data": "^0.16.2", - "@mswjs/http-middleware": "^0.10.3", - "@types/chai-json-schema": "^1.4.10", - "@types/express": "^5.0.3", - "@types/markdown-it": "^14.1.2", - "chai-json-schema": "^1.5.1", - "dotenv": "^16.5.0", - "highlight.js": "^11.11.1", - "markdown-it": "^14.1.0", - "msw": "^2.10.2", - "pretty-print-json": "^3.0.4", - "sharp": "^0.34.2", - "tsx": "^4.20.1", - "typescript": "^5.8.3", - "zod": "^3.25.61" - }, - "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-conventional": "^19.8.1", - "@types/aws-lambda": "^8.10.149", - "@types/node": "^24.0.0", - "cypress": "^14.4.1", - "husky": "^9.1.7", - "lint-staged": "^16.1.0", - "oxlint": "^1.0.0", - "prettier": "3.5.3", - "start-server-and-test": "^2.0.12" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bundled-es-modules/cookie": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", - "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", - "license": "ISC", - "dependencies": { - "cookie": "^0.7.2" - } - }, - "node_modules/@bundled-es-modules/statuses": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", - "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", - "dependencies": { - "statuses": "^2.0.1" - } - }, - "node_modules/@bundled-es-modules/tough-cookie": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", - "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", - "license": "ISC", - "dependencies": { - "@types/tough-cookie": "^4.0.5", - "tough-cookie": "^4.1.4" - } - }, - "node_modules/@commitlint/cli": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", - "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/format": "^19.8.1", - "@commitlint/lint": "^19.8.1", - "@commitlint/load": "^19.8.1", - "@commitlint/read": "^19.8.1", - "@commitlint/types": "^19.8.1", - "tinyexec": "^1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/config-conventional": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", - "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "conventional-changelog-conventionalcommits": "^7.0.2" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/config-validator": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", - "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/config-validator/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/ensure": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", - "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/execute-rule": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", - "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/format": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", - "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "chalk": "^5.3.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@commitlint/is-ignored": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", - "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/lint": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", - "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/is-ignored": "^19.8.1", - "@commitlint/parse": "^19.8.1", - "@commitlint/rules": "^19.8.1", - "@commitlint/types": "^19.8.1" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/load": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", - "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/execute-rule": "^19.8.1", - "@commitlint/resolve-extends": "^19.8.1", - "@commitlint/types": "^19.8.1", - "chalk": "^5.3.0", - "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^6.1.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@commitlint/message": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", - "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/parse": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", - "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/read": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", - "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/top-level": "^19.8.1", - "@commitlint/types": "^19.8.1", - "git-raw-commits": "^4.0.0", - "minimist": "^1.2.8", - "tinyexec": "^1.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/resolve-extends": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", - "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/types": "^19.8.1", - "global-directory": "^4.0.1", - "import-meta-resolve": "^4.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/rules": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", - "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/ensure": "^19.8.1", - "@commitlint/message": "^19.8.1", - "@commitlint/to-lines": "^19.8.1", - "@commitlint/types": "^19.8.1" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/to-lines": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", - "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/top-level": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", - "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^7.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@commitlint/top-level/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/types": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", - "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/conventional-commits-parser": "^5.0.0", - "chalk": "^5.3.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/types/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@cypress/request": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.8.tgz", - "integrity": "sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~4.0.0", - "http-signature": "~1.4.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "6.14.0", - "safe-buffer": "^5.1.2", - "tough-cookie": "^5.0.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/request/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@cypress/request/node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@faker-js/faker": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.8.0.tgz", - "integrity": "sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/fakerjs" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.0.0", - "npm": ">=9.0.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", - "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", - "cpu": [ - "ppc64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.4.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz", - "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.0", - "@inquirer/type": "^3.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz", - "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==", - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.8", - "@inquirer/type": "^3.0.1", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", - "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", - "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@mswjs/data": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@mswjs/data/-/data-0.16.2.tgz", - "integrity": "sha512-/C0d/PBcJyQJokUhcjO4HiZPc67hzllKlRtD1XELygl2t991/ATAAQJVcStn4YtVALsNodruzOHT0JIvgr0hnA==", - "license": "MIT", - "dependencies": { - "@types/lodash": "^4.14.172", - "@types/md5": "^2.3.0", - "@types/pluralize": "^0.0.29", - "@types/uuid": "^8.3.0", - "date-fns": "^2.21.1", - "debug": "^4.3.1", - "graphql": "^16.8.1", - "lodash": "^4.17.21", - "md5": "^2.3.0", - "outvariant": "^1.2.1", - "pluralize": "^8.0.0", - "strict-event-emitter": "^0.5.0", - "uuid": "^8.3.1" - }, - "optionalDependencies": { - "msw": "^2.0.8" - } - }, - "node_modules/@mswjs/data/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@mswjs/data/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@mswjs/http-middleware": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@mswjs/http-middleware/-/http-middleware-0.10.3.tgz", - "integrity": "sha512-6CoX9IivDF7hggORdA4vX6uz+pkY1urGQMhmviHmYya/0b4EXwmhaXlGLQG3G29heqb3qdjp61V0+E2xRtyR5A==", - "license": "MIT", - "dependencies": { - "express": "^4.18.2", - "strict-event-emitter": "^0.5.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "msw": ">=2.0.0" - } - }, - "node_modules/@mswjs/interceptors": { - "version": "0.39.2", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.2.tgz", - "integrity": "sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==", - "license": "MIT", - "dependencies": { - "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/logger": "^0.3.0", - "@open-draft/until": "^2.0.0", - "is-node-process": "^1.2.0", - "outvariant": "^1.4.3", - "strict-event-emitter": "^0.5.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@open-draft/deferred-promise": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", - "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", - "license": "MIT" - }, - "node_modules/@open-draft/logger": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", - "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", - "license": "MIT", - "dependencies": { - "is-node-process": "^1.2.0", - "outvariant": "^1.4.0" - } - }, - "node_modules/@open-draft/until": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", - "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", - "license": "MIT" - }, - "node_modules/@oxlint/darwin-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.0.0.tgz", - "integrity": "sha512-Ei8wLh65Th/si5EY6mfQIXVpdXbJWOoh56FaxxPgVxTeJaj3NHUIlxICHkvTZ5dz8bnOFcbS/+9MaW8Qkzfm9g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@oxlint/darwin-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.0.0.tgz", - "integrity": "sha512-dbdtQ+rJTUb4jFKTzV+j08yYcR8lZssLF10n7MggK/jI7pBtoQN04cupzYdkxOWSy6uDXjDmWYFDIqlTqV7zOg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@oxlint/linux-arm64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.0.0.tgz", - "integrity": "sha512-71wy9zMxsAeRhCFQjUkDLT8N5tm10L5FxNxsUcEsezgM187X9tPGP1gwlFpYig7F+bg2X1dijFuTA/FSe0YpKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/linux-arm64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.0.0.tgz", - "integrity": "sha512-UbD4+2k7aGZOFtKK/yeESX7Fv0w9gQbcjrjr1HGY7QOYg7XlFlqzycZdPS6XbAuKA5oOXFpafaYOD4AyX3p2AA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/linux-x64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.0.0.tgz", - "integrity": "sha512-0NXWqsm65I3VaLgADW4y9r7Pwurqgs2fr1lqoTyTIlidD18LQ3UMAWp8NzBPMCYzw8c/rTgOzsFf0gLtxzMtwg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/linux-x64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.0.0.tgz", - "integrity": "sha512-AY1NLnVQI+tBeuaB8KCriWfiD6O1zZFAQHphRDcZiqSz4mauNq9FFuffW0N9RSR9hYttGr0UVdQ6eK72RhzOYg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@oxlint/win32-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.0.0.tgz", - "integrity": "sha512-X9y2KAdoqT/jy/sITGDZNMJHJAmhDhofItBnCf2DWS1HPakdtCAKGX9KMx6SivTbtPn1+JpZgfHn4Y7rNMvujQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@oxlint/win32-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.0.0.tgz", - "integrity": "sha512-x2eQwZCfRUi6GG0lhRuC54O6TK2uW7UbIvERh83vPi0ftd+rtGUuJauNdyC+pPx+iwFToFVet43/5MBMu4bMWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.149", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.149.tgz", - "integrity": "sha512-NXSZIhfJjnXqJgtS7IwutqIF/SOy1Wz5Px4gUY1RWITp3AYTyuJS4xaXr/bIJY1v15XMzrJ5soGnPM+7uigZjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", - "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "license": "MIT" - }, - "node_modules/@types/chai-json-schema": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@types/chai-json-schema/-/chai-json-schema-1.4.10.tgz", - "integrity": "sha512-fwN8kxGqJSCI0gwudEMrzrF/YXRV0LSo22ERzC2D3P2pqYVbBIeTqhPS/xp+Dyf9v6z1C9twdbciH9jL4ISl6Q==", - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/tv4": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/conventional-commits-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" - }, - "node_modules/@types/express": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", - "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", - "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/md5": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.5.tgz", - "integrity": "sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==" - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/node": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.0.tgz", - "integrity": "sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.8.0" - } - }, - "node_modules/@types/pluralize": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.29.tgz", - "integrity": "sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==" - }, - "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/statuses": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", - "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "license": "MIT" - }, - "node_modules/@types/tv4": { - "version": "1.2.33", - "resolved": "https://registry.npmjs.org/@types/tv4/-/tv4-1.2.33.tgz", - "integrity": "sha512-7phCVTXC6Bj50IV1iKOwqGkR4JONJyMbRZnKTSuujv1S/tO9rG5OdCt7BMSjytO+zJmYdn1/I4fd3SH0gtO99g==", - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true, - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cachedir": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "license": "MIT", - "peer": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-json-schema": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/chai-json-schema/-/chai-json-schema-1.5.1.tgz", - "integrity": "sha512-TR/xPDxRhqwFFCWg1HgL8nNWbpNfUwaib6pBN++QKpnd0t+o3+MBvAn5CM1mpdUMaM76oJAtUjGKdjGad01lIA==", - "license": "MIT", - "dependencies": { - "jsonpointer.js": "0.4.0", - "tv4": "^1.3.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "chai": ">= 1.6.1 < 5" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "license": "MIT", - "peer": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "colors": "1.4.0" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", - "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-commits-parser/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jiti": "^2.4.1" - }, - "engines": { - "node": ">=v18" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=9", - "typescript": ">=5" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "engines": { - "node": "*" - } - }, - "node_modules/cypress": { - "version": "14.4.1", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.4.1.tgz", - "integrity": "sha512-YSGvVXtTqSGRTyHbaxHI5dHU/9xc5ymaTIM4BU85GKhj980y6XgA3fShSpj5DatS8knXMsAvYItQxVQFHGpUtw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@cypress/request": "^3.0.8", - "@cypress/xvfb": "^1.2.4", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.7.1", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-table3": "0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "process": "^0.11.10", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.7.1", - "supports-color": "^8.1.1", - "tmp": "~0.2.3", - "tree-kill": "1.2.2", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - } - }, - "node_modules/cypress/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/cypress/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/cypress/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/cypress/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/cypress/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/cypress/node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/cypress/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cypress/node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/cypress/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/cypress/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/cypress/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/dayjs": { - "version": "1.11.11", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "license": "MIT", - "peer": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/headers-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", - "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==" - }, - "node_modules/highlight.js": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-signature": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", - "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.18.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-node-process": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", - "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", - "license": "MIT" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jsonpointer.js": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz", - "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg==", - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "> 0.8" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/lint-staged": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.0.tgz", - "integrity": "sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.4.1", - "commander": "^14.0.0", - "debug": "^4.4.1", - "lilconfig": "^3.1.3", - "listr2": "^8.3.3", - "micromatch": "^4.0.8", - "nano-spawn": "^1.0.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.2", - "yaml": "^2.8.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=20.17" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/lint-staged/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", - "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "license": "MIT", - "peer": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/msw": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.10.2.tgz", - "integrity": "sha512-RCKM6IZseZQCWcSWlutdf590M8nVfRHG1ImwzOtwz8IYxgT4zhUO0rfTcTvDGiaFE0Rhcc+h43lcF3Jc9gFtwQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@bundled-es-modules/cookie": "^2.0.1", - "@bundled-es-modules/statuses": "^1.0.1", - "@bundled-es-modules/tough-cookie": "^0.1.6", - "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.39.1", - "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/until": "^2.1.0", - "@types/cookie": "^0.6.0", - "@types/statuses": "^2.0.4", - "graphql": "^16.8.1", - "headers-polyfill": "^4.0.2", - "is-node-process": "^1.2.0", - "outvariant": "^1.4.3", - "path-to-regexp": "^6.3.0", - "picocolors": "^1.1.1", - "strict-event-emitter": "^0.5.1", - "type-fest": "^4.26.1", - "yargs": "^17.7.2" - }, - "bin": { - "msw": "cli/index.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mswjs" - }, - "peerDependencies": { - "typescript": ">= 4.8.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/nano-spawn": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", - "integrity": "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true, - "license": "MIT" - }, - "node_modules/outvariant": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", - "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", - "license": "MIT" - }, - "node_modules/oxlint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.0.0.tgz", - "integrity": "sha512-yyeryHnd21wPBLBEF4Uf8hvzJlftrIGHxyUaqFaP2JYiZ9cbiColygZhrezvv/Z/aThCmYu3j6iJMxlVPxNt6g==", - "dev": true, - "license": "MIT", - "bin": { - "oxc_language_server": "bin/oxc_language_server", - "oxlint": "bin/oxlint" - }, - "engines": { - "node": ">=8.*" - }, - "funding": { - "url": "https://github.com/sponsors/Boshen" - }, - "optionalDependencies": { - "@oxlint/darwin-arm64": "1.0.0", - "@oxlint/darwin-x64": "1.0.0", - "@oxlint/linux-arm64-gnu": "1.0.0", - "@oxlint/linux-arm64-musl": "1.0.0", - "@oxlint/linux-x64-gnu": "1.0.0", - "@oxlint/linux-x64-musl": "1.0.0", - "@oxlint/win32-arm64": "1.0.0", - "@oxlint/win32-x64": "1.0.0" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT" - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-print-json": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pretty-print-json/-/pretty-print-json-3.0.4.tgz", - "integrity": "sha512-sVupP4x7magteGomyHFUiL8trOVVo45BP74gVo6IiRhQFp3qtmlqCdFt/Tjkim1+/Rr+P/wKl4p67d1BQ8h9bw==", - "license": "MIT" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", - "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.4", - "semver": "^7.7.2" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.2", - "@img/sharp-darwin-x64": "0.34.2", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.2", - "@img/sharp-linux-arm64": "0.34.2", - "@img/sharp-linux-s390x": "0.34.2", - "@img/sharp-linux-x64": "0.34.2", - "@img/sharp-linuxmusl-arm64": "0.34.2", - "@img/sharp-linuxmusl-x64": "0.34.2", - "@img/sharp-wasm32": "0.34.2", - "@img/sharp-win32-arm64": "0.34.2", - "@img/sharp-win32-ia32": "0.34.2", - "@img/sharp-win32-x64": "0.34.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/start-server-and-test": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.12.tgz", - "integrity": "sha512-U6QiS5qsz+DN5RfJJrkAXdooxMDnLZ+n5nR8kaX//ZH19SilF6b58Z3zM9zTfrNIkJepzauHo4RceSgvgUSX9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "arg": "^5.0.2", - "bluebird": "3.7.2", - "check-more-types": "2.24.0", - "debug": "4.4.1", - "execa": "5.1.1", - "lazy-ass": "1.6.0", - "ps-tree": "1.2.0", - "wait-on": "8.0.3" - }, - "bin": { - "server-test": "src/bin/start.js", - "start-server-and-test": "src/bin/start.js", - "start-test": "src/bin/start.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/start-server-and-test/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/start-server-and-test/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/strict-event-emitter": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", - "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" - }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/throttleit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tinyexec": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tldts": { - "version": "6.1.85", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz", - "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.85" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.85", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz", - "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "devOptional": true - }, - "node_modules/tsx": { - "version": "4.20.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.1.tgz", - "integrity": "sha512-JsFUnMHIE+g8KllOvWTrSOwCKM10xLcsesvUQR61znsbrcwZ4U/QaqdymmvTqG5GMD7k2VFv9UG35C4dRy34Ag==", - "license": "MIT", - "dependencies": { - "esbuild": "~0.25.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", - "license": [ - { - "type": "Public Domain", - "url": "http://geraintluff.github.io/tv4/LICENSE.txt" - }, - { - "type": "MIT", - "url": "http://jsonary.com/LICENSE.txt" - } - ], - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", - "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/wait-on": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.3.tgz", - "integrity": "sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "^1.8.2", - "joi": "^17.13.3", - "lodash": "^4.17.21", - "minimist": "^1.2.8", - "rxjs": "^7.8.2" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.25.61", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.61.tgz", - "integrity": "sha512-fzfJgUw78LTNnHujj9re1Ov/JJQkRZZGDMcYqSx7Hp4rPOkKywaFHq0S6GoHeXs0wGNE/sIOutkXgnwzrVOGCQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } + "name": "mock-api-framework-template", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@faker-js/faker": "^9.8.0", + "@modelcontextprotocol/sdk": "^1.12.1", + "@mswjs/data": "^0.16.2", + "@mswjs/http-middleware": "^0.10.3", + "@types/chai-json-schema": "^1.4.10", + "@types/express": "^5.0.3", + "@types/markdown-it": "^14.1.2", + "chai-json-schema": "^1.5.1", + "dotenv": "^16.5.0", + "highlight.js": "^11.11.1", + "markdown-it": "^14.1.0", + "msw": "^2.10.2", + "pretty-print-json": "^3.0.4", + "sharp": "^0.34.2", + "tsx": "^4.20.1", + "typescript": "^5.8.3", + "zod": "^3.25.61" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.1", + "@commitlint/config-conventional": "^19.8.1", + "@types/aws-lambda": "^8.10.149", + "@types/node": "^24.0.0", + "cypress": "^14.4.1", + "husky": "^9.1.7", + "lint-staged": "^16.1.0", + "oxlint": "^1.0.0", + "prettier": "3.5.3", + "start-server-and-test": "^2.0.12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", + "license": "ISC", + "dependencies": { + "cookie": "^0.7.2" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "license": "ISC", + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, + "node_modules/@commitlint/cli": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", + "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^19.8.1", + "@commitlint/lint": "^19.8.1", + "@commitlint/load": "^19.8.1", + "@commitlint/read": "^19.8.1", + "@commitlint/types": "^19.8.1", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", + "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "conventional-changelog-conventionalcommits": "^7.0.2" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", + "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/ensure": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", + "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", + "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", + "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", + "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", + "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^19.8.1", + "@commitlint/parse": "^19.8.1", + "@commitlint/rules": "^19.8.1", + "@commitlint/types": "^19.8.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", + "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.8.1", + "@commitlint/execute-rule": "^19.8.1", + "@commitlint/resolve-extends": "^19.8.1", + "@commitlint/types": "^19.8.1", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@commitlint/message": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", + "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", + "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^19.8.1", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", + "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^19.8.1", + "@commitlint/types": "^19.8.1", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", + "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^19.8.1", + "@commitlint/types": "^19.8.1", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", + "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^19.8.1", + "@commitlint/message": "^19.8.1", + "@commitlint/to-lines": "^19.8.1", + "@commitlint/types": "^19.8.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", + "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", + "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^7.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@commitlint/top-level/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/types": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", + "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.8.tgz", + "integrity": "sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.14.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^5.0.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/request/node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@faker-js/faker": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.8.0.tgz", + "integrity": "sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", + "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz", + "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.0", + "@inquirer/type": "^3.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz", + "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==", + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.8", + "@inquirer/type": "^3.0.1", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", + "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", + "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.1.tgz", + "integrity": "sha512-KG1CZhZfWg+u8pxeM/mByJDScJSrjjxLc8fwQqbsS8xCjBmQfMNEBTotYdNanKekepnfRI85GtgQlctLFpcYPw==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mswjs/data": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@mswjs/data/-/data-0.16.2.tgz", + "integrity": "sha512-/C0d/PBcJyQJokUhcjO4HiZPc67hzllKlRtD1XELygl2t991/ATAAQJVcStn4YtVALsNodruzOHT0JIvgr0hnA==", + "license": "MIT", + "dependencies": { + "@types/lodash": "^4.14.172", + "@types/md5": "^2.3.0", + "@types/pluralize": "^0.0.29", + "@types/uuid": "^8.3.0", + "date-fns": "^2.21.1", + "debug": "^4.3.1", + "graphql": "^16.8.1", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "outvariant": "^1.2.1", + "pluralize": "^8.0.0", + "strict-event-emitter": "^0.5.0", + "uuid": "^8.3.1" + }, + "optionalDependencies": { + "msw": "^2.0.8" + } + }, + "node_modules/@mswjs/data/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@mswjs/data/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@mswjs/http-middleware": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@mswjs/http-middleware/-/http-middleware-0.10.3.tgz", + "integrity": "sha512-6CoX9IivDF7hggORdA4vX6uz+pkY1urGQMhmviHmYya/0b4EXwmhaXlGLQG3G29heqb3qdjp61V0+E2xRtyR5A==", + "license": "MIT", + "dependencies": { + "express": "^4.18.2", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "msw": ">=2.0.0" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.39.2", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.2.tgz", + "integrity": "sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==", + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "license": "MIT" + }, + "node_modules/@oxlint/darwin-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.0.0.tgz", + "integrity": "sha512-Ei8wLh65Th/si5EY6mfQIXVpdXbJWOoh56FaxxPgVxTeJaj3NHUIlxICHkvTZ5dz8bnOFcbS/+9MaW8Qkzfm9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/darwin-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.0.0.tgz", + "integrity": "sha512-dbdtQ+rJTUb4jFKTzV+j08yYcR8lZssLF10n7MggK/jI7pBtoQN04cupzYdkxOWSy6uDXjDmWYFDIqlTqV7zOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/linux-arm64-gnu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.0.0.tgz", + "integrity": "sha512-71wy9zMxsAeRhCFQjUkDLT8N5tm10L5FxNxsUcEsezgM187X9tPGP1gwlFpYig7F+bg2X1dijFuTA/FSe0YpKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-arm64-musl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.0.0.tgz", + "integrity": "sha512-UbD4+2k7aGZOFtKK/yeESX7Fv0w9gQbcjrjr1HGY7QOYg7XlFlqzycZdPS6XbAuKA5oOXFpafaYOD4AyX3p2AA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-gnu": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.0.0.tgz", + "integrity": "sha512-0NXWqsm65I3VaLgADW4y9r7Pwurqgs2fr1lqoTyTIlidD18LQ3UMAWp8NzBPMCYzw8c/rTgOzsFf0gLtxzMtwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-musl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.0.0.tgz", + "integrity": "sha512-AY1NLnVQI+tBeuaB8KCriWfiD6O1zZFAQHphRDcZiqSz4mauNq9FFuffW0N9RSR9hYttGr0UVdQ6eK72RhzOYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/win32-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.0.0.tgz", + "integrity": "sha512-X9y2KAdoqT/jy/sITGDZNMJHJAmhDhofItBnCf2DWS1HPakdtCAKGX9KMx6SivTbtPn1+JpZgfHn4Y7rNMvujQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/win32-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.0.0.tgz", + "integrity": "sha512-x2eQwZCfRUi6GG0lhRuC54O6TK2uW7UbIvERh83vPi0ftd+rtGUuJauNdyC+pPx+iwFToFVet43/5MBMu4bMWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.149", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.149.tgz", + "integrity": "sha512-NXSZIhfJjnXqJgtS7IwutqIF/SOy1Wz5Px4gUY1RWITp3AYTyuJS4xaXr/bIJY1v15XMzrJ5soGnPM+7uigZjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", + "license": "MIT" + }, + "node_modules/@types/chai-json-schema": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@types/chai-json-schema/-/chai-json-schema-1.4.10.tgz", + "integrity": "sha512-fwN8kxGqJSCI0gwudEMrzrF/YXRV0LSo22ERzC2D3P2pqYVbBIeTqhPS/xp+Dyf9v6z1C9twdbciH9jL4ISl6Q==", + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/tv4": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/conventional-commits-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, + "node_modules/@types/express": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", + "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/md5": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.5.tgz", + "integrity": "sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==" + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/node": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.0.tgz", + "integrity": "sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/pluralize": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.29.tgz", + "integrity": "sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==" + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "license": "MIT" + }, + "node_modules/@types/tv4": { + "version": "1.2.33", + "resolved": "https://registry.npmjs.org/@types/tv4/-/tv4-1.2.33.tgz", + "integrity": "sha512-7phCVTXC6Bj50IV1iKOwqGkR4JONJyMbRZnKTSuujv1S/tO9rG5OdCt7BMSjytO+zJmYdn1/I4fd3SH0gtO99g==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-json-schema": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/chai-json-schema/-/chai-json-schema-1.5.1.tgz", + "integrity": "sha512-TR/xPDxRhqwFFCWg1HgL8nNWbpNfUwaib6pBN++QKpnd0t+o3+MBvAn5CM1mpdUMaM76oJAtUjGKdjGad01lIA==", + "license": "MIT", + "dependencies": { + "jsonpointer.js": "0.4.0", + "tv4": "^1.3.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "chai": ">= 1.6.1 < 5" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "1.4.0" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-commits-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^2.0.0", + "JSONStream": "^1.3.5", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/conventional-commits-parser/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "^2.4.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/cypress": { + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.4.1.tgz", + "integrity": "sha512-YSGvVXtTqSGRTyHbaxHI5dHU/9xc5ymaTIM4BU85GKhj980y6XgA3fShSpj5DatS8knXMsAvYItQxVQFHGpUtw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cypress/request": "^3.0.8", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-table3": "0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.7.1", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + } + }, + "node_modules/cypress/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/cypress/node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cypress/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cypress/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cypress/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "license": "MIT", + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.2.tgz", + "integrity": "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "^4.11 || 5 || ^5.0.0-beta.1" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.mjs" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==" + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsonpointer.js": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz", + "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg==", + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lint-staged": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.0.tgz", + "integrity": "sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0", + "debug": "^4.4.1", + "lilconfig": "^3.1.3", + "listr2": "^8.3.3", + "micromatch": "^4.0.8", + "nano-spawn": "^1.0.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.8.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/msw": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.10.2.tgz", + "integrity": "sha512-RCKM6IZseZQCWcSWlutdf590M8nVfRHG1ImwzOtwz8IYxgT4zhUO0rfTcTvDGiaFE0Rhcc+h43lcF3Jc9gFtwQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.39.1", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nano-spawn": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", + "integrity": "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "license": "MIT" + }, + "node_modules/oxlint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.0.0.tgz", + "integrity": "sha512-yyeryHnd21wPBLBEF4Uf8hvzJlftrIGHxyUaqFaP2JYiZ9cbiColygZhrezvv/Z/aThCmYu3j6iJMxlVPxNt6g==", + "dev": true, + "license": "MIT", + "bin": { + "oxc_language_server": "bin/oxc_language_server", + "oxlint": "bin/oxlint" + }, + "engines": { + "node": ">=8.*" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/darwin-arm64": "1.0.0", + "@oxlint/darwin-x64": "1.0.0", + "@oxlint/linux-arm64-gnu": "1.0.0", + "@oxlint/linux-arm64-musl": "1.0.0", + "@oxlint/linux-x64-gnu": "1.0.0", + "@oxlint/linux-x64-musl": "1.0.0", + "@oxlint/win32-arm64": "1.0.0", + "@oxlint/win32-x64": "1.0.0" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-print-json": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pretty-print-json/-/pretty-print-json-3.0.4.tgz", + "integrity": "sha512-sVupP4x7magteGomyHFUiL8trOVVo45BP74gVo6IiRhQFp3qtmlqCdFt/Tjkim1+/Rr+P/wKl4p67d1BQ8h9bw==", + "license": "MIT" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", + "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.4", + "semver": "^7.7.2" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.2", + "@img/sharp-darwin-x64": "0.34.2", + "@img/sharp-libvips-darwin-arm64": "1.1.0", + "@img/sharp-libvips-darwin-x64": "1.1.0", + "@img/sharp-libvips-linux-arm": "1.1.0", + "@img/sharp-libvips-linux-arm64": "1.1.0", + "@img/sharp-libvips-linux-ppc64": "1.1.0", + "@img/sharp-libvips-linux-s390x": "1.1.0", + "@img/sharp-libvips-linux-x64": "1.1.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", + "@img/sharp-libvips-linuxmusl-x64": "1.1.0", + "@img/sharp-linux-arm": "0.34.2", + "@img/sharp-linux-arm64": "0.34.2", + "@img/sharp-linux-s390x": "0.34.2", + "@img/sharp-linux-x64": "0.34.2", + "@img/sharp-linuxmusl-arm64": "0.34.2", + "@img/sharp-linuxmusl-x64": "0.34.2", + "@img/sharp-wasm32": "0.34.2", + "@img/sharp-win32-arm64": "0.34.2", + "@img/sharp-win32-ia32": "0.34.2", + "@img/sharp-win32-x64": "0.34.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/start-server-and-test": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.12.tgz", + "integrity": "sha512-U6QiS5qsz+DN5RfJJrkAXdooxMDnLZ+n5nR8kaX//ZH19SilF6b58Z3zM9zTfrNIkJepzauHo4RceSgvgUSX9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.4.1", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "8.0.3" + }, + "bin": { + "server-test": "src/bin/start.js", + "start-server-and-test": "src/bin/start.js", + "start-test": "src/bin/start.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/start-server-and-test/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/start-server-and-test/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-extensions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tldts": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz", + "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.85" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz", + "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "devOptional": true + }, + "node_modules/tsx": { + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.1.tgz", + "integrity": "sha512-JsFUnMHIE+g8KllOvWTrSOwCKM10xLcsesvUQR61znsbrcwZ4U/QaqdymmvTqG5GMD7k2VFv9UG35C4dRy34Ag==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", + "license": [ + { + "type": "Public Domain", + "url": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, + { + "type": "MIT", + "url": "http://jsonary.com/LICENSE.txt" + } + ], + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", + "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/wait-on": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.3.tgz", + "integrity": "sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.8.2", + "joi": "^17.13.3", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.2" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.61", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.61.tgz", + "integrity": "sha512-fzfJgUw78LTNnHujj9re1Ov/JJQkRZZGDMcYqSx7Hp4rPOkKywaFHq0S6GoHeXs0wGNE/sIOutkXgnwzrVOGCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + } + } } diff --git a/package.json b/package.json index 824c279..8af8e1d 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,62 @@ { - "type": "module", - "scripts": { - "dev": "tsx watch ./src/server.ts", - "start": "docker compose up -d", - "stop": "docker compose down --volumes", - "rebuild": "docker compose down --volumes && docker compose up -d --force-recreate --build", - "restart": "npm stop && npm start", - "nuke": "bash nuke.sh", - "prepare": "husky || true", - "lint": "oxlint", - "lint-fix": "oxlint --fix", - "pretty": "prettier 'src/**/*.{js,jsx,ts,tsx,css,scss,md}' --check", - "pretty-fix": "prettier 'src/**/*.{js,jsx,ts,tsx,css,scss,md}' --write", - "test:e2e": "start-server-and-test dev tcp:8000 cypress:run", - "cypress:open": "cypress open", - "cypress:run": "cypress run --e2e", - "validate-branch-name": "bash validate-branch-name.sh" - }, - "dependencies": { - "@faker-js/faker": "^9.8.0", - "@mswjs/data": "^0.16.2", - "@mswjs/http-middleware": "^0.10.3", - "@types/chai-json-schema": "^1.4.10", - "@types/express": "^5.0.3", - "@types/markdown-it": "^14.1.2", - "chai-json-schema": "^1.5.1", - "dotenv": "^16.5.0", - "highlight.js": "^11.11.1", - "markdown-it": "^14.1.0", - "msw": "^2.10.2", - "pretty-print-json": "^3.0.4", - "sharp": "^0.34.2", - "tsx": "^4.20.1", - "typescript": "^5.8.3", - "zod": "^3.25.61" - }, - "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-conventional": "^19.8.1", - "@types/aws-lambda": "^8.10.149", - "@types/node": "^24.0.0", - "cypress": "^14.4.1", - "husky": "^9.1.7", - "lint-staged": "^16.1.0", - "oxlint": "^1.0.0", - "prettier": "3.5.3", - "start-server-and-test": "^2.0.12" - }, - "lint-staged": { - "src/**/*.{js,jsx,ts,tsx}": "oxlint", - "src/**/*.{js,jsx,ts,tsx,css,scss,md}": "oxlint" - }, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - } + "type": "module", + "scripts": { + "dev": "tsx watch ./src/server.ts", + "start": "docker compose up -d", + "stop": "docker compose down --volumes", + "rebuild": "docker compose down --volumes && docker compose up -d --force-recreate --build", + "restart": "npm stop && npm start", + "nuke": "bash nuke.sh", + "prepare": "husky || true", + "lint": "oxlint", + "lint-fix": "oxlint --fix", + "pretty": "prettier 'src/**/*.{js,jsx,ts,tsx,css,scss,md}' --check", + "pretty-fix": "prettier 'src/**/*.{js,jsx,ts,tsx,css,scss,md}' --write", + "test:e2e": "start-server-and-test dev tcp:8000 cypress:run", + "cypress:open": "cypress open", + "cypress:run": "cypress run --e2e", + "validate-branch-name": "bash validate-branch-name.sh", + "mcp:build": "tsc ./src/mcp/server.ts --target esnext --moduleResolution nodenext --module nodenext", + "mcp:debug": "npx @modelcontextprotocol/inspector node ./src/mcp/server.js" + }, + "dependencies": { + "@faker-js/faker": "^9.8.0", + "@modelcontextprotocol/sdk": "^1.12.1", + "@mswjs/data": "^0.16.2", + "@mswjs/http-middleware": "^0.10.3", + "@types/chai-json-schema": "^1.4.10", + "@types/express": "^5.0.3", + "@types/markdown-it": "^14.1.2", + "chai-json-schema": "^1.5.1", + "dotenv": "^16.5.0", + "highlight.js": "^11.11.1", + "markdown-it": "^14.1.0", + "msw": "^2.10.2", + "pretty-print-json": "^3.0.4", + "sharp": "^0.34.2", + "tsx": "^4.20.1", + "typescript": "^5.8.3", + "zod": "^3.25.61" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.1", + "@commitlint/config-conventional": "^19.8.1", + "@types/aws-lambda": "^8.10.149", + "@types/node": "^24.0.0", + "cypress": "^14.4.1", + "husky": "^9.1.7", + "lint-staged": "^16.1.0", + "oxlint": "^1.0.0", + "prettier": "3.5.3", + "start-server-and-test": "^2.0.12" + }, + "lint-staged": { + "src/**/*.{js,jsx,ts,tsx}": "oxlint", + "src/**/*.{js,jsx,ts,tsx,css,scss,md}": "oxlint" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + } } diff --git a/src/mcp/get-all-endpoints.js b/src/mcp/get-all-endpoints.js new file mode 100644 index 0000000..0b81c61 --- /dev/null +++ b/src/mcp/get-all-endpoints.js @@ -0,0 +1,13 @@ +const getApiEndpoints = async (port) => { + let response; + try { + response = await fetch(`http://localhost:${port}`); + if (!response.ok) { + return 'Local mock API server is not running - please start the server first.'; + } + } catch { + return 'Local mock API server is not running - please start the server first.'; + } + return response.text(); +}; +export { getApiEndpoints }; diff --git a/src/mcp/get-all-endpoints.ts b/src/mcp/get-all-endpoints.ts new file mode 100644 index 0000000..dc5a6b3 --- /dev/null +++ b/src/mcp/get-all-endpoints.ts @@ -0,0 +1,14 @@ +const getApiEndpoints = async (port: number) => { + let response; + try { + response = await fetch(`http://localhost:${port}`); + if (!response.ok) { + return 'Local mock API server is not running - please start the server first.'; + } + } catch { + return 'Local mock API server is not running - please start the server first.'; + } + return response.text(); +}; + +export { getApiEndpoints }; diff --git a/src/mcp/server.js b/src/mcp/server.js new file mode 100644 index 0000000..b1631ad --- /dev/null +++ b/src/mcp/server.js @@ -0,0 +1,37 @@ +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; +// import { z } from 'zod'; +import { getApiEndpoints } from './get-all-endpoints.js'; +// Change this to the port you want to use for your local mock API server +const PORT = 8000; +// Create server instance +const server = new McpServer({ + name: 'Local Mock API Server', + version: '1.0.0', + capabilities: { + resources: {}, + tools: {}, + }, +}); +server.tool( + 'get_localMockAPIEndpoints', + 'returns all available API endpoints on local mock API server on localhost', + {}, + async () => ({ + content: [ + { + type: 'text', + text: `localMockAPIEndpoints: ${await getApiEndpoints(PORT)}`, + }, + ], + }), +); +async function main() { + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Local Mock API MCP Server running on stdio'); +} +main().catch((error) => { + console.error('Fatal error in main():', error); + process.exit(1); +}); diff --git a/src/mcp/server.ts b/src/mcp/server.ts new file mode 100644 index 0000000..2cc23dc --- /dev/null +++ b/src/mcp/server.ts @@ -0,0 +1,41 @@ +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; +// import { z } from 'zod'; +import { getApiEndpoints } from './get-all-endpoints.js'; + +// Change this to the port you want to use for your local mock API server +const PORT = 8000; + +// Create server instance +const server = new McpServer({ + name: 'Local Mock API Server', + version: '1.0.0', + capabilities: { + resources: {}, + tools: {}, + }, +}); + +server.tool( + 'get_localMockAPIEndpoints', + 'returns all available API endpoints on local mock API server on localhost', + {}, + async () => ({ + content: [ + { + type: 'text', + text: `localMockAPIEndpoints: ${await getApiEndpoints(PORT)}`, + }, + ], + }), +); + +async function main() { + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Local Mock API MCP Server running on stdio'); +} +main().catch((error) => { + console.error('Fatal error in main():', error); + process.exit(1); +}); From 730420aa699b19c76217ef4c8796a7a5847dc8d2 Mon Sep 17 00:00:00 2001 From: piyook Date: Fri, 13 Jun 2025 14:31:39 +0100 Subject: [PATCH 2/9] chore(): add an mcp tool to create a simple api endpoint --- .gitignore | 4 +- src/api/images/api.ts | 2 +- src/api/json/api.ts | 3 +- src/api/videos/api.ts | 80 ++++++++++---------- src/mcp/data/api-handler-example.js | 11 +++ src/mcp/data/api-handler-example.ts | 18 +++++ src/mcp/get-all-endpoints.js | 13 ---- src/mcp/helpers/add-api-endpoint.js | 22 ++++++ src/mcp/helpers/add-api-endpoint.ts | 32 ++++++++ src/mcp/helpers/get-all-endpoints.js | 14 ++++ src/mcp/{ => helpers}/get-all-endpoints.ts | 0 src/mcp/server.js | 82 +++++++++++++------- src/mcp/server.ts | 51 ++++++++++++- src/seeders/post-seeder.ts | 3 - templates/handlers/api.custom.template.ts | 88 ++++++++++++---------- 15 files changed, 295 insertions(+), 128 deletions(-) create mode 100644 src/mcp/data/api-handler-example.js create mode 100644 src/mcp/data/api-handler-example.ts delete mode 100644 src/mcp/get-all-endpoints.js create mode 100644 src/mcp/helpers/add-api-endpoint.js create mode 100644 src/mcp/helpers/add-api-endpoint.ts create mode 100644 src/mcp/helpers/get-all-endpoints.js rename src/mcp/{ => helpers}/get-all-endpoints.ts (100%) diff --git a/.gitignore b/.gitignore index 71e21d2..a0ebfda 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules *.log -screenshots/ -videos/ +cypress/screenshots/ +cypress/videos/ diff --git a/src/api/images/api.ts b/src/api/images/api.ts index cfcac56..37313a1 100644 --- a/src/api/images/api.ts +++ b/src/api/images/api.ts @@ -49,7 +49,7 @@ function handler(pathName: string) { .png() .toBuffer(); - return HttpResponse.arrayBuffer(resizedImageBuffer, { + return new HttpResponse(resizedImageBuffer, { headers: { 'Content-Type': 'image/png', 'Access-Control-Allow-Origin': '*', diff --git a/src/api/json/api.ts b/src/api/json/api.ts index dfdb2fb..4babeea 100644 --- a/src/api/json/api.ts +++ b/src/api/json/api.ts @@ -33,9 +33,10 @@ function handler(pathName: string) { try { const data = fs.readFileSync( path.resolve(`./src/resources/json/${params}.json`), + 'utf-8', ); - return HttpResponse.arrayBuffer(data, { + return HttpResponse.text(data, { headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', diff --git a/src/api/videos/api.ts b/src/api/videos/api.ts index 7f8105c..a70966f 100644 --- a/src/api/videos/api.ts +++ b/src/api/videos/api.ts @@ -5,55 +5,55 @@ import { http, HttpResponse } from 'msw'; // Add any http handler here (get, push , delete etc., and middleware as needed) function handler(pathName: string) { - return [ - http.get(`/${pathName}`, ({ request }) => { - return HttpResponse.text( - ` + return [ + http.get(`/${pathName}`, ({ request: _request }) => { + return HttpResponse.text( + `

Access videos stored in the src/resources/videos folder using the format: api/videos/{filename}

Example: api/videos/placeholder.mp4

`, - { - headers: { - 'Content-Type': 'text/html', - 'Access-Control-Allow-Origin': '*', - }, - }, - ); - }), - http.get(`/${pathName}/:videoID`, ({ request }) => { - const url = new URL(request.url); - const params = url.pathname.split('/').pop(); + { + headers: { + 'Content-Type': 'text/html', + 'Access-Control-Allow-Origin': '*', + }, + }, + ); + }), + http.get(`/${pathName}/:videoID`, async ({ request }) => { + const url = new URL(request.url); + const params = url.pathname.split('/').pop(); - console.log(`starting ${pathName}`); + console.log(`starting ${pathName}`); - try { - const buffer = fs.readFileSync( - path.resolve(`./src/resources/videos/${params}`), - ); + try { + const buffer = fs.readFileSync( + path.resolve(`./src/resources/videos/${params}`), + ); - return HttpResponse.arrayBuffer(buffer, { - headers: { - 'Content-Type': 'video/mp4', - 'Access-Control-Allow-Origin': '*', - }, - }); - } catch { - return HttpResponse.text( - 'Error: File not found. Check file is in the src/resources/videos folder', - { - status: 404, - headers: { - 'Content-Type': 'text/html', - 'Access-Control-Allow-Origin': '*', - }, - }, - ); - } - }), - ]; + return new HttpResponse(buffer, { + headers: { + 'Content-Type': 'video/mp4', + 'Access-Control-Allow-Origin': '*', + }, + }); + } catch { + return HttpResponse.text( + 'Error: File not found. Check file is in the src/resources/videos folder', + { + status: 404, + headers: { + 'Content-Type': 'text/html', + 'Access-Control-Allow-Origin': '*', + }, + }, + ); + } + }), + ]; } export default handler; diff --git a/src/mcp/data/api-handler-example.js b/src/mcp/data/api-handler-example.js new file mode 100644 index 0000000..0053629 --- /dev/null +++ b/src/mcp/data/api-handler-example.js @@ -0,0 +1,11 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const apiHandlerExample = () => { + const filePath = path.join(__dirname, '../../../templates/handlers/api.custom.template.ts'); + const fileContent = fs.readFileSync(filePath, 'utf8'); + return fileContent; +}; +export { apiHandlerExample }; diff --git a/src/mcp/data/api-handler-example.ts b/src/mcp/data/api-handler-example.ts new file mode 100644 index 0000000..fb909fc --- /dev/null +++ b/src/mcp/data/api-handler-example.ts @@ -0,0 +1,18 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const apiHandlerExample = () => { + const filePath = path.join( + __dirname, + '../../../templates/handlers/api.custom.template.ts', + ); + + const fileContent = fs.readFileSync(filePath, 'utf8'); + return fileContent; +}; + +export { apiHandlerExample }; diff --git a/src/mcp/get-all-endpoints.js b/src/mcp/get-all-endpoints.js deleted file mode 100644 index 0b81c61..0000000 --- a/src/mcp/get-all-endpoints.js +++ /dev/null @@ -1,13 +0,0 @@ -const getApiEndpoints = async (port) => { - let response; - try { - response = await fetch(`http://localhost:${port}`); - if (!response.ok) { - return 'Local mock API server is not running - please start the server first.'; - } - } catch { - return 'Local mock API server is not running - please start the server first.'; - } - return response.text(); -}; -export { getApiEndpoints }; diff --git a/src/mcp/helpers/add-api-endpoint.js b/src/mcp/helpers/add-api-endpoint.js new file mode 100644 index 0000000..d381476 --- /dev/null +++ b/src/mcp/helpers/add-api-endpoint.js @@ -0,0 +1,22 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const addApiEndpoint = async (name, description, code) => { + if (!name || !description || !code) { + return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; + } + // Create path to the endpoint directory + const endpointDir = path.join(__dirname, '..', `..`, 'api', name); + const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' + if (fs.existsSync(apiPath)) { + return `API Endpoint Not created. API endpoint ${name} already exists.`; + } + // Create the endpoint directory first + fs.mkdirSync(endpointDir, { recursive: true }); + // Then create the file inside the directory + fs.writeFileSync(apiPath, code, 'utf8'); + return `API Endpoint ${name} created successfully at ${apiPath}.`; +}; +export { addApiEndpoint }; diff --git a/src/mcp/helpers/add-api-endpoint.ts b/src/mcp/helpers/add-api-endpoint.ts new file mode 100644 index 0000000..e6faace --- /dev/null +++ b/src/mcp/helpers/add-api-endpoint.ts @@ -0,0 +1,32 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const addApiEndpoint = async ( + name: string, + description: string, + code: string, +) => { + if (!name || !description || !code) { + return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; + } + + // Create path to the endpoint directory + const endpointDir = path.join(__dirname, '..', `..`, 'api', name); + const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' + + if (fs.existsSync(apiPath)) { + return `API Endpoint Not created. API endpoint ${name} already exists.`; + } + + // Create the endpoint directory first + fs.mkdirSync(endpointDir, { recursive: true }); + // Then create the file inside the directory + fs.writeFileSync(apiPath, code, 'utf8'); + return `API Endpoint ${name} created successfully at ${apiPath}.`; +}; + +export { addApiEndpoint }; diff --git a/src/mcp/helpers/get-all-endpoints.js b/src/mcp/helpers/get-all-endpoints.js new file mode 100644 index 0000000..4e4b483 --- /dev/null +++ b/src/mcp/helpers/get-all-endpoints.js @@ -0,0 +1,14 @@ +const getApiEndpoints = async (port) => { + let response; + try { + response = await fetch(`http://localhost:${port}`); + if (!response.ok) { + return 'Local mock API server is not running - please start the server first.'; + } + } + catch { + return 'Local mock API server is not running - please start the server first.'; + } + return response.text(); +}; +export { getApiEndpoints }; diff --git a/src/mcp/get-all-endpoints.ts b/src/mcp/helpers/get-all-endpoints.ts similarity index 100% rename from src/mcp/get-all-endpoints.ts rename to src/mcp/helpers/get-all-endpoints.ts diff --git a/src/mcp/server.js b/src/mcp/server.js index b1631ad..89c3410 100644 --- a/src/mcp/server.js +++ b/src/mcp/server.js @@ -1,37 +1,67 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; -// import { z } from 'zod'; -import { getApiEndpoints } from './get-all-endpoints.js'; +import { z } from 'zod'; +import { getApiEndpoints } from './helpers/get-all-endpoints.js'; +import { addApiEndpoint } from './helpers/add-api-endpoint.js'; +import { apiHandlerExample } from './data/api-handler-example.js'; // Change this to the port you want to use for your local mock API server const PORT = 8000; // Create server instance const server = new McpServer({ - name: 'Local Mock API Server', - version: '1.0.0', - capabilities: { - resources: {}, - tools: {}, - }, + name: 'Local Mock API Server', + version: '1.0.0', + capabilities: { + resources: {}, + tools: {}, + }, +}); +// Static resource +server.tool('get_code_format', 'returns the format to be used for API endpoint code generation to be used with add_localMockAPIEndpoint tool ', {}, () => ({ + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: + ${apiHandlerExample()} + This is a TypeScript file that exports a function that returns an array of HTTP handlers. + Create new api endpoint code using a similar pattern. + `, + }, + ], +})); +server.tool('get_localMockAPIEndpoints', 'returns all available API endpoints on local mock API server on localhost', {}, async () => ({ + content: [ + { + type: 'text', + text: `localMockAPIEndpoints: ${await getApiEndpoints(PORT)}`, + }, + ], +})); +server.tool('add_localMockAPIEndpoint', `adds a new API endpoint to the local mock API server on localhost + Args: + - name: Name of the API endpoint + - description: Description of the API endpoint + - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format tool )`, { + name: z.string().min(1, 'Name is required'), + description: z.string().min(1, 'Description is required'), + code: z.string().min(1, 'Code is required'), +}, async (input) => { + const { name, description, code } = input; + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; }); -server.tool( - 'get_localMockAPIEndpoints', - 'returns all available API endpoints on local mock API server on localhost', - {}, - async () => ({ - content: [ - { - type: 'text', - text: `localMockAPIEndpoints: ${await getApiEndpoints(PORT)}`, - }, - ], - }), -); async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error('Local Mock API MCP Server running on stdio'); + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Local Mock API MCP Server running on stdio'); } main().catch((error) => { - console.error('Fatal error in main():', error); - process.exit(1); + console.error('Fatal error in main():', error); + process.exit(1); }); diff --git a/src/mcp/server.ts b/src/mcp/server.ts index 2cc23dc..d491251 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -1,7 +1,9 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; -// import { z } from 'zod'; -import { getApiEndpoints } from './get-all-endpoints.js'; +import { z } from 'zod'; +import { getApiEndpoints } from './helpers/get-all-endpoints.js'; +import { addApiEndpoint } from './helpers/add-api-endpoint.js'; +import { apiHandlerExample } from './data/api-handler-example.js'; // Change this to the port you want to use for your local mock API server const PORT = 8000; @@ -16,6 +18,25 @@ const server = new McpServer({ }, }); +// Static resource +server.tool( + 'get_code_format', + 'returns the format to be used for API endpoint code generation to be used with add_localMockAPIEndpoint tool ', + {}, + () => ({ + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: + ${apiHandlerExample()} + This is a TypeScript file that exports a function that returns an array of HTTP handlers. + Create new api endpoint code using a similar pattern. + `, + }, + ], + }), +); + server.tool( 'get_localMockAPIEndpoints', 'returns all available API endpoints on local mock API server on localhost', @@ -30,6 +51,32 @@ server.tool( }), ); +server.tool( + 'add_localMockAPIEndpoint', + `adds a new API endpoint to the local mock API server on localhost + Args: + - name: Name of the API endpoint + - description: Description of the API endpoint + - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format tool )`, + { + name: z.string().min(1, 'Name is required'), + description: z.string().min(1, 'Description is required'), + code: z.string().min(1, 'Code is required'), + }, + async (input) => { + const { name, description, code } = input; + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; + }, +); + async function main() { const transport = new StdioServerTransport(); await server.connect(transport); diff --git a/src/seeders/post-seeder.ts b/src/seeders/post-seeder.ts index 4a48ca4..8274d4f 100644 --- a/src/seeders/post-seeder.ts +++ b/src/seeders/post-seeder.ts @@ -1,6 +1,3 @@ -/* eslint-disable import/order */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - import { createRequire } from 'node:module'; import { db } from '../models/db.js'; import { type Post } from '../types.js'; diff --git a/templates/handlers/api.custom.template.ts b/templates/handlers/api.custom.template.ts index 77a725c..cd2e0ab 100644 --- a/templates/handlers/api.custom.template.ts +++ b/templates/handlers/api.custom.template.ts @@ -2,50 +2,58 @@ // Copy and save as api.ts in the api path folder in your project import { http, HttpResponse } from 'msw'; -// import { db } from '../src/models/db.js'; +// import { db } from '../src/models/db.js'; // Uncomment this line if you have a db model to use +//import logger from '../../utilities/logger'; // Import your logger utility if needed function handler(pathName: string) { - return [ - // Add any http handler here (get, push , delete etc., and middleware as needed) - http.get(`/${pathName}`, ({ request }) => { - console.log('GET request received:', request.url); - // GET action code here - // const url = new URL(request.url); + return [ + // Add any http handler here (get, push , delete etc., and middleware as needed) + http.get(`/${pathName}`, ({ request }) => { + console.log('GET request received:', request.url); + // GET action code here + // const url = new URL(request.url); - // get url parameters using url.searchParams.get('paramName') - // const type = url.searchParams.get('type'); + // get url parameters using url.searchParams.get('paramName') + // const type = url.searchParams.get('type'); - // Get data from db using db.[modelName].getAll() - // E.g const cats = db.cat.getAll(); - // E.g return HttpResponse.json(cats); + // Get data from db using db.[modelName].getAll() + // E.g const cats = db.cat.getAll(); + // E.g return HttpResponse.json(cats); - // Middleware code here if needed and can return json, text or other responses - return HttpResponse.json({ - response: `this is a GET test response from ${pathName}`, - }); - }), - // Repeat process for POST, PUT and DELETE - http.post(`/${pathName}`, ({ request }) => { - // POST action code here using db.[modelName].create({data}) - console.log('POST request received:', request.body); - return HttpResponse.json({ - response: `this is a POST test response from ${pathName}`, - }); - }), - http.put(`/${pathName}`, ({ request }) => { - console.log('PUT request received:', request.body); - // PUT action code here using db.[modelName].update({data}) - return HttpResponse.json({ - response: `this is a PUT test response from ${pathName}`, - }); - }), - http.delete(`/${pathName}`, ({ request }) => { - console.log('DELETE request received:', request.body); - // DELETE action code here using db.[modelName].delete({data}) - return HttpResponse.json({ - response: `this is a DELETE test response from ${pathName}`, - }); - }), - ]; + // if needed, Log the request passing the request data, pathName and request type to the logger function - can be logged in all http methods + // logger({ + // data: { type }, + // pathName, + // type: 'GET', + // }); + + // Middleware code here if needed and can return json, text or other responses + return HttpResponse.json({ + response: `this is a GET test response from ${pathName}`, + }); + }), + // Repeat process for POST, PUT and DELETE + http.post(`/${pathName}`, ({ request }) => { + // POST action code here using db.[modelName].create({data}) + console.log('POST request received:', request.body); + return HttpResponse.json({ + response: `this is a POST test response from ${pathName}`, + }); + }), + http.put(`/${pathName}`, ({ request }) => { + console.log('PUT request received:', request.body); + // PUT action code here using db.[modelName].update({data}) + return HttpResponse.json({ + response: `this is a PUT test response from ${pathName}`, + }); + }), + http.delete(`/${pathName}`, ({ request }) => { + console.log('DELETE request received:', request.body); + // DELETE action code here using db.[modelName].delete({data}) + return HttpResponse.json({ + response: `this is a DELETE test response from ${pathName}`, + }); + }), + ]; } export default handler; From 91b8e73cce973028872cd33c054cd4a0dfaff15b Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 11:01:15 +0100 Subject: [PATCH 3/9] feat(): add server management tools --- package-lock.json | 216 ++++++++++++++++++++++--- package.json | 2 + src/mcp/helpers/control-mock-server.js | 36 +++++ src/mcp/helpers/control-mock-server.ts | 60 +++++++ src/mcp/server.js | 141 +++++++++++----- src/mcp/server.ts | 168 +++++++++++++------ 6 files changed, 516 insertions(+), 107 deletions(-) create mode 100644 src/mcp/helpers/control-mock-server.js create mode 100644 src/mcp/helpers/control-mock-server.ts diff --git a/package-lock.json b/package-lock.json index 049765c..ce82a63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@types/chai-json-schema": "^1.4.10", "@types/express": "^5.0.3", "@types/markdown-it": "^14.1.2", + "@types/shelljs": "^0.8.16", "chai-json-schema": "^1.5.1", "dotenv": "^16.5.0", "highlight.js": "^11.11.1", @@ -19,6 +20,7 @@ "msw": "^2.10.2", "pretty-print-json": "^3.0.4", "sharp": "^0.34.2", + "shelljs": "^0.10.0", "tsx": "^4.20.1", "typescript": "^5.8.3", "zod": "^3.25.61" @@ -1965,6 +1967,41 @@ "node": ">=18" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@open-draft/deferred-promise": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", @@ -2201,6 +2238,16 @@ "@types/send": "*" } }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -2243,6 +2290,12 @@ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "24.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.0.tgz", @@ -2288,6 +2341,16 @@ "@types/send": "*" } }, + "node_modules/@types/shelljs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.16.tgz", + "integrity": "sha512-40SUXiH0tZfAg/oKkkGF1kdHPAmE4slv2xAmbfa8VtE6ztHYwdpW2phlzHTVdJh5JOGqA3Cx1Hzp7kxFalKHYA==", + "license": "MIT", + "dependencies": { + "@types/glob": "~7.2.0", + "@types/node": "*" + } + }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -2651,7 +2714,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4040,7 +4102,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -4062,8 +4123,7 @@ "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/executable": { "version": "4.1.1", @@ -4238,6 +4298,22 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4261,6 +4337,15 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -4301,7 +4386,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -4507,7 +4591,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, "engines": { "node": ">=10" }, @@ -4578,6 +4661,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/global-directory": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", @@ -4743,7 +4838,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, "engines": { "node": ">=10.17.0" } @@ -4875,6 +4969,15 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4883,6 +4986,18 @@ "node": ">=8" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -4910,7 +5025,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4944,7 +5058,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -5635,8 +5748,16 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } }, "node_modules/methods": { "version": "1.1.2", @@ -5650,7 +5771,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -5695,7 +5815,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "engines": { "node": ">=6" } @@ -5806,7 +5925,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "dependencies": { "path-key": "^3.0.0" }, @@ -5859,7 +5977,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -6026,7 +6143,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -6208,6 +6324,26 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "license": "MIT" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -6321,6 +6457,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -6376,6 +6522,29 @@ "node": ">=16" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -6542,6 +6711,19 @@ "node": ">=8" } }, + "node_modules/shelljs": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.10.0.tgz", + "integrity": "sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==", + "license": "BSD-3-Clause", + "dependencies": { + "execa": "^5.1.1", + "fast-glob": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -6842,7 +7024,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, "engines": { "node": ">=6" } @@ -6929,7 +7110,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" diff --git a/package.json b/package.json index 8af8e1d..d88d51a 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@types/chai-json-schema": "^1.4.10", "@types/express": "^5.0.3", "@types/markdown-it": "^14.1.2", + "@types/shelljs": "^0.8.16", "chai-json-schema": "^1.5.1", "dotenv": "^16.5.0", "highlight.js": "^11.11.1", @@ -34,6 +35,7 @@ "msw": "^2.10.2", "pretty-print-json": "^3.0.4", "sharp": "^0.34.2", + "shelljs": "^0.10.0", "tsx": "^4.20.1", "typescript": "^5.8.3", "zod": "^3.25.61" diff --git a/src/mcp/helpers/control-mock-server.js b/src/mcp/helpers/control-mock-server.js new file mode 100644 index 0000000..5d13e6f --- /dev/null +++ b/src/mcp/helpers/control-mock-server.js @@ -0,0 +1,36 @@ +import shell from 'shelljs'; +import { fileURLToPath } from 'node:url'; +import path from 'path'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const isDockerProcessRunning = () => { + return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { + silent: true, + }).stdout; +}; +const manageServer = (command, mode, PORT) => { + shell.exec(command, { + async: false, + silent: true, + }); + if (shell.error()) { + return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; + } + if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { + return `Error: Local mock API server has not been started on port ${PORT}.`; + } + if (mode === 'stop' && isDockerProcessRunning()) { + return `Error: Local mock API server has not been stopped on port ${PORT}.`; + } + return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; +}; +const startMockServer = async (PORT) => { + return manageServer(`cd "${__dirname}" && docker-compose up -d`, 'start', PORT); +}; +const stopMockServer = async (PORT) => { + return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, 'stop', PORT); +}; +const rebuildMockServer = async (PORT) => { + return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, 'rebuild', PORT); +}; +export { startMockServer, stopMockServer, rebuildMockServer }; diff --git a/src/mcp/helpers/control-mock-server.ts b/src/mcp/helpers/control-mock-server.ts new file mode 100644 index 0000000..d30e080 --- /dev/null +++ b/src/mcp/helpers/control-mock-server.ts @@ -0,0 +1,60 @@ +import shell from 'shelljs'; +import { fileURLToPath } from 'node:url'; +import path from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +type Mode = 'start' | 'stop' | 'rebuild'; + +const isDockerProcessRunning = () => { + return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { + silent: true, + }).stdout; +}; +const manageServer = (command: string, mode: Mode, PORT: number) => { + shell.exec(command, { + async: false, + silent: true, + }); + + if (shell.error()) { + return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; + } + + if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { + return `Error: Local mock API server has not been started on port ${PORT}.`; + } + + if (mode === 'stop' && isDockerProcessRunning()) { + return `Error: Local mock API server has not been stopped on port ${PORT}.`; + } + + return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; +}; + +const startMockServer = async (PORT: number) => { + return manageServer( + `cd "${__dirname}" && docker-compose up -d`, + 'start', + PORT, + ); +}; + +const stopMockServer = async (PORT: number) => { + return manageServer( + `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, + 'stop', + PORT, + ); +}; + +const rebuildMockServer = async (PORT: number) => { + return manageServer( + `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, + 'rebuild', + PORT, + ); +}; + +export { startMockServer, stopMockServer, rebuildMockServer }; diff --git a/src/mcp/server.js b/src/mcp/server.js index 89c3410..049d4db 100644 --- a/src/mcp/server.js +++ b/src/mcp/server.js @@ -4,57 +4,122 @@ import { z } from 'zod'; import { getApiEndpoints } from './helpers/get-all-endpoints.js'; import { addApiEndpoint } from './helpers/add-api-endpoint.js'; import { apiHandlerExample } from './data/api-handler-example.js'; +import { startMockServer, stopMockServer, rebuildMockServer, } from './helpers/control-mock-server.js'; +import path from 'path'; +import { fileURLToPath } from 'node:url'; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); // Change this to the port you want to use for your local mock API server const PORT = 8000; // Create server instance const server = new McpServer({ - name: 'Local Mock API Server', + name: 'MCP Local Mock API Server', version: '1.0.0', capabilities: { resources: {}, tools: {}, }, }); -// Static resource -server.tool('get_code_format', 'returns the format to be used for API endpoint code generation to be used with add_localMockAPIEndpoint tool ', {}, () => ({ - content: [ - { - type: 'text', - text: `API endpoint code needs to follow the format in the example below: - ${apiHandlerExample()} - This is a TypeScript file that exports a function that returns an array of HTTP handlers. - Create new api endpoint code using a similar pattern. - `, - }, - ], -})); -server.tool('get_localMockAPIEndpoints', 'returns all available API endpoints on local mock API server on localhost', {}, async () => ({ - content: [ - { - type: 'text', - text: `localMockAPIEndpoints: ${await getApiEndpoints(PORT)}`, - }, - ], -})); -server.tool('add_localMockAPIEndpoint', `adds a new API endpoint to the local mock API server on localhost +server.tool('ManageLocalMockAPIServer', `tools to manage the local mock API endpoint server on localhost Args: - - name: Name of the API endpoint - - description: Description of the API endpoint + - action: Action to perform on the local mock API server - get_endpoints (gets endpoints), start_server (starts server), stop_server (stops server), rebuild_server (rebuilds server after code changes), add_endpoint (adds endpoint then you need to run rebuild_server action) + - name: Name of the API endpoint (only required for add_endpoint action) + - description: Description of the API endpoint (only required for add_endpoint action) - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format tool )`, { - name: z.string().min(1, 'Name is required'), - description: z.string().min(1, 'Description is required'), - code: z.string().min(1, 'Code is required'), + action: z.enum([ + 'get_endpoints', + 'start_server', + 'stop_server', + 'rebuild_server', + 'add_endpoint', + 'get_code_format', + ]), + name: z.string().min(1, 'Name is required').optional(), + description: z.string().min(1, 'Description is required').optional(), + code: z.string().min(1, 'Code is required').optional(), }, async (input) => { - const { name, description, code } = input; - const result = await addApiEndpoint(name, description, code); - return { - content: [ - { - type: 'text', - text: result, - }, - ], - }; + const { action, name, description, code } = input; + switch (action) { + case 'get_endpoints': + return { + content: [ + { + type: 'text', + text: await getApiEndpoints(PORT), + }, + ], + }; + case 'start_server': + return { + content: [ + { + type: 'text', + text: await startMockServer(PORT), + }, + ], + }; + case 'stop_server': + return { + content: [ + { + type: 'text', + text: await stopMockServer(PORT), + }, + ], + }; + case 'rebuild_server': + return { + content: [ + { + type: 'text', + text: await rebuildMockServer(PORT), + }, + ], + }; + case 'get_code_format': + // Return the format for API endpoint code generation + return { + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: + ${apiHandlerExample()} + This is a TypeScript file that exports a function that returns an array of HTTP handlers. + Create new API endpoint code using a similar pattern.`, + }, + ], + }; + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } }); async function main() { const transport = new StdioServerTransport(); diff --git a/src/mcp/server.ts b/src/mcp/server.ts index d491251..21d58ae 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -4,13 +4,24 @@ import { z } from 'zod'; import { getApiEndpoints } from './helpers/get-all-endpoints.js'; import { addApiEndpoint } from './helpers/add-api-endpoint.js'; import { apiHandlerExample } from './data/api-handler-example.js'; +import { + startMockServer, + stopMockServer, + rebuildMockServer, +} from './helpers/control-mock-server.js'; +import path from 'path'; + +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); // Change this to the port you want to use for your local mock API server const PORT = 8000; // Create server instance const server = new McpServer({ - name: 'Local Mock API Server', + name: 'MCP Local Mock API Server', version: '1.0.0', capabilities: { resources: {}, @@ -18,62 +29,117 @@ const server = new McpServer({ }, }); -// Static resource -server.tool( - 'get_code_format', - 'returns the format to be used for API endpoint code generation to be used with add_localMockAPIEndpoint tool ', - {}, - () => ({ - content: [ - { - type: 'text', - text: `API endpoint code needs to follow the format in the example below: - ${apiHandlerExample()} - This is a TypeScript file that exports a function that returns an array of HTTP handlers. - Create new api endpoint code using a similar pattern. - `, - }, - ], - }), -); - -server.tool( - 'get_localMockAPIEndpoints', - 'returns all available API endpoints on local mock API server on localhost', - {}, - async () => ({ - content: [ - { - type: 'text', - text: `localMockAPIEndpoints: ${await getApiEndpoints(PORT)}`, - }, - ], - }), -); - server.tool( - 'add_localMockAPIEndpoint', - `adds a new API endpoint to the local mock API server on localhost + 'ManageLocalMockAPIServer', + `tools to manage the local mock API endpoint server on localhost Args: - - name: Name of the API endpoint - - description: Description of the API endpoint + - action: Action to perform on the local mock API server - get_endpoints (gets endpoints), start_server (starts server), stop_server (stops server), rebuild_server (rebuilds server after code changes), add_endpoint (adds endpoint then you need to run rebuild_server action) + - name: Name of the API endpoint (only required for add_endpoint action) + - description: Description of the API endpoint (only required for add_endpoint action) - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format tool )`, { - name: z.string().min(1, 'Name is required'), - description: z.string().min(1, 'Description is required'), - code: z.string().min(1, 'Code is required'), + action: z.enum([ + 'get_endpoints', + 'start_server', + 'stop_server', + 'rebuild_server', + 'add_endpoint', + 'get_code_format', + ]), + name: z.string().min(1, 'Name is required').optional(), + description: z.string().min(1, 'Description is required').optional(), + code: z.string().min(1, 'Code is required').optional(), }, async (input) => { - const { name, description, code } = input; - const result = await addApiEndpoint(name, description, code); - return { - content: [ - { - type: 'text', - text: result, - }, - ], - }; + const { action, name, description, code } = input; + + switch (action) { + case 'get_endpoints': + return { + content: [ + { + type: 'text', + text: await getApiEndpoints(PORT), + }, + ], + }; + + case 'start_server': + return { + content: [ + { + type: 'text', + text: await startMockServer(PORT), + }, + ], + }; + + case 'stop_server': + return { + content: [ + { + type: 'text', + text: await stopMockServer(PORT), + }, + ], + }; + + case 'rebuild_server': + return { + content: [ + { + type: 'text', + text: await rebuildMockServer(PORT), + }, + ], + }; + + case 'get_code_format': + // Return the format for API endpoint code generation + return { + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: + ${apiHandlerExample()} + This is a TypeScript file that exports a function that returns an array of HTTP handlers. + Create new API endpoint code using a similar pattern.`, + }, + ], + }; + + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; + + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } }, ); From d32116bb9d330f31ec04e6f67b0c88a30a55c885 Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 11:33:49 +0100 Subject: [PATCH 4/9] feat(): add an api endpoint tool --- src/mcp/data/api-handler-example.js | 9 +- src/mcp/helpers/add-api-endpoint.js | 28 +-- src/mcp/helpers/control-mock-server.js | 52 +++--- src/mcp/helpers/get-all-endpoints.js | 21 ++- src/mcp/server.js | 228 +++++++++++++------------ src/mcp/server.ts | 9 +- 6 files changed, 190 insertions(+), 157 deletions(-) diff --git a/src/mcp/data/api-handler-example.js b/src/mcp/data/api-handler-example.js index 0053629..d6eee28 100644 --- a/src/mcp/data/api-handler-example.js +++ b/src/mcp/data/api-handler-example.js @@ -4,8 +4,11 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const apiHandlerExample = () => { - const filePath = path.join(__dirname, '../../../templates/handlers/api.custom.template.ts'); - const fileContent = fs.readFileSync(filePath, 'utf8'); - return fileContent; + const filePath = path.join( + __dirname, + '../../../templates/handlers/api.custom.template.ts', + ); + const fileContent = fs.readFileSync(filePath, 'utf8'); + return fileContent; }; export { apiHandlerExample }; diff --git a/src/mcp/helpers/add-api-endpoint.js b/src/mcp/helpers/add-api-endpoint.js index d381476..2d461df 100644 --- a/src/mcp/helpers/add-api-endpoint.js +++ b/src/mcp/helpers/add-api-endpoint.js @@ -4,19 +4,19 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const addApiEndpoint = async (name, description, code) => { - if (!name || !description || !code) { - return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; - } - // Create path to the endpoint directory - const endpointDir = path.join(__dirname, '..', `..`, 'api', name); - const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' - if (fs.existsSync(apiPath)) { - return `API Endpoint Not created. API endpoint ${name} already exists.`; - } - // Create the endpoint directory first - fs.mkdirSync(endpointDir, { recursive: true }); - // Then create the file inside the directory - fs.writeFileSync(apiPath, code, 'utf8'); - return `API Endpoint ${name} created successfully at ${apiPath}.`; + if (!name || !description || !code) { + return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; + } + // Create path to the endpoint directory + const endpointDir = path.join(__dirname, '..', `..`, 'api', name); + const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' + if (fs.existsSync(apiPath)) { + return `API Endpoint Not created. API endpoint ${name} already exists.`; + } + // Create the endpoint directory first + fs.mkdirSync(endpointDir, { recursive: true }); + // Then create the file inside the directory + fs.writeFileSync(apiPath, code, 'utf8'); + return `API Endpoint ${name} created successfully at ${apiPath}.`; }; export { addApiEndpoint }; diff --git a/src/mcp/helpers/control-mock-server.js b/src/mcp/helpers/control-mock-server.js index 5d13e6f..6798180 100644 --- a/src/mcp/helpers/control-mock-server.js +++ b/src/mcp/helpers/control-mock-server.js @@ -4,33 +4,45 @@ import path from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const isDockerProcessRunning = () => { - return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { - silent: true, - }).stdout; + return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { + silent: true, + }).stdout; }; const manageServer = (command, mode, PORT) => { - shell.exec(command, { - async: false, - silent: true, - }); - if (shell.error()) { - return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; - } - if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { - return `Error: Local mock API server has not been started on port ${PORT}.`; - } - if (mode === 'stop' && isDockerProcessRunning()) { - return `Error: Local mock API server has not been stopped on port ${PORT}.`; - } - return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; + shell.exec(command, { + async: false, + silent: true, + }); + if (shell.error()) { + return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; + } + if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { + return `Error: Local mock API server has not been started on port ${PORT}.`; + } + if (mode === 'stop' && isDockerProcessRunning()) { + return `Error: Local mock API server has not been stopped on port ${PORT}.`; + } + return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; }; const startMockServer = async (PORT) => { - return manageServer(`cd "${__dirname}" && docker-compose up -d`, 'start', PORT); + return manageServer( + `cd "${__dirname}" && docker-compose up -d`, + 'start', + PORT, + ); }; const stopMockServer = async (PORT) => { - return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, 'stop', PORT); + return manageServer( + `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, + 'stop', + PORT, + ); }; const rebuildMockServer = async (PORT) => { - return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, 'rebuild', PORT); + return manageServer( + `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, + 'rebuild', + PORT, + ); }; export { startMockServer, stopMockServer, rebuildMockServer }; diff --git a/src/mcp/helpers/get-all-endpoints.js b/src/mcp/helpers/get-all-endpoints.js index 4e4b483..0b81c61 100644 --- a/src/mcp/helpers/get-all-endpoints.js +++ b/src/mcp/helpers/get-all-endpoints.js @@ -1,14 +1,13 @@ const getApiEndpoints = async (port) => { - let response; - try { - response = await fetch(`http://localhost:${port}`); - if (!response.ok) { - return 'Local mock API server is not running - please start the server first.'; - } - } - catch { - return 'Local mock API server is not running - please start the server first.'; - } - return response.text(); + let response; + try { + response = await fetch(`http://localhost:${port}`); + if (!response.ok) { + return 'Local mock API server is not running - please start the server first.'; + } + } catch { + return 'Local mock API server is not running - please start the server first.'; + } + return response.text(); }; export { getApiEndpoints }; diff --git a/src/mcp/server.js b/src/mcp/server.js index 049d4db..5cfe9d4 100644 --- a/src/mcp/server.js +++ b/src/mcp/server.js @@ -4,7 +4,11 @@ import { z } from 'zod'; import { getApiEndpoints } from './helpers/get-all-endpoints.js'; import { addApiEndpoint } from './helpers/add-api-endpoint.js'; import { apiHandlerExample } from './data/api-handler-example.js'; -import { startMockServer, stopMockServer, rebuildMockServer, } from './helpers/control-mock-server.js'; +import { + startMockServer, + stopMockServer, + rebuildMockServer, +} from './helpers/control-mock-server.js'; import path from 'path'; import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); @@ -13,120 +17,130 @@ const __dirname = path.dirname(__filename); const PORT = 8000; // Create server instance const server = new McpServer({ - name: 'MCP Local Mock API Server', - version: '1.0.0', - capabilities: { - resources: {}, - tools: {}, - }, + name: 'MCP Local Mock API Server', + version: '1.0.0', + capabilities: { + resources: {}, + tools: {}, + }, }); -server.tool('ManageLocalMockAPIServer', `tools to manage the local mock API endpoint server on localhost +server.tool( + 'ManageLocalMockAPIServer', + `tools to manage the local mock API endpoint server on localhost Args: - - action: Action to perform on the local mock API server - get_endpoints (gets endpoints), start_server (starts server), stop_server (stops server), rebuild_server (rebuilds server after code changes), add_endpoint (adds endpoint then you need to run rebuild_server action) + - action: Action to perform on the local mock API server - + get_endpoints (gets endpoints), + start_server (starts server), + stop_server (stops server), + rebuild_server (rebuilds server after code changes), + add_endpoint (adds endpoint then you need to run rebuild_server action) - name: Name of the API endpoint (only required for add_endpoint action) - description: Description of the API endpoint (only required for add_endpoint action) - - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format tool )`, { - action: z.enum([ - 'get_endpoints', - 'start_server', - 'stop_server', - 'rebuild_server', - 'add_endpoint', - 'get_code_format', - ]), - name: z.string().min(1, 'Name is required').optional(), - description: z.string().min(1, 'Description is required').optional(), - code: z.string().min(1, 'Code is required').optional(), -}, async (input) => { - const { action, name, description, code } = input; - switch (action) { - case 'get_endpoints': - return { - content: [ - { - type: 'text', - text: await getApiEndpoints(PORT), - }, - ], - }; - case 'start_server': - return { - content: [ - { - type: 'text', - text: await startMockServer(PORT), - }, - ], - }; - case 'stop_server': - return { - content: [ - { - type: 'text', - text: await stopMockServer(PORT), - }, - ], - }; - case 'rebuild_server': - return { - content: [ - { - type: 'text', - text: await rebuildMockServer(PORT), - }, - ], - }; - case 'get_code_format': - // Return the format for API endpoint code generation - return { - content: [ - { - type: 'text', - text: `API endpoint code needs to follow the format in the example below: + - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, + { + action: z.enum([ + 'get_endpoints', + 'start_server', + 'stop_server', + 'rebuild_server', + 'add_endpoint', + 'get_code_format', + ]), + name: z.string().min(1, 'Name is required').optional(), + description: z.string().min(1, 'Description is required').optional(), + code: z.string().min(1, 'Code is required').optional(), + }, + async (input) => { + const { action, name, description, code } = input; + switch (action) { + case 'get_endpoints': + return { + content: [ + { + type: 'text', + text: await getApiEndpoints(PORT), + }, + ], + }; + case 'start_server': + return { + content: [ + { + type: 'text', + text: await startMockServer(PORT), + }, + ], + }; + case 'stop_server': + return { + content: [ + { + type: 'text', + text: await stopMockServer(PORT), + }, + ], + }; + case 'rebuild_server': + return { + content: [ + { + type: 'text', + text: await rebuildMockServer(PORT), + }, + ], + }; + case 'get_code_format': + // Return the format for API endpoint code generation + return { + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: ${apiHandlerExample()} This is a TypeScript file that exports a function that returns an array of HTTP handlers. Create new API endpoint code using a similar pattern.`, - }, - ], - }; - case 'add_endpoint': - // Handle the 'add' action to add a new API endpoint - if (!name || !description || !code) { - return { - content: [ - { - type: 'text', - text: 'Name, description, and code are required for adding a new API endpoint.', - }, - ], - }; - } - const result = await addApiEndpoint(name, description, code); - return { - content: [ - { - type: 'text', - text: result, - }, - ], - }; - default: - return { - content: [ - { - type: 'text', - text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', - }, - ], - }; - } -}); + }, + ], + }; + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } + }, +); async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error('Local Mock API MCP Server running on stdio'); + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Local Mock API MCP Server running on stdio'); } main().catch((error) => { - console.error('Fatal error in main():', error); - process.exit(1); + console.error('Fatal error in main():', error); + process.exit(1); }); diff --git a/src/mcp/server.ts b/src/mcp/server.ts index 21d58ae..e74f6af 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -33,10 +33,15 @@ server.tool( 'ManageLocalMockAPIServer', `tools to manage the local mock API endpoint server on localhost Args: - - action: Action to perform on the local mock API server - get_endpoints (gets endpoints), start_server (starts server), stop_server (stops server), rebuild_server (rebuilds server after code changes), add_endpoint (adds endpoint then you need to run rebuild_server action) + - action: Action to perform on the local mock API server - + get_endpoints (gets endpoints), + start_server (starts server), + stop_server (stops server), + rebuild_server (rebuilds server after code changes), + add_endpoint (adds endpoint then you need to run rebuild_server action) - name: Name of the API endpoint (only required for add_endpoint action) - description: Description of the API endpoint (only required for add_endpoint action) - - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format tool )`, + - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, { action: z.enum([ 'get_endpoints', From fc390dd23975b65e08f3ef67c2117339fd3b83a8 Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 12:06:14 +0100 Subject: [PATCH 5/9] chore(): split tooling --- src/api/simpsons/api.ts | 260 ++++++++++++++++++++++++++++++++++++++++ src/mcp/server.js | 104 +++++++++------- src/mcp/server.ts | 105 +++++++++------- 3 files changed, 381 insertions(+), 88 deletions(-) create mode 100644 src/api/simpsons/api.ts diff --git a/src/api/simpsons/api.ts b/src/api/simpsons/api.ts new file mode 100644 index 0000000..d6740f1 --- /dev/null +++ b/src/api/simpsons/api.ts @@ -0,0 +1,260 @@ +// The Simpsons characters API endpoint +// Main Simpson family and characters data + +import { http, HttpResponse } from 'msw'; + +// Mock data for The Simpsons characters +const simpsonsCharacters = [ + { + id: 1, + name: 'Homer Simpson', + age: 39, + occupation: 'Nuclear Safety Inspector', + family: 'Simpson', + catchphrase: "D'oh!", + description: + 'The lovable, beer-drinking patriarch of the Simpson family', + }, + { + id: 2, + name: 'Marge Simpson', + age: 36, + occupation: 'Homemaker', + family: 'Simpson', + catchphrase: 'Mmm-hmm', + description: + 'The patient, blue-haired mother and moral center of the family', + }, + { + id: 3, + name: 'Bart Simpson', + age: 10, + occupation: 'Student', + family: 'Simpson', + catchphrase: 'Eat my shorts!', + description: 'The mischievous eldest Simpson child', + }, + { + id: 4, + name: 'Lisa Simpson', + age: 8, + occupation: 'Student', + family: 'Simpson', + catchphrase: "If anyone wants me, I'll be in my room", + description: 'The intelligent, saxophone-playing middle child', + }, + { + id: 5, + name: 'Maggie Simpson', + age: 1, + occupation: 'Baby', + family: 'Simpson', + catchphrase: '*sucking sounds*', + description: 'The youngest Simpson, always sucking on her pacifier', + }, + { + id: 6, + name: 'Ned Flanders', + age: 60, + occupation: 'Pharmaceutical Sales', + family: 'Flanders', + catchphrase: 'Okily dokily!', + description: "The Simpsons' overly cheerful Christian neighbor", + }, + { + id: 7, + name: 'Moe Szyslak', + age: 60, + occupation: 'Bartender', + family: 'Szyslak', + catchphrase: "Moe's Tavern, Moe speaking", + description: "Gruff bartender and owner of Moe's Tavern", + }, + { + id: 8, + name: 'Chief Wiggum', + age: 43, + occupation: 'Police Chief', + family: 'Wiggum', + catchphrase: 'Bake him away, toys!', + description: "Springfield's incompetent but well-meaning police chief", + }, + { + id: 9, + name: 'Apu Nahasapeemapetilon', + age: 35, + occupation: 'Kwik-E-Mart Owner', + family: 'Nahasapeemapetilon', + catchphrase: 'Thank you, come again!', + description: 'Hardworking owner of the Kwik-E-Mart convenience store', + }, + { + id: 10, + name: 'Krusty the Clown', + age: 52, + occupation: 'TV Show Host/Comedian', + family: 'Krustofsky', + catchphrase: 'Hey hey kids!', + description: + "Springfield's beloved but troubled children's TV show host", + }, +]; + +function handler(pathName: string) { + return [ + // GET - Retrieve all characters or filter by query parameters + http.get(`/${pathName}`, ({ request }) => { + console.log('GET request received:', request.url); + const url = new URL(request.url); + + // Support filtering by family, occupation, or search by name + const family = url.searchParams.get('family'); + const occupation = url.searchParams.get('occupation'); + const search = url.searchParams.get('search'); + const id = url.searchParams.get('id'); + + let filteredCharacters = simpsonsCharacters; + + // Filter by ID if provided + if (id) { + const character = simpsonsCharacters.find( + (char) => char.id === parseInt(id), + ); + return HttpResponse.json( + character || { error: 'Character not found' }, + ); + } + + // Filter by family + if (family) { + filteredCharacters = filteredCharacters.filter((char) => + char.family.toLowerCase().includes(family.toLowerCase()), + ); + } + + // Filter by occupation + if (occupation) { + filteredCharacters = filteredCharacters.filter((char) => + char.occupation + .toLowerCase() + .includes(occupation.toLowerCase()), + ); + } + + // Search by name + if (search) { + filteredCharacters = filteredCharacters.filter((char) => + char.name.toLowerCase().includes(search.toLowerCase()), + ); + } + + return HttpResponse.json({ + characters: filteredCharacters, + total: filteredCharacters.length, + message: 'The Simpsons characters data', + }); + }), + + // POST - Add a new character + http.post(`/${pathName}`, async ({ request }) => { + console.log('POST request received'); + const newCharacter = (await request.json()) as any; + + // Generate new ID + const newId = + Math.max(...simpsonsCharacters.map((char) => char.id)) + 1; + + const character = { + id: newId, + name: newCharacter.name || 'Unknown', + age: newCharacter.age || 0, + occupation: newCharacter.occupation || 'Unknown', + family: newCharacter.family || 'Unknown', + catchphrase: newCharacter.catchphrase || '', + description: newCharacter.description || '', + }; + + simpsonsCharacters.push(character); + + return HttpResponse.json({ + message: 'Character added successfully', + character: character, + }); + }), + + // PUT - Update a character + http.put(`/${pathName}`, async ({ request }) => { + console.log('PUT request received'); + const url = new URL(request.url); + const id = url.searchParams.get('id'); + const updatedData = (await request.json()) as any; + + if (!id) { + return HttpResponse.json( + { error: 'Character ID is required' }, + { status: 400 }, + ); + } + + const characterIndex = simpsonsCharacters.findIndex( + (char) => char.id === parseInt(id), + ); + + if (characterIndex === -1) { + return HttpResponse.json( + { error: 'Character not found' }, + { status: 404 }, + ); + } + + // Update character data + simpsonsCharacters[characterIndex] = { + ...simpsonsCharacters[characterIndex], + ...updatedData, + id: parseInt(id), // Ensure ID doesn't change + }; + + return HttpResponse.json({ + message: 'Character updated successfully', + character: simpsonsCharacters[characterIndex], + }); + }), + + // DELETE - Remove a character + http.delete(`/${pathName}`, ({ request }) => { + console.log('DELETE request received'); + const url = new URL(request.url); + const id = url.searchParams.get('id'); + + if (!id) { + return HttpResponse.json( + { error: 'Character ID is required' }, + { status: 400 }, + ); + } + + const characterIndex = simpsonsCharacters.findIndex( + (char) => char.id === parseInt(id), + ); + + if (characterIndex === -1) { + return HttpResponse.json( + { error: 'Character not found' }, + { status: 404 }, + ); + } + + const deletedCharacter = simpsonsCharacters.splice( + characterIndex, + 1, + )[0]; + + return HttpResponse.json({ + message: 'Character deleted successfully', + character: deletedCharacter, + }); + }), + ]; +} + +export default handler; diff --git a/src/mcp/server.js b/src/mcp/server.js index 5cfe9d4..c2b5a6f 100644 --- a/src/mcp/server.js +++ b/src/mcp/server.js @@ -25,27 +25,15 @@ const server = new McpServer({ }, }); server.tool( - 'ManageLocalMockAPIServer', - `tools to manage the local mock API endpoint server on localhost + 'create_new_api_endpoint', + `create new api endpoint for the local mock API server using the supplied standard code format as a basis for the new api code. Args: - - action: Action to perform on the local mock API server - - get_endpoints (gets endpoints), - start_server (starts server), - stop_server (stops server), - rebuild_server (rebuilds server after code changes), - add_endpoint (adds endpoint then you need to run rebuild_server action) + - action: get_code_format (gets standard code format) or add_endpoint(creates new api endpoint using supplied code) - name: Name of the API endpoint (only required for add_endpoint action) - description: Description of the API endpoint (only required for add_endpoint action) - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, { - action: z.enum([ - 'get_endpoints', - 'start_server', - 'stop_server', - 'rebuild_server', - 'add_endpoint', - 'get_code_format', - ]), + action: z.enum(['add_endpoint', 'get_code_format']), name: z.string().min(1, 'Name is required').optional(), description: z.string().min(1, 'Description is required').optional(), code: z.string().min(1, 'Code is required').optional(), @@ -53,73 +41,101 @@ server.tool( async (input) => { const { action, name, description, code } = input; switch (action) { - case 'get_endpoints': + case 'get_code_format': + // Return the format for API endpoint code generation return { content: [ { type: 'text', - text: await getApiEndpoints(PORT), + text: `API endpoint code needs to follow the format in the example below: + ${apiHandlerExample()} + This is a TypeScript file that exports a function that returns an array of HTTP handlers. + Create new API endpoint code using a similar pattern.`, }, ], }; - case 'start_server': + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); return { content: [ { type: 'text', - text: await startMockServer(PORT), + text: result, }, ], }; - case 'stop_server': + default: return { content: [ { type: 'text', - text: await stopMockServer(PORT), + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } + }, +); +server.tool( + 'manage_local_mock_api_server', + `Manage the local mock server on localhost running in Docker (Docker must be installed and running). + Args: + action: one of the following actions: + get (gets all available api endpoints), + start (starts server), + stop (stops server), + rebuild (rebuild server to register new code changes) + `, + { + action: z.enum(['get', 'start', 'stop', 'rebuild']), + }, + async (input) => { + const { action } = input; + switch (action) { + case 'get': + return { + content: [ + { + type: 'text', + text: await getApiEndpoints(PORT), }, ], }; - case 'rebuild_server': + case 'start': return { content: [ { type: 'text', - text: await rebuildMockServer(PORT), + text: await startMockServer(PORT), }, ], }; - case 'get_code_format': - // Return the format for API endpoint code generation + case 'stop': return { content: [ { type: 'text', - text: `API endpoint code needs to follow the format in the example below: - ${apiHandlerExample()} - This is a TypeScript file that exports a function that returns an array of HTTP handlers. - Create new API endpoint code using a similar pattern.`, + text: await stopMockServer(PORT), }, ], }; - case 'add_endpoint': - // Handle the 'add' action to add a new API endpoint - if (!name || !description || !code) { - return { - content: [ - { - type: 'text', - text: 'Name, description, and code are required for adding a new API endpoint.', - }, - ], - }; - } - const result = await addApiEndpoint(name, description, code); + case 'rebuild': return { content: [ { type: 'text', - text: result, + text: await rebuildMockServer(PORT), }, ], }; diff --git a/src/mcp/server.ts b/src/mcp/server.ts index e74f6af..411cdd4 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -30,27 +30,15 @@ const server = new McpServer({ }); server.tool( - 'ManageLocalMockAPIServer', - `tools to manage the local mock API endpoint server on localhost + 'create_new_api_endpoint', + `create new api endpoint for the local mock API server using the supplied standard code format as a basis for the new api code. Args: - - action: Action to perform on the local mock API server - - get_endpoints (gets endpoints), - start_server (starts server), - stop_server (stops server), - rebuild_server (rebuilds server after code changes), - add_endpoint (adds endpoint then you need to run rebuild_server action) + - action: get_code_format (gets standard code format) or add_endpoint(creates new api endpoint using supplied code) - name: Name of the API endpoint (only required for add_endpoint action) - description: Description of the API endpoint (only required for add_endpoint action) - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, { - action: z.enum([ - 'get_endpoints', - 'start_server', - 'stop_server', - 'rebuild_server', - 'add_endpoint', - 'get_code_format', - ]), + action: z.enum(['add_endpoint', 'get_code_format']), name: z.string().min(1, 'Name is required').optional(), description: z.string().min(1, 'Description is required').optional(), code: z.string().min(1, 'Code is required').optional(), @@ -59,82 +47,111 @@ server.tool( const { action, name, description, code } = input; switch (action) { - case 'get_endpoints': + case 'get_code_format': + // Return the format for API endpoint code generation return { content: [ { type: 'text', - text: await getApiEndpoints(PORT), + text: `API endpoint code needs to follow the format in the example below: + ${apiHandlerExample()} + This is a TypeScript file that exports a function that returns an array of HTTP handlers. + Create new API endpoint code using a similar pattern.`, }, ], }; - case 'start_server': + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); return { content: [ { type: 'text', - text: await startMockServer(PORT), + text: result, }, ], }; - case 'stop_server': + default: return { content: [ { type: 'text', - text: await stopMockServer(PORT), + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', }, ], }; + } + }, +); + +server.tool( + 'manage_local_mock_api_server', + `Manage the local mock server on localhost running in Docker (Docker must be installed and running). + Args: + action: one of the following actions: + get (gets all available api endpoints), + start (starts server), + stop (stops server), + rebuild (rebuild server to register new code changes) + `, + { + action: z.enum(['get', 'start', 'stop', 'rebuild']), + }, + async (input) => { + const { action } = input; - case 'rebuild_server': + switch (action) { + case 'get': return { content: [ { type: 'text', - text: await rebuildMockServer(PORT), + text: await getApiEndpoints(PORT), }, ], }; - case 'get_code_format': - // Return the format for API endpoint code generation + case 'start': return { content: [ { type: 'text', - text: `API endpoint code needs to follow the format in the example below: - ${apiHandlerExample()} - This is a TypeScript file that exports a function that returns an array of HTTP handlers. - Create new API endpoint code using a similar pattern.`, + text: await startMockServer(PORT), }, ], }; - case 'add_endpoint': - // Handle the 'add' action to add a new API endpoint - if (!name || !description || !code) { - return { - content: [ - { - type: 'text', - text: 'Name, description, and code are required for adding a new API endpoint.', - }, - ], - }; - } - const result = await addApiEndpoint(name, description, code); + case 'stop': return { content: [ { type: 'text', - text: result, + text: await stopMockServer(PORT), }, ], }; + case 'rebuild': + return { + content: [ + { + type: 'text', + text: await rebuildMockServer(PORT), + }, + ], + }; default: return { content: [ From 18bca4bf960effdf70f3fdfd61707cd0d27a3629 Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 12:11:48 +0100 Subject: [PATCH 6/9] chore(): update dependencies --- package-lock.json | 120 ++++++------ package.json | 14 +- src/api/simpsons/api.ts | 260 ------------------------- src/mcp/data/api-handler-example.js | 9 +- src/mcp/helpers/add-api-endpoint.js | 28 +-- src/mcp/helpers/control-mock-server.js | 52 ++--- src/mcp/helpers/get-all-endpoints.js | 21 +- src/mcp/server.js | 246 +++++++++++------------ 8 files changed, 231 insertions(+), 519 deletions(-) delete mode 100644 src/api/simpsons/api.ts diff --git a/package-lock.json b/package-lock.json index ce82a63..4d9d878 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "dependencies": { "@faker-js/faker": "^9.8.0", - "@modelcontextprotocol/sdk": "^1.12.1", + "@modelcontextprotocol/sdk": "^1.12.3", "@mswjs/data": "^0.16.2", "@mswjs/http-middleware": "^0.10.3", "@types/chai-json-schema": "^1.4.10", @@ -21,19 +21,19 @@ "pretty-print-json": "^3.0.4", "sharp": "^0.34.2", "shelljs": "^0.10.0", - "tsx": "^4.20.1", + "tsx": "^4.20.3", "typescript": "^5.8.3", - "zod": "^3.25.61" + "zod": "^3.25.67" }, "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", - "@types/aws-lambda": "^8.10.149", - "@types/node": "^24.0.0", + "@types/aws-lambda": "^8.10.150", + "@types/node": "^24.0.3", "cypress": "^14.4.1", "husky": "^9.1.7", - "lint-staged": "^16.1.0", - "oxlint": "^1.0.0", + "lint-staged": "^16.1.2", + "oxlint": "^1.1.0", "prettier": "3.5.3", "start-server-and-test": "^2.0.12" } @@ -1579,9 +1579,9 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.1.tgz", - "integrity": "sha512-KG1CZhZfWg+u8pxeM/mByJDScJSrjjxLc8fwQqbsS8xCjBmQfMNEBTotYdNanKekepnfRI85GtgQlctLFpcYPw==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.12.3.tgz", + "integrity": "sha512-DyVYSOafBvk3/j1Oka4z5BWT8o4AFmoNyZY9pALOm7Lh3GZglR71Co4r4dEUoqDWdDazIZQHBe7J2Nwkg6gHgQ==", "license": "MIT", "dependencies": { "ajv": "^6.12.6", @@ -2025,9 +2025,9 @@ "license": "MIT" }, "node_modules/@oxlint/darwin-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.0.0.tgz", - "integrity": "sha512-Ei8wLh65Th/si5EY6mfQIXVpdXbJWOoh56FaxxPgVxTeJaj3NHUIlxICHkvTZ5dz8bnOFcbS/+9MaW8Qkzfm9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.1.0.tgz", + "integrity": "sha512-sSnR3SOxIU/QfaqXrcQ0UVUkzJO0bcInQ7dMhHa102gVAgWjp1fBeMVCM0adEY0UNmEXrRkgD/rQtQgn9YAU+w==", "cpu": [ "arm64" ], @@ -2039,9 +2039,9 @@ ] }, "node_modules/@oxlint/darwin-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.0.0.tgz", - "integrity": "sha512-dbdtQ+rJTUb4jFKTzV+j08yYcR8lZssLF10n7MggK/jI7pBtoQN04cupzYdkxOWSy6uDXjDmWYFDIqlTqV7zOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.1.0.tgz", + "integrity": "sha512-Jvd3fHnzY2OYbmsg9NSGPoBkGViDGHSFnBKyJQ9LOIw7lxAyQBG2Quxc3GYPFR/f9OYho9C3p4+dIaAJfKhnsw==", "cpu": [ "x64" ], @@ -2053,9 +2053,9 @@ ] }, "node_modules/@oxlint/linux-arm64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.0.0.tgz", - "integrity": "sha512-71wy9zMxsAeRhCFQjUkDLT8N5tm10L5FxNxsUcEsezgM187X9tPGP1gwlFpYig7F+bg2X1dijFuTA/FSe0YpKg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.1.0.tgz", + "integrity": "sha512-MgW4iskOdXuoR+wDXIJUfbdnTg2eo2FnQRaD6ZqhnDTDa7LnV+06rp/Cg3aGj2X9jSEcKDv/bMbYQuot7WRs6Q==", "cpu": [ "arm64" ], @@ -2067,9 +2067,9 @@ ] }, "node_modules/@oxlint/linux-arm64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.0.0.tgz", - "integrity": "sha512-UbD4+2k7aGZOFtKK/yeESX7Fv0w9gQbcjrjr1HGY7QOYg7XlFlqzycZdPS6XbAuKA5oOXFpafaYOD4AyX3p2AA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.1.0.tgz", + "integrity": "sha512-a+pkEKmDRdrW+y0gtZ/m68ElVW2VZgATGbMxDgDYFpdiMx9Y0pUPwTMZ2EX/17Aslop4c1BiDSFDK7aEBxKR2g==", "cpu": [ "arm64" ], @@ -2081,9 +2081,9 @@ ] }, "node_modules/@oxlint/linux-x64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.0.0.tgz", - "integrity": "sha512-0NXWqsm65I3VaLgADW4y9r7Pwurqgs2fr1lqoTyTIlidD18LQ3UMAWp8NzBPMCYzw8c/rTgOzsFf0gLtxzMtwg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.1.0.tgz", + "integrity": "sha512-wNBsXCKVZMvUTcFitrV1wTsdhUAv8l+XQxHxciZ2SO6dpNnWEb2YCxSAIOXeyzBLdO4pIODYcSy38CvGue7TwA==", "cpu": [ "x64" ], @@ -2095,9 +2095,9 @@ ] }, "node_modules/@oxlint/linux-x64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.0.0.tgz", - "integrity": "sha512-AY1NLnVQI+tBeuaB8KCriWfiD6O1zZFAQHphRDcZiqSz4mauNq9FFuffW0N9RSR9hYttGr0UVdQ6eK72RhzOYg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.1.0.tgz", + "integrity": "sha512-pZD0lt6A5j2Wp70fgIYk4GoPfKTZ8mHWamWIpKFT7aSkFkiOi6nhLWDFvMEIHWRTK3LgkWUNcnWPp4brvin4wQ==", "cpu": [ "x64" ], @@ -2109,9 +2109,9 @@ ] }, "node_modules/@oxlint/win32-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.0.0.tgz", - "integrity": "sha512-X9y2KAdoqT/jy/sITGDZNMJHJAmhDhofItBnCf2DWS1HPakdtCAKGX9KMx6SivTbtPn1+JpZgfHn4Y7rNMvujQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.1.0.tgz", + "integrity": "sha512-rT6uXQvE80+B+L04HJf30uF26426FPI9i9DAY2AxBUhrpNwhqkDEhQdd9ilFWVC7SSbpHgAs50lo+ImSAAkHPQ==", "cpu": [ "arm64" ], @@ -2123,9 +2123,9 @@ ] }, "node_modules/@oxlint/win32-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.0.0.tgz", - "integrity": "sha512-x2eQwZCfRUi6GG0lhRuC54O6TK2uW7UbIvERh83vPi0ftd+rtGUuJauNdyC+pPx+iwFToFVet43/5MBMu4bMWg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.1.0.tgz", + "integrity": "sha512-x6r5yvM3wEty93Bx0NuNK+kutUyS/K55itkUrxdExoK6GcmVDboGGuhju9HyU2cM/IWLEWO8RHcXSyaxr9GR5g==", "cpu": [ "x64" ], @@ -2161,9 +2161,9 @@ "license": "BSD-3-Clause" }, "node_modules/@types/aws-lambda": { - "version": "8.10.149", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.149.tgz", - "integrity": "sha512-NXSZIhfJjnXqJgtS7IwutqIF/SOy1Wz5Px4gUY1RWITp3AYTyuJS4xaXr/bIJY1v15XMzrJ5soGnPM+7uigZjA==", + "version": "8.10.150", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.150.tgz", + "integrity": "sha512-AX+AbjH/rH5ezX1fbK8onC/a+HyQHo7QGmvoxAE42n22OsciAxvZoZNEr22tbXs8WfP1nIsBjKDpgPm3HjOZbA==", "dev": true, "license": "MIT" }, @@ -2297,9 +2297,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.0.tgz", - "integrity": "sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==", + "version": "24.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", + "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", "license": "MIT", "dependencies": { "undici-types": "~7.8.0" @@ -5273,9 +5273,9 @@ } }, "node_modules/lint-staged": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.0.tgz", - "integrity": "sha512-HkpQh69XHxgCjObjejBT3s2ILwNjFx8M3nw+tJ/ssBauDlIpkx2RpqWSi1fBgkXLSSXnbR3iEq1NkVtpvV+FLQ==", + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.2.tgz", + "integrity": "sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6001,9 +6001,9 @@ "license": "MIT" }, "node_modules/oxlint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.0.0.tgz", - "integrity": "sha512-yyeryHnd21wPBLBEF4Uf8hvzJlftrIGHxyUaqFaP2JYiZ9cbiColygZhrezvv/Z/aThCmYu3j6iJMxlVPxNt6g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.1.0.tgz", + "integrity": "sha512-OVNpaoaQCUHHhCv5sYMPJ7Ts5k7ziw0QteH1gBSwF3elf/8GAew2Uh/0S7HsU1iGtjhlFy80+A8nwIb3Tq6m1w==", "dev": true, "license": "MIT", "bin": { @@ -6017,14 +6017,14 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxlint/darwin-arm64": "1.0.0", - "@oxlint/darwin-x64": "1.0.0", - "@oxlint/linux-arm64-gnu": "1.0.0", - "@oxlint/linux-arm64-musl": "1.0.0", - "@oxlint/linux-x64-gnu": "1.0.0", - "@oxlint/linux-x64-musl": "1.0.0", - "@oxlint/win32-arm64": "1.0.0", - "@oxlint/win32-x64": "1.0.0" + "@oxlint/darwin-arm64": "1.1.0", + "@oxlint/darwin-x64": "1.1.0", + "@oxlint/linux-arm64-gnu": "1.1.0", + "@oxlint/linux-arm64-musl": "1.1.0", + "@oxlint/linux-x64-gnu": "1.1.0", + "@oxlint/linux-x64-musl": "1.1.0", + "@oxlint/win32-arm64": "1.1.0", + "@oxlint/win32-x64": "1.1.0" } }, "node_modules/p-map": { @@ -7168,9 +7168,9 @@ "devOptional": true }, "node_modules/tsx": { - "version": "4.20.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.1.tgz", - "integrity": "sha512-JsFUnMHIE+g8KllOvWTrSOwCKM10xLcsesvUQR61znsbrcwZ4U/QaqdymmvTqG5GMD7k2VFv9UG35C4dRy34Ag==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", + "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", "license": "MIT", "dependencies": { "esbuild": "~0.25.0", @@ -7505,9 +7505,9 @@ } }, "node_modules/zod": { - "version": "3.25.61", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.61.tgz", - "integrity": "sha512-fzfJgUw78LTNnHujj9re1Ov/JJQkRZZGDMcYqSx7Hp4rPOkKywaFHq0S6GoHeXs0wGNE/sIOutkXgnwzrVOGCQ==", + "version": "3.25.67", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", + "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index d88d51a..806ae4d 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@faker-js/faker": "^9.8.0", - "@modelcontextprotocol/sdk": "^1.12.1", + "@modelcontextprotocol/sdk": "^1.12.3", "@mswjs/data": "^0.16.2", "@mswjs/http-middleware": "^0.10.3", "@types/chai-json-schema": "^1.4.10", @@ -36,19 +36,19 @@ "pretty-print-json": "^3.0.4", "sharp": "^0.34.2", "shelljs": "^0.10.0", - "tsx": "^4.20.1", + "tsx": "^4.20.3", "typescript": "^5.8.3", - "zod": "^3.25.61" + "zod": "^3.25.67" }, "devDependencies": { "@commitlint/cli": "^19.8.1", "@commitlint/config-conventional": "^19.8.1", - "@types/aws-lambda": "^8.10.149", - "@types/node": "^24.0.0", + "@types/aws-lambda": "^8.10.150", + "@types/node": "^24.0.3", "cypress": "^14.4.1", "husky": "^9.1.7", - "lint-staged": "^16.1.0", - "oxlint": "^1.0.0", + "lint-staged": "^16.1.2", + "oxlint": "^1.1.0", "prettier": "3.5.3", "start-server-and-test": "^2.0.12" }, diff --git a/src/api/simpsons/api.ts b/src/api/simpsons/api.ts deleted file mode 100644 index d6740f1..0000000 --- a/src/api/simpsons/api.ts +++ /dev/null @@ -1,260 +0,0 @@ -// The Simpsons characters API endpoint -// Main Simpson family and characters data - -import { http, HttpResponse } from 'msw'; - -// Mock data for The Simpsons characters -const simpsonsCharacters = [ - { - id: 1, - name: 'Homer Simpson', - age: 39, - occupation: 'Nuclear Safety Inspector', - family: 'Simpson', - catchphrase: "D'oh!", - description: - 'The lovable, beer-drinking patriarch of the Simpson family', - }, - { - id: 2, - name: 'Marge Simpson', - age: 36, - occupation: 'Homemaker', - family: 'Simpson', - catchphrase: 'Mmm-hmm', - description: - 'The patient, blue-haired mother and moral center of the family', - }, - { - id: 3, - name: 'Bart Simpson', - age: 10, - occupation: 'Student', - family: 'Simpson', - catchphrase: 'Eat my shorts!', - description: 'The mischievous eldest Simpson child', - }, - { - id: 4, - name: 'Lisa Simpson', - age: 8, - occupation: 'Student', - family: 'Simpson', - catchphrase: "If anyone wants me, I'll be in my room", - description: 'The intelligent, saxophone-playing middle child', - }, - { - id: 5, - name: 'Maggie Simpson', - age: 1, - occupation: 'Baby', - family: 'Simpson', - catchphrase: '*sucking sounds*', - description: 'The youngest Simpson, always sucking on her pacifier', - }, - { - id: 6, - name: 'Ned Flanders', - age: 60, - occupation: 'Pharmaceutical Sales', - family: 'Flanders', - catchphrase: 'Okily dokily!', - description: "The Simpsons' overly cheerful Christian neighbor", - }, - { - id: 7, - name: 'Moe Szyslak', - age: 60, - occupation: 'Bartender', - family: 'Szyslak', - catchphrase: "Moe's Tavern, Moe speaking", - description: "Gruff bartender and owner of Moe's Tavern", - }, - { - id: 8, - name: 'Chief Wiggum', - age: 43, - occupation: 'Police Chief', - family: 'Wiggum', - catchphrase: 'Bake him away, toys!', - description: "Springfield's incompetent but well-meaning police chief", - }, - { - id: 9, - name: 'Apu Nahasapeemapetilon', - age: 35, - occupation: 'Kwik-E-Mart Owner', - family: 'Nahasapeemapetilon', - catchphrase: 'Thank you, come again!', - description: 'Hardworking owner of the Kwik-E-Mart convenience store', - }, - { - id: 10, - name: 'Krusty the Clown', - age: 52, - occupation: 'TV Show Host/Comedian', - family: 'Krustofsky', - catchphrase: 'Hey hey kids!', - description: - "Springfield's beloved but troubled children's TV show host", - }, -]; - -function handler(pathName: string) { - return [ - // GET - Retrieve all characters or filter by query parameters - http.get(`/${pathName}`, ({ request }) => { - console.log('GET request received:', request.url); - const url = new URL(request.url); - - // Support filtering by family, occupation, or search by name - const family = url.searchParams.get('family'); - const occupation = url.searchParams.get('occupation'); - const search = url.searchParams.get('search'); - const id = url.searchParams.get('id'); - - let filteredCharacters = simpsonsCharacters; - - // Filter by ID if provided - if (id) { - const character = simpsonsCharacters.find( - (char) => char.id === parseInt(id), - ); - return HttpResponse.json( - character || { error: 'Character not found' }, - ); - } - - // Filter by family - if (family) { - filteredCharacters = filteredCharacters.filter((char) => - char.family.toLowerCase().includes(family.toLowerCase()), - ); - } - - // Filter by occupation - if (occupation) { - filteredCharacters = filteredCharacters.filter((char) => - char.occupation - .toLowerCase() - .includes(occupation.toLowerCase()), - ); - } - - // Search by name - if (search) { - filteredCharacters = filteredCharacters.filter((char) => - char.name.toLowerCase().includes(search.toLowerCase()), - ); - } - - return HttpResponse.json({ - characters: filteredCharacters, - total: filteredCharacters.length, - message: 'The Simpsons characters data', - }); - }), - - // POST - Add a new character - http.post(`/${pathName}`, async ({ request }) => { - console.log('POST request received'); - const newCharacter = (await request.json()) as any; - - // Generate new ID - const newId = - Math.max(...simpsonsCharacters.map((char) => char.id)) + 1; - - const character = { - id: newId, - name: newCharacter.name || 'Unknown', - age: newCharacter.age || 0, - occupation: newCharacter.occupation || 'Unknown', - family: newCharacter.family || 'Unknown', - catchphrase: newCharacter.catchphrase || '', - description: newCharacter.description || '', - }; - - simpsonsCharacters.push(character); - - return HttpResponse.json({ - message: 'Character added successfully', - character: character, - }); - }), - - // PUT - Update a character - http.put(`/${pathName}`, async ({ request }) => { - console.log('PUT request received'); - const url = new URL(request.url); - const id = url.searchParams.get('id'); - const updatedData = (await request.json()) as any; - - if (!id) { - return HttpResponse.json( - { error: 'Character ID is required' }, - { status: 400 }, - ); - } - - const characterIndex = simpsonsCharacters.findIndex( - (char) => char.id === parseInt(id), - ); - - if (characterIndex === -1) { - return HttpResponse.json( - { error: 'Character not found' }, - { status: 404 }, - ); - } - - // Update character data - simpsonsCharacters[characterIndex] = { - ...simpsonsCharacters[characterIndex], - ...updatedData, - id: parseInt(id), // Ensure ID doesn't change - }; - - return HttpResponse.json({ - message: 'Character updated successfully', - character: simpsonsCharacters[characterIndex], - }); - }), - - // DELETE - Remove a character - http.delete(`/${pathName}`, ({ request }) => { - console.log('DELETE request received'); - const url = new URL(request.url); - const id = url.searchParams.get('id'); - - if (!id) { - return HttpResponse.json( - { error: 'Character ID is required' }, - { status: 400 }, - ); - } - - const characterIndex = simpsonsCharacters.findIndex( - (char) => char.id === parseInt(id), - ); - - if (characterIndex === -1) { - return HttpResponse.json( - { error: 'Character not found' }, - { status: 404 }, - ); - } - - const deletedCharacter = simpsonsCharacters.splice( - characterIndex, - 1, - )[0]; - - return HttpResponse.json({ - message: 'Character deleted successfully', - character: deletedCharacter, - }); - }), - ]; -} - -export default handler; diff --git a/src/mcp/data/api-handler-example.js b/src/mcp/data/api-handler-example.js index d6eee28..0053629 100644 --- a/src/mcp/data/api-handler-example.js +++ b/src/mcp/data/api-handler-example.js @@ -4,11 +4,8 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const apiHandlerExample = () => { - const filePath = path.join( - __dirname, - '../../../templates/handlers/api.custom.template.ts', - ); - const fileContent = fs.readFileSync(filePath, 'utf8'); - return fileContent; + const filePath = path.join(__dirname, '../../../templates/handlers/api.custom.template.ts'); + const fileContent = fs.readFileSync(filePath, 'utf8'); + return fileContent; }; export { apiHandlerExample }; diff --git a/src/mcp/helpers/add-api-endpoint.js b/src/mcp/helpers/add-api-endpoint.js index 2d461df..d381476 100644 --- a/src/mcp/helpers/add-api-endpoint.js +++ b/src/mcp/helpers/add-api-endpoint.js @@ -4,19 +4,19 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const addApiEndpoint = async (name, description, code) => { - if (!name || !description || !code) { - return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; - } - // Create path to the endpoint directory - const endpointDir = path.join(__dirname, '..', `..`, 'api', name); - const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' - if (fs.existsSync(apiPath)) { - return `API Endpoint Not created. API endpoint ${name} already exists.`; - } - // Create the endpoint directory first - fs.mkdirSync(endpointDir, { recursive: true }); - // Then create the file inside the directory - fs.writeFileSync(apiPath, code, 'utf8'); - return `API Endpoint ${name} created successfully at ${apiPath}.`; + if (!name || !description || !code) { + return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; + } + // Create path to the endpoint directory + const endpointDir = path.join(__dirname, '..', `..`, 'api', name); + const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' + if (fs.existsSync(apiPath)) { + return `API Endpoint Not created. API endpoint ${name} already exists.`; + } + // Create the endpoint directory first + fs.mkdirSync(endpointDir, { recursive: true }); + // Then create the file inside the directory + fs.writeFileSync(apiPath, code, 'utf8'); + return `API Endpoint ${name} created successfully at ${apiPath}.`; }; export { addApiEndpoint }; diff --git a/src/mcp/helpers/control-mock-server.js b/src/mcp/helpers/control-mock-server.js index 6798180..5d13e6f 100644 --- a/src/mcp/helpers/control-mock-server.js +++ b/src/mcp/helpers/control-mock-server.js @@ -4,45 +4,33 @@ import path from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const isDockerProcessRunning = () => { - return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { - silent: true, - }).stdout; + return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { + silent: true, + }).stdout; }; const manageServer = (command, mode, PORT) => { - shell.exec(command, { - async: false, - silent: true, - }); - if (shell.error()) { - return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; - } - if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { - return `Error: Local mock API server has not been started on port ${PORT}.`; - } - if (mode === 'stop' && isDockerProcessRunning()) { - return `Error: Local mock API server has not been stopped on port ${PORT}.`; - } - return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; + shell.exec(command, { + async: false, + silent: true, + }); + if (shell.error()) { + return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; + } + if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { + return `Error: Local mock API server has not been started on port ${PORT}.`; + } + if (mode === 'stop' && isDockerProcessRunning()) { + return `Error: Local mock API server has not been stopped on port ${PORT}.`; + } + return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; }; const startMockServer = async (PORT) => { - return manageServer( - `cd "${__dirname}" && docker-compose up -d`, - 'start', - PORT, - ); + return manageServer(`cd "${__dirname}" && docker-compose up -d`, 'start', PORT); }; const stopMockServer = async (PORT) => { - return manageServer( - `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, - 'stop', - PORT, - ); + return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, 'stop', PORT); }; const rebuildMockServer = async (PORT) => { - return manageServer( - `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, - 'rebuild', - PORT, - ); + return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, 'rebuild', PORT); }; export { startMockServer, stopMockServer, rebuildMockServer }; diff --git a/src/mcp/helpers/get-all-endpoints.js b/src/mcp/helpers/get-all-endpoints.js index 0b81c61..4e4b483 100644 --- a/src/mcp/helpers/get-all-endpoints.js +++ b/src/mcp/helpers/get-all-endpoints.js @@ -1,13 +1,14 @@ const getApiEndpoints = async (port) => { - let response; - try { - response = await fetch(`http://localhost:${port}`); - if (!response.ok) { - return 'Local mock API server is not running - please start the server first.'; - } - } catch { - return 'Local mock API server is not running - please start the server first.'; - } - return response.text(); + let response; + try { + response = await fetch(`http://localhost:${port}`); + if (!response.ok) { + return 'Local mock API server is not running - please start the server first.'; + } + } + catch { + return 'Local mock API server is not running - please start the server first.'; + } + return response.text(); }; export { getApiEndpoints }; diff --git a/src/mcp/server.js b/src/mcp/server.js index c2b5a6f..d6997c1 100644 --- a/src/mcp/server.js +++ b/src/mcp/server.js @@ -4,11 +4,7 @@ import { z } from 'zod'; import { getApiEndpoints } from './helpers/get-all-endpoints.js'; import { addApiEndpoint } from './helpers/add-api-endpoint.js'; import { apiHandlerExample } from './data/api-handler-example.js'; -import { - startMockServer, - stopMockServer, - rebuildMockServer, -} from './helpers/control-mock-server.js'; +import { startMockServer, stopMockServer, rebuildMockServer, } from './helpers/control-mock-server.js'; import path from 'path'; import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); @@ -17,146 +13,136 @@ const __dirname = path.dirname(__filename); const PORT = 8000; // Create server instance const server = new McpServer({ - name: 'MCP Local Mock API Server', - version: '1.0.0', - capabilities: { - resources: {}, - tools: {}, - }, + name: 'MCP Local Mock API Server', + version: '1.0.0', + capabilities: { + resources: {}, + tools: {}, + }, }); -server.tool( - 'create_new_api_endpoint', - `create new api endpoint for the local mock API server using the supplied standard code format as a basis for the new api code. +server.tool('create_new_api_endpoint', `create new api endpoint for the local mock API server using the supplied standard code format as a basis for the new api code. Args: - action: get_code_format (gets standard code format) or add_endpoint(creates new api endpoint using supplied code) - name: Name of the API endpoint (only required for add_endpoint action) - description: Description of the API endpoint (only required for add_endpoint action) - - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, - { - action: z.enum(['add_endpoint', 'get_code_format']), - name: z.string().min(1, 'Name is required').optional(), - description: z.string().min(1, 'Description is required').optional(), - code: z.string().min(1, 'Code is required').optional(), - }, - async (input) => { - const { action, name, description, code } = input; - switch (action) { - case 'get_code_format': - // Return the format for API endpoint code generation - return { - content: [ - { - type: 'text', - text: `API endpoint code needs to follow the format in the example below: + - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, { + action: z.enum(['add_endpoint', 'get_code_format']), + name: z.string().min(1, 'Name is required').optional(), + description: z.string().min(1, 'Description is required').optional(), + code: z.string().min(1, 'Code is required').optional(), +}, async (input) => { + const { action, name, description, code } = input; + switch (action) { + case 'get_code_format': + // Return the format for API endpoint code generation + return { + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: ${apiHandlerExample()} This is a TypeScript file that exports a function that returns an array of HTTP handlers. Create new API endpoint code using a similar pattern.`, - }, - ], - }; - case 'add_endpoint': - // Handle the 'add' action to add a new API endpoint - if (!name || !description || !code) { - return { - content: [ - { - type: 'text', - text: 'Name, description, and code are required for adding a new API endpoint.', - }, - ], - }; - } - const result = await addApiEndpoint(name, description, code); - return { - content: [ - { - type: 'text', - text: result, - }, - ], - }; - default: - return { - content: [ - { - type: 'text', - text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', - }, - ], - }; - } - }, -); -server.tool( - 'manage_local_mock_api_server', - `Manage the local mock server on localhost running in Docker (Docker must be installed and running). + }, + ], + }; + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } +}); +server.tool('manage_local_mock_api_server', `Manage the local mock server on localhost running in Docker (Docker must be installed and running). Args: action: one of the following actions: get (gets all available api endpoints), start (starts server), stop (stops server), rebuild (rebuild server to register new code changes) - `, - { - action: z.enum(['get', 'start', 'stop', 'rebuild']), - }, - async (input) => { - const { action } = input; - switch (action) { - case 'get': - return { - content: [ - { - type: 'text', - text: await getApiEndpoints(PORT), - }, - ], - }; - case 'start': - return { - content: [ - { - type: 'text', - text: await startMockServer(PORT), - }, - ], - }; - case 'stop': - return { - content: [ - { - type: 'text', - text: await stopMockServer(PORT), - }, - ], - }; - case 'rebuild': - return { - content: [ - { - type: 'text', - text: await rebuildMockServer(PORT), - }, - ], - }; - default: - return { - content: [ - { - type: 'text', - text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', - }, - ], - }; - } - }, -); + `, { + action: z.enum(['get', 'start', 'stop', 'rebuild']), +}, async (input) => { + const { action } = input; + switch (action) { + case 'get': + return { + content: [ + { + type: 'text', + text: await getApiEndpoints(PORT), + }, + ], + }; + case 'start': + return { + content: [ + { + type: 'text', + text: await startMockServer(PORT), + }, + ], + }; + case 'stop': + return { + content: [ + { + type: 'text', + text: await stopMockServer(PORT), + }, + ], + }; + case 'rebuild': + return { + content: [ + { + type: 'text', + text: await rebuildMockServer(PORT), + }, + ], + }; + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } +}); async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error('Local Mock API MCP Server running on stdio'); + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Local Mock API MCP Server running on stdio'); } main().catch((error) => { - console.error('Fatal error in main():', error); - process.exit(1); + console.error('Fatal error in main():', error); + process.exit(1); }); From b829ad0023c1273f265c94c40960424845775cde Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 13:20:11 +0100 Subject: [PATCH 7/9] chore(): update readme --- README.md | 79 ++++++++++++++++++++++++++++++++-- image.png => images/image.png | Bin logs.png => images/logs.png | Bin images/mcp-1.png | Bin 0 -> 68915 bytes images/mcp-2.png | Bin 0 -> 113030 bytes 5 files changed, 76 insertions(+), 3 deletions(-) rename image.png => images/image.png (100%) rename logs.png => images/logs.png (100%) create mode 100644 images/mcp-1.png create mode 100644 images/mcp-2.png diff --git a/README.md b/README.md index a27f495..915b56f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Github actions](https://github.com/piyook/mock-api-framework-template/actions/workflows/tests.yaml/badge.svg) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -# Local Mock API Framework +# Local Mock API Framework and MCP Server ## Purpose @@ -25,6 +25,8 @@ The framework is written in TypeScript and can : - Mock API error codes/messages for testing frontend error handling logic - Log and store API requests in JSON format and display information on the localhost:8000/logs route +The project has a local MCP server (experimental) to connect to LLM Agents (such as Claude Desktop, Cursor etc.,) that use the MCP protocol. This allows the Local Mock API server to be managed using an LLM for easier interactions during development. + ## Set-up #### Requirements @@ -63,7 +65,7 @@ A list of all endpoints can be viewed on http://localhost:8000/. The project has been set-up with demo endpoints that can be removed or modified as needed. -![main server page](image.png) +![main server page](images/image.png) ### Useful Commands @@ -311,7 +313,7 @@ API request information and sent data can be logged and stored as JSON in the /s Logs can be viewed at **localhost:8000/logs**. -![logging](logs.png) +![logging](images/logs.png) ### Set-up @@ -371,3 +373,74 @@ By default this is set to 8000 but can be changed by setting the SERVER_PORT in ```js SERVER_PORT = 1234; ``` + +# MCP Server (Experimental) + +### Set-up + +Connect the mcp server to the mock api server as described in your agents documentation. Note the MCP server.js file is in the src/mcp folder. + +You can run the command below to build the mcp server if needed. + +```bash +npm run mcp:build +``` + +then use the path below to connect to the mcp server in the MCP config file + +```bash +/src/mcp/server.js +``` + +### Usage + +You can request the LLM agent to start, stop and rebuild the LOCAL MOCK API server and to check for available api endpoints using the manage_local_mock_api_server tool. + +You can also request the agent build a new api endpoint using the create_new_api_endpoint tool. + +Note: the mcp server will only work with a local mock api server running in a Docker container. + +![mcp-1](images/mcp-1.png) + +![mcp-2](images/mcp-2.png) + +### Issues + +#### Node version managers + +If using a node version manager such as NVM or FNM in Windows, then you may need to either specify the entire path to the node binary in the mcp server config file or set the system NODE_PATH environment variable to direct the path of the fnm aliases directory (or create sym links in linux / mac) - see https://github.com/modelcontextprotocol/servers/issues/40#issuecomment-2588950176 or https://github.com/Schniz/fnm/issues/1366#issuecomment-2764510266 + +E.g with fnm aliases in PATH the config below works with fnm and node + +```bash +"mcpServers": { + "LocalMockAPIServer": { + "command": "node", + "args": [ + "\\mock-api-framework-template\\src\\mcp\\server.js" + ] + ... + +``` + +#### Custom Port Numbers + +If changing the PORT number from 8000 in the env of the Mock Server then manually update the mcp/server.ts file PORT variable to the match the updated port number and run + +```bash +npm run mcp:build +``` + +then restart your mcp agents to update the connection. + +### Debugging/Testing the MCP server + +You can test the mcp server using the mcp inspector tool (@modelcontextprotocol/inspector) by running + +```bash +npm run mcp:debug +``` + +This will open a browser window and connect to the mcp server to manually run tools for testing. + +Note: This feature is currently experimental - log any issues here https://github.com/piyook/mock-api-framework-template/issues. diff --git a/image.png b/images/image.png similarity index 100% rename from image.png rename to images/image.png diff --git a/logs.png b/images/logs.png similarity index 100% rename from logs.png rename to images/logs.png diff --git a/images/mcp-1.png b/images/mcp-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0862350e7e52367788118ac38b6b0a99ad02ee93 GIT binary patch literal 68915 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 E2OTN@82|tP literal 0 HcmV?d00001 From 355170de53e661e716ae13421c530549f3788a0c Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 14:37:37 +0100 Subject: [PATCH 8/9] chore(): update readme --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 915b56f..61c7e74 100644 --- a/README.md +++ b/README.md @@ -380,7 +380,7 @@ SERVER_PORT = 1234; Connect the mcp server to the mock api server as described in your agents documentation. Note the MCP server.js file is in the src/mcp folder. -You can run the command below to build the mcp server if needed. +You can run the command below to build the mcp server.js file if needed. ```bash npm run mcp:build @@ -443,4 +443,6 @@ npm run mcp:debug This will open a browser window and connect to the mcp server to manually run tools for testing. -Note: This feature is currently experimental - log any issues here https://github.com/piyook/mock-api-framework-template/issues. +### New Issues + +Note: The MCP Server feature is currently experimental - log any issues here https://github.com/piyook/mock-api-framework-template/issues. From 71a91e13a2298e98f451174494f970e939a043ab Mon Sep 17 00:00:00 2001 From: piyook Date: Tue, 17 Jun 2025 14:38:05 +0100 Subject: [PATCH 9/9] chore(): update readme --- src/mcp/data/api-handler-example.js | 9 +- src/mcp/helpers/add-api-endpoint.js | 28 +-- src/mcp/helpers/control-mock-server.js | 52 ++++-- src/mcp/helpers/get-all-endpoints.js | 21 +-- src/mcp/server.js | 246 +++++++++++++------------ 5 files changed, 192 insertions(+), 164 deletions(-) diff --git a/src/mcp/data/api-handler-example.js b/src/mcp/data/api-handler-example.js index 0053629..d6eee28 100644 --- a/src/mcp/data/api-handler-example.js +++ b/src/mcp/data/api-handler-example.js @@ -4,8 +4,11 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const apiHandlerExample = () => { - const filePath = path.join(__dirname, '../../../templates/handlers/api.custom.template.ts'); - const fileContent = fs.readFileSync(filePath, 'utf8'); - return fileContent; + const filePath = path.join( + __dirname, + '../../../templates/handlers/api.custom.template.ts', + ); + const fileContent = fs.readFileSync(filePath, 'utf8'); + return fileContent; }; export { apiHandlerExample }; diff --git a/src/mcp/helpers/add-api-endpoint.js b/src/mcp/helpers/add-api-endpoint.js index d381476..2d461df 100644 --- a/src/mcp/helpers/add-api-endpoint.js +++ b/src/mcp/helpers/add-api-endpoint.js @@ -4,19 +4,19 @@ import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const addApiEndpoint = async (name, description, code) => { - if (!name || !description || !code) { - return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; - } - // Create path to the endpoint directory - const endpointDir = path.join(__dirname, '..', `..`, 'api', name); - const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' - if (fs.existsSync(apiPath)) { - return `API Endpoint Not created. API endpoint ${name} already exists.`; - } - // Create the endpoint directory first - fs.mkdirSync(endpointDir, { recursive: true }); - // Then create the file inside the directory - fs.writeFileSync(apiPath, code, 'utf8'); - return `API Endpoint ${name} created successfully at ${apiPath}.`; + if (!name || !description || !code) { + return 'API Endpoint Not created. Name, description, and handler code are required to create a new API endpoint.'; + } + // Create path to the endpoint directory + const endpointDir = path.join(__dirname, '..', `..`, 'api', name); + const apiPath = path.join(endpointDir, `api.ts`); // or 'index.ts' + if (fs.existsSync(apiPath)) { + return `API Endpoint Not created. API endpoint ${name} already exists.`; + } + // Create the endpoint directory first + fs.mkdirSync(endpointDir, { recursive: true }); + // Then create the file inside the directory + fs.writeFileSync(apiPath, code, 'utf8'); + return `API Endpoint ${name} created successfully at ${apiPath}.`; }; export { addApiEndpoint }; diff --git a/src/mcp/helpers/control-mock-server.js b/src/mcp/helpers/control-mock-server.js index 5d13e6f..6798180 100644 --- a/src/mcp/helpers/control-mock-server.js +++ b/src/mcp/helpers/control-mock-server.js @@ -4,33 +4,45 @@ import path from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const isDockerProcessRunning = () => { - return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { - silent: true, - }).stdout; + return !!shell.exec(`docker ps -q --filter "name=mock-api-framework"`, { + silent: true, + }).stdout; }; const manageServer = (command, mode, PORT) => { - shell.exec(command, { - async: false, - silent: true, - }); - if (shell.error()) { - return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; - } - if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { - return `Error: Local mock API server has not been started on port ${PORT}.`; - } - if (mode === 'stop' && isDockerProcessRunning()) { - return `Error: Local mock API server has not been stopped on port ${PORT}.`; - } - return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; + shell.exec(command, { + async: false, + silent: true, + }); + if (shell.error()) { + return `Error running ${command}. Failed to ${mode} the local mock API server. ${shell.error()}. Current working directory: ${process.cwd()}`; + } + if ((mode === 'start' || mode === 'rebuild') && !isDockerProcessRunning()) { + return `Error: Local mock API server has not been started on port ${PORT}.`; + } + if (mode === 'stop' && isDockerProcessRunning()) { + return `Error: Local mock API server has not been stopped on port ${PORT}.`; + } + return `Local mock API server has been ${mode}ed successfully on port ${PORT}`; }; const startMockServer = async (PORT) => { - return manageServer(`cd "${__dirname}" && docker-compose up -d`, 'start', PORT); + return manageServer( + `cd "${__dirname}" && docker-compose up -d`, + 'start', + PORT, + ); }; const stopMockServer = async (PORT) => { - return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, 'stop', PORT); + return manageServer( + `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10`, + 'stop', + PORT, + ); }; const rebuildMockServer = async (PORT) => { - return manageServer(`cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, 'rebuild', PORT); + return manageServer( + `cd "${__dirname}" && docker-compose down --remove-orphans --volumes --timeout 10 &&docker-compose up -d --build --force-recreate`, + 'rebuild', + PORT, + ); }; export { startMockServer, stopMockServer, rebuildMockServer }; diff --git a/src/mcp/helpers/get-all-endpoints.js b/src/mcp/helpers/get-all-endpoints.js index 4e4b483..0b81c61 100644 --- a/src/mcp/helpers/get-all-endpoints.js +++ b/src/mcp/helpers/get-all-endpoints.js @@ -1,14 +1,13 @@ const getApiEndpoints = async (port) => { - let response; - try { - response = await fetch(`http://localhost:${port}`); - if (!response.ok) { - return 'Local mock API server is not running - please start the server first.'; - } - } - catch { - return 'Local mock API server is not running - please start the server first.'; - } - return response.text(); + let response; + try { + response = await fetch(`http://localhost:${port}`); + if (!response.ok) { + return 'Local mock API server is not running - please start the server first.'; + } + } catch { + return 'Local mock API server is not running - please start the server first.'; + } + return response.text(); }; export { getApiEndpoints }; diff --git a/src/mcp/server.js b/src/mcp/server.js index d6997c1..c2b5a6f 100644 --- a/src/mcp/server.js +++ b/src/mcp/server.js @@ -4,7 +4,11 @@ import { z } from 'zod'; import { getApiEndpoints } from './helpers/get-all-endpoints.js'; import { addApiEndpoint } from './helpers/add-api-endpoint.js'; import { apiHandlerExample } from './data/api-handler-example.js'; -import { startMockServer, stopMockServer, rebuildMockServer, } from './helpers/control-mock-server.js'; +import { + startMockServer, + stopMockServer, + rebuildMockServer, +} from './helpers/control-mock-server.js'; import path from 'path'; import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); @@ -13,136 +17,146 @@ const __dirname = path.dirname(__filename); const PORT = 8000; // Create server instance const server = new McpServer({ - name: 'MCP Local Mock API Server', - version: '1.0.0', - capabilities: { - resources: {}, - tools: {}, - }, + name: 'MCP Local Mock API Server', + version: '1.0.0', + capabilities: { + resources: {}, + tools: {}, + }, }); -server.tool('create_new_api_endpoint', `create new api endpoint for the local mock API server using the supplied standard code format as a basis for the new api code. +server.tool( + 'create_new_api_endpoint', + `create new api endpoint for the local mock API server using the supplied standard code format as a basis for the new api code. Args: - action: get_code_format (gets standard code format) or add_endpoint(creates new api endpoint using supplied code) - name: Name of the API endpoint (only required for add_endpoint action) - description: Description of the API endpoint (only required for add_endpoint action) - - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, { - action: z.enum(['add_endpoint', 'get_code_format']), - name: z.string().min(1, 'Name is required').optional(), - description: z.string().min(1, 'Description is required').optional(), - code: z.string().min(1, 'Code is required').optional(), -}, async (input) => { - const { action, name, description, code } = input; - switch (action) { - case 'get_code_format': - // Return the format for API endpoint code generation - return { - content: [ - { - type: 'text', - text: `API endpoint code needs to follow the format in the example below: + - code: Code for the API endpoint (should be a valid TypeScript file content following the format described in the get_code_format request )`, + { + action: z.enum(['add_endpoint', 'get_code_format']), + name: z.string().min(1, 'Name is required').optional(), + description: z.string().min(1, 'Description is required').optional(), + code: z.string().min(1, 'Code is required').optional(), + }, + async (input) => { + const { action, name, description, code } = input; + switch (action) { + case 'get_code_format': + // Return the format for API endpoint code generation + return { + content: [ + { + type: 'text', + text: `API endpoint code needs to follow the format in the example below: ${apiHandlerExample()} This is a TypeScript file that exports a function that returns an array of HTTP handlers. Create new API endpoint code using a similar pattern.`, - }, - ], - }; - case 'add_endpoint': - // Handle the 'add' action to add a new API endpoint - if (!name || !description || !code) { - return { - content: [ - { - type: 'text', - text: 'Name, description, and code are required for adding a new API endpoint.', - }, - ], - }; - } - const result = await addApiEndpoint(name, description, code); - return { - content: [ - { - type: 'text', - text: result, - }, - ], - }; - default: - return { - content: [ - { - type: 'text', - text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', - }, - ], - }; - } -}); -server.tool('manage_local_mock_api_server', `Manage the local mock server on localhost running in Docker (Docker must be installed and running). + }, + ], + }; + case 'add_endpoint': + // Handle the 'add' action to add a new API endpoint + if (!name || !description || !code) { + return { + content: [ + { + type: 'text', + text: 'Name, description, and code are required for adding a new API endpoint.', + }, + ], + }; + } + const result = await addApiEndpoint(name, description, code); + return { + content: [ + { + type: 'text', + text: result, + }, + ], + }; + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } + }, +); +server.tool( + 'manage_local_mock_api_server', + `Manage the local mock server on localhost running in Docker (Docker must be installed and running). Args: action: one of the following actions: get (gets all available api endpoints), start (starts server), stop (stops server), rebuild (rebuild server to register new code changes) - `, { - action: z.enum(['get', 'start', 'stop', 'rebuild']), -}, async (input) => { - const { action } = input; - switch (action) { - case 'get': - return { - content: [ - { - type: 'text', - text: await getApiEndpoints(PORT), - }, - ], - }; - case 'start': - return { - content: [ - { - type: 'text', - text: await startMockServer(PORT), - }, - ], - }; - case 'stop': - return { - content: [ - { - type: 'text', - text: await stopMockServer(PORT), - }, - ], - }; - case 'rebuild': - return { - content: [ - { - type: 'text', - text: await rebuildMockServer(PORT), - }, - ], - }; - default: - return { - content: [ - { - type: 'text', - text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', - }, - ], - }; - } -}); + `, + { + action: z.enum(['get', 'start', 'stop', 'rebuild']), + }, + async (input) => { + const { action } = input; + switch (action) { + case 'get': + return { + content: [ + { + type: 'text', + text: await getApiEndpoints(PORT), + }, + ], + }; + case 'start': + return { + content: [ + { + type: 'text', + text: await startMockServer(PORT), + }, + ], + }; + case 'stop': + return { + content: [ + { + type: 'text', + text: await stopMockServer(PORT), + }, + ], + }; + case 'rebuild': + return { + content: [ + { + type: 'text', + text: await rebuildMockServer(PORT), + }, + ], + }; + default: + return { + content: [ + { + type: 'text', + text: 'Invalid action specified. Use "get_endpoints", "start_server", "stop_server", "rebuild_server`or "add_endpoint".', + }, + ], + }; + } + }, +); async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error('Local Mock API MCP Server running on stdio'); + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error('Local Mock API MCP Server running on stdio'); } main().catch((error) => { - console.error('Fatal error in main():', error); - process.exit(1); + console.error('Fatal error in main():', error); + process.exit(1); });