diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9877589..6425b04 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,34 +1,17 @@ -name: Build and Test - -on: - push: - branches: - - main - pull_request: - branches: - - main - +name: build-lint +on: push jobs: build: runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' # Or your desired Node.js version - - - name: Install dependencies - run: npm install - - - name: Type check - run: npx tsc --build --noEmit - - - name: Build - run: npx vite build src/server - - - name: Test - run: npx vitest run --passWithNoTests + - name: checkout repo + uses: actions/checkout@v4 + - name: use node.js + uses: actions/setup-node@v4 + with: + node-version: '22.x' + - run: npm install + - run: npx eslint + - run: npm run type-check + - run: npm run build + - run: npm run test diff --git a/package-lock.json b/package-lock.json index d4a5dd5..27354df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,9 @@ "version": "0.0.0", "license": "BSD-3-Clause", "dependencies": { - "@devvit/shared-types": "0.12.22", - "@devvit/web": "0.12.22", + "@devvit/shared-types": "0.12.23", + "@devvit/start": "0.12.23", + "@devvit/web": "0.12.23", "@fsvreddit/fsv-devvit-web-helpers": "github:fsvreddit/fsv-devvit-web-helpers", "@hono/node-server": "^2.0.0", "cron-parser": "^5.5.0", @@ -25,7 +26,7 @@ "@types/json2md": "^1.5.4", "@types/luxon": "^3.7.1", "@types/pluralize": "^0.0.33", - "devvit": "0.12.22", + "devvit": "0.12.23", "eslint": "^10.0.0", "typescript": "5.8.3", "vitest": "^4.0.14" @@ -185,16 +186,16 @@ } }, "node_modules/@devvit/build-pack": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/build-pack/-/build-pack-0.12.22.tgz", - "integrity": "sha512-TCPs+dZcwWyVQDuAkG27KsrgXV+d4Yf7h1mpYS7KO3Kjot9vBZTSJOqor199iovhaonxwS196EwDR2PqwvNmqQ==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/build-pack/-/build-pack-0.12.23.tgz", + "integrity": "sha512-UWDeIl5awjr5wvyie+Diej1C8+es+jekzxQdBGowBRvOSsFPhpnbXlIYeusvJPOpFdW+/gqny61m3ftK6fD88Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@devvit/payments": "0.12.22", - "@devvit/protos": "0.12.22", - "@devvit/shared-types": "0.12.22", - "@devvit/splash": "0.12.22", + "@devvit/payments": "0.12.23", + "@devvit/protos": "0.12.23", + "@devvit/shared-types": "0.12.23", + "@devvit/splash": "0.12.23", "@types/node": "20.14.12", "esbuild": "0.25.9", "rxjs": "7.8.1", @@ -708,42 +709,42 @@ "license": "MIT" }, "node_modules/@devvit/builders": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/builders/-/builders-0.12.22.tgz", - "integrity": "sha512-gy79fHiiaITlPbSSMnONyM8tQff+5gQVYsBZzdD3iB4gxo+EKmylSaTAYrzrye6PR97lOSG+j2yyrSSwtRR4/A==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/builders/-/builders-0.12.23.tgz", + "integrity": "sha512-UUyag26FcqYesZu3g6ua8MxCbVeCFBbNQkEZ9UQBGzWH3Ln8+V9JXF+QjHJpxZtDqrmzPJmpYnTMdTkUrDHYjg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@devvit/build-pack": "0.12.22", - "@devvit/linkers": "0.12.22", - "@devvit/protos": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/build-pack": "0.12.23", + "@devvit/linkers": "0.12.23", + "@devvit/protos": "0.12.23", + "@devvit/shared-types": "0.12.23" } }, "node_modules/@devvit/cache": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/cache/-/cache-0.12.22.tgz", - "integrity": "sha512-0bZTuVxWwwdVNx1BEREBWDak53l/fm7LlSd/FnkZi/6lPMEn73WO1/06nphgYlgwcocjAWsAcrGP5mzJXReuNg==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/cache/-/cache-0.12.23.tgz", + "integrity": "sha512-Klk6ndFqitylzLB6P9Nzou4a9jUFqXDH02pyFVe0HUXWGnmVtZc72cQUbkt9g1J59E4SlKCPg1m721PqEua/Hw==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/redis": "0.12.22", - "@devvit/server": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/redis": "0.12.23", + "@devvit/server": "0.12.23", + "@devvit/shared-types": "0.12.23" } }, "node_modules/@devvit/cli": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/cli/-/cli-0.12.22.tgz", - "integrity": "sha512-hWOS0JetsHME0Wksb88qWAcjpmf0jhVej5T8oASgVpwlHpg98sE4MFKigCBr4MDlAYlq70W6ToDfd0T9BCqRjw==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/cli/-/cli-0.12.23.tgz", + "integrity": "sha512-R0WnnXDxoDs4HVipdciptDG2/fBwi4syQkgECH/JZI5JjWFcr2fdkH45TV7n12MjwBUhlayx3RbXqZFs2FOaSA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@devvit/build-pack": "0.12.22", - "@devvit/builders": "0.12.22", - "@devvit/linkers": "0.12.22", - "@devvit/protos": "0.12.22", - "@devvit/public-api": "0.12.22", - "@devvit/shared-types": "0.12.22", + "@devvit/build-pack": "0.12.23", + "@devvit/builders": "0.12.23", + "@devvit/linkers": "0.12.23", + "@devvit/protos": "0.12.23", + "@devvit/public-api": "0.12.23", + "@devvit/shared-types": "0.12.23", "@improbable-eng/grpc-web": "0.15.0", "@improbable-eng/grpc-web-node-http-transport": "0.15.0", "@oclif/core": "2.9.4", @@ -810,79 +811,79 @@ } }, "node_modules/@devvit/client": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/client/-/client-0.12.22.tgz", - "integrity": "sha512-8+CECi8yD+F4BPHpwjVRMS97SRp45Lr4Ys/vO+scwwDkr0xHrxlPxtcTKxcu90T9sZiONvMTkQpL/HowjXfzFw==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/client/-/client-0.12.23.tgz", + "integrity": "sha512-abkYfG1MqXD/WYG6MdeIfp8u3Rv3VTzhd47mGSHplGps2X6AAXBKUn1wzGb2WDunV30ATP4Suv4gIv4QrxJaFQ==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22", - "@devvit/web-view-scripts": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23", + "@devvit/web-view-scripts": "0.12.23" } }, "node_modules/@devvit/linkers": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/linkers/-/linkers-0.12.22.tgz", - "integrity": "sha512-Br4dxFJLuS6vdA0IiJ5VUAoYtn815+BHgFd67MakTmobKtqa1d0zBO2WHSOFbpeRX05I18jgMBxxTtHp3exItw==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/linkers/-/linkers-0.12.23.tgz", + "integrity": "sha512-sNfeb4SHMsUG0EjsN3pQtu0xGwRKwXznHeyNS7yx5LLdA2/7n5RLyTjW6loKcd2vv1U1xP4pA1iruHgC7b9+CQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@devvit/build-pack": "0.12.22", - "@devvit/protos": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/build-pack": "0.12.23", + "@devvit/protos": "0.12.23", + "@devvit/shared-types": "0.12.23" } }, "node_modules/@devvit/media": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/media/-/media-0.12.22.tgz", - "integrity": "sha512-vxguK96jDzdGpfbMgypWtpjf22fddCAut1sPPqjZ1rp4xTH9kCFRPsv9CsB+1mGr0LFim/EUy3gLVSyKPi8OMQ==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/media/-/media-0.12.23.tgz", + "integrity": "sha512-7jUBWfWWTQEU5um/y8TAPf6aRS49Tdo8phgAI70eh4GC7jgTfEiAHmiimdy9ido63rrfAsheBGQ5oTlSGMn6KQ==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22" + "@devvit/protos": "0.12.23" }, "peerDependencies": { "@devvit/server": "*" } }, "node_modules/@devvit/metrics": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/metrics/-/metrics-0.12.22.tgz", - "integrity": "sha512-Q3QuOy9YlF5twGli5sG5t3mTnxkWMDpH9AjJpJn5hKd0WA9MhjQGeeJ9shgJ+zV4OrFxl5PWYMpbJDmR1i19Zg==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/metrics/-/metrics-0.12.23.tgz", + "integrity": "sha512-6rkQmUgva9XzKetZu/3DMElY2dBNkhzZVi5C19yaTwHY7VWZYMiArVGEpgqVtavch/Xid6sW35a8BOEVBucx/A==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22" + "@devvit/protos": "0.12.23" } }, "node_modules/@devvit/notifications": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/notifications/-/notifications-0.12.22.tgz", - "integrity": "sha512-9whWZ1IPP0vY6x1h/7YcHv1mvanrqFrPTD4BqCX2cFEGUr9Wi8fQBQSFGKDB4CwCioscKvCO5w5oIyNckwpFMA==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/notifications/-/notifications-0.12.23.tgz", + "integrity": "sha512-BFXkdUwBaUWEw/zIY5EWRgkl6xmJw+MFRcDmuQXCK4ejgxZ0f0oJa3D11LWC5T8/Zs2qqrccycsdcPCfQf36dw==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/shared-types": "0.12.23" }, "peerDependencies": { "@devvit/server": "*" } }, "node_modules/@devvit/payments": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/payments/-/payments-0.12.22.tgz", - "integrity": "sha512-ynyw59PxUIPDtQx1q/KBXKJgdS2gn5WbhkMeqOZJaPUBJtNM8RSkhCmqPSKEosh/zxi/UQv0IzSRvSFBvjeTsA==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/payments/-/payments-0.12.23.tgz", + "integrity": "sha512-mdxjTao2oaY2ydQKAmtYGLq3lHS8UuZtYpJPE7WfumsH+Cot04ApuGgsfoP3jl9HNabbeuN2TVd7rtoGgUcWBA==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/public-api": "0.12.22", - "@devvit/server": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/public-api": "0.12.23", + "@devvit/server": "0.12.23", + "@devvit/shared-types": "0.12.23" } }, "node_modules/@devvit/protos": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/protos/-/protos-0.12.22.tgz", - "integrity": "sha512-yOSO1JwvROJMNUHFeAJp+JyUBldP5+1e5tebHxZQeDN4+LVWUSQDAcVOM4Ru9V0Ukk2N/TJ6tI88xDNQWApfpw==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/protos/-/protos-0.12.23.tgz", + "integrity": "sha512-p0KP/c3Bv0gn6/qhtfq93kOadQvyDE6jN77y6BD5KzUQAOGtNgglvWP3fx+O6NyIecC+Tx83Pt8x2TP7o6sQ5A==", "license": "BSD-3-Clause", "dependencies": { "protobufjs": "7.5.4", @@ -898,15 +899,15 @@ } }, "node_modules/@devvit/public-api": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/public-api/-/public-api-0.12.22.tgz", - "integrity": "sha512-3xxsGISpJ5ZoTyFf+K/uFA5/jBQI7+YJ/gFY/JjUXirwMn4CdMo1YT9cb+EyIr+RGKu7/+IB0ZupYJ3Cu8FNVA==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/public-api/-/public-api-0.12.23.tgz", + "integrity": "sha512-/aDX/3fswUk11ACbD0/ifipC5YPMzXeKqjD4741ZkXmo8Zu7LacqQAT+OXNDuHqZTayvbJemuHfXHOJ8SAPXyg==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/metrics": "0.12.22", - "@devvit/protos": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22", + "@devvit/metrics": "0.12.23", + "@devvit/protos": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23", "base64-js": "1.5.1", "clone-deep": "4.0.1", "jwt-decode": "4.0.0", @@ -914,14 +915,14 @@ } }, "node_modules/@devvit/realtime": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/realtime/-/realtime-0.12.22.tgz", - "integrity": "sha512-YP0ykfFkqDVjjPJCHx9NA1ZEGrD3Yo+TGmRkHrZ7O3bX6/mLAJX4V7IBgwKopgK/CHR5VGXmbEAwnhAbo1Sgew==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/realtime/-/realtime-0.12.23.tgz", + "integrity": "sha512-6kt0PZV3+Oh+RxpONvH3ixdw3LkYISD3H+XlnPO5+lzGOjOXiBvzsaXRszggTWmjagCkfn5B+nttdWDEzZ4sEQ==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22", + "@devvit/protos": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23", "rxjs": "7.8.1" }, "peerDependencies": { @@ -930,133 +931,146 @@ } }, "node_modules/@devvit/reddit": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/reddit/-/reddit-0.12.22.tgz", - "integrity": "sha512-RCihEA+6AXKzalOkWzefdATSOsSowHCYz+rERKf5m1d1nzL2iFPwpTp/ka7AnlqpeKnVmRXIimLasYHp2VHZpQ==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/reddit/-/reddit-0.12.23.tgz", + "integrity": "sha512-/wepE3JajkhTqWo2d1BOA9bIcozUACDxPqxusb7SyLanDGxDPMbZPp+oVOIgZLUl0TlDYXROGNLT4kRzZbleZA==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/public-api": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22", - "@devvit/splash": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/public-api": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23", + "@devvit/splash": "0.12.23" }, "peerDependencies": { "@devvit/server": "*" } }, "node_modules/@devvit/redis": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/redis/-/redis-0.12.22.tgz", - "integrity": "sha512-QFEQMPcV2Zkh7w0VirVjh7GjfyjgsjQgxy0Gvz80E/vTLYFrNZGoulOB17rq8QIrgleO1SN+DejOJ6TCliAmrQ==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/redis/-/redis-0.12.23.tgz", + "integrity": "sha512-hkIXlQuohwDDLCJk2xVuTb/ds4FZsT6b2kHC2YnHVhPSlr9MXPzKgVQdLy8LbUtA+yB4PzFufGQ8VLYJUHABmw==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/shared-types": "0.12.23" }, "peerDependencies": { "@devvit/server": "*" } }, "node_modules/@devvit/scheduler": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/scheduler/-/scheduler-0.12.22.tgz", - "integrity": "sha512-q07K/lKYOduAGPi6fcBxLNEeyJIkgiDC6tPYZW3n+aNa2oI8i1VcwYUmGzI3N2GEZLvtg2hnye0g4ILENzyB9Q==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/scheduler/-/scheduler-0.12.23.tgz", + "integrity": "sha512-W12glo+6xbYk6HhMHqr66DDyYEORY94OWwUIz5SKKHgc9RxAMcPL3ZkzvnGIC0yROQl/nQy1fjVgVFadBm6Zyw==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23" }, "peerDependencies": { "@devvit/server": "*" } }, "node_modules/@devvit/server": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/server/-/server-0.12.22.tgz", - "integrity": "sha512-/SXPLAiKOZtgOGGPQNnFT11l4ysIVLQWrNnrN1vUpUicf5QjGC9cAuBLYGYeuIqNSNLqsilxTFDkkAOYFhm4YQ==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/server/-/server-0.12.23.tgz", + "integrity": "sha512-HLopZXOIY+h3oCY0k2GYfVkLvc1bF5MjiQ6Zyx2hAJ2Tz7CY8+q5QHsBQsBtgHZKDUJsImBadZFpLb1skIlGRQ==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/public-api": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/public-api": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23" } }, "node_modules/@devvit/settings": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/settings/-/settings-0.12.22.tgz", - "integrity": "sha512-I3v9uuiK4ht7xL6YsRBGVG2fRGZAVUE8B+1kmhcSr3TVBglPx85o3KTfSSbYK9CIC7WEBrRUpcEYAUqjTff/eA==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/settings/-/settings-0.12.23.tgz", + "integrity": "sha512-87b4db6Jh9iWhTmo26AzbLlQGS/3Pd8x30ZAUENfXopmWhN85xX12zEkqJCat+Thvxpoia+1AIsJJ9e8gNNszA==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23" }, "peerDependencies": { "@devvit/server": "*" } }, "node_modules/@devvit/shared": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/shared/-/shared-0.12.22.tgz", - "integrity": "sha512-IuIZXVqlMHwgXppQgsWBXk1n8kj7uP2yQUvsaqjc55XBeSPp+kXRqk4FgncnwZercwumBwouyLBIJf8NqCD70A==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/shared/-/shared-0.12.23.tgz", + "integrity": "sha512-3wNqpdNeC1MWtn+Y82HXE+k52jX1FW/HtQaTUJ1kWsxTvMJgwNRrehM3hVt7DtTi917TP1S1tdFIDp0Yfjb+bw==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared-types": "0.12.22" + "@devvit/protos": "0.12.23", + "@devvit/shared-types": "0.12.23" } }, "node_modules/@devvit/shared-types": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/shared-types/-/shared-types-0.12.22.tgz", - "integrity": "sha512-IUI8ktugpmdYJKJeptmhLjv9oLToWDs1aeP0ELC0x6wFpixQvYp3GohE2hBmM/dXpzbWamAmu7H9dBIHvtaYVQ==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/shared-types/-/shared-types-0.12.23.tgz", + "integrity": "sha512-uwgnTNKTcDUlGDdVoG/f3WvKxuM1b4cy0s+pGg2stoEYcG5p8aW/AAlkrh5GMfE0RayY5mqFY4Komd6CVzePzA==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", + "@devvit/protos": "0.12.23", "jsonschema": "1.4.1", "uuid": "14.0.0" } }, "node_modules/@devvit/splash": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/splash/-/splash-0.12.22.tgz", - "integrity": "sha512-UjTIvKccN3D+9tPNL9NPxw6L9ietpAZVpoN8GiJmCzpLKRxO6OiWA87KJ0HCVUIaCPHJeFyx0PmsFG+ns6IQ3w==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/splash/-/splash-0.12.23.tgz", + "integrity": "sha512-XN+VYpuy79dbGjnW2Xsy7ZMiGs/xNzHIadhr7kXh2pvrTCFttYQG9f8FIAHOLQpf4MT6yGAOaLaFeBVxTPqlpg==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/public-api": "0.12.22" + "@devvit/public-api": "0.12.23" + } + }, + "node_modules/@devvit/start": { + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/start/-/start-0.12.23.tgz", + "integrity": "sha512-vFtX+t58ge0Fknu+mHTLPl9tJJudFd90sVVW+yYtPUstsc9qFrJ2EsOy71TCSo7HFYfdXXxrtLI7cFxtOrYxpg==", + "license": "BSD-3-Clause", + "dependencies": { + "@devvit/shared-types": "0.12.23", + "chalk": "4.1.2" + }, + "peerDependencies": { + "vite": ">=6.0.0" } }, "node_modules/@devvit/web": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/web/-/web-0.12.22.tgz", - "integrity": "sha512-75N/Kt21Iji/XJ9wv8Y/KIT598rfiBOgay5B0n3GMxcRfnb0Yk5a4BZzRcNlVAck1hkCaQ2inFkW8CQax3Kh4w==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/web/-/web-0.12.23.tgz", + "integrity": "sha512-IVnmWRZ4QbUHV3VonMaxow0cuygNPFfQbVw2JjWII3uRgWyB5nXEvei043RK0jJaJHzB3WehFetbXKHZqYIvcA==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/cache": "0.12.22", - "@devvit/client": "0.12.22", - "@devvit/media": "0.12.22", - "@devvit/notifications": "0.12.22", - "@devvit/payments": "0.12.22", - "@devvit/realtime": "0.12.22", - "@devvit/reddit": "0.12.22", - "@devvit/redis": "0.12.22", - "@devvit/scheduler": "0.12.22", - "@devvit/server": "0.12.22", - "@devvit/settings": "0.12.22", - "@devvit/shared": "0.12.22" + "@devvit/cache": "0.12.23", + "@devvit/client": "0.12.23", + "@devvit/media": "0.12.23", + "@devvit/notifications": "0.12.23", + "@devvit/payments": "0.12.23", + "@devvit/realtime": "0.12.23", + "@devvit/reddit": "0.12.23", + "@devvit/redis": "0.12.23", + "@devvit/scheduler": "0.12.23", + "@devvit/server": "0.12.23", + "@devvit/settings": "0.12.23", + "@devvit/shared": "0.12.23" } }, "node_modules/@devvit/web-view-scripts": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/@devvit/web-view-scripts/-/web-view-scripts-0.12.22.tgz", - "integrity": "sha512-uJG403L0BKUDnBMsdLnU+nWrpDkjnkojQvIWblqBHPzb7R1XKXLe9oK+rvmKVZbgGs63GlR1dahj3D4BqCGE+g==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@devvit/web-view-scripts/-/web-view-scripts-0.12.23.tgz", + "integrity": "sha512-ZM9YzfBOQbVlry0QJOEXIUxl1gV+arcvFnsmk1nmcVai29Hwzzq0Ct1YpFB3sxUI8cUcSzAnud7LGgtPdtc1aQ==", "license": "BSD-3-Clause", "dependencies": { - "@devvit/protos": "0.12.22", - "@devvit/shared": "0.12.22", - "@devvit/shared-types": "0.12.22", + "@devvit/protos": "0.12.23", + "@devvit/shared": "0.12.23", + "@devvit/shared-types": "0.12.23", "html-to-image": "1.11.13", "jwt-decode": "4.0.0" } @@ -1441,6 +1455,22 @@ "node": ">=12.0.0" } }, + "node_modules/@oclif/color/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@oclif/core": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/@oclif/core/-/core-2.9.4.tgz", @@ -1507,6 +1537,22 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@oclif/core/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@oclif/plugin-autocomplete": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-2.3.3.tgz", @@ -1571,9 +1617,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.128.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.128.0.tgz", - "integrity": "sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==", + "version": "0.129.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.129.0.tgz", + "integrity": "sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -1676,9 +1722,9 @@ "license": "BSD-3-Clause" }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.18.tgz", - "integrity": "sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0.tgz", + "integrity": "sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==", "cpu": [ "arm64" ], @@ -1692,9 +1738,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.18.tgz", - "integrity": "sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0.tgz", + "integrity": "sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==", "cpu": [ "arm64" ], @@ -1708,9 +1754,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.18.tgz", - "integrity": "sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0.tgz", + "integrity": "sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==", "cpu": [ "x64" ], @@ -1724,9 +1770,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.18.tgz", - "integrity": "sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0.tgz", + "integrity": "sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==", "cpu": [ "x64" ], @@ -1740,9 +1786,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.18.tgz", - "integrity": "sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0.tgz", + "integrity": "sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==", "cpu": [ "arm" ], @@ -1756,9 +1802,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.18.tgz", - "integrity": "sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0.tgz", + "integrity": "sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==", "cpu": [ "arm64" ], @@ -1772,9 +1818,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.18.tgz", - "integrity": "sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0.tgz", + "integrity": "sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==", "cpu": [ "arm64" ], @@ -1788,9 +1834,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.18.tgz", - "integrity": "sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0.tgz", + "integrity": "sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==", "cpu": [ "ppc64" ], @@ -1804,9 +1850,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.18.tgz", - "integrity": "sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0.tgz", + "integrity": "sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==", "cpu": [ "s390x" ], @@ -1820,9 +1866,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.18.tgz", - "integrity": "sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0.tgz", + "integrity": "sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==", "cpu": [ "x64" ], @@ -1836,9 +1882,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.18.tgz", - "integrity": "sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0.tgz", + "integrity": "sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==", "cpu": [ "x64" ], @@ -1852,9 +1898,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.18.tgz", - "integrity": "sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0.tgz", + "integrity": "sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==", "cpu": [ "arm64" ], @@ -1868,9 +1914,9 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.18.tgz", - "integrity": "sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0.tgz", + "integrity": "sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==", "cpu": [ "wasm32" ], @@ -1886,9 +1932,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.18.tgz", - "integrity": "sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0.tgz", + "integrity": "sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==", "cpu": [ "arm64" ], @@ -1902,9 +1948,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.18.tgz", - "integrity": "sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0.tgz", + "integrity": "sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==", "cpu": [ "x64" ], @@ -1918,9 +1964,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.18.tgz", - "integrity": "sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0.tgz", + "integrity": "sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==", "license": "MIT" }, "node_modules/@sec-ant/readable-stream": { @@ -2098,12 +2144,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.2.tgz", - "integrity": "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw==", + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.7.0.tgz", + "integrity": "sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==", "license": "MIT", "dependencies": { - "undici-types": "~7.19.0" + "undici-types": "~7.21.0" } }, "node_modules/@types/pluralize": { @@ -2124,17 +2170,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.2.tgz", - "integrity": "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz", + "integrity": "sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/type-utils": "8.59.2", - "@typescript-eslint/utils": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/type-utils": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -2147,22 +2193,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.59.2", + "@typescript-eslint/parser": "^8.59.3", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.2.tgz", - "integrity": "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.3.tgz", + "integrity": "sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", "debug": "^4.4.3" }, "engines": { @@ -2178,14 +2224,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.2.tgz", - "integrity": "sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.3.tgz", + "integrity": "sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.2", - "@typescript-eslint/types": "^8.59.2", + "@typescript-eslint/tsconfig-utils": "^8.59.3", + "@typescript-eslint/types": "^8.59.3", "debug": "^4.4.3" }, "engines": { @@ -2200,14 +2246,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.2.tgz", - "integrity": "sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz", + "integrity": "sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2" + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2218,9 +2264,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.2.tgz", - "integrity": "sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz", + "integrity": "sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==", "dev": true, "license": "MIT", "engines": { @@ -2235,15 +2281,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.2.tgz", - "integrity": "sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz", + "integrity": "sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/utils": "8.59.2", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -2260,9 +2306,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz", - "integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.3.tgz", + "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", "dev": true, "license": "MIT", "engines": { @@ -2274,16 +2320,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.2.tgz", - "integrity": "sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.3.tgz", + "integrity": "sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.59.2", - "@typescript-eslint/tsconfig-utils": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", + "@typescript-eslint/project-service": "8.59.3", + "@typescript-eslint/tsconfig-utils": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -2302,16 +2348,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.2.tgz", - "integrity": "sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.3.tgz", + "integrity": "sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2" + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2326,13 +2372,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.2.tgz", - "integrity": "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.3.tgz", + "integrity": "sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/types": "8.59.3", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2388,16 +2434,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz", - "integrity": "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.6.tgz", + "integrity": "sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.5", - "@vitest/utils": "4.1.5", + "@vitest/spy": "4.1.6", + "@vitest/utils": "4.1.6", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" }, @@ -2406,13 +2452,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.5.tgz", - "integrity": "sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.6.tgz", + "integrity": "sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.1.5", + "@vitest/spy": "4.1.6", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -2433,9 +2479,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.5.tgz", - "integrity": "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.6.tgz", + "integrity": "sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw==", "dev": true, "license": "MIT", "dependencies": { @@ -2446,13 +2492,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.5.tgz", - "integrity": "sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.6.tgz", + "integrity": "sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.1.5", + "@vitest/utils": "4.1.6", "pathe": "^2.0.3" }, "funding": { @@ -2460,14 +2506,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.5.tgz", - "integrity": "sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.6.tgz", + "integrity": "sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.5", - "@vitest/utils": "4.1.5", + "@vitest/pretty-format": "4.1.6", + "@vitest/utils": "4.1.6", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -2476,9 +2522,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.5.tgz", - "integrity": "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.6.tgz", + "integrity": "sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg==", "dev": true, "license": "MIT", "funding": { @@ -2486,13 +2532,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.5.tgz", - "integrity": "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.6.tgz", + "integrity": "sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.1.5", + "@vitest/pretty-format": "4.1.6", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" }, @@ -2593,7 +2639,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2948,7 +2993,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2961,19 +3005,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/char-regex": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", @@ -3122,7 +3153,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3135,7 +3165,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -3426,13 +3455,13 @@ } }, "node_modules/devvit": { - "version": "0.12.22", - "resolved": "https://registry.npmjs.org/devvit/-/devvit-0.12.22.tgz", - "integrity": "sha512-Hysq1OMYcBi8MtOKVfrKWbfsJmj2QceQBkhHx6jTD7+OWtZF+QvaTs/nc7bPGvmfd0L8RJxrKyXjOcdSMcDOoA==", + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/devvit/-/devvit-0.12.23.tgz", + "integrity": "sha512-V/KgjUc0ZDZFYjYnknkdNxC5Op1dg9RsAYcsIBMEmRJjrAMVRFgoEMAs7G2oM/sR0bpnDp+sa9gbMug5A3WcgQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@devvit/cli": "0.12.22" + "@devvit/cli": "0.12.23" }, "bin": { "devvit": "bin/devvit.js" @@ -4443,7 +4472,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6731,13 +6759,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.18", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.18.tgz", - "integrity": "sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0.tgz", + "integrity": "sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.128.0", - "@rolldown/pluginutils": "1.0.0-rc.18" + "@oxc-project/types": "=0.129.0", + "@rolldown/pluginutils": "1.0.0" }, "bin": { "rolldown": "bin/cli.mjs" @@ -6746,21 +6774,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.18", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.18", - "@rolldown/binding-darwin-x64": "1.0.0-rc.18", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.18", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.18", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.18", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.18", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.18", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.18", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.18", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.18", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.18", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.18", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.18", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18" + "@rolldown/binding-android-arm64": "1.0.0", + "@rolldown/binding-darwin-arm64": "1.0.0", + "@rolldown/binding-darwin-x64": "1.0.0", + "@rolldown/binding-freebsd-x64": "1.0.0", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0", + "@rolldown/binding-linux-arm64-gnu": "1.0.0", + "@rolldown/binding-linux-arm64-musl": "1.0.0", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0", + "@rolldown/binding-linux-s390x-gnu": "1.0.0", + "@rolldown/binding-linux-x64-gnu": "1.0.0", + "@rolldown/binding-linux-x64-musl": "1.0.0", + "@rolldown/binding-openharmony-arm64": "1.0.0", + "@rolldown/binding-wasm32-wasi": "1.0.0", + "@rolldown/binding-win32-arm64-msvc": "1.0.0", + "@rolldown/binding-win32-x64-msvc": "1.0.0" } }, "node_modules/rrweb-cssom": { @@ -7217,19 +7245,15 @@ } }, "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/supports-hyperlinks": { @@ -7246,19 +7270,6 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -7616,16 +7627,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.2.tgz", - "integrity": "sha512-pJw051uomb3ZeCzGTpRb8RbEqB5Y4WWet8gl/GcTlU35BSx0PVdZ86/bqkQCyKKuraVQEK7r6kBHQXF+fBhkoQ==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.3.tgz", + "integrity": "sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.59.2", - "@typescript-eslint/parser": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/utils": "8.59.2" + "@typescript-eslint/eslint-plugin": "8.59.3", + "@typescript-eslint/parser": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7653,9 +7664,9 @@ } }, "node_modules/undici-types": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", - "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.21.0.tgz", + "integrity": "sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==", "license": "MIT" }, "node_modules/unicorn-magic": { @@ -7730,15 +7741,15 @@ "license": "MIT" }, "node_modules/vite": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.11.tgz", - "integrity": "sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==", + "version": "8.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.12.tgz", + "integrity": "sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==", "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.14", - "rolldown": "1.0.0-rc.18", + "rolldown": "1.0.0", "tinyglobby": "^0.2.16" }, "bin": { @@ -7807,19 +7818,19 @@ } }, "node_modules/vitest": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.5.tgz", - "integrity": "sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.6.tgz", + "integrity": "sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.5", - "@vitest/mocker": "4.1.5", - "@vitest/pretty-format": "4.1.5", - "@vitest/runner": "4.1.5", - "@vitest/snapshot": "4.1.5", - "@vitest/spy": "4.1.5", - "@vitest/utils": "4.1.5", + "@vitest/expect": "4.1.6", + "@vitest/mocker": "4.1.6", + "@vitest/pretty-format": "4.1.6", + "@vitest/runner": "4.1.6", + "@vitest/snapshot": "4.1.6", + "@vitest/spy": "4.1.6", + "@vitest/utils": "4.1.6", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", @@ -7847,12 +7858,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.5", - "@vitest/browser-preview": "4.1.5", - "@vitest/browser-webdriverio": "4.1.5", - "@vitest/coverage-istanbul": "4.1.5", - "@vitest/coverage-v8": "4.1.5", - "@vitest/ui": "4.1.5", + "@vitest/browser-playwright": "4.1.6", + "@vitest/browser-preview": "4.1.6", + "@vitest/browser-webdriverio": "4.1.6", + "@vitest/coverage-istanbul": "4.1.6", + "@vitest/coverage-v8": "4.1.6", + "@vitest/ui": "4.1.6", "happy-dom": "*", "jsdom": "*", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" diff --git a/package.json b/package.json index 10806e7..8ab1f2e 100644 --- a/package.json +++ b/package.json @@ -5,18 +5,19 @@ "license": "BSD-3-Clause", "type": "module", "scripts": { + "build": "vite build", + "deploy": "npm run type-check && npm run lint && npm run test && devvit upload", + "dev": "devvit playtest", + "launch": "npm run deploy && devvit publish", + "lint": "eslint \"src/**/*.{ts,tsx}\"", "login": "devvit login", - "type-check": "tsc --build --noEmit", - "build": "cd src/server && vite build", - "test": "cd src/server && npx vitest run --passWithNoTests", - "playtest": "devvit playtest", - "deploy": "devvit upload", - "publish": "devvit publish", - "logs": "devvit logs" + "test": "vitest run --config vitest.config.ts", + "type-check": "tsc --build" }, "dependencies": { - "@devvit/shared-types": "0.12.22", - "@devvit/web": "0.12.22", + "@devvit/start": "0.12.23", + "@devvit/shared-types": "0.12.23", + "@devvit/web": "0.12.23", "@fsvreddit/fsv-devvit-web-helpers": "github:fsvreddit/fsv-devvit-web-helpers", "@hono/node-server": "^2.0.0", "cron-parser": "^5.5.0", @@ -31,7 +32,7 @@ "@types/json2md": "^1.5.4", "@types/luxon": "^3.7.1", "@types/pluralize": "^0.0.33", - "devvit": "0.12.22", + "devvit": "0.12.23", "eslint": "^10.0.0", "typescript": "5.8.3", "vitest": "^4.0.14" diff --git a/src/server/core/commandParser.test.ts b/src/server/core/commandParser.test.ts index 11ae2d6..7a307fe 100644 --- a/src/server/core/commandParser.test.ts +++ b/src/server/core/commandParser.test.ts @@ -1,4 +1,5 @@ import { parseCancellation, parseCommandDate } from "./commandParser.js"; +import { expect, test } from "vitest"; test("parseCancellation", () => { const testCases = [ @@ -21,20 +22,20 @@ test("parseCancellation", () => { test("parseCommandDate", () => { const testCases = [ - { input: "!remindme 5 minutes", expected: "2023-10-01T12:05:00.000" }, - { input: "!RemindMe 2 hours", expected: "2023-10-01T14:00:00.000" }, - { input: "!remind 1 day", expected: "2023-10-02T12:00:00.000" }, - { input: "!Remind 3 weeks", expected: "2023-10-22T12:00:00.000" }, - { input: "!remindme 4 months", expected: "2024-02-01T13:00:00.000" }, - { input: "!RemindMe 1 year", expected: "2024-10-01T12:00:00.000" }, - { input: "!remindme 5 days", expected: "2023-10-06T12:00:00.000" }, + { input: "!remindme 5 minutes", expected: "2023-10-01T12:05:00.000Z" }, + { input: "!RemindMe 2 hours", expected: "2023-10-01T14:00:00.000Z" }, + { input: "!remind 1 day", expected: "2023-10-02T12:00:00.000Z" }, + { input: "!Remind 3 weeks", expected: "2023-10-22T12:00:00.000Z" }, + { input: "!remindme 4 months", expected: "2024-02-01T12:00:00.000Z" }, + { input: "!RemindMe 1 year", expected: "2024-10-01T12:00:00.000Z" }, + { input: "!remindme 5 days", expected: "2023-10-06T12:00:00.000Z" }, ]; const baselineDate = new Date("2023-10-01T12:00:00.000Z"); testCases.forEach(({ input, expected }) => { const result = parseCommandDate(input, baselineDate); - expect(result?.setZone("UTC").toISO({ includeOffset: false })).toBe(expected); + expect(result?.setZone("UTC").toISO({ includeOffset: true })).toBe(expected); }); }); diff --git a/src/server/core/commandParser.ts b/src/server/core/commandParser.ts index 009d3aa..2270b4a 100644 --- a/src/server/core/commandParser.ts +++ b/src/server/core/commandParser.ts @@ -25,5 +25,5 @@ export function parseCommandDate (message: string, baseline?: Date): DateTime | years: timeUnit === "year" ? timeValue : undefined, }; - return DateTime.fromJSDate(baseline).plus(duration); + return DateTime.fromJSDate(baseline, { zone: "utc" }).plus(duration); } diff --git a/src/server/core/constants.test.ts b/src/server/core/constants.test.ts index e1e91ff..a9aa34f 100644 --- a/src/server/core/constants.test.ts +++ b/src/server/core/constants.test.ts @@ -2,12 +2,13 @@ import { readFile } from "fs/promises"; import { join } from "path"; import { AppSetting, Endpoint, SchedulerJob, SEND_REMINDER_CRON } from "./constants.js"; import { AppConfig } from "@devvit/shared-types/schemas/config-file.v1.js"; +import { describe, expect, test, beforeAll } from "vitest"; let devvitConfig: AppConfig; beforeAll(async () => { // Read devvit.json from the project root - const devvitPath = join(process.cwd(), "../..", "devvit.json"); + const devvitPath = join(process.cwd(), ".", "devvit.json"); const content = await readFile(devvitPath, "utf-8"); devvitConfig = JSON.parse(content) as AppConfig; }); diff --git a/src/server/main.ts b/src/server/index.ts similarity index 100% rename from src/server/main.ts rename to src/server/index.ts diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json deleted file mode 100644 index 78dc7b6..0000000 --- a/src/server/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -// TypeScript config for all Devvit server code. -{ - "extends": "../../tools/tsconfig-base.json", - "compilerOptions": { - "lib": [ - "ES2023" - ], - "types": [ - "node", - "vitest/globals" - ], - "rootDir": ".", - "outDir": "../../dist/types/server", - "tsBuildInfoFile": "../../dist/types/server/tsconfig.tsbuildinfo" - }, - // https://github.com/Microsoft/TypeScript/issues/25636 - "include": [ - "**/*", - "**/*.json", - "../../package.json" - ], -} diff --git a/src/server/vite.config.ts b/src/server/vite.config.ts deleted file mode 100644 index 5a56514..0000000 --- a/src/server/vite.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { defineConfig } from "vite"; -import { builtinModules } from "node:module"; - -export default defineConfig({ - ssr: { - noExternal: true, - }, - logLevel: "warn", - build: { - ssr: "main.ts", - outDir: "../../dist/server", - emptyOutDir: true, - target: "node22", - sourcemap: true, - rollupOptions: { - external: [...builtinModules], - output: { - format: "cjs", - entryFileNames: "main.cjs", - inlineDynamicImports: true, - }, - }, - }, -}); diff --git a/src/server/vitest.config.ts b/src/server/vitest.config.ts deleted file mode 100644 index 1bdcfeb..0000000 --- a/src/server/vitest.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ test: { globals: true } }); diff --git a/tools/tsconfig-base.json b/tools/tsconfig-base.json deleted file mode 100644 index 7e37007..0000000 --- a/tools/tsconfig-base.json +++ /dev/null @@ -1,39 +0,0 @@ -// TypeScript config defaults for each sub-project (src, test, etc). -{ - "$schema": "https://json.schemastore.org/tsconfig.json", - "compilerOptions": { - // Enable incremental builds. - "composite": true, - // Maximize type checking. - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "exactOptionalPropertyTypes": true, - "forceConsistentCasingInFileNames": true, - "noImplicitOverride": true, - "noUncheckedIndexedAccess": true, - "noUncheckedSideEffectImports": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "resolveJsonModule": true, - "strict": true, - "types": [], // Projects add types needed. - // Improve compatibility with compilers that aren't type system aware. - "isolatedModules": true, - // Use ESM. - "esModuleInterop": true, - // Allow JSON type-checking and imports. - "module": "ESNext", - "moduleResolution": "Bundler", - // Assume library types are checked and compatible. - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "sourceMap": true, - "target": "ES2022" - }, - // https://github.com/microsoft/TypeScript/wiki/Performance#misconfigured-include-and-exclude - "exclude": [ - "dist", - "node_modules", - ".*/" - ] -} diff --git a/tools/tsconfig.base.json b/tools/tsconfig.base.json new file mode 100644 index 0000000..d07745c --- /dev/null +++ b/tools/tsconfig.base.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig.json", + "compilerOptions": { + "composite": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "exactOptionalPropertyTypes": true, + "forceConsistentCasingInFileNames": true, + "noImplicitOverride": true, + "noUncheckedIndexedAccess": true, + "noUncheckedSideEffectImports": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "strict": true, + "types": [], + "isolatedModules": true, + "esModuleInterop": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "sourceMap": true, + "target": "ES2022", + "lib": ["DOM", "ES2023", "esnext.disposable"], + "jsx": "react-jsx" + } +} diff --git a/tools/tsconfig.server.json b/tools/tsconfig.server.json new file mode 100644 index 0000000..b2391fb --- /dev/null +++ b/tools/tsconfig.server.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "../dist/types/server", + "tsBuildInfoFile": "../dist/types/server/tsconfig.tsbuildinfo", + "customConditions": [], + "types": ["node", "vitest/globals"], + "exactOptionalPropertyTypes": false, + "rootDir": "../src/server" + }, + "include": ["../src/server/**/*"], + "exclude": [] +} diff --git a/tools/tsconfig.vite.json b/tools/tsconfig.vite.json new file mode 100644 index 0000000..10012b9 --- /dev/null +++ b/tools/tsconfig.vite.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "../dist/types/tools", + "tsBuildInfoFile": "../dist/types/tools/tsconfig.vite.tsbuildinfo", + "types": ["node"], + "rootDir": ".." + }, + "include": ["../vite.config.ts", "../vitest.config.ts"], + "exclude": [] +} diff --git a/tsconfig.json b/tsconfig.json index 2ced312..ef71e0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,7 @@ { - "files": [], - "references": [ - { - "path": "./src/server" - } - ] + "files": [], + "references": [ + { "path": "./tools/tsconfig.server.json" }, + { "path": "./tools/tsconfig.vite.json" } + ] } diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..72ade35 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from "vite"; +import { devvit } from "@devvit/start/vite"; + +export default defineConfig({ + plugins: [devvit()], +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..56c8003 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "node", + include: ["src/**/*.test.ts"], + }, +});