This commit is contained in:
Derock 2023-10-30 20:44:05 -04:00
parent 509e4b0e10
commit 8e2ad2174f
No known key found for this signature in database
4 changed files with 231 additions and 162 deletions

View file

@ -27,6 +27,7 @@
"react": "18.2.0",
"react-dom": "18.2.0",
"superjson": "^1.13.1",
"ts-permissions": "^1.0.0",
"zod": "^3.21.4"
},
"devDependencies": {

View file

@ -29,9 +29,18 @@ dependencies:
'@trpc/server':
specifier: ^10.37.1
version: 10.40.0
bunyan:
specifier: ^1.8.15
version: 1.8.15
bunyan-format:
specifier: ^0.2.1
version: 0.2.1
next:
specifier: ^13.4.19
version: 13.5.4(react-dom@18.2.0)(react@18.2.0)
next-auth:
specifier: ^4.23.2
version: 4.23.2(next@13.5.4)(react-dom@18.2.0)(react@18.2.0)
react:
specifier: 18.2.0
version: 18.2.0
@ -41,11 +50,20 @@ dependencies:
superjson:
specifier: ^1.13.1
version: 1.13.3
ts-permissions:
specifier: ^1.0.0
version: 1.0.0
zod:
specifier: ^3.21.4
version: 3.22.4
devDependencies:
'@types/bunyan':
specifier: ^1.8.9
version: 1.8.9
'@types/bunyan-format':
specifier: ^0.2.6
version: 0.2.6
'@types/eslint':
specifier: ^8.44.2
version: 8.44.3
@ -303,7 +321,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
dev: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.50.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
@ -518,6 +535,10 @@ packages:
engines: {node: '>=8.0.0'}
dev: false
/@panva/hkdf@1.1.1:
resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==}
dev: false
/@prisma/client@5.4.1(prisma@5.4.1):
resolution: {integrity: sha512-xyD0DJ3gRNfLbPsC+YfMBBuLJtZKQfy1OD2qU/PZg+HKrr7SO+09174LMeTlWP0YF2wca9LxtVd4HnAiB5ketQ==}
engines: {node: '>=16.13'}
@ -823,6 +844,18 @@ packages:
resolution: {integrity: sha512-49SUOMWzSZtu5+OdrADmJD+u+sjSE0qj1cWgYk2FY4jLkPJunLuNRuhzM7aOeBhiUjyfhg2YTfur8FN1WBmvEw==}
dev: false
/@types/bunyan-format@0.2.6:
resolution: {integrity: sha512-p8UiEPFBWOaIgPlRs5czRHkQZhLjyk8IX9Cks1gMi5CoBwJ/QPOlo9zr0gSotEK7YGbU7j/sVwEIScAfODvoQw==}
dependencies:
'@types/node': 18.18.3
dev: true
/@types/bunyan@1.8.9:
resolution: {integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==}
dependencies:
'@types/node': 18.18.3
dev: true
/@types/cross-spawn@6.0.3:
resolution: {integrity: sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==}
dependencies:
@ -1125,6 +1158,14 @@ packages:
dependencies:
color-convert: 2.0.1
/ansicolors@0.2.1:
resolution: {integrity: sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w==}
dev: false
/ansistyles@0.1.3:
resolution: {integrity: sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g==}
dev: false
/any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
dev: true
@ -1412,6 +1453,25 @@ packages:
ieee754: 1.2.1
dev: false
/bunyan-format@0.2.1:
resolution: {integrity: sha512-xQs2LwWskjQdv7bVkMNwvMi7HnvDQoX4587H90nDGQGPPwHrmxsihBOIYHMVwjLMMOokITKPyFcbFneblvMEjQ==}
dependencies:
ansicolors: 0.2.1
ansistyles: 0.1.3
xtend: 2.1.2
dev: false
/bunyan@1.8.15:
resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==}
engines: {'0': node >=0.10.0}
hasBin: true
optionalDependencies:
dtrace-provider: 0.8.8
moment: 2.29.4
mv: 2.1.1
safe-json-stringify: 1.2.0
dev: false
/busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
@ -1574,6 +1634,11 @@ packages:
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/cookie@0.5.0:
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
engines: {node: '>= 0.6'}
dev: false
/copy-anything@3.0.5:
resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
engines: {node: '>=12.13'}
@ -1741,6 +1806,15 @@ packages:
engines: {node: '>=12'}
dev: false
/dtrace-provider@0.8.8:
resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==}
engines: {node: '>=0.10'}
requiresBuild: true
dependencies:
nan: 2.18.0
dev: false
optional: true
/ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
dependencies:
@ -2400,6 +2474,18 @@ packages:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
dev: false
/glob@6.0.4:
resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==}
requiresBuild: true
dependencies:
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
optional: true
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
@ -2870,6 +2956,10 @@ packages:
hasBin: true
dev: true
/jose@4.15.2:
resolution: {integrity: sha512-IY73F228OXRl9ar3jJagh7Vnuhj/GzBunPiZP13K0lOl7Am9SoWW3kEzq3MCllJMTtZqHTiDXQvoRd4U95aU6A==}
dev: false
/js-md4@0.3.2:
resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==}
dev: false
@ -3219,7 +3309,21 @@ packages:
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
/mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
requiresBuild: true
dependencies:
minimist: 1.2.8
dev: false
optional: true
/moment@2.29.4:
resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==}
requiresBuild: true
dev: false
optional: true
/mongodb-connection-string-url@2.6.0:
resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==}
@ -3311,6 +3415,17 @@ packages:
- supports-color
dev: false
/mv@2.1.1:
resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==}
engines: {node: '>=0.8.0'}
requiresBuild: true
dependencies:
mkdirp: 0.5.6
ncp: 2.0.0
rimraf: 2.4.5
dev: false
optional: true
/mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
dependencies:
@ -3319,6 +3434,12 @@ packages:
thenify-all: 1.6.0
dev: true
/nan@2.18.0:
resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==}
requiresBuild: true
dev: false
optional: true
/nanoid@3.3.6:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -3332,11 +3453,43 @@ packages:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true
/ncp@2.0.0:
resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==}
hasBin: true
requiresBuild: true
dev: false
optional: true
/new-github-issue-url@0.2.1:
resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==}
engines: {node: '>=10'}
dev: false
/next-auth@4.23.2(next@13.5.4)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-VRmInu0r/yZNFQheDFeOKtiugu3bt90Po3owAQDnFQ3YLQFmUKgFjcE2+3L0ny5jsJpBXaKbm7j7W2QTc6Ye2A==}
peerDependencies:
next: ^12.2.5 || ^13
nodemailer: ^6.6.5
react: ^17.0.2 || ^18
react-dom: ^17.0.2 || ^18
peerDependenciesMeta:
nodemailer:
optional: true
dependencies:
'@babel/runtime': 7.23.1
'@panva/hkdf': 1.1.1
cookie: 0.5.0
jose: 4.15.2
next: 13.5.4(react-dom@18.2.0)(react@18.2.0)
oauth: 0.9.15
openid-client: 5.6.0
preact: 10.18.1
preact-render-to-string: 5.2.6(preact@10.18.1)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
uuid: 8.3.2
dev: false
/next@13.5.4(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==}
engines: {node: '>=16.14.0'}
@ -3412,7 +3565,7 @@ packages:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
hosted-git-info: 2.8.9
resolve: 1.22.4
resolve: 1.22.6
semver: 5.7.2
validate-npm-package-license: 3.0.4
dev: false
@ -3456,11 +3609,20 @@ packages:
path-key: 3.1.1
dev: false
/oauth@0.9.15:
resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
dev: false
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
dev: true
/object-hash@2.2.0:
resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
engines: {node: '>= 6'}
dev: false
/object-hash@3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
@ -3469,6 +3631,10 @@ packages:
/object-inspect@1.12.3:
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
/object-keys@0.4.0:
resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==}
dev: false
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
@ -3525,6 +3691,11 @@ packages:
es-abstract: 1.22.2
dev: true
/oidc-token-hash@5.0.3:
resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==}
engines: {node: ^10.13.0 || >=12.0.0}
dev: false
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
@ -3554,6 +3725,15 @@ packages:
is-wsl: 2.2.0
dev: false
/openid-client@5.6.0:
resolution: {integrity: sha512-uFTkN/iqgKvSnmpVAS/T6SNThukRMBcmymTQ71Ngus1F60tdtKVap7zCrleocY+fogPtpmoxi5Q1YdrgYuTlkA==}
dependencies:
jose: 4.15.2
lru-cache: 6.0.0
object-hash: 2.2.0
oidc-token-hash: 5.0.3
dev: false
/optionator@0.9.3:
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'}
@ -3877,6 +4057,19 @@ packages:
xtend: 4.0.2
dev: false
/preact-render-to-string@5.2.6(preact@10.18.1):
resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==}
peerDependencies:
preact: '>=10'
dependencies:
preact: 10.18.1
pretty-format: 3.8.0
dev: false
/preact@10.18.1:
resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==}
dev: false
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@ -3943,6 +4136,10 @@ packages:
hasBin: true
dev: true
/pretty-format@3.8.0:
resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
dev: false
/prisma@5.4.1:
resolution: {integrity: sha512-op9PmU8Bcw5dNAas82wBYTG0yHnpq9/O3bhxbDBrNzwZTwBqsVCxxYRLf6wHNh9HVaDGhgjjHlu1+BcW8qdnBg==}
engines: {node: '>=16.13'}
@ -4101,7 +4298,6 @@ packages:
/regenerator-runtime@0.14.0:
resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
dev: true
/regexp.prototype.flags@1.5.1:
resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
@ -4141,7 +4337,6 @@ packages:
is-core-module: 2.13.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/resolve@2.0.0-next.4:
resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
@ -4173,6 +4368,15 @@ packages:
resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
dev: false
/rimraf@2.4.5:
resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==}
hasBin: true
requiresBuild: true
dependencies:
glob: 6.0.4
dev: false
optional: true
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
@ -4201,6 +4405,12 @@ packages:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: false
/safe-json-stringify@1.2.0:
resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==}
requiresBuild: true
dev: false
optional: true
/safe-regex-test@1.0.0:
resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
dependencies:
@ -4661,6 +4871,10 @@ packages:
resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==}
dev: false
/ts-permissions@1.0.0:
resolution: {integrity: sha512-nboYcBEZF5LkSPFfHde6J9/dCBlg911sJz0DelMB59JVRhUTTMnIvunMb+QdtblcvgFuXZ0Zc4qlb1bk/LmHmw==}
dev: false
/tsconfig-paths@3.14.2:
resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
dependencies:
@ -4913,6 +5127,13 @@ packages:
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
/xtend@2.1.2:
resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==}
engines: {node: '>=0.4'}
dependencies:
object-keys: 0.4.0
dev: false
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}

