diff --git a/docker-compose.yaml b/docker-compose.yaml index 6e4b6c1a..37088a8d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -3,7 +3,7 @@ name: displaycontroller include: - proxy/docker-compose.yaml - database/docker-compose.yaml - - serverState/docker-compose.yaml + - serverState/runner/docker-compose.yaml - syncTime/docker-compose.yaml - screens/docker-compose.yaml - ranges/docker-compose.yaml diff --git a/frontend/Dockerfile b/frontend/Dockerfile index bad47274..5d75d32e 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -8,6 +8,18 @@ ARG MIN_SM_VERSION ARG MAX_SM_VERSION ARG APP_VERSION +FROM base AS deps-logger +WORKDIR /app/lib/logger +COPY --from=logger . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + FROM base AS deps-screen-types WORKDIR /app/screens/types @@ -15,17 +27,19 @@ COPY --from=screen-types . . RUN npm ci --loglevel=info && \ npm run build -FROM base AS deps-files-utils -WORKDIR /app/ranges/types -COPY --from=range-types . . +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges +COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build FROM base AS local-deps WORKDIR /app +COPY --from=deps-logger /app/lib/logger /app/lib/logger +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints COPY --from=deps-screen-types /app/screens/types /app/screens/types -COPY --from=deps-files-utils /app/ranges/types /app/ranges/types +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/frontend/docker-compose.yaml b/frontend/docker-compose.yaml index 9ee127ba..b3cfa0c8 100644 --- a/frontend/docker-compose.yaml +++ b/frontend/docker-compose.yaml @@ -10,7 +10,9 @@ services: context: . dockerfile: Dockerfile additional_contexts: - - range-types=../ranges/types + - logger=../lib/logger + - endpoints=../lib/endpoints + - ranges=../ranges/ranges - screen-types=../screens/types - files-utils=../screens/utils/files args: diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 01cf865e..b37fee46 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,7 +16,8 @@ "@rjsf/utils": "^6.4.2", "@rjsf/validator-ajv8": "^6.4.2", "bootstrap": "^5.3.8", - "dc-ranges-types": "file:../ranges/types", + "dc-endpoints": "file:../lib/endpoints", + "dc-ranges": "file:../ranges/ranges", "dc-screens-types": "file:../screens/types", "mime": "^4.1.0", "next": "^16.2.2", @@ -39,12 +40,43 @@ "typescript": "~5.9.3" } }, + "../lib/endpoints": { + "name": "dc-endpoints", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-logger": "file:../logger", + "express": "^5.2.1", + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" + }, + "devDependencies": { + "@types/express": "^5.0.6", + "@types/node": "^25.5.0", + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../ranges/ranges": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../ranges/types": { "name": "dc-ranges-types", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -56,7 +88,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -837,9 +869,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", "peer": true, "dependencies": { @@ -1501,9 +1533,9 @@ "peer": true }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "peer": true, "bin": { @@ -1527,9 +1559,9 @@ } }, "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==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -1588,9 +1620,9 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz", - "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==", + "version": "2.10.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.15.tgz", + "integrity": "sha512-1nfKCq9wuAZFTkA2ey/3OXXx7GzFjLdkTiFVNwlJ9WqdI706CZRIhEqjuwanjMIja+84jDLa9rcyZDPDiVkASQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -1628,9 +1660,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "funding": [ { "type": "opencollective", @@ -1648,10 +1680,11 @@ "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1677,9 +1710,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001731", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", - "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", + "version": "1.0.30001785", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001785.tgz", + "integrity": "sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ==", "funding": [ { "type": "opencollective", @@ -1753,8 +1786,12 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, - "node_modules/dc-ranges-types": { - "resolved": "../ranges/types", + "node_modules/dc-endpoints": { + "resolved": "../lib/endpoints", + "link": true + }, + "node_modules/dc-ranges": { + "resolved": "../ranges/ranges", "link": true }, "node_modules/dc-screens-types": { @@ -1808,9 +1845,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.194", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.194.tgz", - "integrity": "sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==", + "version": "1.5.331", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz", + "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==", "license": "ISC", "peer": true }, @@ -1863,14 +1900,14 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -1886,9 +1923,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "license": "MIT", "peer": true }, @@ -2200,13 +2237,17 @@ "license": "MIT" }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/loader-utils": { @@ -2224,15 +2265,15 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lodash-es": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", - "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "license": "MIT" }, "node_modules/loose-envify": { @@ -2382,9 +2423,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", "license": "MIT", "peer": true }, @@ -2539,16 +2580,6 @@ "node": ">=6" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/raw-loader": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", @@ -2775,27 +2806,6 @@ "node": ">=4" } }, - "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" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -2821,9 +2831,9 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2852,9 +2862,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "optional": true, "bin": { @@ -2864,16 +2874,6 @@ "node": ">=10" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/sharp": { "version": "0.34.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", @@ -2941,35 +2941,18 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -3067,24 +3050,28 @@ } }, "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", "license": "MIT", "peer": true, "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -3096,16 +3083,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "license": "MIT", "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -3131,9 +3117,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "peer": true, "dependencies": { @@ -3192,9 +3178,9 @@ "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -3264,9 +3250,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "license": "MIT", "peer": true, "dependencies": { @@ -3278,9 +3264,9 @@ } }, "node_modules/webpack": { - "version": "5.101.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz", - "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "license": "MIT", "peer": true, "dependencies": { @@ -3290,25 +3276,25 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", - "browserslist": "^4.24.0", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.2", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.3.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -3327,9 +3313,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "license": "MIT", "peer": true, "engines": { @@ -3337,9 +3323,9 @@ } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "peer": true, "dependencies": { @@ -3386,9 +3372,9 @@ } }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "license": "ISC", "engines": { "node": ">= 6" diff --git a/frontend/package.json b/frontend/package.json index 7eeb953d..0af1aa4c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,7 +17,8 @@ "@rjsf/utils": "^6.4.2", "@rjsf/validator-ajv8": "^6.4.2", "bootstrap": "^5.3.8", - "dc-ranges-types": "file:../ranges/types", + "dc-endpoints": "file:../lib/endpoints", + "dc-ranges": "file:../ranges/ranges", "dc-screens-types": "file:../screens/types", "mime": "^4.1.0", "next": "^16.2.2", @@ -39,4 +40,4 @@ "@types/smallest-enclosing-circle": "^1.0.3", "typescript": "~5.9.3" } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/Form/RangeSelector/multi.tsx b/frontend/src/app/components/Form/RangeSelector/multi.tsx index efc678e3..c38628e5 100644 --- a/frontend/src/app/components/Form/RangeSelector/multi.tsx +++ b/frontend/src/app/components/Form/RangeSelector/multi.tsx @@ -1,8 +1,8 @@ import { useEffect, useState } from "react" -import SelectWithCustom from "../SelectWithCustom"; import { WidgetProps } from "@rjsf/utils"; -import { JSONSchema7TypeName } from "json-schema"; import { useHost } from "@frontend/app/hooks/useHost"; +import { request } from "dc-endpoints"; +import { getActiveRanges } from "dc-ranges/endpoints"; export default function MultiRangeSelector(props: WidgetProps) { const [ranges, setRanges] = useState([]); @@ -13,14 +13,12 @@ export default function MultiRangeSelector(props: WidgetProps) { } async function fetchRanges() { - const url = `${host}/api/ranges`; - const response = await fetch(url); - if (!response.ok) { - console.error("Failed to fetch ranges"); + const ranges = await request(host, getActiveRanges); + if (ranges.type === "error" || !ranges.body) { + setRanges([]); return; } - const data = await response.json(); - setRanges(data); + setRanges(ranges.body); } useEffect(() => { diff --git a/frontend/src/app/components/Form/RangeSelector/single.tsx b/frontend/src/app/components/Form/RangeSelector/single.tsx index fc01c0cd..1e8384fc 100644 --- a/frontend/src/app/components/Form/RangeSelector/single.tsx +++ b/frontend/src/app/components/Form/RangeSelector/single.tsx @@ -3,6 +3,8 @@ import SelectWithCustom from "../SelectWithCustom"; import { WidgetProps } from "@rjsf/utils"; import { JSONSchema7TypeName } from "json-schema"; import { useHost } from "@frontend/app/hooks/useHost"; +import { request } from "dc-endpoints"; +import { getActiveRanges } from "dc-ranges/endpoints"; export default function SingleRangeSelector(props: WidgetProps) { const [ranges, setRanges] = useState<(number | null)[]>([null]); @@ -13,15 +15,14 @@ export default function SingleRangeSelector(props: WidgetProps) { return; } async function fetchRanges() { - const url = `${host}/api/ranges`; - const response = await fetch(url); - if (!response.ok) { - console.error("Failed to fetch ranges"); + const ranges = await request(host, getActiveRanges); + if (ranges.type === "error" || !ranges.body) { + setRanges([null]); return; } - const data = await response.json(); - data.push(null); - setRanges(data); + const rangeValues: Array = ranges.body; + rangeValues.push(null); + setRanges(rangeValues); } fetchRanges(); }, [host]); diff --git a/frontend/src/app/components/Form/RangesGrid/index.tsx b/frontend/src/app/components/Form/RangesGrid/index.tsx index bd91a841..a554eb94 100644 --- a/frontend/src/app/components/Form/RangesGrid/index.tsx +++ b/frontend/src/app/components/Form/RangesGrid/index.tsx @@ -6,6 +6,8 @@ import CreateableSelect from "react-select/creatable"; import styles from "./ranges.module.css"; import Grid from "@frontend/app/show/components/Ranges/Grid"; import { useHost } from "@frontend/app/hooks/useHost"; +import { request } from "dc-endpoints"; +import { getActiveRanges } from "dc-ranges/endpoints"; interface Value { label: string; @@ -51,19 +53,21 @@ export default function RangesGrid(props: WidgetProps) { useEffect(() => { if (!host) return; async function fetchRanges() { - const url = `${host}/api/ranges`; - const response = await fetch(url); - if (!response.ok) { - console.error("Failed to fetch ranges"); + const ranges = await request(host, getActiveRanges); + if (ranges.type === "error" || !ranges.body) { + setOptions([{ label: "None", value: null }]); return; } - const data = await response.json() as Array; - data.push(null); - setOptions(data.map(range => ({ + const rangesData: Array = ranges.body; + rangesData.push(null); + setOptions(rangesData.map(range => ({ label: range === null ? "None" : range.toString(), value: range - }) - )); + })).sort((a, b) => { + if (a.value === null) return 1; // Place null at the end + if (b.value === null) return -1; + return a.value - b.value; // Sort numerically + })); } fetchRanges(); }, [host]); diff --git a/frontend/src/app/show/components/Ranges/Arrow/index.tsx b/frontend/src/app/show/components/Ranges/Arrow/index.tsx index 91f1f8e1..45fe45d9 100644 --- a/frontend/src/app/show/components/Ranges/Arrow/index.tsx +++ b/frontend/src/app/show/components/Ranges/Arrow/index.tsx @@ -1,4 +1,4 @@ -import { ValidHit } from "dc-ranges-types"; +import { ValidHit } from "dc-ranges/types"; import { FaArrowUp } from "react-icons/fa6"; interface ShotArrowProps { diff --git a/frontend/src/app/show/components/Ranges/Draw/hits/hit.tsx b/frontend/src/app/show/components/Ranges/Draw/hits/hit.tsx index d520b243..1edee591 100644 --- a/frontend/src/app/show/components/Ranges/Draw/hits/hit.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/hits/hit.tsx @@ -1,4 +1,4 @@ -import { Hit, Layout } from "dc-ranges-types"; +import { Hit, Layout } from "dc-ranges/types"; import { idealTextColor } from "../../../../lib/idealTextColor"; import { getHitColor } from "../layout"; import { memo } from "react"; diff --git a/frontend/src/app/show/components/Ranges/Draw/hits/index.tsx b/frontend/src/app/show/components/Ranges/Draw/hits/index.tsx index 4b7f7412..a283cd65 100644 --- a/frontend/src/app/show/components/Ranges/Draw/hits/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/hits/index.tsx @@ -1,5 +1,5 @@ import { DrawHit } from "./hit" -import { Hits, Range, Round, UnsignedNumber } from "dc-ranges-types"; +import { Hits, Range, Round, UnsignedNumber } from "dc-ranges/types"; import TargetCircle from "./targetCircle"; import { memo } from "react"; import { compareJSON } from ".."; diff --git a/frontend/src/app/show/components/Ranges/Draw/hits/targetCircle.tsx b/frontend/src/app/show/components/Ranges/Draw/hits/targetCircle.tsx index 21817da6..ede219f9 100644 --- a/frontend/src/app/show/components/Ranges/Draw/hits/targetCircle.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/hits/targetCircle.tsx @@ -1,4 +1,4 @@ -import { Hit } from "dc-ranges-types"; +import { Hit } from "dc-ranges/types"; import enclosingCircle from "smallest-enclosing-circle"; import styles from "../rangeDraw.module.css"; diff --git a/frontend/src/app/show/components/Ranges/Draw/index.tsx b/frontend/src/app/show/components/Ranges/Draw/index.tsx index 806eb041..5a994c7d 100644 --- a/frontend/src/app/show/components/Ranges/Draw/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/index.tsx @@ -1,6 +1,6 @@ "use client"; -import { ActiveRange, ColorCode, Range, Round } from "dc-ranges-types"; +import { ActiveRange, ColorCode, Range, Round } from "dc-ranges/types"; import React, { memo, useLayoutEffect, useMemo, useRef, useState } from "react"; import Layout, { getSizeAuto, getSize as getSizeLayout } from "./layout"; import { DrawHits } from "./hits"; diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/chess/index.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/chess/index.tsx index 2fbd52bd..2b6489d4 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/chess/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/chess/index.tsx @@ -1,4 +1,4 @@ -import { LayoutChess } from "dc-ranges-types"; +import { LayoutChess } from "dc-ranges/types"; import chessFive from "./5x5.svg"; import chessSix from "./6x6.svg"; diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/dart/index.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/dart/index.tsx index 828a5061..bd2d1b42 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/dart/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/dart/index.tsx @@ -1,4 +1,4 @@ -import { LayoutDart } from "dc-ranges-types"; +import { LayoutDart } from "dc-ranges/types"; import dart from "./dartboard.svg"; import { LayoutInterface } from ".."; diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/index.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/index.tsx index fda25f83..6bd428fd 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/index.tsx @@ -1,4 +1,4 @@ -import { ColorCode, Hit, Hits, Layout, Mode, Range, Round, UnsignedInteger, UnsignedNumber, ValidHit, Zoom } from "dc-ranges-types"; +import { ColorCode, Hit, Hits, Layout, Mode, Range, Round, UnsignedInteger, UnsignedNumber, ValidHit, Zoom } from "dc-ranges/types"; import { memo, useMemo } from "react"; import { layoutRings } from "./rings"; import { layoutDart } from "./dart"; diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/rectangle/index.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/rectangle/index.tsx index 793fb9a2..61422429 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/rectangle/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/rectangle/index.tsx @@ -1,4 +1,4 @@ -import { LayoutRectangle } from "dc-ranges-types"; +import { LayoutRectangle } from "dc-ranges/types"; import { LayoutInterface } from ".."; import { layoutRings } from "../rings"; diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/rings/index.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/rings/index.tsx index 07092d2c..c605c209 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/rings/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/rings/index.tsx @@ -1,4 +1,4 @@ -import { LayoutRings, Range } from "dc-ranges-types"; +import { LayoutRings, Range } from "dc-ranges/types"; import Ring from "./ring"; import { LayoutInterface } from ".."; diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/rings/ring.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/rings/ring.tsx index ce9bfdc2..f040abf2 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/rings/ring.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/rings/ring.tsx @@ -1,5 +1,5 @@ import { idealTextColor } from "../../../../../lib/idealTextColor"; -import { LayoutRing } from "dc-ranges-types"; +import { LayoutRing } from "dc-ranges/types"; interface RingsProps { ring: LayoutRing, diff --git a/frontend/src/app/show/components/Ranges/Draw/layout/stars/index.tsx b/frontend/src/app/show/components/Ranges/Draw/layout/stars/index.tsx index f874acc4..42247c38 100644 --- a/frontend/src/app/show/components/Ranges/Draw/layout/stars/index.tsx +++ b/frontend/src/app/show/components/Ranges/Draw/layout/stars/index.tsx @@ -3,7 +3,7 @@ import starsPistol from "./starsLp.svg"; import easter from "./easter.svg"; import winter from "./winter.svg"; -import { Range, LayoutEaster, LayoutStars } from "dc-ranges-types"; +import { Range, LayoutEaster, LayoutStars } from "dc-ranges/types"; import { LayoutInterface } from ".."; diff --git a/frontend/src/app/show/components/Ranges/Header/index.tsx b/frontend/src/app/show/components/Ranges/Header/index.tsx index 6a4c28cc..f98b61a5 100644 --- a/frontend/src/app/show/components/Ranges/Header/index.tsx +++ b/frontend/src/app/show/components/Ranges/Header/index.tsx @@ -1,9 +1,11 @@ -import { isStartList, StartList } from "dc-ranges-types"; +import { isStartList, StartList } from "dc-ranges/types"; import styles from "./header.module.css"; import { HeightAsFontSize } from "@frontend/app/components/base/BoundingBoxCss"; import { memo, useEffect, useMemo, useState } from "react"; import { compareJSON } from "../Draw"; import { useHost } from "@frontend/app/hooks/useHost"; +import { request } from "dc-endpoints"; +import { getAllStartLists } from "dc-ranges/endpoints"; interface HeaderProps { startLists: Array; @@ -22,25 +24,14 @@ export const Header = memo(function HeaderMemoized({ startLists }: HeaderProps): } async function fetchDefaultNames() { - try { - const response = await fetch(`${host}/api/ranges/start-lists`); - if (!response.ok) { - throw new Error("Could not fetch default start lists"); - } - const data: any = await response.json(); - if (!Array.isArray(data)) { - throw new Error("Invalid data format for default start lists"); - } - for (const item of data) { - if (!isStartList(item)) { - throw new Error("Invalid start list item"); - } - } - const activeStartLists = data.filter((sl: StartList) => sl.active); - setDefaultNames(activeStartLists.map((sl: StartList) => sl.name)); - } catch (error) { - console.error("Error fetching default start lists:", error); + const startLists = await request(host, getAllStartLists); + if (startLists.type === "error" || !startLists.body) { + console.error("Failed to fetch default start lists"); + setDefaultNames([]); + return; } + const activeStartLists = startLists.body.filter((sl: StartList) => sl.active); + setDefaultNames(activeStartLists.map((sl: StartList) => sl.name)); } fetchDefaultNames(); diff --git a/frontend/src/app/show/components/ServerEvents/ranges.tsx b/frontend/src/app/show/components/ServerEvents/ranges.tsx index dc1a3b66..13984131 100644 --- a/frontend/src/app/show/components/ServerEvents/ranges.tsx +++ b/frontend/src/app/show/components/ServerEvents/ranges.tsx @@ -1,6 +1,6 @@ "use client"; -import { isRange, Range } from "dc-ranges-types"; +import { isRange, Range } from "dc-ranges/types"; import { useSocket } from "./base"; import SocketProvider from "./base"; import { useEffect, useMemo } from "react"; diff --git a/frontend/src/app/show/cpcView/components/CpcView/header.tsx b/frontend/src/app/show/cpcView/components/CpcView/header.tsx index af70fce9..cdd2f59c 100644 --- a/frontend/src/app/show/cpcView/components/CpcView/header.tsx +++ b/frontend/src/app/show/cpcView/components/CpcView/header.tsx @@ -1,6 +1,6 @@ import Header from "@frontend/app/show/components/Ranges/Header"; import { useAppSelector } from "./ranges-store/store"; -import { StartList } from "dc-ranges-types"; +import { StartList } from "dc-ranges/types"; export function CpcHeader() { const startLists = useAppSelector((state) => { diff --git a/frontend/src/app/show/cpcView/components/CpcView/range/infoPanel/shotTable.tsx b/frontend/src/app/show/cpcView/components/CpcView/range/infoPanel/shotTable.tsx index a39beb09..3dc807bb 100644 --- a/frontend/src/app/show/cpcView/components/CpcView/range/infoPanel/shotTable.tsx +++ b/frontend/src/app/show/cpcView/components/CpcView/range/infoPanel/shotTable.tsx @@ -1,4 +1,4 @@ -import { Mode } from "dc-ranges-types"; +import { Mode } from "dc-ranges/types"; import { useAppSelector } from "../../ranges-store/store"; import styles from "./infoPanel.module.css"; import ShotArrow from "@frontend/app/show/components/Ranges/Arrow"; diff --git a/frontend/src/app/show/cpcView/components/CpcView/ranges-store/rangesReducer.ts b/frontend/src/app/show/cpcView/components/CpcView/ranges-store/rangesReducer.ts index fa3e6559..e479268d 100644 --- a/frontend/src/app/show/cpcView/components/CpcView/ranges-store/rangesReducer.ts +++ b/frontend/src/app/show/cpcView/components/CpcView/ranges-store/rangesReducer.ts @@ -1,5 +1,5 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import { Range } from "dc-ranges-types" +import { Range } from "dc-ranges/types" export const rangesSlice = createSlice({ name: 'ranges', diff --git a/frontend/src/app/show/drawTarget/components/DrawTarget/header/index.tsx b/frontend/src/app/show/drawTarget/components/DrawTarget/header/index.tsx index ccca79a6..96b25dcf 100644 --- a/frontend/src/app/show/drawTarget/components/DrawTarget/header/index.tsx +++ b/frontend/src/app/show/drawTarget/components/DrawTarget/header/index.tsx @@ -1,6 +1,6 @@ import { useAppSelector } from "../ranges-store/store"; import HeaderComponent from "../../../../components/Ranges/Header"; -import { ActiveRange, StartList } from "dc-ranges-types"; +import { ActiveRange, StartList } from "dc-ranges/types"; export default function Header(): React.JSX.Element { const startLists = useAppSelector((state) => { diff --git a/frontend/src/app/show/drawTarget/components/DrawTarget/ranges-store/rangesReducer.ts b/frontend/src/app/show/drawTarget/components/DrawTarget/ranges-store/rangesReducer.ts index e2490c0b..4c0bce83 100644 --- a/frontend/src/app/show/drawTarget/components/DrawTarget/ranges-store/rangesReducer.ts +++ b/frontend/src/app/show/drawTarget/components/DrawTarget/ranges-store/rangesReducer.ts @@ -1,5 +1,5 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import { Range } from "dc-ranges-types" +import { Range } from "dc-ranges/types" type RangeWithHistory = Range & { hasBeenFree: boolean; diff --git a/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/currentHit.tsx b/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/currentHit.tsx index 7906cb99..a792b509 100644 --- a/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/currentHit.tsx +++ b/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/currentHit.tsx @@ -1,6 +1,6 @@ import styles from "./range.module.css" import ShotArrowW from "./ShotArrow"; -import { Hit, Round } from "dc-ranges-types"; +import { Hit, Round } from "dc-ranges/types"; import { useAppSelector } from "../../ranges-store/store"; import { ScaleText } from "@frontend/app/components/base/ScaleText"; import { getHitEval } from "@frontend/app/show/lib/ranges/eval"; diff --git a/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/drawRange.tsx b/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/drawRange.tsx index d21456bb..397c1bbe 100644 --- a/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/drawRange.tsx +++ b/frontend/src/app/show/drawTarget/components/DrawTarget/ranges/range/drawRange.tsx @@ -1,6 +1,6 @@ "use client"; -import { Range } from "dc-ranges-types"; +import { Range } from "dc-ranges/types"; import DrawRange from "../../../../../components/Ranges/Draw" import styles from "./range.module.css"; import { useEffect, useRef, useState } from "react"; diff --git a/frontend/src/app/show/lib/ranges/accumulate.ts b/frontend/src/app/show/lib/ranges/accumulate.ts index d135b8c6..c79efb27 100644 --- a/frontend/src/app/show/lib/ranges/accumulate.ts +++ b/frontend/src/app/show/lib/ranges/accumulate.ts @@ -1,4 +1,4 @@ -import { Hits, Round, UnsignedNumber } from "dc-ranges-types"; +import { Hits, Round, UnsignedNumber } from "dc-ranges/types"; import smallestEnclosingCircle from "smallest-enclosing-circle"; import { floor, round as mRound } from "../math"; import { getHitsOfSeries, getLatestSeriesId } from "."; diff --git a/frontend/src/app/show/lib/ranges/eval.ts b/frontend/src/app/show/lib/ranges/eval.ts index 02b5864a..8af8b710 100644 --- a/frontend/src/app/show/lib/ranges/eval.ts +++ b/frontend/src/app/show/lib/ranges/eval.ts @@ -1,4 +1,4 @@ -import { Round, UnsignedInteger, ValidHit } from "dc-ranges-types"; +import { Round, UnsignedInteger, ValidHit } from "dc-ranges/types"; import { DividerHitEval, HitEval, RingsTargetHiddenHitEval } from "./types"; import { floor, round as mRound } from "../math"; diff --git a/frontend/src/app/show/lib/ranges/index.ts b/frontend/src/app/show/lib/ranges/index.ts index 710fdd60..ed48b78d 100644 --- a/frontend/src/app/show/lib/ranges/index.ts +++ b/frontend/src/app/show/lib/ranges/index.ts @@ -1,4 +1,4 @@ -import { Hits, Index, Integer, Range, Round } from "dc-ranges-types"; +import { Hits, Index, Integer, Range, Round } from "dc-ranges/types"; export function getRoundName(data: Range, roundId?: Index): string | null { if (!data.active) return null; diff --git a/frontend/src/app/show/lib/ranges/types.ts b/frontend/src/app/show/lib/ranges/types.ts index f9c43c91..32358e25 100644 --- a/frontend/src/app/show/lib/ranges/types.ts +++ b/frontend/src/app/show/lib/ranges/types.ts @@ -1,4 +1,4 @@ -import { Index, UnsignedInteger, UnsignedNumber } from "dc-ranges-types" +import { Index, UnsignedInteger, UnsignedNumber } from "dc-ranges/types" export type BaseHitEval = { id: Index diff --git a/lib/database/local/package-lock.json b/lib/database/local/package-lock.json index 1d284822..e74ce302 100644 --- a/lib/database/local/package-lock.json +++ b/lib/database/local/package-lock.json @@ -9,16 +9,16 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@prisma/adapter-pg": "^7.6.0", - "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "@prisma/adapter-pg": "^7.7.0", + "@prisma/client": "^7.7.0", + "dotenv": "^17.4.1", "pg": "^8.20.0" }, "devDependencies": { - "@types/node": "^25.5.0", + "@types/node": "^25.5.2", "@types/pg": "^8.20.0", - "prisma": "^7.6.0", - "typescript": "^5.9.3" + "prisma": "^7.7.0", + "typescript": "^6.0.2" } }, "node_modules/@clack/core": { @@ -95,24 +95,24 @@ "license": "MIT" }, "node_modules/@prisma/adapter-pg": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.6.0.tgz", - "integrity": "sha512-BjHNmJqqa42NqJSDPnXUfwUofWo8LJY7Ui2gqxN4DmAOb+H/gGKv+hln2Xq/1kSJXPW5AXMXuNiPDMpywvyIOw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.7.0.tgz", + "integrity": "sha512-q33Ta8sKbgzEpAy0lx45tAq//yMv0qcb+8nj+TCA3P4wiAY+OBFEFk/NDkZncAfHaNJeGo5WJpJdpbL+ijYx8g==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "7.6.0", + "@prisma/driver-adapter-utils": "7.7.0", "@types/pg": "^8.16.0", "pg": "^8.16.3", "postgres-array": "3.0.4" } }, "node_modules/@prisma/client": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.6.0.tgz", - "integrity": "sha512-7Pe/1ayh3GgWPEg4mmT4ax77LJ1wC+XlnIFvQ94bLP2DsUnOpnruQQR3Jw7r+Frthk94QqDNxo3FjSg8h9PXeQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.7.0.tgz", + "integrity": "sha512-5Ar4OsZpJ54s21sy5oDNNW9gQtd4NuxCaiM7+JDTOU07D6VvlpLjYzAVCMB1+JzokN+08dAVomlx+b7bhJd3ww==", "license": "Apache-2.0", "dependencies": { - "@prisma/client-runtime-utils": "7.6.0" + "@prisma/client-runtime-utils": "7.7.0" }, "engines": { "node": "^20.19 || ^22.12 || >=24.0" @@ -131,15 +131,15 @@ } }, "node_modules/@prisma/client-runtime-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.6.0.tgz", - "integrity": "sha512-fD7jlqubsZvVODKvsp9lOpXVecx2aWGxC2l35Ioz2t+teUJ5CfR0SAMsi7UkU1VvaZmmm+DS6BdujF622nY7tQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.7.0.tgz", + "integrity": "sha512-BLyd0UpFYOtyJFTHm7jS9vesHW7P83abibodQMiIofqjBKzDHQ1VAsQkdfvXyYDkPlONPfOTz7/rv3x/+CQqvQ==", "license": "Apache-2.0" }, "node_modules/@prisma/config": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.6.0.tgz", - "integrity": "sha512-MuAz1MK4PeG5/03YzfzX3CnFVHQ6qePGwUpQRzPzX5tT0ffJ3Tzi9zJZbBc+VzEGFCM8ghW/gTVDR85Syjt+Yw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.7.0.tgz", + "integrity": "sha512-hmPI3tKLO2aP0Y5vugbjcnA9qqlfJndiT6ds4tw28U5hNHLWg+mHJEWAhjsSPgxjtmxhJ/EDIeIlyh+3Us0OPg==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -150,9 +150,9 @@ } }, "node_modules/@prisma/debug": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.6.0.tgz", - "integrity": "sha512-LpHr3qos4lQZ6sxwjStf59YBht7m9/QF7NSQsMH6qGENWZu2w3UkQUGn1h5iRkDjnWRj3VHykOu9qFhps4ADvA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.7.0.tgz", + "integrity": "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==", "license": "Apache-2.0" }, "node_modules/@prisma/dev": { @@ -182,26 +182,26 @@ } }, "node_modules/@prisma/driver-adapter-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.6.0.tgz", - "integrity": "sha512-D8j3p0RnhLuufMaRLX6QqtGgPC5Ao3l5oFP6Q5AL0rTHi4vna+NzGEipwCsfvcSvaGFCbsH3lsTMbb4WvY+ovA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.7.0.tgz", + "integrity": "sha512-gZXREeu6mOk7zXfGFJgh86p7Vhj0sXNKp+4Cg1tWYo7V2dfncP2qxS2BiTmbIIha8xPqItkl0WSw38RuSq1HoQ==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, "node_modules/@prisma/engines": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.6.0.tgz", - "integrity": "sha512-Sn5edRzhHqgRV2M+A0eIbY442B4mReWWf3pKs/LKreYgW7oa/up8JtK/s4iv/EQA097cyboZ08mmkpbLp+tZ3w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.7.0.tgz", + "integrity": "sha512-7fmcbT7HHXBq/b+3h/dO1JI3fd8l8q7erf7xP7pRprh58hmSSnG8mg9K3yjW3h9WaHWUwngVFpSxxxivaitQ2w==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0", + "@prisma/debug": "7.7.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/fetch-engine": "7.6.0", - "@prisma/get-platform": "7.6.0" + "@prisma/fetch-engine": "7.7.0", + "@prisma/get-platform": "7.7.0" } }, "node_modules/@prisma/engines-version": { @@ -212,35 +212,35 @@ "license": "Apache-2.0" }, "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.6.0.tgz", - "integrity": "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.7.0.tgz", + "integrity": "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, "node_modules/@prisma/fetch-engine": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.6.0.tgz", - "integrity": "sha512-N575Ni95c3FkduWY/eKTHqNYgNbceZ1tQaSknVtJjpKmiiBXmniESn/GTxsDvICC4ZeiNrXxioGInzQrCdx16w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.7.0.tgz", + "integrity": "sha512-TfyzveBQoK4xALzsTpVhB/0KG1N8zOK0ap+RnBMkzGUu3f98fnQ4QtXa2wlKPhsO2X8a3N5ugFQgcKNoHGmDfw==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0", + "@prisma/debug": "7.7.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/get-platform": "7.6.0" + "@prisma/get-platform": "7.7.0" } }, "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.6.0.tgz", - "integrity": "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.7.0.tgz", + "integrity": "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, "node_modules/@prisma/get-platform": { @@ -459,9 +459,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "license": "MIT", "dependencies": { "undici-types": "~7.18.0" @@ -661,9 +661,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "devOptional": true, "license": "MIT" }, @@ -685,9 +685,9 @@ "license": "MIT" }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", + "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -875,9 +875,9 @@ "license": "MIT" }, "node_modules/iconv-lite": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1005,9 +1005,9 @@ } }, "node_modules/nypm/node_modules/citty": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", - "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", + "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", "devOptional": true, "license": "MIT" }, @@ -1213,16 +1213,16 @@ } }, "node_modules/prisma": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.6.0.tgz", - "integrity": "sha512-OKJIPT81K3+F+AayIkY/Y3mkF2NWoFh7lZApaaqPYy7EHILKdO0VsmGkP+hDKYTySHsFSyLWXm/JgcR1B8fY1Q==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.7.0.tgz", + "integrity": "sha512-HlgwRBt1uEFB9LStHL4HLYDvoi4BNu1rYA0hPG0zCAEyK9SaZBqp7E5Rjpc3Qh8Lex/ye/svoHZ0OWoFNhWxuQ==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "7.6.0", + "@prisma/config": "7.7.0", "@prisma/dev": "0.24.3", - "@prisma/engines": "7.6.0", + "@prisma/engines": "7.7.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" @@ -1453,9 +1453,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", "devOptional": true, "license": "MIT", "engines": { @@ -1463,9 +1463,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "devOptional": true, "license": "Apache-2.0", "bin": { diff --git a/lib/database/local/package.json b/lib/database/local/package.json index 3c5bbecf..658eb4d2 100644 --- a/lib/database/local/package.json +++ b/lib/database/local/package.json @@ -13,16 +13,16 @@ "license": "ISC", "description": "", "dependencies": { - "@prisma/adapter-pg": "^7.6.0", - "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "@prisma/adapter-pg": "^7.7.0", + "@prisma/client": "^7.7.0", + "dotenv": "^17.4.1", "pg": "^8.20.0" }, "devDependencies": { - "@types/node": "^25.5.0", + "@types/node": "^25.5.2", "@types/pg": "^8.20.0", - "prisma": "^7.6.0", - "typescript": "^5.9.3" + "prisma": "^7.7.0", + "typescript": "^6.0.2" }, "files": [ "dist", diff --git a/lib/database/smdb/package-lock.json b/lib/database/smdb/package-lock.json index efe936b3..788db264 100644 --- a/lib/database/smdb/package-lock.json +++ b/lib/database/smdb/package-lock.json @@ -8,10 +8,10 @@ "name": "dc-db-smdb", "version": "1.0.0", "dependencies": { - "@prisma/adapter-mariadb": "^7.6.0", + "@prisma/adapter-mariadb": "^7.7.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -26,7 +26,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -110,12 +110,12 @@ "license": "MIT" }, "node_modules/@prisma/adapter-mariadb": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-mariadb/-/adapter-mariadb-7.6.0.tgz", - "integrity": "sha512-jAcYidys1yMvmAoGD9AyBJhLynfitk85z4MDWWJAKE97SX/cchX38P0P3FmgpSIsQZW9NlytswDSBoBkiYNOog==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-mariadb/-/adapter-mariadb-7.7.0.tgz", + "integrity": "sha512-BlugprCUNFGelP7t0uQEHkC5ZcNmgUxWi6xpkjWKUS9gESGBDF3mNdYFqRc2zS9w7pC83gpNxSY51A7gCY2HdA==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "7.6.0", + "@prisma/driver-adapter-utils": "7.7.0", "mariadb": "3.4.5" } }, @@ -166,6 +166,7 @@ "version": "7.6.0", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.6.0.tgz", "integrity": "sha512-LpHr3qos4lQZ6sxwjStf59YBht7m9/QF7NSQsMH6qGENWZu2w3UkQUGn1h5iRkDjnWRj3VHykOu9qFhps4ADvA==", + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/dev": { @@ -195,14 +196,20 @@ } }, "node_modules/@prisma/driver-adapter-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.6.0.tgz", - "integrity": "sha512-D8j3p0RnhLuufMaRLX6QqtGgPC5Ao3l5oFP6Q5AL0rTHi4vna+NzGEipwCsfvcSvaGFCbsH3lsTMbb4WvY+ovA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.7.0.tgz", + "integrity": "sha512-gZXREeu6mOk7zXfGFJgh86p7Vhj0sXNKp+4Cg1tWYo7V2dfncP2qxS2BiTmbIIha8xPqItkl0WSw38RuSq1HoQ==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, + "node_modules/@prisma/driver-adapter-utils/node_modules/@prisma/debug": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.7.0.tgz", + "integrity": "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==", + "license": "Apache-2.0" + }, "node_modules/@prisma/engines": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.6.0.tgz", @@ -681,9 +688,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.6.tgz", + "integrity": "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==", "devOptional": true, "license": "MIT" }, @@ -704,9 +711,9 @@ "license": "MIT" }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" diff --git a/lib/database/smdb/package.json b/lib/database/smdb/package.json index d928420c..ffa4553e 100644 --- a/lib/database/smdb/package.json +++ b/lib/database/smdb/package.json @@ -15,10 +15,10 @@ "typescript": "^5.9.3" }, "dependencies": { - "@prisma/adapter-mariadb": "^7.6.0", + "@prisma/adapter-mariadb": "^7.7.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "files": [ "dist", diff --git a/lib/database/ssmdb2/package-lock.json b/lib/database/ssmdb2/package-lock.json index 31a7bb9f..0d4da09e 100644 --- a/lib/database/ssmdb2/package-lock.json +++ b/lib/database/ssmdb2/package-lock.json @@ -9,10 +9,10 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@prisma/adapter-mariadb": "^7.6.0", + "@prisma/adapter-mariadb": "^7.7.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -27,7 +27,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -111,12 +111,12 @@ "license": "MIT" }, "node_modules/@prisma/adapter-mariadb": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-mariadb/-/adapter-mariadb-7.6.0.tgz", - "integrity": "sha512-jAcYidys1yMvmAoGD9AyBJhLynfitk85z4MDWWJAKE97SX/cchX38P0P3FmgpSIsQZW9NlytswDSBoBkiYNOog==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/adapter-mariadb/-/adapter-mariadb-7.7.0.tgz", + "integrity": "sha512-BlugprCUNFGelP7t0uQEHkC5ZcNmgUxWi6xpkjWKUS9gESGBDF3mNdYFqRc2zS9w7pC83gpNxSY51A7gCY2HdA==", "license": "Apache-2.0", "dependencies": { - "@prisma/driver-adapter-utils": "7.6.0", + "@prisma/driver-adapter-utils": "7.7.0", "mariadb": "3.4.5" } }, @@ -167,6 +167,7 @@ "version": "7.6.0", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.6.0.tgz", "integrity": "sha512-LpHr3qos4lQZ6sxwjStf59YBht7m9/QF7NSQsMH6qGENWZu2w3UkQUGn1h5iRkDjnWRj3VHykOu9qFhps4ADvA==", + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/dev": { @@ -196,14 +197,20 @@ } }, "node_modules/@prisma/driver-adapter-utils": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.6.0.tgz", - "integrity": "sha512-D8j3p0RnhLuufMaRLX6QqtGgPC5Ao3l5oFP6Q5AL0rTHi4vna+NzGEipwCsfvcSvaGFCbsH3lsTMbb4WvY+ovA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.7.0.tgz", + "integrity": "sha512-gZXREeu6mOk7zXfGFJgh86p7Vhj0sXNKp+4Cg1tWYo7V2dfncP2qxS2BiTmbIIha8xPqItkl0WSw38RuSq1HoQ==", "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, + "node_modules/@prisma/driver-adapter-utils/node_modules/@prisma/debug": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.7.0.tgz", + "integrity": "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==", + "license": "Apache-2.0" + }, "node_modules/@prisma/engines": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.6.0.tgz", @@ -682,9 +689,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.6.tgz", + "integrity": "sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==", "devOptional": true, "license": "MIT" }, @@ -705,9 +712,9 @@ "license": "MIT" }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" diff --git a/lib/database/ssmdb2/package.json b/lib/database/ssmdb2/package.json index 6a52a3a7..86ebf4d8 100644 --- a/lib/database/ssmdb2/package.json +++ b/lib/database/ssmdb2/package.json @@ -13,10 +13,10 @@ "license": "ISC", "description": "", "dependencies": { - "@prisma/adapter-mariadb": "^7.6.0", + "@prisma/adapter-mariadb": "^7.7.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", diff --git a/lib/database/tableWatcher/package-lock.json b/lib/database/tableWatcher/package-lock.json index 6d50e17d..9597cba5 100644 --- a/lib/database/tableWatcher/package-lock.json +++ b/lib/database/tableWatcher/package-lock.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@types/node": "^25.5.0", - "prisma": "^7.6.0", + "prisma": "^7.7.0", "typescript": "^5.9.3" } }, @@ -38,7 +38,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -121,9 +121,9 @@ "license": "MIT" }, "node_modules/@prisma/config": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.6.0.tgz", - "integrity": "sha512-MuAz1MK4PeG5/03YzfzX3CnFVHQ6qePGwUpQRzPzX5tT0ffJ3Tzi9zJZbBc+VzEGFCM8ghW/gTVDR85Syjt+Yw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.7.0.tgz", + "integrity": "sha512-hmPI3tKLO2aP0Y5vugbjcnA9qqlfJndiT6ds4tw28U5hNHLWg+mHJEWAhjsSPgxjtmxhJ/EDIeIlyh+3Us0OPg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -134,9 +134,9 @@ } }, "node_modules/@prisma/debug": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.6.0.tgz", - "integrity": "sha512-LpHr3qos4lQZ6sxwjStf59YBht7m9/QF7NSQsMH6qGENWZu2w3UkQUGn1h5iRkDjnWRj3VHykOu9qFhps4ADvA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.7.0.tgz", + "integrity": "sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==", "dev": true, "license": "Apache-2.0" }, @@ -167,17 +167,17 @@ } }, "node_modules/@prisma/engines": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.6.0.tgz", - "integrity": "sha512-Sn5edRzhHqgRV2M+A0eIbY442B4mReWWf3pKs/LKreYgW7oa/up8JtK/s4iv/EQA097cyboZ08mmkpbLp+tZ3w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.7.0.tgz", + "integrity": "sha512-7fmcbT7HHXBq/b+3h/dO1JI3fd8l8q7erf7xP7pRprh58hmSSnG8mg9K3yjW3h9WaHWUwngVFpSxxxivaitQ2w==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0", + "@prisma/debug": "7.7.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/fetch-engine": "7.6.0", - "@prisma/get-platform": "7.6.0" + "@prisma/fetch-engine": "7.7.0", + "@prisma/get-platform": "7.7.0" } }, "node_modules/@prisma/engines-version": { @@ -188,35 +188,35 @@ "license": "Apache-2.0" }, "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.6.0.tgz", - "integrity": "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.7.0.tgz", + "integrity": "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, "node_modules/@prisma/fetch-engine": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.6.0.tgz", - "integrity": "sha512-N575Ni95c3FkduWY/eKTHqNYgNbceZ1tQaSknVtJjpKmiiBXmniESn/GTxsDvICC4ZeiNrXxioGInzQrCdx16w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.7.0.tgz", + "integrity": "sha512-TfyzveBQoK4xALzsTpVhB/0KG1N8zOK0ap+RnBMkzGUu3f98fnQ4QtXa2wlKPhsO2X8a3N5ugFQgcKNoHGmDfw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0", + "@prisma/debug": "7.7.0", "@prisma/engines-version": "7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711", - "@prisma/get-platform": "7.6.0" + "@prisma/get-platform": "7.7.0" } }, "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.6.0.tgz", - "integrity": "sha512-ohZDwXvtmnbzOcutR2D13lDWpZP1wQjmPyztmt0AwXLzQI7q95EE7NYCvS+M6N6SivT+BM0NOqLmTH3wms4L3A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.7.0.tgz", + "integrity": "sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "7.6.0" + "@prisma/debug": "7.7.0" } }, "node_modules/@prisma/get-platform": { @@ -637,9 +637,9 @@ } }, "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "dev": true, "license": "MIT" }, @@ -870,9 +870,9 @@ "license": "MIT" }, "node_modules/iconv-lite": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { @@ -1004,9 +1004,9 @@ } }, "node_modules/nypm/node_modules/citty": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", - "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", + "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", "dev": true, "license": "MIT" }, @@ -1075,16 +1075,16 @@ } }, "node_modules/prisma": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.6.0.tgz", - "integrity": "sha512-OKJIPT81K3+F+AayIkY/Y3mkF2NWoFh7lZApaaqPYy7EHILKdO0VsmGkP+hDKYTySHsFSyLWXm/JgcR1B8fY1Q==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.7.0.tgz", + "integrity": "sha512-HlgwRBt1uEFB9LStHL4HLYDvoi4BNu1rYA0hPG0zCAEyK9SaZBqp7E5Rjpc3Qh8Lex/ye/svoHZ0OWoFNhWxuQ==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "7.6.0", + "@prisma/config": "7.7.0", "@prisma/dev": "0.24.3", - "@prisma/engines": "7.6.0", + "@prisma/engines": "7.7.0", "@prisma/studio-core": "0.27.3", "mysql2": "3.15.3", "postgres": "3.4.7" @@ -1321,16 +1321,35 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -1349,9 +1368,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", "dev": true, "license": "MIT", "engines": { diff --git a/lib/database/tableWatcher/package.json b/lib/database/tableWatcher/package.json index c222d4bc..fd50e978 100644 --- a/lib/database/tableWatcher/package.json +++ b/lib/database/tableWatcher/package.json @@ -13,7 +13,7 @@ "description": "", "devDependencies": { "@types/node": "^25.5.0", - "prisma": "^7.6.0", + "prisma": "^7.7.0", "typescript": "^5.9.3" }, "files": [ diff --git a/lib/endpoints/package-lock.json b/lib/endpoints/package-lock.json index 8dfdb106..fee59bb5 100644 --- a/lib/endpoints/package-lock.json +++ b/lib/endpoints/package-lock.json @@ -1,1722 +1,1723 @@ { - "name": "dc-endpoints", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "dc-endpoints", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dc-logger": "file:../logger", - "express": "^5.2.1", - "path-to-regexp": "^8.3.0", - "typia": "^12.0.1" - }, - "devDependencies": { - "@types/express": "^5.0.6", - "@types/node": "^25.5.0", - "ts-patch": "^3.3.0", - "typescript": "~5.9.3" - } - }, - "../logger": { - "name": "dc-logger", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^17.3.1", - "pino": "^10.3.1", - "pino-pretty": "^13.1.3" - }, - "devDependencies": { - "@types/node": "^25.5.0", - "typescript": "^5.9.3" - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==" - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", - "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^2" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", - "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", - "devOptional": true, - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@typia/core": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.1.tgz", - "integrity": "sha512-w7BZDLliZ4sJJW6WNN2cMhpLhKHghRELRZynCsfX1eFbQqsi3/lVtvpkTBSzEZXzuFJjb6VxyugB/e2gIZZeKw==", - "license": "MIT", - "dependencies": { - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" - } - }, - "node_modules/@typia/interface": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.1.tgz", - "integrity": "sha512-HUlNN6Iqq3LXecVCzoSdwTYIZ4dq7eYRbUsNREPvtM10Ej1J2dKIH6zCEl9Ey0tQhcAwexdbubfLOSUQQYCD5A==", - "license": "MIT" - }, - "node_modules/@typia/transform": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.1.tgz", - "integrity": "sha512-SX4VCRPHTxRY3l99iU74yn8iqZIQ0DE4939n+XYoojKlvFVmTlg/OCMxsWq3xe6Qw19Vaa8bdcXGV4tx+TAlqw==", - "license": "MIT", - "dependencies": { - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" - } - }, - "node_modules/@typia/utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.1.tgz", - "integrity": "sha512-JIKsRhY4jxLtl/obttkR3vGp8d8hPysY6g0PUsIEDZ9/OO85OU7q8lYhu2GkZOJN/7htyqP+95GhpSNt2uELBQ==", - "license": "MIT", - "dependencies": { - "@typia/interface": "^12.0.1" - } - }, - "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==", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.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-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/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" - }, - "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==", - "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/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/chardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", - "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==" - }, - "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==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "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/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/comment-json": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.6.2.tgz", - "integrity": "sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==", - "dependencies": { - "array-timsort": "^1.0.3", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/dc-logger": { - "resolved": "../logger", - "link": true - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/drange": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", - "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==" - }, - "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==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==" - }, - "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==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.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/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "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": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "engines": { - "node": ">= 0.8" - } - }, - "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-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/global-prefix": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", - "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", - "dev": true, - "dependencies": { - "ini": "^4.1.3", - "kind-of": "^6.0.3", - "which": "^4.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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==", - "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/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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/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.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", - "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.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-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "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==" - }, - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", - "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" - }, - "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==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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==", - "engines": { - "node": ">=6" - } - }, - "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.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "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==", - "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==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-manager-detector": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", - "dependencies": { - "quansync": "^0.2.7" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.1.tgz", - "integrity": "sha512-fvU78fIjZ+SBM9YwCknCvKOUKkLVqtWDVctl0s7xIqfmfb38t2TT4ZU2gHm+Z8xGwgW+QWEU3oQSAzIbo89Ggw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "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/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ] - }, - "node_modules/randexp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", - "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", - "dependencies": { - "drange": "^1.0.2", - "ret": "^0.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "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/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "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.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "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==", - "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==", - "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==", - "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==", - "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": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "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/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "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==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ts-patch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.3.0.tgz", - "integrity": "sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "global-prefix": "^4.0.0", - "minimist": "^1.2.8", - "resolve": "^1.22.2", - "semver": "^7.6.3", - "strip-ansi": "^6.0.1" - }, - "bin": { - "ts-patch": "bin/ts-patch.js", - "tspc": "bin/tspc.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - }, - "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/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typia": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.1.tgz", - "integrity": "sha512-meL2qpo6yYFj6wC5coz7T3XpQT9+UjdHErhw46jGfmLFJUq6Za74B0/KYMDRjLxF/0Fd63oVx6X3+MUlI1ZJcQ==", - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.0.0", - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/transform": "^12.0.1", - "@typia/utils": "^12.0.1", - "commander": "^10.0.0", - "comment-json": "^4.2.3", - "inquirer": "^8.2.5", - "package-manager-detector": "^0.2.0", - "randexp": "^0.5.3" - }, - "bin": { - "typia": "lib/executable/typia.js" - }, - "peerDependencies": { - "typescript": ">=4.8.0 <5.10.0" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "devOptional": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "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/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "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==" + "name": "dc-endpoints", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dc-endpoints", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-logger": "file:../logger", + "express": "^5.2.1", + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" + }, + "devDependencies": { + "@types/express": "^5.0.6", + "@types/node": "^25.5.0", + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../logger": { + "name": "dc-logger", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^17.4.0", + "pino": "^10.3.1", + "pino-pretty": "^13.1.3" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "typescript": "^5.9.3" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "devOptional": true, + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@typia/core": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.2.tgz", + "integrity": "sha512-FUrH0dVOx+hPn8TD+ROQYiMlt7Ztx21AfqRozrI2gE3+DlPOP5o9eC8Lu6SRRqc9eWl4/STTpzKFLXPrGZJmuQ==", + "license": "MIT", + "dependencies": { + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" + } + }, + "node_modules/@typia/interface": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.2.tgz", + "integrity": "sha512-PmUG624f6BSpNAJV0Gf0hwMSF29VSl8neArvxa+sPSq33ETGJZYrVhzqO67+n2LZCdzYmEdFbpNlr3jnyAl2aA==", + "license": "MIT" + }, + "node_modules/@typia/transform": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.2.tgz", + "integrity": "sha512-vv5pLNY6e2Zyg5doqPv1vo+mTfovO8TAPt6bDfz1OCsgaWR/LjFfMB0ziAoCPP2ePF4WWuGUe+z9o9wdlXmegA==", + "license": "MIT", + "dependencies": { + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" + } + }, + "node_modules/@typia/utils": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.2.tgz", + "integrity": "sha512-LeiMdZbGnIXTwmJIYoW9ROmkbFRKQCFHNapodP23qx97ojIfF8FdFIez4or6JUnNEFTXKTKD4ITtHA/gpuE6sw==", + "license": "MIT", + "dependencies": { + "@typia/interface": "^12.0.2" + } + }, + "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==", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.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-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/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" + }, + "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==", + "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/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==" + }, + "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==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "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/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/comment-json": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.6.2.tgz", + "integrity": "sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==", + "dependencies": { + "array-timsort": "^1.0.3", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/dc-logger": { + "resolved": "../logger", + "link": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==" + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==" + }, + "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==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.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/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "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": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "engines": { + "node": ">= 0.8" + } + }, + "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-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dev": true, + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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==", + "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/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/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.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.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-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "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==" + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "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==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "engines": { + "node": ">=6" + } + }, + "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.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ] + }, + "node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "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/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "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.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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==", + "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==", + "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==", + "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==", + "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": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "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/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-patch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.3.0.tgz", + "integrity": "sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "global-prefix": "^4.0.0", + "minimist": "^1.2.8", + "resolve": "^1.22.2", + "semver": "^7.6.3", + "strip-ansi": "^6.0.1" + }, + "bin": { + "ts-patch": "bin/ts-patch.js", + "tspc": "bin/tspc.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "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/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typia": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.2.tgz", + "integrity": "sha512-0RBUxrar8Hztee6gSdBPR1scDBJAPp3k0ut4C3H6ri8+D6nVnGmWvsrnl5fOxHdLDtCC/gxZ4rhp2ivf0jom+g==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/transform": "^12.0.2", + "@typia/utils": "^12.0.2", + "commander": "^10.0.0", + "comment-json": "^4.2.3", + "inquirer": "^8.2.5", + "package-manager-detector": "^0.2.0", + "randexp": "^0.5.3" + }, + "bin": { + "typia": "lib/executable/typia.js" + }, + "peerDependencies": { + "typescript": ">=4.8.0 <5.10.0" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "devOptional": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "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/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "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==" } + } } diff --git a/lib/endpoints/package.json b/lib/endpoints/package.json index 0d882969..f19c1af0 100644 --- a/lib/endpoints/package.json +++ b/lib/endpoints/package.json @@ -20,8 +20,8 @@ "dependencies": { "dc-logger": "file:../logger", "express": "^5.2.1", - "path-to-regexp": "^8.3.0", - "typia": "^12.0.1" + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" }, "files": [ "dist" diff --git a/lib/endpoints/src/http/handler.ts b/lib/endpoints/src/http/handler.ts index 315b9555..d38df3af 100644 --- a/lib/endpoints/src/http/handler.ts +++ b/lib/endpoints/src/http/handler.ts @@ -88,10 +88,6 @@ export function registerEndpoint(app: Express, endpoint: Endpoint

= SuccessfulResponse | HttpError; export type SuccessfulResponse = { - code: Exclude & tags.ExclusiveMaximum<300> & tags.MultipleOf<1>, 204 | 205>; - body: RB; -} | NoBodySuccessfulResponse; - -type NoBodySuccessfulResponse = { - code: 204 | 205; -}; + type: "success"; + code: number & tags.Minimum<200> & tags.ExclusiveMaximum<300> & tags.MultipleOf<1>; + body: RB | null; +} export type HttpError = { + type: "error"; code: number & tags.Minimum<300> & tags.ExclusiveMaximum<600> & tags.MultipleOf<1>; message: string; }; diff --git a/lib/endpoints/src/http/request.ts b/lib/endpoints/src/http/request.ts index 3c6e0fb6..d12de365 100644 --- a/lib/endpoints/src/http/request.ts +++ b/lib/endpoints/src/http/request.ts @@ -11,24 +11,29 @@ export type MutatingRequest = GetRequest & { body: B; }; -export async function request(endpoint: GetEndpoint, params: P, query: Q): Promise>; -export async function request(endpoint: MutatingEndpoint, params: P, query: Q, body: B): Promise>; -export async function request(endpoint: Endpoint, params: P, query: Q, body?: B): Promise> { +export async function request(baseUrl: string, endpoint: GetEndpoint): Promise>; +export async function request(baseUrl: string, endpoint: GetEndpoint, params: P): Promise>; +export async function request(baseUrl: string, endpoint: GetEndpoint, params: P, query: Q): Promise>; +export async function request(baseUrl: string, endpoint: MutatingEndpoint, params: P, query: Q, body: B): Promise>; +export async function request(baseUrl: string, endpoint: Endpoint, params?: P, query?: Q, body?: B): Promise> { const { method, request, response } = endpoint; if (!request.isParams(params)) { return { + type: "error", code: 400, message: "Path parameters could not be validated locally" } } if (!request.isQuery(query)) { return { + type: "error", code: 400, message: "Query parameters could not be validated locally" } } if (method !== 'GET' && !request.isBody(body)) { return { + type: "error", code: 400, message: "Request body could not be validated locally" } @@ -39,7 +44,9 @@ export async function request(endpoint: Endpoint, para const toPath = compile(request.path); const resolvedPath = toPath(params || undefined); const queryString = searchParams.toString(); - const url = queryString ? `${resolvedPath}?${queryString}` : resolvedPath; + const relativeUrl = queryString ? `${resolvedPath}?${queryString}` : resolvedPath; + const url = new URL(relativeUrl, baseUrl); + const result = await fetch(url, { method, body: method === 'GET' ? undefined : JSON.stringify(body), @@ -50,7 +57,9 @@ export async function request(endpoint: Endpoint, para if (result.ok) { if (result.status === 204 || result.status === 205) { return { - code: result.status + type: "success", + code: result.status, + body: null }; } let responseBody: unknown; @@ -58,17 +67,20 @@ export async function request(endpoint: Endpoint, para responseBody = await result.json(); } catch (e) { return { + type: "error", code: 500, message: "Response body is not valid JSON" }; } if (response.isResponseBody(responseBody)) { return { + type: "success", code: result.status, body: responseBody }; } else { return { + type: "error", code: 500, message: "Response body could not be validated locally" }; @@ -78,6 +90,7 @@ export async function request(endpoint: Endpoint, para const errorBody = await result.json(); if (!isHttpError(errorBody)) { return { + type: "error", code: 500, message: "Error response body could not be validated locally" }; @@ -85,6 +98,7 @@ export async function request(endpoint: Endpoint, para return errorBody; } catch (e) { return { + type: "error", code: 500, message: "Error response body is not valid JSON" }; diff --git a/lib/logger/package-lock.json b/lib/logger/package-lock.json index b26c7db3..1fdada3c 100644 --- a/lib/logger/package-lock.json +++ b/lib/logger/package-lock.json @@ -9,13 +9,13 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, "devDependencies": { "@types/node": "^25.5.0", - "typescript": "^5.9.3" + "typescript": "^6.0.2" } }, "node_modules/@pinojs/redact": { @@ -25,9 +25,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "dev": true, "license": "MIT", "dependencies": { @@ -59,9 +59,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", + "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -303,9 +303,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/lib/logger/package.json b/lib/logger/package.json index cb051194..9258ce13 100644 --- a/lib/logger/package.json +++ b/lib/logger/package.json @@ -12,12 +12,12 @@ "license": "ISC", "description": "", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, "devDependencies": { "@types/node": "^25.5.0", - "typescript": "^5.9.3" + "typescript": "^6.0.2" } } \ No newline at end of file diff --git a/lib/streams/package-lock.json b/lib/streams/package-lock.json index b2c7352a..2422f608 100644 --- a/lib/streams/package-lock.json +++ b/lib/streams/package-lock.json @@ -38,7 +38,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, diff --git a/lib/ttl/package-lock.json b/lib/ttl/package-lock.json index a7490a9e..b87d949b 100644 --- a/lib/ttl/package-lock.json +++ b/lib/ttl/package-lock.json @@ -8,14 +8,14 @@ "name": "dc-ttl", "version": "1.0.0", "devDependencies": { - "@types/node": "^25.5.0", - "typescript": "^5.9.3" + "@types/node": "^25.5.2", + "typescript": "^6.0.2" } }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "dev": true, "license": "MIT", "dependencies": { @@ -23,9 +23,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/lib/ttl/package.json b/lib/ttl/package.json index 822dcf11..78fb51b6 100644 --- a/lib/ttl/package.json +++ b/lib/ttl/package.json @@ -9,8 +9,8 @@ "build": "tsc" }, "devDependencies": { - "@types/node": "^25.5.0", - "typescript": "^5.9.3" + "@types/node": "^25.5.2", + "typescript": "^6.0.2" }, "files": [ "dist" diff --git a/prep.sh b/prep.sh index a65ce791..9b00b210 100755 --- a/prep.sh +++ b/prep.sh @@ -16,6 +16,7 @@ function install_dependencies() { rm -rf node_modules rm -rf dist npm install --loglevel=info + npm audit fix --loglevel=info || true if grep -q '"types":' package.json; then npm run build --loglevel=info fi diff --git a/ranges/cache/Dockerfile b/ranges/cache/Dockerfile index 3d6fbe7e..1906ef3a 100644 --- a/ranges/cache/Dockerfile +++ b/ranges/cache/Dockerfile @@ -37,9 +37,15 @@ COPY --from=table-watcher . . RUN npm ci --loglevel=info && \ npm run build; -FROM base AS deps-range-types -WORKDIR /app/ranges/types -COPY --from=range-types . . +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges +COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build; @@ -49,8 +55,9 @@ WORKDIR /app COPY --from=deps-logger /app/lib/logger /app/lib/logger COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local COPY --from=deps-smdb /app/lib/database/smdb /app/lib/database/smdb +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints COPY --from=deps-table-watcher /app/lib/database/tableWatcher /app/lib/database/tableWatcher -COPY --from=deps-range-types /app/ranges/types /app/ranges/types +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/ranges/cache/docker-compose.yaml b/ranges/cache/docker-compose.yaml index 3b590a06..559b72eb 100644 --- a/ranges/cache/docker-compose.yaml +++ b/ranges/cache/docker-compose.yaml @@ -13,7 +13,8 @@ services: - local-db=../../lib/database/local - smdb=../../lib/database/smdb - table-watcher=../../lib/database/tableWatcher - - range-types=../types + - ranges=../ranges + - endpoints=../../lib/endpoints - logger=../../lib/logger args: - SELF_DB_HOST=${SELF_DB_HOST} diff --git a/ranges/cache/package-lock.json b/ranges/cache/package-lock.json index 68435fdf..298f4bf9 100644 --- a/ranges/cache/package-lock.json +++ b/ranges/cache/package-lock.json @@ -12,9 +12,9 @@ "dc-db-local": "file:../../lib/database/local", "dc-db-smdb": "file:../../lib/database/smdb", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-table-watcher": "file:../../lib/database/tableWatcher", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -78,7 +78,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -95,7 +95,7 @@ "@prisma/adapter-mariadb": "^7.6.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -122,7 +122,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -146,12 +146,27 @@ "typescript": "^5.9.3" } }, + "../ranges": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../types": { - "name": "dc-ranges-types", + "name": "dc-ranges", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -303,8 +318,8 @@ "resolved": "../../lib/logger", "link": true }, - "node_modules/dc-ranges-types": { - "resolved": "../types", + "node_modules/dc-ranges": { + "resolved": "../ranges", "link": true }, "node_modules/dc-table-watcher": { @@ -325,9 +340,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -553,9 +568,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { diff --git a/ranges/cache/package.json b/ranges/cache/package.json index 7f1f09d0..74284afc 100644 --- a/ranges/cache/package.json +++ b/ranges/cache/package.json @@ -13,9 +13,9 @@ "dc-db-local": "file:../../lib/database/local", "dc-db-smdb": "file:../../lib/database/smdb", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-table-watcher": "file:../../lib/database/tableWatcher", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", diff --git a/ranges/cache/src/discipline/index.ts b/ranges/cache/src/discipline/index.ts index 6bbeeba6..e13b3fed 100644 --- a/ranges/cache/src/discipline/index.ts +++ b/ranges/cache/src/discipline/index.ts @@ -1,4 +1,4 @@ -import { Discipline, Round, Rounds, Mode, Zoom } from "dc-ranges-types"; +import { Discipline, Round, Rounds, Mode, Zoom } from "dc-ranges/types"; import { SmdbClient } from "dc-db-smdb"; import { getLayout } from "./layout"; diff --git a/ranges/cache/src/discipline/layout/custom.ts b/ranges/cache/src/discipline/layout/custom.ts index 0755cddd..72964a15 100644 --- a/ranges/cache/src/discipline/layout/custom.ts +++ b/ranges/cache/src/discipline/layout/custom.ts @@ -1,4 +1,4 @@ -import { Layout } from "dc-ranges-types"; +import { Layout } from "dc-ranges/types"; export function getCustomLayout(layoutId: number): Layout | null { switch (layoutId) { diff --git a/ranges/cache/src/discipline/layout/index.ts b/ranges/cache/src/discipline/layout/index.ts index c5f4946a..62457bc6 100644 --- a/ranges/cache/src/discipline/layout/index.ts +++ b/ranges/cache/src/discipline/layout/index.ts @@ -1,5 +1,5 @@ import { SmdbClient } from "dc-db-smdb"; -import { Layout, LayoutRings } from "dc-ranges-types"; +import { Layout, LayoutRings } from "dc-ranges/types"; import { getCustomLayout } from "./custom"; export async function getLayout(smdbClient: SmdbClient, layoutId: number): Promise { diff --git a/ranges/cache/src/index.ts b/ranges/cache/src/index.ts index d0133822..952400e8 100644 --- a/ranges/cache/src/index.ts +++ b/ranges/cache/src/index.ts @@ -5,7 +5,7 @@ import { createSMDBClient, SmdbClient } from "dc-db-smdb"; import { TableWatcher } from "dc-table-watcher" import { LocalClient, createLocalClient } from "dc-db-local"; import { logger } from "dc-logger"; -import { Discipline, StartList, Shooter, OverrideDiscipline } from "dc-ranges-types"; +import { Discipline, StartList, Shooter, OverrideDiscipline } from "dc-ranges/types"; import { getOverrideDisciplines } from "./overrideDisciplines"; import dotenv from "dotenv"; dotenv.config({ quiet: true }); diff --git a/ranges/cache/src/overrideDisciplines/index.ts b/ranges/cache/src/overrideDisciplines/index.ts index 2ffb7731..0d556434 100644 --- a/ranges/cache/src/overrideDisciplines/index.ts +++ b/ranges/cache/src/overrideDisciplines/index.ts @@ -1,5 +1,5 @@ import { SmdbClient } from "dc-db-smdb"; -import { OverrideDiscipline } from "dc-ranges-types" +import { OverrideDiscipline } from "dc-ranges/types" export async function getOverrideDisciplines(smdbClient: SmdbClient): Promise> { const overrideDisciplinesDb = await smdbClient.priceShooting.findMany({ diff --git a/ranges/cache/src/shooter/index.ts b/ranges/cache/src/shooter/index.ts index 99c3ccbf..7e7e7bb7 100644 --- a/ranges/cache/src/shooter/index.ts +++ b/ranges/cache/src/shooter/index.ts @@ -1,5 +1,5 @@ import { SmdbClient } from "dc-db-smdb"; -import { Shooter } from "dc-ranges-types" +import { Shooter } from "dc-ranges/types" export async function getShooterCache(smdbClient: SmdbClient): Promise> { const shooters = await smdbClient.shooter.findMany({ diff --git a/ranges/cache/src/startList/index.ts b/ranges/cache/src/startList/index.ts index 72e57ac3..249e86ed 100644 --- a/ranges/cache/src/startList/index.ts +++ b/ranges/cache/src/startList/index.ts @@ -1,5 +1,5 @@ import { SmdbClient } from "dc-db-smdb"; -import { StartList } from "dc-ranges-types"; +import { StartList } from "dc-ranges/types"; export async function getStartListCache(smdbCLient: SmdbClient): Promise> { const startListsDb = await smdbCLient.startList.findMany({ diff --git a/ranges/log/Dockerfile b/ranges/log/Dockerfile index 5c5e300a..c2094398 100644 --- a/ranges/log/Dockerfile +++ b/ranges/log/Dockerfile @@ -29,9 +29,15 @@ COPY --from=ttl . . RUN npm ci --loglevel=info && \ npm run build; -FROM base AS deps-ranges-types -WORKDIR /app/ranges/types -COPY --from=range-types . . +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges +COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build; @@ -48,7 +54,8 @@ COPY --from=deps-logger /app/lib/logger /app/lib/logger COPY --from=deps-streams /app/lib/streams /app/lib/streams COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local COPY --from=deps-ttl /app/lib/ttl /app/lib/ttl -COPY --from=deps-ranges-types /app/ranges/types /app/ranges/types +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/ranges/log/docker-compose.yaml b/ranges/log/docker-compose.yaml index dcfea08a..4af2d91e 100644 --- a/ranges/log/docker-compose.yaml +++ b/ranges/log/docker-compose.yaml @@ -17,7 +17,8 @@ services: - CACHE_REFRESH_INTERVAL=${CACHE_REFRESH_INTERVAL} additional_contexts: - local-db=../../lib/database/local - - range-types=../types + - ranges=../ranges + - endpoints=../../lib/endpoints - ttl=../../lib/ttl - logger=../../lib/logger - streams=../../lib/streams diff --git a/ranges/log/package-lock.json b/ranges/log/package-lock.json index 77ef09f4..e1a1f5af 100644 --- a/ranges/log/package-lock.json +++ b/ranges/log/package-lock.json @@ -14,12 +14,12 @@ "date-fns": "^4.1.0", "dc-db-local": "file:../../lib/database/local", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-streams": "file:../../lib/streams", "dc-ttl": "file:../../lib/ttl", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "socket.io-client": "^4.8.3", - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "@types/amqplib": "^0.10.8", @@ -54,7 +54,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -69,7 +69,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -130,6 +130,19 @@ "typescript": "~5.9.3" } }, + "../ranges": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../ttl": { "name": "dc-ranges-ttl", "version": "1.0.0", @@ -142,9 +155,10 @@ "../types": { "name": "dc-ranges-types", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -243,39 +257,39 @@ } }, "node_modules/@typia/core": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.1.tgz", - "integrity": "sha512-w7BZDLliZ4sJJW6WNN2cMhpLhKHghRELRZynCsfX1eFbQqsi3/lVtvpkTBSzEZXzuFJjb6VxyugB/e2gIZZeKw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.2.tgz", + "integrity": "sha512-FUrH0dVOx+hPn8TD+ROQYiMlt7Ztx21AfqRozrI2gE3+DlPOP5o9eC8Lu6SRRqc9eWl4/STTpzKFLXPrGZJmuQ==", "license": "MIT", "dependencies": { - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" } }, "node_modules/@typia/interface": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.1.tgz", - "integrity": "sha512-HUlNN6Iqq3LXecVCzoSdwTYIZ4dq7eYRbUsNREPvtM10Ej1J2dKIH6zCEl9Ey0tQhcAwexdbubfLOSUQQYCD5A==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.2.tgz", + "integrity": "sha512-PmUG624f6BSpNAJV0Gf0hwMSF29VSl8neArvxa+sPSq33ETGJZYrVhzqO67+n2LZCdzYmEdFbpNlr3jnyAl2aA==", "license": "MIT" }, "node_modules/@typia/transform": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.1.tgz", - "integrity": "sha512-SX4VCRPHTxRY3l99iU74yn8iqZIQ0DE4939n+XYoojKlvFVmTlg/OCMxsWq3xe6Qw19Vaa8bdcXGV4tx+TAlqw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.2.tgz", + "integrity": "sha512-vv5pLNY6e2Zyg5doqPv1vo+mTfovO8TAPt6bDfz1OCsgaWR/LjFfMB0ziAoCPP2ePF4WWuGUe+z9o9wdlXmegA==", "license": "MIT", "dependencies": { - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" } }, "node_modules/@typia/utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.1.tgz", - "integrity": "sha512-JIKsRhY4jxLtl/obttkR3vGp8d8hPysY6g0PUsIEDZ9/OO85OU7q8lYhu2GkZOJN/7htyqP+95GhpSNt2uELBQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.2.tgz", + "integrity": "sha512-LeiMdZbGnIXTwmJIYoW9ROmkbFRKQCFHNapodP23qx97ojIfF8FdFIez4or6JUnNEFTXKTKD4ITtHA/gpuE6sw==", "license": "MIT", "dependencies": { - "@typia/interface": "^12.0.1" + "@typia/interface": "^12.0.2" } }, "node_modules/amqplib": { @@ -607,8 +621,8 @@ "resolved": "../../lib/logger", "link": true }, - "node_modules/dc-ranges-types": { - "resolved": "../types", + "node_modules/dc-ranges": { + "resolved": "../ranges", "link": true }, "node_modules/dc-streams": { @@ -662,9 +676,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -1097,9 +1111,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/log-symbols": { @@ -1262,9 +1276,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -1568,18 +1582,35 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1732,16 +1763,16 @@ } }, "node_modules/typia": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.1.tgz", - "integrity": "sha512-meL2qpo6yYFj6wC5coz7T3XpQT9+UjdHErhw46jGfmLFJUq6Za74B0/KYMDRjLxF/0Fd63oVx6X3+MUlI1ZJcQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.2.tgz", + "integrity": "sha512-0RBUxrar8Hztee6gSdBPR1scDBJAPp3k0ut4C3H6ri8+D6nVnGmWvsrnl5fOxHdLDtCC/gxZ4rhp2ivf0jom+g==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/transform": "^12.0.1", - "@typia/utils": "^12.0.1", + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/transform": "^12.0.2", + "@typia/utils": "^12.0.2", "commander": "^10.0.0", "comment-json": "^4.2.3", "inquirer": "^8.2.5", diff --git a/ranges/log/package.json b/ranges/log/package.json index 3ef86a0d..5d14bc39 100644 --- a/ranges/log/package.json +++ b/ranges/log/package.json @@ -16,11 +16,11 @@ "dc-db-local": "file:../../lib/database/local", "dc-logger": "file:../../lib/logger", "dc-ttl": "file:../../lib/ttl", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-streams": "file:../../lib/streams", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "socket.io-client": "^4.8.3", - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "@types/amqplib": "^0.10.8", diff --git a/ranges/log/src/cache/overrides.ts b/ranges/log/src/cache/overrides.ts index d9b14b5d..696b3cd2 100644 --- a/ranges/log/src/cache/overrides.ts +++ b/ranges/log/src/cache/overrides.ts @@ -1,7 +1,7 @@ -import { isOverrideDiscipline, mergeMaps } from "dc-ranges-types"; +import { Index, isOverrideDiscipline } from "dc-ranges/types"; import { LocalClient } from "dc-db-local"; -const overrideToDiscipline = new Map(); +let overrideToDiscipline = new Map(); export async function updateOverrides(client: LocalClient) { const overrides = await client.cache.findMany({ @@ -9,16 +9,17 @@ export async function updateOverrides(client: LocalClient) { type: "overrideDiscipline" } }); - const overrideTempMap = new Map(); + const overrideTempMap = new Map(); for (const override of overrides) { if (!isOverrideDiscipline(override.value)) { continue; } overrideTempMap.set(override.value.id, Number(override.value.disciplineId)); } - mergeMaps(overrideToDiscipline, overrideTempMap); + + overrideToDiscipline = overrideTempMap; } -export function getDisciplineId(overrideId: number): number | null { +export function getDisciplineId(overrideId: Index): Index | null { return overrideToDiscipline.get(overrideId) ?? null; } \ No newline at end of file diff --git a/ranges/log/src/cache/shooter.ts b/ranges/log/src/cache/shooter.ts index 56c33a35..e2e11607 100644 --- a/ranges/log/src/cache/shooter.ts +++ b/ranges/log/src/cache/shooter.ts @@ -1,7 +1,7 @@ import { LocalClient } from "dc-db-local"; -import { isShooter, mergeMaps, InternalShooter, ShooterId, InternalShooterByName } from "dc-ranges-types"; +import { isShooter, InternalShooter, InternalShooterByName, Index } from "dc-ranges/types"; -export const shooterMap = new Map(); +let shooterMap = new Map(); export async function updateShooters(client: LocalClient) { const shooters = await client.cache.findMany({ @@ -9,7 +9,7 @@ export async function updateShooters(client: LocalClient) { type: "shooter" } }); - const shooterTempMap = new Map(); + const shooterTempMap = new Map(); for (const shooter of shooters) { if (!isShooter(shooter.value)) { continue; @@ -19,7 +19,8 @@ export async function updateShooters(client: LocalClient) { } shooterTempMap.set(shooter.value.id, { type: "byName", firstName: shooter.value.firstName, lastName: shooter.value.lastName }); } - mergeMaps(shooterMap, shooterTempMap); + + shooterMap = shooterTempMap; } export function isSameShooter(shooterOne: InternalShooter | null, shooterTwo: InternalShooter | null): boolean { diff --git a/ranges/log/src/index.ts b/ranges/log/src/index.ts index 5fadf4cd..f55c47c9 100644 --- a/ranges/log/src/index.ts +++ b/ranges/log/src/index.ts @@ -10,7 +10,7 @@ import { CsvLineStream } from "./streams/csvLines"; import { LogLineStream } from "./streams/logLine"; import { RangeStateStream } from "./streams/rangeState"; import { DebounceTransform, RabbitMqReceiver, RabbitMqWriter } from "dc-streams"; -import { InternalRange, isInternalRange } from "dc-ranges-types"; +import { InternalRange, isInternalRange } from "dc-ranges/types"; async function main() { diff --git a/ranges/log/src/streams/logLine.ts b/ranges/log/src/streams/logLine.ts index 32b149ba..160f6024 100644 --- a/ranges/log/src/streams/logLine.ts +++ b/ranges/log/src/streams/logLine.ts @@ -1,7 +1,7 @@ import { isValid, parse } from "date-fns"; import { isLogLine, LogLine, LogMessage, RawLogMessage } from "../types"; import { logger } from "dc-logger"; -import { Index, INVALID_HIT_POS, RangeId, ShooterId, UnsignedInteger } from "dc-ranges-types"; +import { Index, INVALID_HIT_POS, RangeId, UnsignedInteger } from "dc-ranges/types"; import { TypedTransform } from "dc-streams"; const LOG_LINE_PARTS = { @@ -83,18 +83,18 @@ export class LogLineStream extends TypedTransform { const line: LogLine = { action: this.transformAction(parts[LOG_LINE_PARTS.ACTION]), - rangeId: this.intOrThrow(parts[LOG_LINE_PARTS.RANGE_ID]) as RangeId, + rangeId: this.intOrThrow(parts[LOG_LINE_PARTS.RANGE_ID]), targetId: parts[LOG_LINE_PARTS.TARGET_ID], - shooterId: this.intOrThrow(parts[LOG_LINE_PARTS.SHOOTER_ID]) as ShooterId, + shooterId: this.intOrThrow(parts[LOG_LINE_PARTS.SHOOTER_ID]), discipline: { - disciplineId: this.intOrThrow(parts[LOG_LINE_PARTS.DISCIPLINE_ID]) as Index, - roundId: this.intOrThrow(parts[LOG_LINE_PARTS.ROUND_ID]) as Index, + disciplineId: this.intOrThrow(parts[LOG_LINE_PARTS.DISCIPLINE_ID]), + roundId: this.intOrThrow(parts[LOG_LINE_PARTS.ROUND_ID]), }, hit: { - id: this.intOrThrow(parts[LOG_LINE_PARTS.HIT_ID]) as UnsignedInteger, + id: this.intOrThrow(parts[LOG_LINE_PARTS.HIT_ID]), x: hitX / 100, y: hitY / 100, - divisor: this.intOrThrow(parts[LOG_LINE_PARTS.DIVISOR]) as UnsignedInteger, + divisor: this.intOrThrow(parts[LOG_LINE_PARTS.DIVISOR]), rings: this.parseDeFloat(parts[LOG_LINE_PARTS.RINGS]), innerTen: parts[LOG_LINE_PARTS.innerTen] === "IZ", valid: hitX < INVALID_HIT_POS[0] && hitY < INVALID_HIT_POS[1], diff --git a/ranges/log/src/streams/mergeRange.ts b/ranges/log/src/streams/mergeRange.ts index 7741f43a..6953112f 100644 --- a/ranges/log/src/streams/mergeRange.ts +++ b/ranges/log/src/streams/mergeRange.ts @@ -1,5 +1,5 @@ import { TTLHandler } from "dc-ttl"; -import { InternalDiscipline, InternalRange, isInternalOverrideDiscipline, isNormInternalDiscipline } from "dc-ranges-types"; +import { InternalDiscipline, InternalRange, isInternalOverrideDiscipline, isNormInternalDiscipline } from "dc-ranges/types"; import { LogInternalRange, MulticastInternalRange } from "../types"; import { LocalClient } from "dc-db-local"; import { isSameShooter } from "../cache/shooter"; diff --git a/ranges/log/src/streams/multicastAcc.ts b/ranges/log/src/streams/multicastAcc.ts index 783b4593..a9d130e7 100644 --- a/ranges/log/src/streams/multicastAcc.ts +++ b/ranges/log/src/streams/multicastAcc.ts @@ -1,4 +1,4 @@ -import { InternalRange, InternalShooter } from "dc-ranges-types"; +import { InternalRange, InternalShooter } from "dc-ranges/types"; import { isSameShooter } from "../cache/shooter"; import { MulticastInternalRange } from "../types"; import { TypedTransform } from "dc-streams"; diff --git a/ranges/log/src/streams/rangeState.ts b/ranges/log/src/streams/rangeState.ts index 37e20df8..e82567b9 100644 --- a/ranges/log/src/streams/rangeState.ts +++ b/ranges/log/src/streams/rangeState.ts @@ -1,6 +1,6 @@ import { LogInternalRange, LogLine, LogMessage } from "../types"; import { logger } from "dc-logger"; -import { Hits, RangeId } from "dc-ranges-types"; +import { Hits, RangeId } from "dc-ranges/types"; import { TypedTransform } from "dc-streams"; export class RangeStateStream extends TypedTransform { diff --git a/ranges/log/src/types.ts b/ranges/log/src/types.ts index 746eb8aa..59dd38bb 100644 --- a/ranges/log/src/types.ts +++ b/ranges/log/src/types.ts @@ -1,6 +1,4 @@ -import { isValid, parse } from "date-fns" -import { logger } from "dc-logger" -import { Hit, Index, Integer, InternalDiscipline, InternalRange, InternalShooter, INVALID_HIT_POS, RangeId, ShooterId, UnsignedInteger } from "dc-ranges-types" +import { Hit, Index, InternalDiscipline, InternalRange, RangeId } from "dc-ranges/types" import { createIs } from "typia" export type ResetAction = { @@ -20,7 +18,7 @@ export type LogLine = { action: "insert" | "delete", rangeId: RangeId, targetId: string, - shooterId: ShooterId + shooterId: Index discipline: InternalDiscipline hit: Hit, timestamp: Date, diff --git a/ranges/merge/Dockerfile b/ranges/merge/Dockerfile index 047f97e3..6d9e1b14 100644 --- a/ranges/merge/Dockerfile +++ b/ranges/merge/Dockerfile @@ -27,9 +27,15 @@ COPY --from=ttl . . RUN npm ci --loglevel=info && \ npm run build; -FROM base AS deps-ranges-types -WORKDIR /app/ranges/types -COPY --from=range-types . . +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges +COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build; @@ -39,7 +45,8 @@ WORKDIR /app COPY --from=deps-logger /app/lib/logger /app/lib/logger COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local COPY --from=deps-ttl /app/lib/ttl /app/lib/ttl -COPY --from=deps-ranges-types /app/ranges/types /app/ranges/types +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/ranges/merge/docker-compose.yaml b/ranges/merge/docker-compose.yaml index 4b3c25ff..2397a032 100644 --- a/ranges/merge/docker-compose.yaml +++ b/ranges/merge/docker-compose.yaml @@ -15,9 +15,10 @@ services: - CACHE_REFRESH_INTERVAL=${CACHE_REFRESH_INTERVAL} additional_contexts: - local-db=../../lib/database/local - - range-types=../types + - ranges=../ranges - ttl=../../lib/ttl - logger=../../lib/logger + - endpoints=../../lib/endpoints networks: - displaycontroller depends_on: @@ -28,4 +29,4 @@ services: dc-db-migrate: condition: service_completed_successfully environment: - - LOG_LEVEL=${LOG_LEVEL} + - LOG_LEVEL=debug diff --git a/ranges/merge/package-lock.json b/ranges/merge/package-lock.json index 5a2bf2c3..c5e9b174 100644 --- a/ranges/merge/package-lock.json +++ b/ranges/merge/package-lock.json @@ -13,9 +13,9 @@ "dc-db-local": "file:../../lib/database/local", "dc-endpoints": "file:../../lib/endpoints", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-ttl": "file:../../lib/ttl", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "express": "^5.2.1", "socket.io": "^4.8.3" }, @@ -52,7 +52,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -69,8 +69,8 @@ "dependencies": { "dc-logger": "file:../logger", "express": "^5.2.1", - "path-to-regexp": "^8.3.0", - "typia": "^12.0.1" + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" }, "devDependencies": { "@types/express": "^5.0.6", @@ -84,7 +84,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -116,6 +116,35 @@ "typescript": "^5.9.3" } }, + "../endpoints": { + "name": "dc-ranges-endpoints", + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "dc-ranges": "file:../ranges", + "typia": "^12.0.2" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../ranges": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../ttl": { "name": "dc-ranges-ttl", "version": "1.0.0", @@ -128,9 +157,10 @@ "../types": { "name": "dc-ranges-types", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -377,9 +407,9 @@ } }, "node_modules/body-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", - "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -388,7 +418,7 @@ "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.0", + "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" }, @@ -556,8 +586,8 @@ "resolved": "../../lib/logger", "link": true }, - "node_modules/dc-ranges-types": { - "resolved": "../types", + "node_modules/dc-ranges": { + "resolved": "../ranges", "link": true }, "node_modules/dc-ttl": { @@ -604,9 +634,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -1061,9 +1091,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -1319,12 +1349,13 @@ } }, "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==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/path-type": { @@ -1338,9 +1369,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -1377,9 +1408,9 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -1717,35 +1748,18 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/socket.io/node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", diff --git a/ranges/merge/package.json b/ranges/merge/package.json index abaa0f61..3610365e 100644 --- a/ranges/merge/package.json +++ b/ranges/merge/package.json @@ -19,12 +19,12 @@ "dependencies": { "amqplib": "^1.0.3", "dc-db-local": "file:../../lib/database/local", + "dc-endpoints": "file:../../lib/endpoints", "dc-logger": "file:../../lib/logger", + "dc-ranges": "file:../ranges", "dc-ttl": "file:../../lib/ttl", - "dc-ranges-types": "file:../types", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "express": "^5.2.1", - "socket.io": "^4.8.3", - "dc-endpoints": "file:../../lib/endpoints" + "socket.io": "^4.8.3" } } \ No newline at end of file diff --git a/ranges/merge/src/cache/disciplines.ts b/ranges/merge/src/cache/disciplines.ts index 04fb9019..49e7c3c0 100644 --- a/ranges/merge/src/cache/disciplines.ts +++ b/ranges/merge/src/cache/disciplines.ts @@ -1,9 +1,9 @@ import { LocalClient } from "dc-db-local"; -import { Discipline, isDiscipline, isOverrideDiscipline, InternalDiscipline, isInternalOverrideDiscipline, mergeMaps } from "dc-ranges-types"; +import { Discipline, isDiscipline, isOverrideDiscipline, InternalDiscipline, isInternalOverrideDiscipline, Index } from "dc-ranges/types"; import { logger } from "dc-logger"; -export const disciplines = new Map(); -export const overrides = new Map(); +let disciplines = new Map(); +let overrides = new Map(); export async function updateDisciplines(localClient: LocalClient) { const newDisciplines = await localClient.cache.findMany({ @@ -18,16 +18,18 @@ export async function updateDisciplines(localClient: LocalClient) { } disciplineTempMap.set(discipline.value.id, discipline.value); } - mergeMaps(disciplines, disciplineTempMap); + + disciplines = disciplineTempMap; } export async function updateOverrides(localClient: LocalClient) { + const newOverridesMap = new Map(); + const newOverrides = await localClient.cache.findMany({ where: { type: "overrideDiscipline", }, }); - overrides.clear(); for (const overrideDb of newOverrides) { const override = overrideDb.value; if (!isOverrideDiscipline(override)) { @@ -52,8 +54,10 @@ export async function updateOverrides(localClient: LocalClient) { const discipline = disciplineDb.value; discipline.color = override.color; discipline.name = override.name; - overrides.set(override.id, discipline); + newOverridesMap.set(override.id, discipline); } + + overrides = newOverridesMap; } export function getDiscipline(internalDiscipline: InternalDiscipline | null): Discipline | null { diff --git a/ranges/merge/src/cache/ipAddress.ts b/ranges/merge/src/cache/ipAddress.ts index 6795f4da..6f46bd51 100644 --- a/ranges/merge/src/cache/ipAddress.ts +++ b/ranges/merge/src/cache/ipAddress.ts @@ -1,7 +1,6 @@ import { LocalClient } from "dc-db-local"; -import { mergeMaps } from "dc-ranges-types"; -export const ipAddresses = new Map(); +let ipAddresses = new Map(); export async function updateIpAddresses(localClient: LocalClient) { const newDisciplines = await localClient.knownRanges.findMany({ @@ -23,7 +22,8 @@ export async function updateIpAddresses(localClient: LocalClient) { } ipAddressTempMap.set(ipAddress.rangeId, ipAddress.lastIp); } - mergeMaps(ipAddresses, ipAddressTempMap); + + ipAddresses = ipAddressTempMap; } export function getIpAddress(rangeId: number): string | null { diff --git a/ranges/merge/src/cache/shooters.ts b/ranges/merge/src/cache/shooters.ts index be4aa6c5..38eb0b64 100644 --- a/ranges/merge/src/cache/shooters.ts +++ b/ranges/merge/src/cache/shooters.ts @@ -1,6 +1,7 @@ import { LocalClient } from "dc-db-local"; -import { Shooter, isShooter, InternalShooter, RangeShooter, mergeMaps } from "dc-ranges-types"; -export const shooters = new Map(); +import { isShooter, InternalShooter, RangeShooter, Index } from "dc-ranges/types"; + +let shooters = new Map(); export async function updateShooters(localClient: LocalClient) { const newShooters = await localClient.cache.findMany({ @@ -8,7 +9,7 @@ export async function updateShooters(localClient: LocalClient) { type: "shooter", }, }); - const shooterTempMap = new Map(); + const shooterTempMap = new Map(); for (const shooter of newShooters) { if (!isShooter(shooter.value)) { continue; @@ -23,7 +24,8 @@ export async function updateShooters(localClient: LocalClient) { lastName: shooter.value.lastName, }); } - mergeMaps(shooters, shooterTempMap); + + shooters = shooterTempMap; } export function getShooter(shooter: InternalShooter | null): RangeShooter | null { diff --git a/ranges/merge/src/cache/startLists.ts b/ranges/merge/src/cache/startLists.ts index a1debd26..82d4a82f 100644 --- a/ranges/merge/src/cache/startLists.ts +++ b/ranges/merge/src/cache/startLists.ts @@ -1,8 +1,7 @@ import { LocalClient } from "dc-db-local"; -import { StartList, isStartList, mergeMaps } from "dc-ranges-types"; -import { start } from "repl"; +import { Index, StartList, isStartList } from "dc-ranges/types"; -export const startLists = new Map(); +let startLists = new Map(); export async function updateStartLists(localClient: LocalClient) { const newStartLists = await localClient.cache.findMany({ @@ -10,17 +9,18 @@ export async function updateStartLists(localClient: LocalClient) { type: "startList", }, }); - const startListTempMap = new Map(); + const startListTempMap = new Map(); for (const startList of newStartLists) { if (!isStartList(startList.value)) { continue; } startListTempMap.set(startList.value.id, startList.value); } - mergeMaps(startLists, startListTempMap); + + startLists = startListTempMap; } -export function getStartList(startListId: number | null): StartList | null { +export function getStartList(startListId: Index | null): StartList | null { if (startListId == null) { return null; } diff --git a/ranges/merge/src/cache/updater.ts b/ranges/merge/src/cache/updater.ts index 441951b0..61eecf41 100644 --- a/ranges/merge/src/cache/updater.ts +++ b/ranges/merge/src/cache/updater.ts @@ -17,7 +17,7 @@ if (!process.env.CACHE_REFRESH_INTERVAL) { const refreshInterval = parseInt(process.env.CACHE_REFRESH_INTERVAL); async function update() { - logger.info("Updating cache") + logger.info("Updating caches") await Promise.all([ updateDisciplines(client), updateOverrides(client), diff --git a/ranges/merge/src/rangeMan/index.ts b/ranges/merge/src/rangeMan/index.ts index c8284c0a..4d26c4d2 100644 --- a/ranges/merge/src/rangeMan/index.ts +++ b/ranges/merge/src/rangeMan/index.ts @@ -1,4 +1,4 @@ -import { InternalRange, Range } from "dc-ranges-types"; +import { InternalRange, Range } from "dc-ranges/types"; import { RangeMerger } from "../rangeMerger"; import { logger } from "dc-logger"; import { Namespace, Socket } from "socket.io"; diff --git a/ranges/merge/src/rangeMerger/index.ts b/ranges/merge/src/rangeMerger/index.ts index 1d37e95a..705e3a11 100644 --- a/ranges/merge/src/rangeMerger/index.ts +++ b/ranges/merge/src/rangeMerger/index.ts @@ -1,4 +1,4 @@ -import { Range, InternalRange } from "dc-ranges-types"; +import { Range, InternalRange } from "dc-ranges/types"; import { EventEmitter } from "events"; import { TTLHandler } from "dc-ttl"; import { mergeRange } from "./merge"; diff --git a/ranges/merge/src/rangeMerger/merge.ts b/ranges/merge/src/rangeMerger/merge.ts index b2d68c9b..cfb0ff42 100644 --- a/ranges/merge/src/rangeMerger/merge.ts +++ b/ranges/merge/src/rangeMerger/merge.ts @@ -1,6 +1,6 @@ import { TTLHandler } from "dc-ttl"; -import { ActiveRange, InactiveRange, RangeShooter, Source } from "dc-ranges-types"; -import { InternalRange, Discipline, Shooter, StartList, Hits, Hit } from "dc-ranges-types"; +import { ActiveRange, InactiveRange, RangeShooter, Source } from "dc-ranges/types"; +import { InternalRange, Discipline, Shooter, StartList, Hits, Hit } from "dc-ranges/types"; import { getDiscipline } from "../cache/disciplines"; import { getShooter } from "../cache/shooters"; import { getStartList } from "../cache/startLists"; diff --git a/ranges/merge/src/server/index.ts b/ranges/merge/src/server/index.ts index 138ac7e3..2ce0b205 100644 --- a/ranges/merge/src/server/index.ts +++ b/ranges/merge/src/server/index.ts @@ -1,12 +1,16 @@ -import express, { Express, Request, Response } from 'express'; +import express, { Express } from 'express'; import { createLocalClient, LocalClient } from 'dc-db-local'; import { logger } from "dc-logger"; import { rangeManager } from '../rangeMan'; import { createServer } from 'http'; import { Server } from 'socket.io'; -import { isStartList } from 'dc-ranges-types'; +import { isStartList, StartList } from 'dc-ranges/types'; +import { registerEndpoint } from 'dc-endpoints'; +import { createOrUpdateKnownRange, deleteKnownRange, getActiveRanges, getAllKnownRanges, getAllStartLists, getFreeRanges, getKnownRange, getRange } from 'dc-ranges/endpoints'; const app: Express = express(); +app.use(express.json()); + const server = createServer(app); const io = new Server(server, { path: '/api/ranges/ws' @@ -35,22 +39,21 @@ io.on('connection', (socket) => { const localClient: LocalClient = createLocalClient(); -app.get('/api/ranges', async (req: Request, res: Response) => { - res.status(200).send(rangeManager.getActiveRanges()); +registerEndpoint(app, getActiveRanges, async (params, query) => { + return rangeManager.getActiveRanges(); }); -app.get('/api/ranges/free', async (req: Request, res: Response) => { - const freeRanges = rangeManager.getFreeRanges(); - res.status(200).send(freeRanges); +registerEndpoint(app, getFreeRanges, async (params, query) => { + return rangeManager.getFreeRanges(); }); -app.get('/api/ranges/known', async (req: Request, res: Response) => { +registerEndpoint(app, getAllKnownRanges, async (params, query) => { const knownRanges = await localClient.knownRanges.findMany(); - res.status(200).send(knownRanges); + return knownRanges; }); -app.get('/api/ranges/known/:rangeMac', async (req: Request, res: Response) => { - const rangeMac: string = req.params.rangeMac; +registerEndpoint(app, getKnownRange, async (params, query) => { + const rangeMac = params.rangeMac; const knownRange = await localClient.knownRanges.findUnique( { where: { @@ -59,19 +62,18 @@ app.get('/api/ranges/known/:rangeMac', async (req: Request, res: Response) => { } ); if (knownRange) { - res.status(200).send(knownRange); + return knownRange; } else { - res.status(404).send('Range not found'); + return { + code: 404, + message: "Range not found" + }; } }); -app.post('/api/ranges/known/:rangeMac', async (req: Request, res: Response) => { - const rangeMac: string = req.params.rangeMac; - const rangeId = parseInt(req.body); - if (isNaN(rangeId)) { - res.status(400).send('Invalid range ID'); - return; - } +registerEndpoint(app, createOrUpdateKnownRange, async (params, query, body) => { + const rangeMac = params.rangeMac; + const rangeId = body.rangeId; const knownRange = await localClient.knownRanges.upsert({ where: { macAddress: rangeMac, @@ -84,47 +86,47 @@ app.post('/api/ranges/known/:rangeMac', async (req: Request, res: Response) => { rangeId: rangeId, }, }); - res.status(200).send(knownRange); + return knownRange; }); -app.delete('/api/ranges/known/:rangeMac', async (req: Request, res: Response) => { - const rangeMac: string = req.params.rangeMac; +registerEndpoint(app, deleteKnownRange, async (params, query) => { + const rangeMac = params.rangeMac; const knownRange = await localClient.knownRanges.delete({ where: { macAddress: rangeMac, }, }); - res.status(200).send(knownRange); + return knownRange; }); -app.get('/api/ranges/start-lists', async (req: Request, res: Response) => { - logger.info("GET /api/ranges/start-lists"); +registerEndpoint(app, getAllStartLists, async (params, query) => { const startListsDb = await localClient.cache.findMany({ where: { type: "startList", }, }); - const startLists = startListsDb - .map(sl => sl.value) - .filter(isStartList); - res.status(200).send(startLists); + let startLists: StartList[] = []; + for (const entry of startListsDb) { + if (isStartList(entry.value)) { + startLists.push(entry.value); + } else { + logger.warn(`Cache entry with key ${entry.key} is not a valid StartList`); + } + } + return startLists; }); -app.get('/api/ranges/:rangeId', async (req: Request, res: Response) => { - logger.info("GET /api/ranges/:range"); - const range: number = parseInt(req.params.rangeId); - if (isNaN(range)) { - res.status(400).send('Invalid range ID'); - return; - } - const rangeData = rangeManager.getRangeData(range); - if (rangeData) { - res.status(200).send(rangeData); - } else { - res.status(404).send('Range not found'); +registerEndpoint(app, getRange, async (params) => { + const rangeId = parseInt(params.rangeId); + if (isNaN(rangeId)) { + return { + code: 400, + message: "Invalid range ID" + }; } -}); + return rangeManager.getRangeData(rangeId); +}); server.listen(80, () => { logger.info('Listening on port 80'); diff --git a/ranges/multicast/Dockerfile b/ranges/multicast/Dockerfile index 2f5f8537..a3976ca9 100644 --- a/ranges/multicast/Dockerfile +++ b/ranges/multicast/Dockerfile @@ -21,9 +21,16 @@ RUN npm ci --loglevel=info && \ export SELF_DB_URL="postgresql://$SELF_DB_USER:$SELF_DB_PASS@$SELF_DB_HOST:5432/$SELF_DB_NAME" && \ npm run build; -FROM base AS deps-ranges-types -WORKDIR /app/ranges/types -COPY --from=range-types . . +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints + +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges +COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build; @@ -39,7 +46,8 @@ WORKDIR /app COPY --from=deps-logger /app/lib/logger /app/lib/logger COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local COPY --from=deps-streams /app/lib/streams /app/lib/streams -COPY --from=deps-ranges-types /app/ranges/types /app/ranges/types +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/ranges/multicast/docker-compose.yaml b/ranges/multicast/docker-compose.yaml index 5db264a4..61a1ed48 100644 --- a/ranges/multicast/docker-compose.yaml +++ b/ranges/multicast/docker-compose.yaml @@ -18,7 +18,8 @@ services: - CACHE_REFRESH_INTERVAL=${CACHE_REFRESH_INTERVAL} additional_contexts: - local-db=../../lib/database/local - - range-types=../types + - ranges=../ranges + - endpoints=../../lib/endpoints - logger=../../lib/logger - streams=../../lib/streams networks: diff --git a/ranges/multicast/package-lock.json b/ranges/multicast/package-lock.json index 9a3697ae..4f587696 100644 --- a/ranges/multicast/package-lock.json +++ b/ranges/multicast/package-lock.json @@ -14,9 +14,9 @@ "amqplib": "^1.0.3", "dc-db-local": "file:../../lib/database/local", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-streams": "file:../../lib/streams", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/amqplib": "^0.10.8", @@ -50,7 +50,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -65,7 +65,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -118,12 +118,26 @@ "typescript": "~5.9.3" } }, + "../ranges": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../types": { "name": "dc-ranges-types", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -311,8 +325,8 @@ "resolved": "../../lib/logger", "link": true }, - "node_modules/dc-ranges-types": { - "resolved": "../types", + "node_modules/dc-ranges": { + "resolved": "../ranges", "link": true }, "node_modules/dc-streams": { @@ -333,9 +347,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -561,9 +575,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { diff --git a/ranges/multicast/package.json b/ranges/multicast/package.json index b1675e69..07227622 100644 --- a/ranges/multicast/package.json +++ b/ranges/multicast/package.json @@ -21,8 +21,8 @@ "amqplib": "^1.0.3", "dc-db-local": "file:../../lib/database/local", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-streams": "file:../../lib/streams", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" } } \ No newline at end of file diff --git a/ranges/multicast/proxy/package-lock.json b/ranges/multicast/proxy/package-lock.json index 5afd7860..bb314b2a 100644 --- a/ranges/multicast/proxy/package-lock.json +++ b/ranges/multicast/proxy/package-lock.json @@ -12,7 +12,7 @@ "@network-utils/arp-lookup": "^2.1.0", "amqplib": "^1.0.3", "dc-logger": "file:../../../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "iconv-lite": "^0.7.2" }, "devDependencies": { @@ -26,7 +26,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -102,9 +102,9 @@ "link": true }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" diff --git a/ranges/multicast/proxy/package.json b/ranges/multicast/proxy/package.json index 4f571445..d1af83ec 100644 --- a/ranges/multicast/proxy/package.json +++ b/ranges/multicast/proxy/package.json @@ -13,7 +13,7 @@ "@network-utils/arp-lookup": "^2.1.0", "amqplib": "^1.0.3", "dc-logger": "file:../../../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "iconv-lite": "^0.7.2" }, "devDependencies": { diff --git a/ranges/multicast/src/cache/disciplines.ts b/ranges/multicast/src/cache/disciplines.ts index f4b77e08..cef7d564 100644 --- a/ranges/multicast/src/cache/disciplines.ts +++ b/ranges/multicast/src/cache/disciplines.ts @@ -1,8 +1,7 @@ -import { isDiscipline, isOverrideDiscipline } from "dc-ranges-types"; +import { isDiscipline, isOverrideDiscipline } from "dc-ranges/types"; import { CandidateBaseDiscipline, CandidateDiscipline, CandidateOverrideDiscipline, Matcher } from "../types"; import { LocalClient } from "dc-db-local"; import { createMatcher } from "./matcher"; -import { logger } from "dc-logger"; export let potentialDisciplines: Matcher = createMatcher(new Map()); diff --git a/ranges/multicast/src/cache/shooters.ts b/ranges/multicast/src/cache/shooters.ts index 539d2a16..6a148454 100644 --- a/ranges/multicast/src/cache/shooters.ts +++ b/ranges/multicast/src/cache/shooters.ts @@ -1,4 +1,4 @@ -import { InternalShooter, isShooter } from "dc-ranges-types"; +import { InternalShooter, isShooter } from "dc-ranges/types"; import { Matcher } from "../types"; import { LocalClient } from "dc-db-local"; import { createMatcher } from "./matcher"; diff --git a/ranges/multicast/src/cache/startlists.ts b/ranges/multicast/src/cache/startlists.ts index efee1714..8449173b 100644 --- a/ranges/multicast/src/cache/startlists.ts +++ b/ranges/multicast/src/cache/startlists.ts @@ -1,4 +1,4 @@ -import { Index, isOverrideDiscipline, isStartList } from "dc-ranges-types"; +import { Index, isOverrideDiscipline, isStartList } from "dc-ranges/types"; import { CandidateStartList, Matcher } from "../types"; import { LocalClient } from "dc-db-local"; import { createMatcher } from "./matcher"; diff --git a/ranges/multicast/src/index.ts b/ranges/multicast/src/index.ts index c799f544..773abe98 100644 --- a/ranges/multicast/src/index.ts +++ b/ranges/multicast/src/index.ts @@ -5,7 +5,7 @@ import { RangeIdentifier } from './streams/rangeId'; import { createLocalClient } from 'dc-db-local'; import { CandidateExtractor } from './streams/candidates'; import { RangeDataConverter } from './streams/rangeDataConverter'; -import { InternalRange } from 'dc-ranges-types'; +import { InternalRange } from 'dc-ranges/types'; import "./cache"; import { ConstraintSolver } from './streams/constraintSolver'; import { ContainedCandidatesFilter } from './streams/overlapFilter'; diff --git a/ranges/multicast/src/streams/constraintSolver.ts b/ranges/multicast/src/streams/constraintSolver.ts index 4238fcad..8d30e61c 100644 --- a/ranges/multicast/src/streams/constraintSolver.ts +++ b/ranges/multicast/src/streams/constraintSolver.ts @@ -1,7 +1,7 @@ import { TypedTransform } from "dc-streams"; import { Candidate, CandidateDiscipline, CandidateOverrideDiscipline, CandidateStartList, isOverride, PacketCandidates, ResolvedPacketCandidates } from "../types"; import { TransformCallback } from "node:stream"; -import { StartList } from "dc-ranges-types"; +import { StartList } from "dc-ranges/types"; import { logger } from "dc-logger"; export class ConstraintSolver extends TypedTransform { diff --git a/ranges/multicast/src/streams/rangeDataConverter.ts b/ranges/multicast/src/streams/rangeDataConverter.ts index 26e8e423..a04a0f7c 100644 --- a/ranges/multicast/src/streams/rangeDataConverter.ts +++ b/ranges/multicast/src/streams/rangeDataConverter.ts @@ -1,6 +1,6 @@ import { TypedTransform } from "dc-streams" import { isOverride, ResolvedPacketCandidates } from "../types"; -import { Index, InternalDiscipline, InternalRange, InternalShooter } from "dc-ranges-types"; +import { Index, InternalDiscipline, InternalRange, InternalShooter } from "dc-ranges/types"; export class RangeDataConverter extends TypedTransform { diff --git a/ranges/multicast/src/streams/rangeId.ts b/ranges/multicast/src/streams/rangeId.ts index d8c769e5..c593ebb1 100644 --- a/ranges/multicast/src/streams/rangeId.ts +++ b/ranges/multicast/src/streams/rangeId.ts @@ -2,7 +2,7 @@ import { TypedTransform } from "dc-streams"; import { RangeProxyType } from "../../proxy/src/types"; import { LocalClient } from "dc-db-local"; import { logger } from "dc-logger"; -import { RangeId } from "dc-ranges-types"; +import { RangeId } from "dc-ranges/types"; export type IdentifiedRange = { id: RangeId; diff --git a/ranges/multicast/src/types.ts b/ranges/multicast/src/types.ts index 20917de9..48288c44 100644 --- a/ranges/multicast/src/types.ts +++ b/ranges/multicast/src/types.ts @@ -1,5 +1,5 @@ import AhoCorasick from "ahocorasick"; -import { Index, InternalShooter, RangeId, UnsignedInteger } from "dc-ranges-types"; +import { Index, InternalShooter, RangeId, UnsignedInteger } from "dc-ranges/types"; export type Candidate = { readonly start: UnsignedInteger, diff --git a/ranges/types/.dockerignore b/ranges/ranges/.dockerignore similarity index 100% rename from ranges/types/.dockerignore rename to ranges/ranges/.dockerignore diff --git a/ranges/ranges/package-lock.json b/ranges/ranges/package-lock.json new file mode 100644 index 00000000..dedda1b5 --- /dev/null +++ b/ranges/ranges/package-lock.json @@ -0,0 +1,889 @@ +{ + "name": "dc-ranges", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../../lib/endpoints": { + "name": "dc-endpoints", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-logger": "file:../logger", + "express": "^5.2.1", + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" + }, + "devDependencies": { + "@types/express": "^5.0.6", + "@types/node": "^25.5.0", + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../../lib/logger": { + "name": "dc-logger", + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "dotenv": "^17.4.0", + "pino": "^10.3.1", + "pino-pretty": "^13.1.3" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "typescript": "^5.9.3" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@typia/core": { + "version": "12.0.2", + "license": "MIT", + "dependencies": { + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" + } + }, + "node_modules/@typia/interface": { + "version": "12.0.2", + "license": "MIT" + }, + "node_modules/@typia/transform": { + "version": "12.0.2", + "license": "MIT", + "dependencies": { + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" + } + }, + "node_modules/@typia/utils": { + "version": "12.0.2", + "license": "MIT", + "dependencies": { + "@typia/interface": "^12.0.2" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/comment-json": { + "version": "4.2.5", + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/dc-endpoints": { + "resolved": "../../lib/endpoints", + "link": true + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/drange": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "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/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "license": "ISC" + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/quansync": { + "version": "0.2.10", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/randexp": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/ts-patch": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "global-prefix": "^4.0.0", + "minimist": "^1.2.8", + "resolve": "^1.22.2", + "semver": "^7.6.3", + "strip-ansi": "^6.0.1" + }, + "bin": { + "ts-patch": "bin/ts-patch.js", + "tspc": "bin/tspc.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typia": { + "version": "12.0.2", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/transform": "^12.0.2", + "@typia/utils": "^12.0.2", + "commander": "^10.0.0", + "comment-json": "^4.2.3", + "inquirer": "^8.2.5", + "package-manager-detector": "^0.2.0", + "randexp": "^0.5.3" + }, + "bin": { + "typia": "lib/executable/typia.js" + }, + "peerDependencies": { + "typescript": ">=4.8.0 <5.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/ranges/ranges/package.json b/ranges/ranges/package.json new file mode 100644 index 00000000..2a703b5a --- /dev/null +++ b/ranges/ranges/package.json @@ -0,0 +1,43 @@ +{ + "name": "dc-ranges", + "version": "1.0.0", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "prepare": "ts-patch install || true", + "build": "typia generate --input src --output generated --project tsconfig.json && tsc -p tsconfig.build.json && rm -rf generated" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + }, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./types": { + "import": "./dist/types/index.js", + "require": "./dist/types/index.js", + "types": "./dist/types/index.d.ts" + }, + "./endpoints": { + "import": "./dist/endpoints/index.js", + "require": "./dist/endpoints/index.js", + "types": "./dist/endpoints/index.d.ts" + } + }, + "files": [ + "dist" + ] +} \ No newline at end of file diff --git a/ranges/ranges/src/endpoints/index.ts b/ranges/ranges/src/endpoints/index.ts new file mode 100644 index 00000000..90f260d4 --- /dev/null +++ b/ranges/ranges/src/endpoints/index.ts @@ -0,0 +1,113 @@ +import { GetEndpoint, isEmpty, MutatingEndpoint } from "dc-endpoints"; +import { createIs } from "typia"; +import { isRange, Range, RangeId } from "../types/index.js"; +import { StartList } from "../types/startList/index.js"; + +type GetRangesResponse = Array; + +export const getActiveRanges: GetEndpoint = { + method: "GET", + request: { + path: "/api/ranges", + isParams: isEmpty, + isQuery: isEmpty, + }, response: { + isResponseBody: createIs(), + } +}; + +export const getFreeRanges: GetEndpoint = { + method: "GET", + request: { + path: "/api/ranges/free", + isParams: isEmpty, + isQuery: isEmpty, + }, response: { + isResponseBody: createIs(), + } +}; + +type GetByRangeId = { rangeId: string }; + +export const getRange: GetEndpoint = { + method: "GET", + request: { + path: "/api/ranges/:rangeId", + isParams: createIs(), + isQuery: isEmpty, + }, response: { + isResponseBody: isRange, + } +}; + +type KnownRangeData = { + macAddress: string; + rangeId: number; + lastIp: string; +}; + +type KnownRange = { + createdAt: Date; + updatedAt: Date; +} & KnownRangeData; + +export const getAllKnownRanges: GetEndpoint> = { + method: "GET", + request: { + path: "/api/ranges/known", + isParams: isEmpty, + isQuery: isEmpty, + }, response: { + isResponseBody: createIs>(), + } +}; + +type GetKnownRangeByMac = { rangeMac: string }; + +export const getKnownRange: GetEndpoint = { + method: "GET", + request: { + path: "/api/ranges/known/:rangeMac", + isParams: createIs(), + isQuery: isEmpty, + }, response: { + isResponseBody: createIs(), + } +}; + +type RangeIdentifier = { rangeId: RangeId }; + +export const createOrUpdateKnownRange: MutatingEndpoint = { + method: "POST", + request: { + path: "/api/ranges/known/:rangeMac", + isParams: createIs(), + isQuery: isEmpty, + isBody: createIs(), + }, response: { + isResponseBody: createIs(), + } +}; + +export const deleteKnownRange: MutatingEndpoint = { + method: "DELETE", + request: { + path: "/api/ranges/known/:rangeMac", + isParams: createIs(), + isQuery: isEmpty, + isBody: createIs(), + }, response: { + isResponseBody: createIs(), + } +}; + +export const getAllStartLists: GetEndpoint> = { + method: "GET", + request: { + path: "/api/ranges/start-lists", + isParams: isEmpty, + isQuery: isEmpty, + }, response: { + isResponseBody: createIs>(), + } +}; \ No newline at end of file diff --git a/ranges/ranges/src/index.ts b/ranges/ranges/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/ranges/types/src/discipline/index.ts b/ranges/ranges/src/types/discipline/index.ts similarity index 90% rename from ranges/types/src/discipline/index.ts rename to ranges/ranges/src/types/discipline/index.ts index de169300..1ff644a0 100644 --- a/ranges/types/src/discipline/index.ts +++ b/ranges/ranges/src/types/discipline/index.ts @@ -1,4 +1,4 @@ -import { ColorCode, Index, UnsignedNumber } from '../common/index.js'; +import { ColorCode, Index, UnsignedNumber } from '../index.js'; import { Rounds } from './round/index.js'; import { createIs } from "typia"; diff --git a/ranges/types/src/discipline/round/index.ts b/ranges/ranges/src/types/discipline/round/index.ts similarity index 85% rename from ranges/types/src/discipline/round/index.ts rename to ranges/ranges/src/types/discipline/round/index.ts index 6759f823..7eb33613 100644 --- a/ranges/types/src/discipline/round/index.ts +++ b/ranges/ranges/src/types/discipline/round/index.ts @@ -1,4 +1,4 @@ -import { Index, UnsignedInteger } from "../../common/index.js"; +import { Index, UnsignedInteger } from "../../index.js"; import { Layout } from "./layout.js"; import { Mode } from "./mode.js"; import { Zoom } from "./zoom.js"; diff --git a/ranges/types/src/discipline/round/layout.ts b/ranges/ranges/src/types/discipline/round/layout.ts similarity index 91% rename from ranges/types/src/discipline/round/layout.ts rename to ranges/ranges/src/types/discipline/round/layout.ts index 3fa0852e..f335f1e1 100644 --- a/ranges/types/src/discipline/round/layout.ts +++ b/ranges/ranges/src/types/discipline/round/layout.ts @@ -1,4 +1,4 @@ -import { UnsignedInteger, UnsignedNumber } from "../../common/index.js"; +import { UnsignedInteger, UnsignedNumber } from "../../index.js"; export type Layout = LayoutRings | LayoutRectangle | LayoutDart | LayoutStars | LayoutChess | LayoutEaster; diff --git a/ranges/types/src/discipline/round/mode.ts b/ranges/ranges/src/types/discipline/round/mode.ts similarity index 84% rename from ranges/types/src/discipline/round/mode.ts rename to ranges/ranges/src/types/discipline/round/mode.ts index 93b06c07..7977768b 100644 --- a/ranges/types/src/discipline/round/mode.ts +++ b/ranges/ranges/src/types/discipline/round/mode.ts @@ -1,4 +1,4 @@ -import { UnsignedInteger, UnsignedNumber } from "../../common/index.js"; +import { UnsignedInteger, UnsignedNumber } from "../../index.js"; export type Mode = ModeBase | ModeDecimals | ModeTarget; diff --git a/ranges/types/src/discipline/round/zoom.ts b/ranges/ranges/src/types/discipline/round/zoom.ts similarity index 73% rename from ranges/types/src/discipline/round/zoom.ts rename to ranges/ranges/src/types/discipline/round/zoom.ts index 2e5e182f..9b21c92c 100644 --- a/ranges/types/src/discipline/round/zoom.ts +++ b/ranges/ranges/src/types/discipline/round/zoom.ts @@ -1,4 +1,4 @@ -import { UnsignedInteger } from "../../common/index.js"; +import { UnsignedInteger } from "../../index.js"; export type Zoom = ZoomFixed | ZoomBase; diff --git a/ranges/types/src/hits/index.ts b/ranges/ranges/src/types/hits/index.ts similarity index 89% rename from ranges/types/src/hits/index.ts rename to ranges/ranges/src/types/hits/index.ts index f66dd28d..a106753a 100644 --- a/ranges/types/src/hits/index.ts +++ b/ranges/ranges/src/types/hits/index.ts @@ -1,5 +1,5 @@ import { tags } from "typia"; -import { Index, UnsignedNumber } from "../common/index.js"; +import { Index, UnsignedNumber } from "../index.js"; export type HitIndex = Index & tags.Maximum<1000>; diff --git a/ranges/types/src/index.ts b/ranges/ranges/src/types/index.ts similarity index 84% rename from ranges/types/src/index.ts rename to ranges/ranges/src/types/index.ts index e7e6fc5a..4e6f3aa7 100644 --- a/ranges/types/src/index.ts +++ b/ranges/ranges/src/types/index.ts @@ -1,14 +1,25 @@ import { Discipline, InternalDiscipline, InternalOverrideDiscipline, NormInternalDiscipline, OverrideDiscipline } from './discipline/index.js'; import { Hits, Hit, ValidHit } from './hits/index.js'; -import { mergeMaps } from './cache.js'; -import { createIs } from 'typia'; +import { createIs, tags } from 'typia'; import { Layout, LayoutChess, LayoutDart, LayoutEaster, LayoutRectangle, LayoutRing, LayoutRings, LayoutStars } from './discipline/round/layout.js'; import { Round, Rounds } from './discipline/round/index.js'; import { Mode } from './discipline/round/mode.js'; import { Zoom } from './discipline/round/zoom.js'; -import { InternalShooter, InternalShooterByName, RangeShooter, Shooter, ShooterId } from './shooter/index.js'; +import { InternalShooter, InternalShooterByName, RangeShooter, Shooter } from './shooter/index.js'; import { StartList } from './startList/index.js'; -import { UnsignedInteger, ColorCode, Index, Integer, RangeId, UnsignedNumber } from './common/index.js'; + +export type Integer = number & tags.MultipleOf<1>; +export type UnsignedNumber = number & tags.Minimum<0>; +export type UnsignedInteger = Integer & UnsignedNumber; + +export type RangeId = Integer & tags.Minimum<1> & tags.Maximum<416>; +export type Index = UnsignedInteger; + +export const isIndex = createIs(); + +export type ColorCode = string & tags.MinLength<7> & tags.MaxLength<7>; + + export type Range = InactiveRange | ActiveRange; type BaseRange = { @@ -51,7 +62,6 @@ export const isDiscipline = createIs(); export const isStartList = createIs(); export const isOverrideDiscipline = createIs(); export const isShooter = createIs(); -export const isShooterId = createIs(); export const isInternalShooterByName = createIs(); export const isInternalShooter = createIs(); export const isInternalOverrideDiscipline = createIs(); @@ -60,7 +70,6 @@ export const isInternalRange = createIs(); export { Discipline, - mergeMaps, Hit, ValidHit, Hits, @@ -80,15 +89,8 @@ export { InternalShooter, InternalShooterByName, StartList, - UnsignedInteger, - ColorCode, - Index, - Integer, - RangeId, - UnsignedNumber, OverrideDiscipline, Shooter, - ShooterId, RangeShooter } diff --git a/ranges/types/src/shooter/index.ts b/ranges/ranges/src/types/shooter/index.ts similarity index 78% rename from ranges/types/src/shooter/index.ts rename to ranges/ranges/src/types/shooter/index.ts index 10e75a21..e5d863e5 100644 --- a/ranges/types/src/shooter/index.ts +++ b/ranges/ranges/src/types/shooter/index.ts @@ -1,6 +1,4 @@ -import { Index } from "../common/index.js"; - -export type ShooterId = Index; +import { Index } from "../index.js"; type ShooterName = { firstName: string; @@ -8,7 +6,7 @@ type ShooterName = { } export type Shooter = { - id: ShooterId | null; // Null = Can't be determined uniquely + id: Index | null; // Null = Can't be determined uniquely } & ShooterName; export type ShooterFree = { @@ -29,7 +27,7 @@ export type InternalShooterFree = { export type InternalShooterById = { type: "byId"; - id: ShooterId; + id: Index; } export type InternalShooterByName = { diff --git a/ranges/types/src/startList/index.ts b/ranges/ranges/src/types/startList/index.ts similarity index 65% rename from ranges/types/src/startList/index.ts rename to ranges/ranges/src/types/startList/index.ts index d95fa993..ff72935e 100644 --- a/ranges/types/src/startList/index.ts +++ b/ranges/ranges/src/types/startList/index.ts @@ -1,4 +1,4 @@ -import { Index } from "../common/index.js" +import { Index } from "../index.js"; export type StartList = { id: Index; diff --git a/ranges/types/tsconfig.build.json b/ranges/ranges/tsconfig.build.json similarity index 100% rename from ranges/types/tsconfig.build.json rename to ranges/ranges/tsconfig.build.json diff --git a/ranges/types/tsconfig.json b/ranges/ranges/tsconfig.json similarity index 100% rename from ranges/types/tsconfig.json rename to ranges/ranges/tsconfig.json diff --git a/ranges/ssmdb2/Dockerfile b/ranges/ssmdb2/Dockerfile index e0f30f2d..cf78aecb 100644 --- a/ranges/ssmdb2/Dockerfile +++ b/ranges/ssmdb2/Dockerfile @@ -36,9 +36,15 @@ COPY --from=table-watcher . . RUN npm ci --loglevel=info && \ npm run build; -FROM base AS deps-range-types -WORKDIR /app/ranges/types -COPY --from=range-types . . +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges +COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build; @@ -56,7 +62,8 @@ COPY --from=deps-streams /app/lib/streams /app/lib/streams COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local COPY --from=deps-ssmdb2 /app/lib/database/ssmdb2 /app/lib/database/ssmdb2 COPY --from=deps-table-watcher /app/lib/database/tableWatcher /app/lib/database/tableWatcher -COPY --from=deps-range-types /app/ranges/types /app/ranges/types +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/ranges/ssmdb2/docker-compose.yaml b/ranges/ssmdb2/docker-compose.yaml index 5acbb598..f1e61639 100644 --- a/ranges/ssmdb2/docker-compose.yaml +++ b/ranges/ssmdb2/docker-compose.yaml @@ -18,7 +18,8 @@ services: additional_contexts: - local-db=../../lib/database/local - ssmdb2=../../lib/database/ssmdb2 - - range-types=../types + - endpoints=../../lib/endpoints + - ranges=../ranges - table-watcher=../../lib/database/tableWatcher - logger=../../lib/logger - streams=../../lib/streams diff --git a/ranges/ssmdb2/package-lock.json b/ranges/ssmdb2/package-lock.json index 35aa088e..db95f224 100644 --- a/ranges/ssmdb2/package-lock.json +++ b/ranges/ssmdb2/package-lock.json @@ -13,10 +13,10 @@ "dc-db-local": "file:../../lib/database/local", "dc-db-ssmdb2": "file:../../lib/database/ssmdb2", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-streams": "file:../../lib/streams", "dc-table-watcher": "file:../../lib/database/tableWatcher", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/amqplib": "^0.10.8", @@ -82,7 +82,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -100,7 +100,7 @@ "@prisma/adapter-mariadb": "^7.6.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -127,7 +127,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -180,12 +180,26 @@ "typescript": "~5.9.3" } }, + "../ranges": { + "name": "dc-ranges", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../types": { "name": "dc-ranges-types", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -365,8 +379,8 @@ "resolved": "../../lib/logger", "link": true }, - "node_modules/dc-ranges-types": { - "resolved": "../types", + "node_modules/dc-ranges": { + "resolved": "../ranges", "link": true }, "node_modules/dc-streams": { @@ -391,9 +405,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -619,9 +633,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { diff --git a/ranges/ssmdb2/package.json b/ranges/ssmdb2/package.json index 62d2f6b4..52b105ef 100644 --- a/ranges/ssmdb2/package.json +++ b/ranges/ssmdb2/package.json @@ -20,9 +20,9 @@ "dc-db-local": "file:../../lib/database/local", "dc-db-ssmdb2": "file:../../lib/database/ssmdb2", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../types", + "dc-ranges": "file:../ranges", "dc-streams": "file:../../lib/streams", "dc-table-watcher": "file:../../lib/database/tableWatcher", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" } } \ No newline at end of file diff --git a/ranges/ssmdb2/src/cache/disciplines.ts b/ranges/ssmdb2/src/cache/disciplines.ts index b215acc9..295a7fcd 100644 --- a/ranges/ssmdb2/src/cache/disciplines.ts +++ b/ranges/ssmdb2/src/cache/disciplines.ts @@ -1,7 +1,7 @@ import { LocalClient } from "dc-db-local"; -import { InternalDiscipline, mergeMaps } from "dc-ranges-types"; +import { InternalDiscipline, Index } from "dc-ranges/types"; -export const disciplineIdToObj = new Map(); +let disciplineIdToObj = new Map(); export async function updateDisciplines(client: LocalClient) { const overrides = await client.cache.findMany({ @@ -9,7 +9,7 @@ export async function updateDisciplines(client: LocalClient) { type: "overrideDiscipline" } }); - const disciplineTempMap = new Map(); + const disciplineTempMap = new Map(); for (const override of overrides) { disciplineTempMap.set(Number(override.key), { overrideId: Number(override.key), @@ -28,10 +28,11 @@ export async function updateDisciplines(client: LocalClient) { }); } - mergeMaps(disciplineIdToObj, disciplineTempMap); + + disciplineIdToObj = disciplineTempMap; } -export function getDisciplineId(id: number, round: number): InternalDiscipline | null { +export function getDisciplineId(id: Index, round: Index): InternalDiscipline | null { const discipline = disciplineIdToObj.get(id) ?? null; if (discipline === null) { return null; diff --git a/ranges/ssmdb2/src/index.ts b/ranges/ssmdb2/src/index.ts index aa5f2d40..3cb7f96c 100644 --- a/ranges/ssmdb2/src/index.ts +++ b/ranges/ssmdb2/src/index.ts @@ -4,7 +4,7 @@ import { TableWatcherStream } from "./streams/tableWatcher"; import { StabilizerStream } from "./streams/rangeStabilizer"; import { RabbitMqWriter } from "dc-streams"; import amqp from "amqplib"; -import { InternalRange } from "dc-ranges-types"; +import { InternalRange } from "dc-ranges/types"; import { DbQueryStream } from "./streams/dbQuery"; import { RangeDataTranslator } from "./streams/rangeDataTranslator"; diff --git a/ranges/ssmdb2/src/streams/dbQuery.ts b/ranges/ssmdb2/src/streams/dbQuery.ts index b2f2f8c9..dfea1bcf 100644 --- a/ranges/ssmdb2/src/streams/dbQuery.ts +++ b/ranges/ssmdb2/src/streams/dbQuery.ts @@ -1,6 +1,6 @@ import { TransformCallback } from "stream"; import { Ssmdb2Client } from "dc-db-ssmdb2"; -import { Hits, INVALID_HIT_POS, UnsignedInteger } from "dc-ranges-types"; +import { Hits, INVALID_HIT_POS, UnsignedInteger } from "dc-ranges/types"; import { logger } from "dc-logger"; import { getLocalMs } from "../utils"; import { SSMDB2InternalRange } from "../types"; diff --git a/ranges/ssmdb2/src/streams/rangeDataTranslator.ts b/ranges/ssmdb2/src/streams/rangeDataTranslator.ts index d3bc5559..eecc0ff4 100644 --- a/ranges/ssmdb2/src/streams/rangeDataTranslator.ts +++ b/ranges/ssmdb2/src/streams/rangeDataTranslator.ts @@ -1,6 +1,6 @@ import { TypedTransform } from "dc-streams"; import { SSMDB2InternalRange } from "../types"; -import { InternalRange } from "dc-ranges-types"; +import { InternalRange } from "dc-ranges/types"; import { TransformCallback } from "node:stream"; import { getDisciplineId } from "../cache/disciplines"; diff --git a/ranges/ssmdb2/src/streams/rangeStabilizer.ts b/ranges/ssmdb2/src/streams/rangeStabilizer.ts index 2cfe7eaa..eb0b1be5 100644 --- a/ranges/ssmdb2/src/streams/rangeStabilizer.ts +++ b/ranges/ssmdb2/src/streams/rangeStabilizer.ts @@ -1,4 +1,4 @@ -import { UnsignedInteger } from "dc-ranges-types"; +import { UnsignedInteger } from "dc-ranges/types"; import { TransformCallback } from "stream"; import { logger } from "dc-logger"; import { SSMDB2InternalRange } from "../types"; diff --git a/ranges/ssmdb2/src/types.ts b/ranges/ssmdb2/src/types.ts index b60c12a1..a698ba12 100644 --- a/ranges/ssmdb2/src/types.ts +++ b/ranges/ssmdb2/src/types.ts @@ -1,4 +1,4 @@ -import { Hits, Index, UnsignedInteger } from "dc-ranges-types"; +import { Hits, Index, UnsignedInteger } from "dc-ranges/types"; export type SSMDB2InternalRange = { rangeId: Index; diff --git a/ranges/types/package.json b/ranges/types/package.json deleted file mode 100644 index 50e5b998..00000000 --- a/ranges/types/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "dc-ranges-types", - "version": "1.0.0", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "prepare": "ts-patch install || true", - "build": "typia generate --input src --output generated --project tsconfig.json && tsc -p tsconfig.build.json && rm -rf generated" - }, - "author": "", - "license": "ISC", - "description": "", - "dependencies": { - "typia": "^12.0.1" - }, - "devDependencies": { - "ts-patch": "^3.3.0", - "typescript": "~5.9.3" - }, - "files": [ - "dist" - ] -} \ No newline at end of file diff --git a/ranges/types/src/cache.ts b/ranges/types/src/cache.ts deleted file mode 100644 index 7cbc32ba..00000000 --- a/ranges/types/src/cache.ts +++ /dev/null @@ -1,12 +0,0 @@ -export function mergeMaps(map1: Map, map2: Map) { - // map1 is the target map - for (const [key, value] of map2.entries()) { - map1.set(key, value); - } - for (const key of map1.keys()) { - if (!map2.has(key)) { - map1.delete(key); - } - } - -} \ No newline at end of file diff --git a/ranges/types/src/common/index.ts b/ranges/types/src/common/index.ts deleted file mode 100644 index 46fe1e86..00000000 --- a/ranges/types/src/common/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { tags } from "typia"; - -export type Integer = number & tags.MultipleOf<1>; -export type UnsignedNumber = number & tags.Minimum<0>; -export type UnsignedInteger = Integer & UnsignedNumber; - -export type RangeId = Integer & tags.Minimum<1> & tags.Maximum<416>; -export type Index = UnsignedInteger; - -export type ColorCode = string & tags.MinLength<7> & tags.MaxLength<7>; \ No newline at end of file diff --git a/screens/evaluations/package-lock.json b/screens/evaluations/package-lock.json index 150c0a37..ac556bd7 100644 --- a/screens/evaluations/package-lock.json +++ b/screens/evaluations/package-lock.json @@ -11,10 +11,10 @@ "dependencies": { "dc-db-local": "file:../../lib/database/local", "dc-logger": "file:../../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "express": "^5.2.1", "express-rate-limit": "^8.3.2", - "jsdom": "^29.0.1", + "jsdom": "^29.0.2", "socket.io-client": "^4.8.3" }, "devDependencies": { @@ -50,7 +50,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -65,7 +65,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -90,32 +90,30 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz", - "integrity": "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.6.tgz", + "integrity": "sha512-BXWCh8dHs9GOfpo/fWGDJtDmleta2VePN9rn6WQt3GjEbxzutVF4t0x2pmH+7dbMCLtuv3MlwqRsAuxlzFXqFg==", "license": "MIT", "dependencies": { "@csstools/css-calc": "^3.1.1", "@csstools/css-color-parser": "^4.0.2", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0", - "lru-cache": "^11.2.6" + "@csstools/css-tokenizer": "^4.0.0" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.0.4.tgz", - "integrity": "sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.0.8.tgz", + "integrity": "sha512-erMO6FgtM02dC24NGm0xufMzWz5OF0wXKR7BpvGD973bq/GbmR8/DbxNZbj0YevQ5hlToJaWSVK/G9/NDgGEVw==", "license": "MIT", "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", - "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.7" + "is-potential-custom-element-name": "^1.0.1" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0" @@ -527,9 +525,9 @@ } }, "node_modules/body-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", - "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -538,7 +536,7 @@ "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.0", + "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" }, @@ -550,22 +548,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -771,9 +753,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -1240,6 +1222,22 @@ "url": "https://opencollective.com/express" } }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -1333,13 +1331,13 @@ "license": "MIT" }, "node_modules/jsdom": { - "version": "29.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.0.1.tgz", - "integrity": "sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==", + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.0.2.tgz", + "integrity": "sha512-9VnGEBosc/ZpwyOsJBCQ/3I5p7Q5ngOY14a9bf5btenAORmZfDse1ZEheMiWcJ3h81+Fv7HmJFdS0szo/waF2w==", "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^5.0.1", - "@asamuzakjp/dom-selector": "^7.0.3", + "@asamuzakjp/css-color": "^5.1.5", + "@asamuzakjp/dom-selector": "^7.0.6", "@bramus/specificity": "^2.4.2", "@csstools/css-syntax-patches-for-csstree": "^1.1.1", "@exodus/bytes": "^1.15.0", @@ -1385,9 +1383,9 @@ } }, "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.2.tgz", + "integrity": "sha512-wgWa6FWQ3QRRJbIjbsldRJZxdxYngT/dO0I5Ynmlnin8qy7tC6xYzbcJjtN4wHLXtkbVwHzk0C+OejVw1XM+DQ==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -1569,12 +1567,13 @@ } }, "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==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/path-type": { @@ -1588,9 +1587,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -1636,9 +1635,9 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -1705,22 +1704,6 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1983,35 +1966,18 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/screens/evaluations/package.json b/screens/evaluations/package.json index 92387bd5..c71255bd 100644 --- a/screens/evaluations/package.json +++ b/screens/evaluations/package.json @@ -12,10 +12,10 @@ "dependencies": { "dc-db-local": "file:../../lib/database/local", "dc-logger": "file:../../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "express": "^5.2.1", "express-rate-limit": "^8.3.2", - "jsdom": "^29.0.1", + "jsdom": "^29.0.2", "socket.io-client": "^4.8.3" }, "devDependencies": { diff --git a/screens/images/package-lock.json b/screens/images/package-lock.json index 7ab7f954..8106171c 100644 --- a/screens/images/package-lock.json +++ b/screens/images/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "body-parser": "^2.2.2", "dc-logger": "file:../../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "express": "^5.2.1", "express-fileupload": "^1.5.2", "express-rate-limit": "^8.3.2", @@ -30,7 +30,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -499,9 +499,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -922,9 +922,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -1195,12 +1195,13 @@ } }, "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==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/path-type": { @@ -1230,9 +1231,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -1269,9 +1270,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" diff --git a/screens/images/package.json b/screens/images/package.json index aa1cdba2..b945abdd 100644 --- a/screens/images/package.json +++ b/screens/images/package.json @@ -12,7 +12,7 @@ "dependencies": { "body-parser": "^2.2.2", "dc-logger": "file:../../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "express": "^5.2.1", "express-fileupload": "^1.5.2", "express-rate-limit": "^8.3.2", diff --git a/screens/screenCast/package-lock.json b/screens/screenCast/package-lock.json index e04f3247..07fcf450 100644 --- a/screens/screenCast/package-lock.json +++ b/screens/screenCast/package-lock.json @@ -25,7 +25,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -54,7 +54,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -285,18 +285,35 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/socket.io/node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", diff --git a/screens/screenManager/Dockerfile b/screens/screenManager/Dockerfile index 8616e049..1735160f 100644 --- a/screens/screenManager/Dockerfile +++ b/screens/screenManager/Dockerfile @@ -24,19 +24,33 @@ COPY --from=screen-types . . RUN npm ci --loglevel=info && \ npm run build; -FROM base AS deps-ranges-types -WORKDIR /app/ranges/types +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + +FROM deps-endpoints AS deps-ranges +WORKDIR /app/ranges/ranges COPY --from=ranges . . RUN npm ci --loglevel=info && \ npm run build; +FROM deps-endpoints AS deps-server-state +WORKDIR /app/serverState/contract +COPY --from=server-state . . +RUN npm ci --loglevel=info && \ + npm run build; + FROM base AS local-deps WORKDIR /app COPY --from=deps-logger /app/lib/logger /app/lib/logger COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints +COPY --from=deps-server-state /app/serverState/contract /app/serverState/contract COPY --from=deps-screens-types /app/screens/types /app/screens/types -COPY --from=deps-ranges-types /app/ranges/types /app/ranges/types +COPY --from=deps-ranges /app/ranges/ranges /app/ranges/ranges FROM local-deps AS deps diff --git a/screens/screenManager/docker-compose.yaml b/screens/screenManager/docker-compose.yaml index 14f18e19..7fe1cef4 100644 --- a/screens/screenManager/docker-compose.yaml +++ b/screens/screenManager/docker-compose.yaml @@ -11,10 +11,12 @@ services: dockerfile: ./Dockerfile additional_contexts: - local-db=../../lib/database/local - - ranges=../../ranges/types + - ranges=../../ranges/ranges + - endpoints=../../lib/endpoints - logger=../../lib/logger - file-utils=../utils/files - screen-types=../types + - server-state=../../serverState/contract args: - SELF_DB_HOST=${SELF_DB_HOST} - SELF_DB_USER=${SELF_DB_USER} diff --git a/screens/screenManager/package-lock.json b/screens/screenManager/package-lock.json index 24885efd..6dac38b9 100644 --- a/screens/screenManager/package-lock.json +++ b/screens/screenManager/package-lock.json @@ -12,10 +12,12 @@ "amqplib": "^1.0.3", "body-parser": "^2.2.2", "dc-db-local": "file:../../lib/database/local", + "dc-endpoints": "file:../../lib/endpoints", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../../ranges/types", + "dc-ranges": "file:../../ranges/ranges", "dc-screens-types": "file:../types", - "dotenv": "^17.3.1", + "dc-server-state": "file:../../serverState/contract", + "dotenv": "^17.4.0", "express": "^5.2.1", "socket.io": "^4.8.3" }, @@ -27,39 +29,38 @@ "typescript": "^5.9.3" } }, - "../../database/local": { + "../../lib/database/local": { "name": "dc-db-local", "version": "1.0.0", - "extraneous": true, "license": "ISC", "dependencies": { - "@prisma/adapter-pg": "^7.5.0", - "@prisma/client": "^7.5.0", - "dotenv": "^17.3.1", + "@prisma/adapter-pg": "^7.6.0", + "@prisma/client": "^7.6.0", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { "@types/node": "^25.5.0", - "@types/pg": "^8.18.0", - "prisma": "^7.5.0", + "@types/pg": "^8.20.0", + "prisma": "^7.6.0", "typescript": "^5.9.3" } }, - "../../lib/database/local": { - "name": "dc-db-local", + "../../lib/endpoints": { + "name": "dc-endpoints", "version": "1.0.0", "license": "ISC", "dependencies": { - "@prisma/adapter-pg": "^7.6.0", - "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", - "pg": "^8.20.0" + "dc-logger": "file:../logger", + "express": "^5.2.1", + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" }, "devDependencies": { + "@types/express": "^5.0.6", "@types/node": "^25.5.0", - "@types/pg": "^8.20.0", - "prisma": "^7.6.0", - "typescript": "^5.9.3" + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" } }, "../../lib/logger": { @@ -67,7 +68,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -76,27 +77,26 @@ "typescript": "^5.9.3" } }, - "../../logger": { - "name": "dc-logger", + "../../ranges/ranges": { + "name": "dc-ranges", "version": "1.0.0", - "extraneous": true, "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", - "pino": "^10.3.1", - "pino-pretty": "^13.1.3" + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" }, "devDependencies": { - "@types/node": "^25.5.0", - "typescript": "^5.9.3" + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" } }, - "../../ranges/types": { - "name": "dc-ranges-types", + "../../serverState/contract": { + "name": "dc-server-state", "version": "1.0.0", "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -108,7 +108,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -212,9 +212,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", - "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "dev": true, "license": "MIT", "dependencies": { @@ -231,26 +231,19 @@ "dev": true, "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==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "license": "MIT", "dependencies": { "undici-types": "~7.18.0" } }, "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", "dev": true, "license": "MIT" }, @@ -262,13 +255,12 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -283,6 +275,15 @@ "@types/node": "*" } }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -471,15 +472,16 @@ } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -510,9 +512,9 @@ } }, "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==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -520,24 +522,36 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/dc-db-local": { "resolved": "../../lib/database/local", "link": true }, + "node_modules/dc-endpoints": { + "resolved": "../../lib/endpoints", + "link": true + }, "node_modules/dc-logger": { "resolved": "../../lib/logger", "link": true }, - "node_modules/dc-ranges-types": { - "resolved": "../../ranges/types", + "node_modules/dc-ranges": { + "resolved": "../../ranges/ranges", "link": true }, "node_modules/dc-screens-types": { "resolved": "../types", "link": true }, + "node_modules/dc-server-state": { + "resolved": "../../serverState/contract", + "link": true + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -578,9 +592,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -619,20 +633,21 @@ } }, "node_modules/engine.io": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", - "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.6.tgz", + "integrity": "sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA==", "license": "MIT", "dependencies": { "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", + "@types/ws": "^8.5.12", "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.7.2", "cors": "~2.8.5", - "debug": "~4.3.1", + "debug": "~4.4.1", "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" + "ws": "~8.18.3" }, "engines": { "node": ">=10.2.0" @@ -660,23 +675,6 @@ "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/engine.io/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -813,9 +811,9 @@ } }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -836,9 +834,9 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -849,7 +847,11 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/forwarded": { @@ -932,9 +934,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1035,9 +1037,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -1191,15 +1193,19 @@ } }, "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ms": { @@ -1209,13 +1215,13 @@ "license": "MIT" }, "node_modules/mylas": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", - "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.14.tgz", + "integrity": "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=16.0.0" }, "funding": { "type": "github", @@ -1293,12 +1299,13 @@ } }, "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==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/path-type": { @@ -1312,9 +1319,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -1351,9 +1358,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -1494,26 +1501,6 @@ "queue-microtask": "^1.2.2" } }, - "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" - } - ], - "license": "MIT" - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1521,31 +1508,35 @@ "license": "MIT" }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "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", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "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==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -1555,6 +1546,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -1664,62 +1659,28 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "license": "MIT", - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz", + "integrity": "sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "debug": "~4.4.1", + "ws": "~8.18.3" } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/socket.io/node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1875,9 +1836,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/screens/screenManager/package.json b/screens/screenManager/package.json index 469b8185..2245cd93 100644 --- a/screens/screenManager/package.json +++ b/screens/screenManager/package.json @@ -13,10 +13,12 @@ "amqplib": "^1.0.3", "body-parser": "^2.2.2", "dc-db-local": "file:../../lib/database/local", + "dc-endpoints": "file:../../lib/endpoints", "dc-logger": "file:../../lib/logger", - "dc-ranges-types": "file:../../ranges/types", + "dc-ranges": "file:../../ranges/ranges", "dc-screens-types": "file:../types", - "dotenv": "^17.3.1", + "dc-server-state": "file:../../serverState/contract", + "dotenv": "^17.4.0", "express": "^5.2.1", "socket.io": "^4.8.3" }, @@ -27,4 +29,4 @@ "tsc-alias": "^1.8.16", "typescript": "^5.9.3" } -} \ No newline at end of file +} diff --git a/screens/screenManager/src/screens/conditions/AllRangesFree.ts b/screens/screenManager/src/screens/conditions/AllRangesFree.ts index 3f6052ad..154ddada 100644 --- a/screens/screenManager/src/screens/conditions/AllRangesFree.ts +++ b/screens/screenManager/src/screens/conditions/AllRangesFree.ts @@ -1,23 +1,14 @@ import { ConditionNone } from "dc-screens-types"; import { logger } from "dc-logger"; +import { request } from "dc-endpoints"; +import { getActiveRanges, getFreeRanges } from "dc-ranges/endpoints"; export async function all_ranges_free(condition: ConditionNone): Promise { - const onlineRangesReq = await fetch("http://ranges:80/api/ranges"); - const freeRangesReq = await fetch("http://ranges:80/api/ranges/free"); - if (onlineRangesReq.status !== 200 || freeRangesReq.status !== 200) { - logger.warn("Failed to fetch online or free ranges"); - return false; - } - try { - const onlineRanges = await onlineRangesReq.json(); - const freeRanges = await freeRangesReq.json(); - if (!Array.isArray(onlineRanges) || !Array.isArray(freeRanges)) { - logger.warn("Invalid ranges response"); - return false; - } - return onlineRanges.length === freeRanges.length; - } catch (e) { - logger.error(`Failed to parse ranges response: ${e}`); + const activeRanges = await request("http://ranges:80", getActiveRanges); + const freeRanges = await request("http://ranges:80", getFreeRanges); + if (activeRanges.type === "error" || freeRanges.type === "error") { + logger.warn("Failed to fetch active or free ranges"); return false; } + return activeRanges.body?.length === freeRanges.body?.length; } \ No newline at end of file diff --git a/screens/screenManager/src/screens/conditions/RangeFree.ts b/screens/screenManager/src/screens/conditions/RangeFree.ts index 4a13b153..516e1d1f 100644 --- a/screens/screenManager/src/screens/conditions/RangeFree.ts +++ b/screens/screenManager/src/screens/conditions/RangeFree.ts @@ -1,23 +1,14 @@ import { ConditionNumber } from "dc-screens-types"; -import { isRange } from "dc-ranges-types" import { logger } from "dc-logger"; +import { request } from "dc-endpoints"; +import { getRange } from "dc-ranges/endpoints"; export async function range_free(condition: ConditionNumber): Promise { - const rangeReq = await fetch(`http://ranges:80/api/ranges/${condition.number}`); - if (rangeReq.status !== 200) { - logger.warn("Failed to fetch free ranges"); - return false; - } - try { - const range = await rangeReq.json(); - if (!isRange(range)) { - logger.warn("Invalid range response"); - return false; - } - return !range.active || range.shooter === null; - } - catch (e) { + const range = await request("http://ranges:80", getRange, { rangeId: condition.number.toString() }); + if (range.type === "error" || !range.body) { + logger.warn("Failed to fetch range"); return false; } + return !range.body.active || range.body.shooter === null; } diff --git a/screens/screenManager/src/screens/conditions/RangeOnline.ts b/screens/screenManager/src/screens/conditions/RangeOnline.ts index f38c4cae..5771b531 100644 --- a/screens/screenManager/src/screens/conditions/RangeOnline.ts +++ b/screens/screenManager/src/screens/conditions/RangeOnline.ts @@ -1,23 +1,14 @@ import { ConditionNumber } from "dc-screens-types"; -import { isRange } from "dc-ranges-types" +import { isRange } from "dc-ranges/types" import { logger } from "dc-logger"; +import { request } from "dc-endpoints"; +import { getRange } from "dc-ranges/endpoints"; export async function range_online(condition: ConditionNumber): Promise { - const rangeReq = await fetch(`http://ranges:80/api/ranges/${condition.number}`); - if (rangeReq.status !== 200) { - logger.warn("Failed to fetch online ranges"); - return false; - } - try { - const range = await rangeReq.json(); - if (!isRange(range)) { - logger.warn("Invalid range response"); - return false; - } - return range.active; - } - catch (e) { - logger.error(`Failed to parse range response: ${e}`); + const range = await request("http://ranges:80", getRange, { rangeId: condition.number.toString() }); + if (range.type === "error" || !range.body) { + logger.warn("Failed to fetch range"); return false; } + return range.body.active; } \ No newline at end of file diff --git a/screens/screenManager/src/screens/conditions/RangesFreeCount.ts b/screens/screenManager/src/screens/conditions/RangesFreeCount.ts index 5f3f8d63..49e735d2 100644 --- a/screens/screenManager/src/screens/conditions/RangesFreeCount.ts +++ b/screens/screenManager/src/screens/conditions/RangesFreeCount.ts @@ -1,21 +1,16 @@ import { ConditionMinMax } from "dc-screens-types"; import { logger } from "dc-logger"; +import { request } from "dc-endpoints"; +import { getFreeRanges } from "dc-ranges/endpoints"; export async function ranges_free_count(condition: ConditionMinMax): Promise { if (condition.min === null) condition.min = Number.MIN_SAFE_INTEGER; if (condition.max === null) condition.max = Number.MAX_SAFE_INTEGER; - const freeRanges = await fetch("http://ranges:80/api/ranges/free"); - if (freeRanges.status !== 200) { + const freeRanges = await request("http://ranges:80", getFreeRanges); + if (freeRanges.type === "error" || !freeRanges.body) { logger.warn("Failed to fetch free ranges"); return false; } - try { - const ranges = await freeRanges.json(); - return ranges.length >= condition.min && ranges.length <= condition.max; - } catch (e) { - logger.warn("Failed to parse ranges response"); - return false; - } - return true; + return freeRanges.body.length >= condition.min && freeRanges.body.length <= condition.max; } diff --git a/screens/screenManager/src/screens/conditions/RangesOnlineCount.ts b/screens/screenManager/src/screens/conditions/RangesOnlineCount.ts index dd8a1cbf..dd82fd51 100644 --- a/screens/screenManager/src/screens/conditions/RangesOnlineCount.ts +++ b/screens/screenManager/src/screens/conditions/RangesOnlineCount.ts @@ -1,21 +1,16 @@ import { ConditionMinMax } from "dc-screens-types"; import { logger } from "dc-logger"; +import { request } from "dc-endpoints"; +import { getActiveRanges } from "dc-ranges/endpoints"; export async function ranges_online_count(condition: ConditionMinMax): Promise { if (condition.min === null) condition.min = Number.MIN_SAFE_INTEGER; if (condition.max === null) condition.max = Number.MAX_SAFE_INTEGER; - const onlineRanges = await fetch("http://ranges:80/api/ranges/"); - if (onlineRanges.status !== 200) { - logger.warn("Failed to fetch online ranges"); - return false; - } - try { - const ranges = await onlineRanges.json(); - // Check if condition.min and condition.max are null - return ranges.length >= condition.min && ranges.length <= condition.max; - } catch (e) { - logger.warn("Failed to parse ranges response"); + const onlineRanges = await request("http://ranges:80", getActiveRanges); + if (onlineRanges.type === "error" || !onlineRanges.body) { + logger.warn("Failed to fetch online ranges"); return false; } + return onlineRanges.body.length >= condition.min && onlineRanges.body.length <= condition.max; } \ No newline at end of file diff --git a/screens/screenManager/src/screens/conditions/ShootMasterAvailable.ts b/screens/screenManager/src/screens/conditions/ShootMasterAvailable.ts index ec77ccef..aead18db 100644 --- a/screens/screenManager/src/screens/conditions/ShootMasterAvailable.ts +++ b/screens/screenManager/src/screens/conditions/ShootMasterAvailable.ts @@ -1,18 +1,14 @@ import { ConditionNone } from "dc-screens-types"; import { logger } from "dc-logger"; +import { request } from "dc-endpoints"; +import { getServerState } from "dc-server-state/endpoints"; export async function shootmaster_available(condition: ConditionNone): Promise { - const serverStateReq = await fetch("http://server-state:80/api/serverState"); - if (serverStateReq.status !== 200) { + const serverState = await request("http://server-state:80", getServerState); + + if (serverState.type === "error" || !serverState.body) { logger.warn("Failed to fetch server state"); return false; } - try { - const serverState = await serverStateReq.json(); - return serverState; - } - catch (e) { - logger.error(`Failed to parse server state: ${e}`); - return false; - } + return serverState.body; } \ No newline at end of file diff --git a/screens/types/package-lock.json b/screens/types/package-lock.json index a87fc1a1..7af6f7fb 100644 --- a/screens/types/package-lock.json +++ b/screens/types/package-lock.json @@ -9,11 +9,11 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", - "typescript": "~5.9.3" + "typescript": "~6.0.2" } }, "node_modules/@inquirer/external-editor": { @@ -44,39 +44,39 @@ "license": "MIT" }, "node_modules/@typia/core": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.1.tgz", - "integrity": "sha512-w7BZDLliZ4sJJW6WNN2cMhpLhKHghRELRZynCsfX1eFbQqsi3/lVtvpkTBSzEZXzuFJjb6VxyugB/e2gIZZeKw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.2.tgz", + "integrity": "sha512-FUrH0dVOx+hPn8TD+ROQYiMlt7Ztx21AfqRozrI2gE3+DlPOP5o9eC8Lu6SRRqc9eWl4/STTpzKFLXPrGZJmuQ==", "license": "MIT", "dependencies": { - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" } }, "node_modules/@typia/interface": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.1.tgz", - "integrity": "sha512-HUlNN6Iqq3LXecVCzoSdwTYIZ4dq7eYRbUsNREPvtM10Ej1J2dKIH6zCEl9Ey0tQhcAwexdbubfLOSUQQYCD5A==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.2.tgz", + "integrity": "sha512-PmUG624f6BSpNAJV0Gf0hwMSF29VSl8neArvxa+sPSq33ETGJZYrVhzqO67+n2LZCdzYmEdFbpNlr3jnyAl2aA==", "license": "MIT" }, "node_modules/@typia/transform": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.1.tgz", - "integrity": "sha512-SX4VCRPHTxRY3l99iU74yn8iqZIQ0DE4939n+XYoojKlvFVmTlg/OCMxsWq3xe6Qw19Vaa8bdcXGV4tx+TAlqw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.2.tgz", + "integrity": "sha512-vv5pLNY6e2Zyg5doqPv1vo+mTfovO8TAPt6bDfz1OCsgaWR/LjFfMB0ziAoCPP2ePF4WWuGUe+z9o9wdlXmegA==", "license": "MIT", "dependencies": { - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" } }, "node_modules/@typia/utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.1.tgz", - "integrity": "sha512-JIKsRhY4jxLtl/obttkR3vGp8d8hPysY6g0PUsIEDZ9/OO85OU7q8lYhu2GkZOJN/7htyqP+95GhpSNt2uELBQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.2.tgz", + "integrity": "sha512-LeiMdZbGnIXTwmJIYoW9ROmkbFRKQCFHNapodP23qx97ojIfF8FdFIez4or6JUnNEFTXKTKD4ITtHA/gpuE6sw==", "license": "MIT", "dependencies": { - "@typia/interface": "^12.0.1" + "@typia/interface": "^12.0.2" } }, "node_modules/ansi-escapes": { @@ -553,9 +553,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/log-symbols": { @@ -793,9 +793,9 @@ "license": "MIT" }, "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==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -915,9 +915,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -928,16 +928,16 @@ } }, "node_modules/typia": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.1.tgz", - "integrity": "sha512-meL2qpo6yYFj6wC5coz7T3XpQT9+UjdHErhw46jGfmLFJUq6Za74B0/KYMDRjLxF/0Fd63oVx6X3+MUlI1ZJcQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.2.tgz", + "integrity": "sha512-0RBUxrar8Hztee6gSdBPR1scDBJAPp3k0ut4C3H6ri8+D6nVnGmWvsrnl5fOxHdLDtCC/gxZ4rhp2ivf0jom+g==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/transform": "^12.0.1", - "@typia/utils": "^12.0.1", + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/transform": "^12.0.2", + "@typia/utils": "^12.0.2", "commander": "^10.0.0", "comment-json": "^4.2.3", "inquirer": "^8.2.5", diff --git a/screens/types/package.json b/screens/types/package.json index e513fc3a..e554a366 100644 --- a/screens/types/package.json +++ b/screens/types/package.json @@ -17,9 +17,9 @@ ], "devDependencies": { "ts-patch": "^3.3.0", - "typescript": "~5.9.3" + "typescript": "~6.0.2" }, "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" } } \ No newline at end of file diff --git a/ranges/types/package-lock.json b/serverState/contract/package-lock.json similarity index 86% rename from ranges/types/package-lock.json rename to serverState/contract/package-lock.json index fc4c54ff..65d1ff9b 100644 --- a/ranges/types/package-lock.json +++ b/serverState/contract/package-lock.json @@ -1,61 +1,100 @@ { - "name": "dc-ranges-types", + "name": "dc-serverstate", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "dc-ranges-types", + "name": "dc-serverstate", "version": "1.0.0", "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", "typescript": "~5.9.3" } }, - "node_modules/@standard-schema/spec": { + "../../lib/endpoints": { + "name": "dc-endpoints", "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "ISC", + "dependencies": { + "dc-logger": "file:../logger", + "express": "^5.2.1", + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" + }, + "devDependencies": { + "@types/express": "^5.0.6", + "@types/node": "^25.5.0", + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "license": "MIT" }, "node_modules/@typia/core": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.1.tgz", - "integrity": "sha512-w7BZDLliZ4sJJW6WNN2cMhpLhKHghRELRZynCsfX1eFbQqsi3/lVtvpkTBSzEZXzuFJjb6VxyugB/e2gIZZeKw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/core/-/core-12.0.2.tgz", + "integrity": "sha512-FUrH0dVOx+hPn8TD+ROQYiMlt7Ztx21AfqRozrI2gE3+DlPOP5o9eC8Lu6SRRqc9eWl4/STTpzKFLXPrGZJmuQ==", "license": "MIT", "dependencies": { - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" } }, "node_modules/@typia/interface": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.1.tgz", - "integrity": "sha512-HUlNN6Iqq3LXecVCzoSdwTYIZ4dq7eYRbUsNREPvtM10Ej1J2dKIH6zCEl9Ey0tQhcAwexdbubfLOSUQQYCD5A==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/interface/-/interface-12.0.2.tgz", + "integrity": "sha512-PmUG624f6BSpNAJV0Gf0hwMSF29VSl8neArvxa+sPSq33ETGJZYrVhzqO67+n2LZCdzYmEdFbpNlr3jnyAl2aA==", "license": "MIT" }, "node_modules/@typia/transform": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.1.tgz", - "integrity": "sha512-SX4VCRPHTxRY3l99iU74yn8iqZIQ0DE4939n+XYoojKlvFVmTlg/OCMxsWq3xe6Qw19Vaa8bdcXGV4tx+TAlqw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/transform/-/transform-12.0.2.tgz", + "integrity": "sha512-vv5pLNY6e2Zyg5doqPv1vo+mTfovO8TAPt6bDfz1OCsgaWR/LjFfMB0ziAoCPP2ePF4WWuGUe+z9o9wdlXmegA==", "license": "MIT", "dependencies": { - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/utils": "^12.0.1" + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/utils": "^12.0.2" } }, "node_modules/@typia/utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.1.tgz", - "integrity": "sha512-JIKsRhY4jxLtl/obttkR3vGp8d8hPysY6g0PUsIEDZ9/OO85OU7q8lYhu2GkZOJN/7htyqP+95GhpSNt2uELBQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@typia/utils/-/utils-12.0.2.tgz", + "integrity": "sha512-LeiMdZbGnIXTwmJIYoW9ROmkbFRKQCFHNapodP23qx97ojIfF8FdFIez4or6JUnNEFTXKTKD4ITtHA/gpuE6sw==", "license": "MIT", "dependencies": { - "@typia/interface": "^12.0.1" + "@typia/interface": "^12.0.2" } }, "node_modules/ansi-escapes": { @@ -175,9 +214,9 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "license": "MIT" }, "node_modules/cli-cursor": { @@ -250,26 +289,21 @@ } }, "node_modules/comment-json": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", - "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.6.2.tgz", + "integrity": "sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==", "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "esprima": "^4.0.1" }, "engines": { "node": ">= 6" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" + "node_modules/dc-endpoints": { + "resolved": "../../lib/endpoints", + "link": true }, "node_modules/defaults": { "version": "1.0.4", @@ -320,20 +354,6 @@ "node": ">=4" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -383,15 +403,6 @@ "node": ">=8" } }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -406,15 +417,19 @@ } }, "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==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { @@ -454,16 +469,16 @@ } }, "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "license": "MIT", "dependencies": { + "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", - "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", @@ -526,13 +541,13 @@ } }, "node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/kind-of": { @@ -546,9 +561,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/log-symbols": { @@ -630,15 +645,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/package-manager-detector": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", @@ -656,9 +662,9 @@ "license": "MIT" }, "node_modules/quansync": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", - "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", "funding": [ { "type": "individual", @@ -698,23 +704,14 @@ "node": ">= 6" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -795,9 +792,9 @@ "license": "MIT" }, "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==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -879,18 +876,6 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "license": "MIT" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/ts-patch": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.3.0.tgz", @@ -942,16 +927,16 @@ } }, "node_modules/typia": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.1.tgz", - "integrity": "sha512-meL2qpo6yYFj6wC5coz7T3XpQT9+UjdHErhw46jGfmLFJUq6Za74B0/KYMDRjLxF/0Fd63oVx6X3+MUlI1ZJcQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/typia/-/typia-12.0.2.tgz", + "integrity": "sha512-0RBUxrar8Hztee6gSdBPR1scDBJAPp3k0ut4C3H6ri8+D6nVnGmWvsrnl5fOxHdLDtCC/gxZ4rhp2ivf0jom+g==", "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", - "@typia/core": "^12.0.1", - "@typia/interface": "^12.0.1", - "@typia/transform": "^12.0.1", - "@typia/utils": "^12.0.1", + "@typia/core": "^12.0.2", + "@typia/interface": "^12.0.2", + "@typia/transform": "^12.0.2", + "@typia/utils": "^12.0.2", "commander": "^10.0.0", "comment-json": "^4.2.3", "inquirer": "^8.2.5", diff --git a/serverState/contract/package.json b/serverState/contract/package.json new file mode 100644 index 00000000..4cdd95b4 --- /dev/null +++ b/serverState/contract/package.json @@ -0,0 +1,40 @@ +{ + "name": "dc-server-state", + "version": "1.0.0", + "description": "", + "license": "ISC", + "author": "", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "prepare": "ts-patch install || true", + "build": "typia generate --input src --output generated --project tsconfig.json && tsc -p tsconfig.build.json && rm -rf generated" + }, + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + }, + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./types": { + "import": "./dist/types/index.js", + "require": "./dist/types/index.js", + "types": "./dist/types/index.d.ts" + }, + "./endpoints": { + "import": "./dist/endpoints/index.js", + "require": "./dist/endpoints/index.js", + "types": "./dist/endpoints/index.d.ts" + } + } +} \ No newline at end of file diff --git a/serverState/contract/src/endpoints/index.ts b/serverState/contract/src/endpoints/index.ts new file mode 100644 index 00000000..e1579050 --- /dev/null +++ b/serverState/contract/src/endpoints/index.ts @@ -0,0 +1,27 @@ +import { GetEndpoint, isEmpty } from "dc-endpoints"; +import { createIs } from "typia"; +import { AdvServerState, ServerCompatible } from "../types/index.js"; + +export const getServerState: GetEndpoint = { + method: "GET", + request: { + path: "/api/serverState", + isParams: isEmpty, + isQuery: isEmpty, + }, + response: { + isResponseBody: createIs(), + } +}; + +export const getFullServerState: GetEndpoint = { + method: "GET", + request: { + path: "/api/serverState/full", + isParams: isEmpty, + isQuery: isEmpty, + }, + response: { + isResponseBody: createIs(), + } +}; diff --git a/serverState/contract/src/index.ts b/serverState/contract/src/index.ts new file mode 100644 index 00000000..e69de29b diff --git a/serverState/src/types.ts b/serverState/contract/src/types/index.ts similarity index 78% rename from serverState/src/types.ts rename to serverState/contract/src/types/index.ts index 8dfb4e3a..a1f1b7ff 100644 --- a/serverState/src/types.ts +++ b/serverState/contract/src/types/index.ts @@ -1,8 +1,10 @@ +export type ServerCompatible = boolean; + export type AdvServerState = AdvServerStateOnline | AdvServerStateOffline; type AdvServerStateOnline = { online: true; - compatible: boolean; + compatible: ServerCompatible; version: string; services: { ssmdb2: boolean; diff --git a/serverState/contract/tsconfig.build.json b/serverState/contract/tsconfig.build.json new file mode 100644 index 00000000..f4aa50d0 --- /dev/null +++ b/serverState/contract/tsconfig.build.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2023", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "strict": true, + "outDir": "./dist", + "skipLibCheck": true, + "strictNullChecks": true + }, + "include": [ + "generated/**/*.ts" + ], + "exclude": [ + "src", + "node_modules", + "dist" + ] +} diff --git a/serverState/contract/tsconfig.json b/serverState/contract/tsconfig.json new file mode 100644 index 00000000..991cfe01 --- /dev/null +++ b/serverState/contract/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2023", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "strict": true, + "outDir": "./dist", + "plugins": [ + { + "transform": "typia/lib/transform" + } + ], + "skipLibCheck": true, + "strictNullChecks": true, + "importsNotUsedAsValues": "remove" + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/serverState/.dockerignore b/serverState/runner/.dockerignore similarity index 100% rename from serverState/.dockerignore rename to serverState/runner/.dockerignore diff --git a/serverState/Dockerfile b/serverState/runner/Dockerfile similarity index 75% rename from serverState/Dockerfile rename to serverState/runner/Dockerfile index 338fdd6d..ef0abe99 100644 --- a/serverState/Dockerfile +++ b/serverState/runner/Dockerfile @@ -19,6 +19,12 @@ COPY --from=logger . . RUN npm ci --loglevel=info && \ npm run build; +FROM deps-logger AS deps-endpoints +WORKDIR /app/lib/endpoints +COPY --from=endpoints . . +RUN npm ci --loglevel=info && \ + npm run build; + FROM base AS deps-local-db WORKDIR /app/lib/database/local COPY --from=local-db . . @@ -38,28 +44,36 @@ COPY --from=screen-types . . RUN npm ci --loglevel=info && \ npm run build; +FROM deps-endpoints AS deps-server-state-contract +WORKDIR /app/serverState/contract +COPY --from=server-state-contract . . +RUN npm ci --loglevel=info && \ + npm run build; + FROM base AS local-deps WORKDIR /app COPY --from=deps-logger /app/lib/logger /app/lib/logger +COPY --from=deps-endpoints /app/lib/endpoints /app/lib/endpoints COPY --from=deps-local-db /app/lib/database/local /app/lib/database/local COPY --from=deps-smdb /app/lib/database/smdb /app/lib/database/smdb +COPY --from=deps-server-state-contract /app/serverState/contract /app/serverState/contract COPY --from=deps-screens-types /app/screens/types /app/screens/types FROM local-deps AS deps -WORKDIR /app/checkServer +WORKDIR /app/serverState/runner COPY package.json package-lock.json ./ RUN npm i --omit=dev --loglevel=info --install-links; FROM local-deps AS build -WORKDIR /app/checkServer +WORKDIR /app/serverState/runner COPY package.json package-lock.json ./ RUN npm i --loglevel=info; -WORKDIR /app/checkServer +WORKDIR /app/serverState/runner COPY . . RUN npm run build && \ @@ -80,8 +94,8 @@ WORKDIR /app RUN adduser -D display-user && chown -R display-user /app USER display-user -COPY --from=build /app/checkServer/dist ./ -COPY --from=deps /app/checkServer/node_modules ./node_modules +COPY --from=build /app/serverState/runner/dist ./ +COPY --from=deps /app/serverState/runner/node_modules ./node_modules EXPOSE 80 diff --git a/serverState/docker-compose.yaml b/serverState/runner/docker-compose.yaml similarity index 79% rename from serverState/docker-compose.yaml rename to serverState/runner/docker-compose.yaml index 330adc5b..4a3f346d 100644 --- a/serverState/docker-compose.yaml +++ b/serverState/runner/docker-compose.yaml @@ -10,10 +10,12 @@ services: context: . dockerfile: Dockerfile additional_contexts: - - local-db=../lib/database/local - - smdb=../lib/database/smdb - - screen-types=../screens/types - - logger=../lib/logger + - local-db=../../lib/database/local + - smdb=../../lib/database/smdb + - screen-types=../../screens/types + - logger=../../lib/logger + - endpoints=../../lib/endpoints + - server-state-contract=../contract args: - MIN_SM_VERSION=${MIN_SM_VERSION} - MAX_SM_VERSION=${MAX_SM_VERSION} diff --git a/serverState/package-lock.json b/serverState/runner/package-lock.json similarity index 91% rename from serverState/package-lock.json rename to serverState/runner/package-lock.json index fc05b154..045417df 100644 --- a/serverState/package-lock.json +++ b/serverState/runner/package-lock.json @@ -1,20 +1,22 @@ { - "name": "dc-server-state", + "name": "dc-server-state-runner", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "dc-server-state", + "name": "dc-server-state-runner", "version": "1.0.0", "license": "ISC", "dependencies": { "amqplib": "^1.0.3", - "dc-db-local": "file:../lib/database/local", - "dc-db-smdb": "file:../lib/database/smdb", - "dc-logger": "file:../lib/logger", - "dc-screens-types": "file:../screens/types", - "dotenv": "^17.3.1", + "dc-db-local": "file:../../lib/database/local", + "dc-db-smdb": "file:../../lib/database/smdb", + "dc-endpoints": "file:../../lib/endpoints", + "dc-logger": "file:../../lib/logger", + "dc-screens-types": "file:../../screens/types", + "dc-server-state": "file:../contract", + "dotenv": "^17.4.0", "express": "^5.2.1", "semver": "^7.7.4", "socket.io": "^4.8.3" @@ -27,6 +29,94 @@ "typescript": "^5.9.3" } }, + "../../lib/database/local": { + "name": "dc-db-local", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@prisma/adapter-pg": "^7.6.0", + "@prisma/client": "^7.6.0", + "dotenv": "^17.4.0", + "pg": "^8.20.0" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "@types/pg": "^8.20.0", + "prisma": "^7.6.0", + "typescript": "^5.9.3" + } + }, + "../../lib/database/smdb": { + "name": "dc-db-smdb", + "version": "1.0.0", + "dependencies": { + "@prisma/adapter-mariadb": "^7.6.0", + "@prisma/client": "^7.6.0", + "dc-db-local": "file:../local", + "dotenv": "^17.4.0" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "prisma": "^7.6.0", + "typescript": "^5.9.3" + } + }, + "../../lib/endpoints": { + "name": "dc-endpoints", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-logger": "file:../logger", + "express": "^5.2.1", + "path-to-regexp": "^8.4.2", + "typia": "^12.0.2" + }, + "devDependencies": { + "@types/express": "^5.0.6", + "@types/node": "^25.5.0", + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../../lib/logger": { + "name": "dc-logger", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^17.4.0", + "pino": "^10.3.1", + "pino-pretty": "^13.1.3" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "typescript": "^5.9.3" + } + }, + "../../screens/types": { + "name": "dc-screens-types", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, + "../contract": { + "name": "dc-server-state", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dc-endpoints": "file:../../lib/endpoints", + "typia": "^12.0.2" + }, + "devDependencies": { + "ts-patch": "^3.3.0", + "typescript": "~5.9.3" + } + }, "../database/local": { "name": "dc-db-local", "version": "1.0.0", @@ -64,11 +154,12 @@ "../lib/database/local": { "name": "dc-db-local", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -81,11 +172,12 @@ "../lib/database/smdb": { "name": "dc-db-smdb", "version": "1.0.0", + "extraneous": true, "dependencies": { "@prisma/adapter-mariadb": "^7.6.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -96,9 +188,10 @@ "../lib/logger": { "name": "dc-logger", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -125,9 +218,10 @@ "../screens/types": { "name": "dc-screens-types", "version": "1.0.0", + "extraneous": true, "license": "ISC", "dependencies": { - "typia": "^12.0.1" + "typia": "^12.0.2" }, "devDependencies": { "ts-patch": "^3.3.0", @@ -306,9 +400,9 @@ } }, "node_modules/body-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", - "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -317,7 +411,7 @@ "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.0", + "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" }, @@ -426,19 +520,27 @@ } }, "node_modules/dc-db-local": { - "resolved": "../lib/database/local", + "resolved": "../../lib/database/local", "link": true }, "node_modules/dc-db-smdb": { - "resolved": "../lib/database/smdb", + "resolved": "../../lib/database/smdb", + "link": true + }, + "node_modules/dc-endpoints": { + "resolved": "../../lib/endpoints", "link": true }, "node_modules/dc-logger": { - "resolved": "../lib/logger", + "resolved": "../../lib/logger", "link": true }, "node_modules/dc-screens-types": { - "resolved": "../screens/types", + "resolved": "../../screens/types", + "link": true + }, + "node_modules/dc-server-state": { + "resolved": "../contract", "link": true }, "node_modules/debug": { @@ -468,9 +570,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -823,9 +925,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -977,12 +1079,13 @@ } }, "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==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", - "engines": { - "node": ">=16" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/proxy-addr": { @@ -1252,35 +1355,18 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/socket.io/node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", diff --git a/serverState/package.json b/serverState/runner/package.json similarity index 60% rename from serverState/package.json rename to serverState/runner/package.json index e725c4e7..a2e3adc1 100644 --- a/serverState/package.json +++ b/serverState/runner/package.json @@ -1,5 +1,5 @@ { - "name": "dc-server-state", + "name": "dc-server-state-runner", "version": "1.0.0", "main": "index.js", "scripts": { @@ -11,11 +11,13 @@ "description": "", "dependencies": { "amqplib": "^1.0.3", - "dc-db-local": "file:../lib/database/local", - "dc-db-smdb": "file:../lib/database/smdb", - "dc-logger": "file:../lib/logger", - "dc-screens-types": "file:../screens/types", - "dotenv": "^17.3.1", + "dc-db-local": "file:../../lib/database/local", + "dc-db-smdb": "file:../../lib/database/smdb", + "dc-logger": "file:../../lib/logger", + "dc-screens-types": "file:../../screens/types", + "dc-server-state": "file:../contract", + "dc-endpoints": "file:../../lib/endpoints", + "dotenv": "^17.4.0", "express": "^5.2.1", "semver": "^7.7.4", "socket.io": "^4.8.3" diff --git a/serverState/src/checkServer.ts b/serverState/runner/src/checkServer.ts similarity index 98% rename from serverState/src/checkServer.ts rename to serverState/runner/src/checkServer.ts index 9c60b5ce..5dc5a0ee 100644 --- a/serverState/src/checkServer.ts +++ b/serverState/runner/src/checkServer.ts @@ -1,6 +1,6 @@ import { execSync } from "child_process"; import { createLocalClient } from "dc-db-local"; -import { AdvServerState } from "./types"; +import { AdvServerState } from "dc-server-state/types"; import { logger } from "dc-logger"; import semver from "semver"; import dotenv from "dotenv"; diff --git a/serverState/src/index.ts b/serverState/runner/src/index.ts similarity index 95% rename from serverState/src/index.ts rename to serverState/runner/src/index.ts index b0d2932c..a293759c 100644 --- a/serverState/src/index.ts +++ b/serverState/runner/src/index.ts @@ -1,6 +1,6 @@ import { checkServerAvailable, checkServiceAvailability } from "./checkServer"; import { updateServerState } from "./webServer"; -import { AdvServerState } from "./types"; +import { AdvServerState } from "dc-server-state/types"; import { logger } from "dc-logger"; import amqp from "amqplib"; import { sendSystemScreen } from "./screens"; diff --git a/serverState/src/screens.ts b/serverState/runner/src/screens.ts similarity index 97% rename from serverState/src/screens.ts rename to serverState/runner/src/screens.ts index c2b41f84..2968c354 100644 --- a/serverState/src/screens.ts +++ b/serverState/runner/src/screens.ts @@ -1,4 +1,4 @@ -import { AdvServerState } from "./types"; +import { AdvServerState } from "dc-server-state/types"; import { logger } from "dc-logger"; import { Screen } from "dc-screens-types"; import amqp from "amqplib"; diff --git a/serverState/src/webServer.ts b/serverState/runner/src/webServer.ts similarity index 73% rename from serverState/src/webServer.ts rename to serverState/runner/src/webServer.ts index 0ad82f12..786c8fa9 100644 --- a/serverState/src/webServer.ts +++ b/serverState/runner/src/webServer.ts @@ -1,8 +1,10 @@ import express, { Request, Response, Express } from "express"; -import { AdvServerState } from "./types"; +import { AdvServerState } from "dc-server-state/types"; import { logger } from "dc-logger"; import http from "http"; import { Server as IOServer } from "socket.io"; +import { registerEndpoint } from "dc-endpoints"; +import { getFullServerState, getServerState } from "dc-server-state/endpoints"; const app: Express = express(); // HTTP server (used for both express and socket.io) @@ -16,12 +18,12 @@ let serverInf: AdvServerState = { online: false }; -app.get("/api/serverState", (req: Request, res: Response) => { - res.status(200).send(serverInf.online ? serverInf.compatible : false); +registerEndpoint(app, getServerState, async (params, query) => { + return serverInf.online ? serverInf.compatible : false; }); -app.get("/api/serverState/full", (req: Request, res: Response) => { - res.status(200).send(serverInf); +registerEndpoint(app, getFullServerState, async (params, query) => { + return serverInf; }); export function updateServerState(newServerInf: AdvServerState) { diff --git a/serverState/tsconfig.json b/serverState/runner/tsconfig.json similarity index 100% rename from serverState/tsconfig.json rename to serverState/runner/tsconfig.json diff --git a/syncTime/package-lock.json b/syncTime/package-lock.json index 4e520363..a52cfeae 100644 --- a/syncTime/package-lock.json +++ b/syncTime/package-lock.json @@ -12,7 +12,7 @@ "dc-db-local": "file:../lib/database/local", "dc-db-smdb": "file:../lib/database/smdb", "dc-logger": "file:../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "socket.io-client": "^4.8.3" }, "devDependencies": { @@ -61,7 +61,7 @@ "dependencies": { "@prisma/adapter-pg": "^7.6.0", "@prisma/client": "^7.6.0", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pg": "^8.20.0" }, "devDependencies": { @@ -78,7 +78,7 @@ "@prisma/adapter-mariadb": "^7.6.0", "@prisma/client": "^7.6.0", "dc-db-local": "file:../local", - "dotenv": "^17.3.1" + "dotenv": "^17.4.0" }, "devDependencies": { "@types/node": "^25.5.0", @@ -91,7 +91,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3" }, @@ -161,9 +161,9 @@ } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.0.tgz", + "integrity": "sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -233,18 +233,35 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", diff --git a/syncTime/package.json b/syncTime/package.json index f8853e2f..81f96525 100644 --- a/syncTime/package.json +++ b/syncTime/package.json @@ -18,7 +18,7 @@ "dc-db-local": "file:../lib/database/local", "dc-db-smdb": "file:../lib/database/smdb", "dc-logger": "file:../lib/logger", - "dotenv": "^17.3.1", + "dotenv": "^17.4.0", "socket.io-client": "^4.8.3" } } \ No newline at end of file diff --git a/utils/recorder/package-lock.json b/utils/recorder/package-lock.json index 1861a1f8..76e77627 100644 --- a/utils/recorder/package-lock.json +++ b/utils/recorder/package-lock.json @@ -12,10 +12,10 @@ "eventsource": "^4.1.0" }, "devDependencies": { - "@types/node": "^25.5.0", + "@types/node": "^25.5.2", "nodemon": "^3.1.14", "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "typescript": "^6.0.2" } }, "node_modules/@cspotcode/source-map-support": { @@ -88,9 +88,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "dev": true, "license": "MIT", "dependencies": { @@ -168,9 +168,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -244,9 +244,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -448,9 +448,9 @@ } }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -481,9 +481,9 @@ } }, "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==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -587,9 +587,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/utils/recorder/package.json b/utils/recorder/package.json index 885b8d2d..d9576dcc 100644 --- a/utils/recorder/package.json +++ b/utils/recorder/package.json @@ -15,9 +15,9 @@ "eventsource": "^4.1.0" }, "devDependencies": { - "@types/node": "^25.5.0", + "@types/node": "^25.5.2", "nodemon": "^3.1.14", "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "typescript": "^6.0.2" } }