From 6fda359b2d602d68a8d6a3ab8fe40a7c114bc4b1 Mon Sep 17 00:00:00 2001 From: Anna Cottrill Date: Mon, 5 Jan 2026 16:42:01 -0500 Subject: [PATCH] feat: add prisma --- .gitignore | 2 + .vscode/settings.json | 5 +- lib/prisma.ts | 5 + package.json | 4 +- pnpm-lock.yaml | 445 ++++++++++++++++++++++++++++++++++-------- prisma/schema.prisma | 24 +++ prod.env | 3 +- src/index.ts | 2 + src/prisma.config.ts | 12 ++ tsconfig.json | 2 +- 10 files changed, 417 insertions(+), 87 deletions(-) create mode 100644 lib/prisma.ts create mode 100644 prisma/schema.prisma create mode 100644 src/prisma.config.ts diff --git a/.gitignore b/.gitignore index f1b1d71..3baad3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules prod + +/generated/prisma diff --git a/.vscode/settings.json b/.vscode/settings.json index 2beb504..831acc2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,8 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, - "eslint.validate": ["typescript"] + "eslint.validate": [ + "typescript" + ], + "prisma.pinToPrisma6": true } diff --git a/lib/prisma.ts b/lib/prisma.ts new file mode 100644 index 0000000..36cef80 --- /dev/null +++ b/lib/prisma.ts @@ -0,0 +1,5 @@ +import { PrismaClient } from "../generated/prisma/client"; + +const prisma = new PrismaClient(); + +export { prisma }; diff --git a/package.json b/package.json index bebb392..b9950ba 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ }, "dependencies": { "@nhcarrigan/logger": "1.0.0", + "@prisma/client": "6.19.1", "discord.js": "14.21.0", - "node-schedule": "2.1.1" + "node-schedule": "2.1.1", + "prisma": "6.19" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f6f406..f13cc24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,16 +11,22 @@ importers: '@nhcarrigan/logger': specifier: 1.0.0 version: 1.0.0 + '@prisma/client': + specifier: 6.19.1 + version: 6.19.1(prisma@6.19.1(magicast@0.3.5)(typescript@5.8.3))(typescript@5.8.3) discord.js: specifier: 14.21.0 version: 14.21.0 node-schedule: specifier: 2.1.1 version: 2.1.1 + prisma: + specifier: '6.19' + version: 6.19.1(magicast@0.3.5)(typescript@5.8.3) devDependencies: '@nhcarrigan/eslint-config': specifier: 5.2.0 - version: 5.2.0(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)) + version: 5.2.0(@typescript-eslint/utils@8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1)) '@nhcarrigan/typescript-config': specifier: 4.0.0 version: 4.0.0(typescript@5.8.3) @@ -32,16 +38,16 @@ importers: version: 2.1.7 '@vitest/coverage-istanbul': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/node@24.0.6)) + version: 3.2.4(vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1)) eslint: specifier: 9.30.0 - version: 9.30.0 + version: 9.30.0(jiti@2.6.1) typescript: specifier: 5.8.3 version: 5.8.3 vitest: specifier: 3.2.4 - version: 3.2.4(@types/node@24.0.6) + version: 3.2.4(@types/node@24.0.6)(jiti@2.6.1) packages: @@ -444,6 +450,36 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@prisma/client@6.19.1': + resolution: {integrity: sha512-4SXj4Oo6HyQkLUWT8Ke5R0PTAfVOKip5Roo+6+b2EDTkFg5be0FnBWiuRJc0BC0sRQIWGMLKW1XguhVfW/z3/A==} + engines: {node: '>=18.18'} + peerDependencies: + prisma: '*' + typescript: '>=5.1.0' + peerDependenciesMeta: + prisma: + optional: true + typescript: + optional: true + + '@prisma/config@6.19.1': + resolution: {integrity: sha512-bUL/aYkGXLwxVGhJmQMtslLT7KPEfUqmRa919fKI4wQFX4bIFUKiY8Jmio/2waAjjPYrtuDHa7EsNCnJTXxiOw==} + + '@prisma/debug@6.19.1': + resolution: {integrity: sha512-h1JImhlAd/s5nhY/e9qkAzausWldbeT+e4nZF7A4zjDYBF4BZmKDt4y0jK7EZapqOm1kW7V0e9agV/iFDy3fWw==} + + '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': + resolution: {integrity: sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==} + + '@prisma/engines@6.19.1': + resolution: {integrity: sha512-xy95dNJ7DiPf9IJ3oaVfX785nbFl7oNDzclUF+DIiJw6WdWCvPl0LPU0YqQLsrwv8N64uOQkH391ujo3wSo+Nw==} + + '@prisma/fetch-engine@6.19.1': + resolution: {integrity: sha512-mmgcotdaq4VtAHO6keov3db+hqlBzQS6X7tR7dFCbvXjLVTxBYdSJFRWz+dq7F9p6dvWyy1X0v8BlfRixyQK6g==} + + '@prisma/get-platform@6.19.1': + resolution: {integrity: sha512-zsg44QUiQAnFUyh6Fbt7c9HjMXHwFTqtrgcX7DAZmRgnkPyYT7Sh8Mn8D5PuuDYNtMOYcpLGg576MLfIORsBYw==} + '@rollup/rollup-android-arm-eabi@4.34.8': resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} cpu: [arm] @@ -554,6 +590,9 @@ packages: resolution: {integrity: sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@stylistic/eslint-plugin@2.12.1': resolution: {integrity: sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -853,6 +892,14 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + c12@3.1.0: + resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -888,10 +935,17 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + ci-info@4.1.0: resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} engines: {node: '>=8'} + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -910,6 +964,13 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -969,6 +1030,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -977,6 +1042,12 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -992,6 +1063,10 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -999,6 +1074,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + effect@3.18.4: + resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + electron-to-chromium@1.5.104: resolution: {integrity: sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g==} @@ -1008,6 +1086,10 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1199,6 +1281,13 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1290,6 +1379,10 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1526,6 +1619,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1678,6 +1775,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -1688,6 +1788,11 @@ packages: normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + nypm@0.6.2: + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -1720,6 +1825,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1789,6 +1897,9 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1800,6 +1911,9 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.50.1: resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} engines: {node: '>=18'} @@ -1826,6 +1940,16 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prisma@6.19.1: + resolution: {integrity: sha512-XRfmGzh6gtkc/Vq3LqZJcS2884dQQW3UhPo6jNRoiTW95FFQkXFg8vkYEy6og+Pyv0aY7zRQ7Wn1Cvr56XjhQQ==} + engines: {node: '>=18.18'} + hasBin: true + peerDependencies: + typescript: '>=5.1.0' + peerDependenciesMeta: + typescript: + optional: true + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -1833,9 +1957,15 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -1851,6 +1981,10 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -2071,6 +2205,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -2535,22 +2673,22 @@ snapshots: '@esbuild/win32-x64@0.25.0': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.30.0)': + '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.30.0(jiti@2.6.1))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) ignore: 5.3.2 - '@eslint-community/eslint-utils@4.4.1(eslint@9.30.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.30.0(jiti@2.6.1))': dependencies: - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.4(eslint@9.30.0)': + '@eslint/compat@1.2.4(eslint@9.30.0(jiti@2.6.1))': optionalDependencies: - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) '@eslint/config-array@0.21.0': dependencies: @@ -2650,29 +2788,29 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))': + '@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(playwright@1.50.1)(react@19.0.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.30.0) - '@eslint/compat': 1.2.4(eslint@9.30.0) + '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.30.0(jiti@2.6.1)) + '@eslint/compat': 1.2.4(eslint@9.30.0(jiti@2.6.1)) '@eslint/eslintrc': 3.2.0 '@eslint/js': 9.17.0 - '@stylistic/eslint-plugin': 2.12.1(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) - '@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)) - eslint: 9.30.0 - eslint-plugin-deprecation: 3.0.0(eslint@9.30.0)(typescript@5.8.3) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0) - eslint-plugin-jsdoc: 50.6.1(eslint@9.30.0) - eslint-plugin-playwright: 2.1.0(eslint@9.30.0) - eslint-plugin-react: 7.37.3(eslint@9.30.0) + '@stylistic/eslint-plugin': 2.12.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + '@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1)) + eslint: 9.30.0(jiti@2.6.1) + eslint-plugin-deprecation: 3.0.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1)) + eslint-plugin-jsdoc: 50.6.1(eslint@9.30.0(jiti@2.6.1)) + eslint-plugin-playwright: 2.1.0(eslint@9.30.0(jiti@2.6.1)) + eslint-plugin-react: 7.37.3(eslint@9.30.0(jiti@2.6.1)) eslint-plugin-sort-keys-fix: 1.1.2 - eslint-plugin-unicorn: 56.0.1(eslint@9.30.0) + eslint-plugin-unicorn: 56.0.1(eslint@9.30.0(jiti@2.6.1)) globals: 15.14.0 playwright: 1.50.1 react: 19.0.0 typescript: 5.8.3 - vitest: 3.2.4(@types/node@24.0.6) + vitest: 3.2.4(@types/node@24.0.6)(jiti@2.6.1) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-typescript @@ -2702,6 +2840,41 @@ snapshots: '@pkgr/core@0.1.1': {} + '@prisma/client@6.19.1(prisma@6.19.1(magicast@0.3.5)(typescript@5.8.3))(typescript@5.8.3)': + optionalDependencies: + prisma: 6.19.1(magicast@0.3.5)(typescript@5.8.3) + typescript: 5.8.3 + + '@prisma/config@6.19.1(magicast@0.3.5)': + dependencies: + c12: 3.1.0(magicast@0.3.5) + deepmerge-ts: 7.1.5 + effect: 3.18.4 + empathic: 2.0.0 + transitivePeerDependencies: + - magicast + + '@prisma/debug@6.19.1': {} + + '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': {} + + '@prisma/engines@6.19.1': + dependencies: + '@prisma/debug': 6.19.1 + '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + '@prisma/fetch-engine': 6.19.1 + '@prisma/get-platform': 6.19.1 + + '@prisma/fetch-engine@6.19.1': + dependencies: + '@prisma/debug': 6.19.1 + '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 + '@prisma/get-platform': 6.19.1 + + '@prisma/get-platform@6.19.1': + dependencies: + '@prisma/debug': 6.19.1 + '@rollup/rollup-android-arm-eabi@4.34.8': optional: true @@ -2770,10 +2943,12 @@ snapshots: '@sapphire/snowflake@3.5.3': {} - '@stylistic/eslint-plugin@2.12.1(eslint@9.30.0)(typescript@5.8.3)': + '@standard-schema/spec@1.1.0': {} + + '@stylistic/eslint-plugin@2.12.1(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.25.0(eslint@9.30.0)(typescript@5.8.3) - eslint: 9.30.0 + '@typescript-eslint/utils': 8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.30.0(jiti@2.6.1) eslint-visitor-keys: 4.2.0 espree: 10.3.0 estraverse: 5.3.0 @@ -2808,15 +2983,15 @@ snapshots: dependencies: '@types/node': 24.0.6 - '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.19.0 - '@typescript-eslint/type-utils': 8.19.0(eslint@9.30.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.19.0(eslint@9.30.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.19.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -2825,14 +3000,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.19.0 '@typescript-eslint/types': 8.19.0 '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.19.0 debug: 4.4.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -2852,12 +3027,12 @@ snapshots: '@typescript-eslint/types': 8.25.0 '@typescript-eslint/visitor-keys': 8.25.0 - '@typescript-eslint/type-utils@8.19.0(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.19.0(eslint@9.30.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) debug: 4.4.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) ts-api-utils: 1.4.3(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -2912,35 +3087,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/utils@7.18.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.19.0(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.19.0 '@typescript-eslint/types': 8.19.0 '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3) - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.8.3) - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -2960,7 +3135,7 @@ snapshots: '@typescript-eslint/types': 8.25.0 eslint-visitor-keys: 4.2.0 - '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/node@24.0.6))': + '@vitest/coverage-istanbul@3.2.4(vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.1 @@ -2972,17 +3147,17 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@24.0.6) + vitest: 3.2.4(@types/node@24.0.6)(jiti@2.6.1) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.25.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6))': + '@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1))': dependencies: - '@typescript-eslint/utils': 8.25.0(eslint@9.30.0)(typescript@5.8.3) - eslint: 9.30.0 + '@typescript-eslint/utils': 8.25.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.30.0(jiti@2.6.1) optionalDependencies: typescript: 5.8.3 - vitest: 3.2.4(@types/node@24.0.6) + vitest: 3.2.4(@types/node@24.0.6)(jiti@2.6.1) '@vitest/expect@3.2.4': dependencies: @@ -2992,13 +3167,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.2.0(@types/node@24.0.6))': + '@vitest/mocker@3.2.4(vite@6.2.0(@types/node@24.0.6)(jiti@2.6.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.0(@types/node@24.0.6) + vite: 6.2.0(@types/node@24.0.6)(jiti@2.6.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -3165,6 +3340,23 @@ snapshots: builtin-modules@3.3.0: {} + c12@3.1.0(magicast@0.3.5): + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 16.6.1 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 1.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + cac@6.7.14: {} call-bind-apply-helpers@1.0.2: @@ -3203,8 +3395,16 @@ snapshots: check-error@2.1.1: {} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + ci-info@4.1.0: {} + citty@0.1.6: + dependencies: + consola: 3.4.2 + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -3219,6 +3419,10 @@ snapshots: concat-map@0.0.1: {} + confbox@0.2.2: {} + + consola@3.4.2: {} + convert-source-map@2.0.0: {} core-js-compat@3.40.0: @@ -3269,6 +3473,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge-ts@7.1.5: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -3281,6 +3487,10 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + + destr@2.0.5: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -3310,6 +3520,8 @@ snapshots: dependencies: esutils: 2.0.3 + dotenv@16.6.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -3318,12 +3530,19 @@ snapshots: eastasianwidth@0.2.0: {} + effect@3.18.4: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + electron-to-chromium@1.5.104: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + empathic@2.0.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -3472,27 +3691,27 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) - eslint: 9.30.0 + '@typescript-eslint/parser': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.30.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-deprecation@3.0.0(eslint@9.30.0)(typescript@5.8.3): + eslint-plugin-deprecation@3.0.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 7.18.0(eslint@9.30.0)(typescript@5.8.3) - eslint: 9.30.0 + '@typescript-eslint/utils': 7.18.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.30.0(jiti@2.6.1) ts-api-utils: 1.4.3(typescript@5.8.3) tslib: 2.8.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.30.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -3501,9 +3720,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -3515,20 +3734,20 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.19.0(eslint@9.30.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.19.0(eslint@9.30.0(jiti@2.6.1))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@50.6.1(eslint@9.30.0): + eslint-plugin-jsdoc@50.6.1(eslint@9.30.0(jiti@2.6.1)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 @@ -3538,12 +3757,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-playwright@2.1.0(eslint@9.30.0): + eslint-plugin-playwright@2.1.0(eslint@9.30.0(jiti@2.6.1)): dependencies: - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) globals: 13.24.0 - eslint-plugin-react@7.37.3(eslint@9.30.0): + eslint-plugin-react@7.37.3(eslint@9.30.0(jiti@2.6.1)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -3551,7 +3770,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -3572,14 +3791,14 @@ snapshots: natural-compare: 1.4.0 requireindex: 1.2.0 - eslint-plugin-unicorn@56.0.1(eslint@9.30.0): + eslint-plugin-unicorn@56.0.1(eslint@9.30.0(jiti@2.6.1)): dependencies: '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0(jiti@2.6.1)) ci-info: 4.1.0 clean-regexp: 1.0.0 core-js-compat: 3.40.0 - eslint: 9.30.0 + eslint: 9.30.0(jiti@2.6.1) esquery: 1.6.0 globals: 15.14.0 indent-string: 4.0.0 @@ -3605,9 +3824,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.30.0: + eslint@9.30.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.30.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 @@ -3642,6 +3861,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -3681,6 +3902,12 @@ snapshots: expect-type@1.2.1: {} + exsolve@1.0.8: {} + + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -3782,6 +4009,15 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4033,6 +4269,8 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jiti@2.6.1: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -4156,6 +4394,8 @@ snapshots: natural-compare@1.4.0: {} + node-fetch-native@1.6.7: {} + node-releases@2.0.19: {} node-schedule@2.1.1: @@ -4171,6 +4411,14 @@ snapshots: semver: 5.7.2 validate-npm-package-license: 3.0.4 + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.2 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -4212,6 +4460,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + ohash@2.0.11: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4280,12 +4530,20 @@ snapshots: pathval@2.0.0: {} + perfect-debounce@1.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@4.0.2: {} + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + playwright-core@1.50.1: {} playwright@1.50.1: @@ -4306,6 +4564,15 @@ snapshots: prelude-ls@1.2.1: {} + prisma@6.19.1(magicast@0.3.5)(typescript@5.8.3): + dependencies: + '@prisma/config': 6.19.1(magicast@0.3.5) + '@prisma/engines': 6.19.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - magicast + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -4314,8 +4581,15 @@ snapshots: punycode@2.3.1: {} + pure-rand@6.1.0: {} + queue-microtask@1.2.3: {} + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + react-is@16.13.1: {} react@19.0.0: {} @@ -4333,6 +4607,8 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 + readdirp@4.1.2: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -4619,6 +4895,8 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.0.2: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.2) @@ -4724,13 +5002,13 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-node@3.2.4(@types/node@24.0.6): + vite-node@3.2.4(@types/node@24.0.6)(jiti@2.6.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.2.0(@types/node@24.0.6) + vite: 6.2.0(@types/node@24.0.6)(jiti@2.6.1) transitivePeerDependencies: - '@types/node' - jiti @@ -4745,7 +5023,7 @@ snapshots: - tsx - yaml - vite@6.2.0(@types/node@24.0.6): + vite@6.2.0(@types/node@24.0.6)(jiti@2.6.1): dependencies: esbuild: 0.25.0 postcss: 8.5.3 @@ -4753,12 +5031,13 @@ snapshots: optionalDependencies: '@types/node': 24.0.6 fsevents: 2.3.3 + jiti: 2.6.1 - vitest@3.2.4(@types/node@24.0.6): + vitest@3.2.4(@types/node@24.0.6)(jiti@2.6.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.2.0(@types/node@24.0.6)) + '@vitest/mocker': 3.2.4(vite@6.2.0(@types/node@24.0.6)(jiti@2.6.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -4776,8 +5055,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.2.0(@types/node@24.0.6) - vite-node: 3.2.4(@types/node@24.0.6) + vite: 6.2.0(@types/node@24.0.6)(jiti@2.6.1) + vite-node: 3.2.4(@types/node@24.0.6)(jiti@2.6.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 24.0.6 diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..c7f7e73 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,24 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client" + output = "../generated/prisma" +} + +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +model ServerData { + id String @id @default(auto()) @map("_id") @db.ObjectId + serverId String + channelId String + roleId String + message String + cron String +} diff --git a/prod.env b/prod.env index 22ae048..467de0b 100644 --- a/prod.env +++ b/prod.env @@ -1,2 +1,3 @@ DISCORD_TOKEN="op://Environment Variables - Naomi/Standup Bot/discord_token" -LOG_TOKEN="op://Environment Variables - Naomi/Alert Server/api_auth" \ No newline at end of file +LOG_TOKEN="op://Environment Variables - Naomi/Alert Server/api_auth" +DATABASE_URL="op://Environment Variables - Naomi/Standup Bot/database_url" \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index c9bff77..94dfb11 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ */ import { Client, Events, GatewayIntentBits } from "discord.js"; import { scheduleJob } from "node-schedule"; +import { prisma } from "../lib/prisma.js"; import { channels } from "./config/channels.js"; import { standup } from "./modules/standup.js"; import { logger } from "./utils/logger.js"; @@ -22,6 +23,7 @@ process.on("unhandledRejection", (error) => { process.on("uncaughtException", (error) => { if (error instanceof Error) { void logger.error("Uncaught Exception", error); + void prisma.$disconnect(); return; } void logger.error("uncaught exception", new Error(String(error))); diff --git a/src/prisma.config.ts b/src/prisma.config.ts new file mode 100644 index 0000000..a05a405 --- /dev/null +++ b/src/prisma.config.ts @@ -0,0 +1,12 @@ +import { defineConfig, env } from "prisma/config"; + +export default defineConfig({ + datasource: { + url: env("DATABASE_URL"), + }, + engine: "classic", + migrations: { + path: "prisma/migrations", + }, + schema: "prisma/schema.prisma", +}); diff --git a/tsconfig.json b/tsconfig.json index 35fbae1..1f78389 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { + "include": ["**/*.ts"], "extends": "@nhcarrigan/typescript-config", "compilerOptions": { - "rootDir": "./src", "outDir": "./prod" }, "exclude": ["test/**/*.ts", "vitest.config.ts"]