View file

@ -1,4 +1,4 @@
import { Permission, createPermissionsClass } from ".";
import { createPermissionsClass } from "ts-permissions";
enum ProjectPermissionsEnum {
/**
@ -32,37 +32,6 @@ enum ProjectPermissionsEnum {
ManageServices,
}
export const ProjectPermissions = createPermissionsClass(
ProjectPermissionsEnum,
);
// export class ProjectPermissions extends Permission<
// Record<ProjectPermissionsEnum, number>
// > {
// public static Flags = ProjectPermissionsEnum;
// }
// const test = {
// Administrator: 0,
// ManageMembers: 1,
// CreateService: 2,
// ViewServices: 3,
// ManageServices: 4,
// };
// type Test = { [key in keyof typeof ProjectPermissions]: number }
// class TestClass<T extends {}> {
// constructor(public value: {
// [key in keyof typeof T]: number | string;
// }) {}
// use(something: T) {
// return new TestClass(something);
// }
// }
// const inst = new TestClass<ProjectPermissions>(ProjectPermissions);
// inst.use(ProjectPermissions.Owner);
// export const ProjectPermissionsClass = new Permission(ProjectPermissions);
// ProjectPermissionsClass.for(0b11111).has(ProjectPermissions.Owner);
export const ProjectPermissions = createPermissionsClass<
typeof ProjectPermissionsEnum
>(ProjectPermissionsEnum, "ProjectPermissions");

View file

@ -1,122 +0,0 @@
import assert from "assert";
enum DefaultFlags {}
export function createPermissionsClass<
E extends Record<T, string | number>,
T extends string | number | symbol,
>(permissionsEnum: E) {
return class extends Permission<E, T> {
public static Flags = permissionsEnum;
static from(permission: number | bigint | T[]) {
return new Permission(permission as any);
}
};
}
/**
* Creates a class representing a set of permissions
*/
export class Permission<E, T extends string | number | symbol> {
public static Flags = DefaultFlags;
private permissions: bigint = 0n;
/**
* Creates a helper class for working with permissions
* @param allPermissions The permissions enum
* @param givenPermissions The permissions to start with
*/
constructor(givenPermissions?: number | bigint | T[] | E[]) {
if (
typeof givenPermissions === "number" ||
typeof givenPermissions === "bigint"
) {
this.permissions = BigInt(givenPermissions);
} else if (Array.isArray(givenPermissions)) {
givenPermissions.forEach((permission) => {
this.add(permission);
});
}
}
static from(permission: number | bigint) {
return new Permission(permission);
}
/**
* Converts a permission index to a bitmask
* @param index The 0-based index of the permission
* @returns the permission as a bitmask
*/
private toPermissionBitmask(permission: T | E): bigint {
let permissionIndex: number = -1;
// if is a string, that means we reversed the enum
if (typeof permission === "string") {
// @ts-expect-error idk how to type this better
let resolved = (this.constructor as unknown as typeof Permission).Flags[
permission
];
assert(typeof resolved === "number", "Invalid permission");
permissionIndex = resolved;
} else if (typeof permission === "number") {
permissionIndex = permission;
}
assert(permissionIndex >= 0, "Failed to resolve permission");
return 1n << BigInt(permissionIndex);
}
/**
* Adds a permission to the set
* @param permission The permission to add
*/
public add(permission: E) {
this.permissions |= this.toPermissionBitmask(permission);
}
/**
* Removes a permission from the set
* @param permission The permission to remove
*/
public remove(permission: T) {
this.permissions &= ~this.toPermissionBitmask(permission);
}
/**
* Checks if the set has a permission
* @param permission The permission(s) to check
* @returns true if the set has the permission
*/
public has(permission: T | T[]): boolean {
if (Array.isArray(permission)) {
return permission.every((perm) => this.has(perm));
}
return (this.permissions & this.toPermissionBitmask(permission)) !== 0n;
}
/**
* Returns a new instance of Permission for a new set of permissions
* @param permissions The permissions to start with
*/
public for(permissions: number | bigint | T[]) {
return new Permission(permissions);
}
/**
* Creates a copy of the current set of permissions
* @returns a new instance of Permission
*/
public copy() {
return new Permission(this.permissions);
}
/**
* Returns the permissions as a bitmask
* @returns the permissions as a bitmask
*/
public toBits() {
return this.permissions;
}
}