diff --git a/package.json b/package.json index 621f2ae..aa63c02 100644 --- a/package.json +++ b/package.json @@ -14,28 +14,31 @@ "format": "prettier --plugin-search-dir . --write ." }, "devDependencies": { - "@playwright/test": "^1.28.1", - "@sveltejs/adapter-auto": "^1.0.0", - "@sveltejs/kit": "^1.0.0", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", + "@playwright/test": "^1.30.0", + "@sveltejs/adapter-auto": "^1.0.2", + "@sveltejs/kit": "^1.3.10", + "@typescript-eslint/eslint-plugin": "^5.50.0", + "@typescript-eslint/parser": "^5.50.0", + "eslint": "^8.33.0", + "eslint-config-prettier": "^8.6.0", "eslint-plugin-svelte3": "^4.0.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.8.1", + "prettier": "^2.8.3", + "prettier-plugin-svelte": "^2.9.0", "prisma": "^4.9.0", "rome": "^11.0.0", - "svelte": "^3.54.0", - "svelte-check": "^3.0.1", - "tslib": "^2.4.1", - "typescript": "^4.9.3", - "vite": "^4.0.0", - "vitest": "^0.25.3" + "svelte": "^3.55.1", + "svelte-check": "^3.0.3", + "tslib": "^2.5.0", + "typescript": "^4.9.5", + "vite": "^4.1.1", + "vitest": "^0.25.8" }, "type": "module", "dependencies": { - "@picocss/pico": "^1.5.6", - "@prisma/client": "^4.9.0" + "@lucia-auth/adapter-prisma": "^0.4.0", + "@lucia-auth/sveltekit": "^0.6.2", + "@picocss/pico": "^1.5.7", + "@prisma/client": "^4.9.0", + "lucia-auth": "^0.6.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 762172f..aaf97af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,49 +1,55 @@ lockfileVersion: 5.4 specifiers: - '@picocss/pico': ^1.5.6 - '@playwright/test': ^1.28.1 + '@lucia-auth/adapter-prisma': ^0.4.0 + '@lucia-auth/sveltekit': ^0.6.2 + '@picocss/pico': ^1.5.7 + '@playwright/test': ^1.30.0 '@prisma/client': ^4.9.0 - '@sveltejs/adapter-auto': ^1.0.0 - '@sveltejs/kit': ^1.0.0 - '@typescript-eslint/eslint-plugin': ^5.45.0 - '@typescript-eslint/parser': ^5.45.0 - eslint: ^8.28.0 - eslint-config-prettier: ^8.5.0 + '@sveltejs/adapter-auto': ^1.0.2 + '@sveltejs/kit': ^1.3.10 + '@typescript-eslint/eslint-plugin': ^5.50.0 + '@typescript-eslint/parser': ^5.50.0 + eslint: ^8.33.0 + eslint-config-prettier: ^8.6.0 eslint-plugin-svelte3: ^4.0.0 - prettier: ^2.8.0 - prettier-plugin-svelte: ^2.8.1 + lucia-auth: ^0.6.0 + prettier: ^2.8.3 + prettier-plugin-svelte: ^2.9.0 prisma: ^4.9.0 rome: ^11.0.0 - svelte: ^3.54.0 - svelte-check: ^3.0.1 - tslib: ^2.4.1 - typescript: ^4.9.3 - vite: ^4.0.0 - vitest: ^0.25.3 + svelte: ^3.55.1 + svelte-check: ^3.0.3 + tslib: ^2.5.0 + typescript: ^4.9.5 + vite: ^4.1.1 + vitest: ^0.25.8 dependencies: - '@picocss/pico': 1.5.6 + '@lucia-auth/adapter-prisma': 0.4.0_lucia-auth@0.6.0 + '@lucia-auth/sveltekit': 0.6.2_iyasqsbplmktfcni36hpxhd3zi + '@picocss/pico': 1.5.7 '@prisma/client': 4.9.0_prisma@4.9.0 + lucia-auth: 0.6.0 devDependencies: - '@playwright/test': 1.29.2 - '@sveltejs/adapter-auto': 1.0.1_@sveltejs+kit@1.1.3 - '@sveltejs/kit': 1.1.3_svelte@3.55.1+vite@4.0.4 - '@typescript-eslint/eslint-plugin': 5.48.2_caon6io6stgpr7lz2rtbhekxqy - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje - eslint: 8.32.0 - eslint-config-prettier: 8.6.0_eslint@8.32.0 - eslint-plugin-svelte3: 4.0.0_tmo5zkisvhu6htudosk5k7m6pu + '@playwright/test': 1.30.0 + '@sveltejs/adapter-auto': 1.0.2_@sveltejs+kit@1.3.10 + '@sveltejs/kit': 1.3.10_svelte@3.55.1+vite@4.1.1 + '@typescript-eslint/eslint-plugin': 5.50.0_go4drrxstycfikanvu45pi4vgq + '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + eslint: 8.33.0 + eslint-config-prettier: 8.6.0_eslint@8.33.0 + eslint-plugin-svelte3: 4.0.0_4omm2ewoudhgnmf7aocafatnc4 prettier: 2.8.3 prettier-plugin-svelte: 2.9.0_kdmmghgdi3ngrsq6otxkjilbry prisma: 4.9.0 rome: 11.0.0 svelte: 3.55.1 - svelte-check: 3.0.2_svelte@3.55.1 - tslib: 2.4.1 - typescript: 4.9.4 - vite: 4.0.4 + svelte-check: 3.0.3_svelte@3.55.1 + tslib: 2.5.0 + typescript: 4.9.5 + vite: 4.1.1 vitest: 0.25.8 packages: @@ -253,7 +259,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.4.1 - globals: 13.19.0 + globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -299,6 +305,29 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@lucia-auth/adapter-prisma/0.4.0_lucia-auth@0.6.0: + resolution: {integrity: sha512-HMaGbVfB5KTZBs6KPqI5z6RFKVl4AKfm9u2KrrQglthpd/rWJoJRDI2oYkdcEX4Xu1FNdNJJrEtKKBtVAXYqrw==} + peerDependencies: + lucia-auth: 0.6.x + dependencies: + lucia-auth: 0.6.0 + dev: false + + /@lucia-auth/sveltekit/0.6.2_iyasqsbplmktfcni36hpxhd3zi: + resolution: {integrity: sha512-+lOhgctcdVkPRYtJegTaEZYLFhPJOHFjdAm9cBFFjpkV6cNGuHSTxobfOn7yRy3pGVhzGFM91uOfYrJxmECOBA==} + peerDependencies: + lucia-auth: 0.5.x - 0.6.x + svelte: 3.x + dependencies: + '@noble/hashes': 1.2.0 + lucia-auth: 0.6.0 + svelte: 3.55.1 + dev: false + + /@noble/hashes/1.2.0: + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + dev: false + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -320,17 +349,17 @@ packages: fastq: 1.15.0 dev: true - /@picocss/pico/1.5.6: - resolution: {integrity: sha512-9R+OdtMuHijKa7AQKBrng/1Q/Cd3BnEigYJXmOxI10Eka2qGGDa4b0hua8UeYu01BTtAiO70K7CQuHffU4YXGA==} + /@picocss/pico/1.5.7: + resolution: {integrity: sha512-RygdXNlSXieAs9jMw/AeqA1ki1kldgEYbRn8BnYZIPfRTM5NWZ4uVzMK6uMPhYlRjoT5wD/OplZvIefnCqyDCQ==} dev: false - /@playwright/test/1.29.2: - resolution: {integrity: sha512-+3/GPwOgcoF0xLz/opTnahel1/y42PdcgZ4hs+BZGIUjtmEFSXGg+nFoaH3NSmuc7a6GSFwXDJ5L7VXpqzigNg==} + /@playwright/test/1.30.0: + resolution: {integrity: sha512-SVxkQw1xvn/Wk/EvBnqWIq6NLo1AppwbYOjNLmyU0R1RoQ3rLEBtmjTnElcnz8VEtn11fptj1ECxK0tgURhajw==} engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.11.18 - playwright-core: 1.29.2 + '@types/node': 18.11.19 + playwright-core: 1.30.0 dev: true /@polka/url/1.0.0-next.21: @@ -407,17 +436,17 @@ packages: dev: true optional: true - /@sveltejs/adapter-auto/1.0.1_@sveltejs+kit@1.1.3: - resolution: {integrity: sha512-IGek24xN1wJb+gz0hyGSxbIvM7q2K+BXquyycteCWbH9MPosjw8+LuIB2HIH20thE/647UEQBNqCM9R73lAUXA==} + /@sveltejs/adapter-auto/1.0.2_@sveltejs+kit@1.3.10: + resolution: {integrity: sha512-UXpEO/gutERZnD+Z5Vi4J/ifD3WSRuCI7xwtLJTcKNQvJ6t5Xsj1X3Mw2F8Vv/XTUuxf7xPLYUgThU331r0Y9w==} peerDependencies: '@sveltejs/kit': ^1.0.0 dependencies: - '@sveltejs/kit': 1.1.3_svelte@3.55.1+vite@4.0.4 + '@sveltejs/kit': 1.3.10_svelte@3.55.1+vite@4.1.1 import-meta-resolve: 2.2.1 dev: true - /@sveltejs/kit/1.1.3_svelte@3.55.1+vite@4.0.4: - resolution: {integrity: sha512-LVsJjJmimUf+p26EpBEZ6lDdwk+WqNGPyy9MQ1HVYLgj5AEECATMeg8OlmUujh7bW2Tib0Cag1UWI7zMMe66WA==} + /@sveltejs/kit/1.3.10_svelte@3.55.1+vite@4.1.1: + resolution: {integrity: sha512-I3DgWCwTYbTz4ZPCJIRkSDrKkMu0bsdk6ghqsOBVNqesf1wBdTdfkXhag3ESWgIEjUV3VUIWPQF7fnt7328mhQ==} engines: {node: ^16.14 || >=18} hasBin: true requiresBuild: true @@ -425,10 +454,10 @@ packages: svelte: ^3.54.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.0.4 + '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.1.1 '@types/cookie': 0.5.1 cookie: 0.5.0 - devalue: 4.2.2 + devalue: 4.2.3 esm-env: 1.0.0 kleur: 4.1.5 magic-string: 0.27.0 @@ -438,13 +467,13 @@ packages: sirv: 2.0.2 svelte: 3.55.1 tiny-glob: 0.2.9 - undici: 5.15.0 - vite: 4.0.4 + undici: 5.16.0 + vite: 4.1.1 transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4: + /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.1.1: resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -452,13 +481,13 @@ packages: vite: ^4.0.0 dependencies: debug: 4.3.4 - deepmerge: 4.2.2 + deepmerge: 4.3.0 kleur: 4.1.5 magic-string: 0.27.0 svelte: 3.55.1 svelte-hmr: 0.15.1_svelte@3.55.1 - vite: 4.0.4 - vitefu: 0.2.4_vite@4.0.4 + vite: 4.1.1 + vitefu: 0.2.4_vite@4.1.1 transitivePeerDependencies: - supports-color dev: true @@ -481,8 +510,8 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/node/18.11.18: - resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} + /@types/node/18.11.19: + resolution: {integrity: sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==} dev: true /@types/pug/2.0.6: @@ -492,15 +521,15 @@ packages: /@types/sass/1.43.1: resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.11.19 dev: true /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@typescript-eslint/eslint-plugin/5.48.2_caon6io6stgpr7lz2rtbhekxqy: - resolution: {integrity: sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==} + /@typescript-eslint/eslint-plugin/5.50.0_go4drrxstycfikanvu45pi4vgq: + resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -510,24 +539,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje - '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/type-utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje - '@typescript-eslint/utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/scope-manager': 5.50.0 + '@typescript-eslint/type-utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.33.0 + grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.48.2_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==} + /@typescript-eslint/parser/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64: + resolution: {integrity: sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -536,26 +566,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.4 + '@typescript-eslint/scope-manager': 5.50.0 + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5 debug: 4.3.4 - eslint: 8.32.0 - typescript: 4.9.4 + eslint: 8.33.0 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.48.2: - resolution: {integrity: sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==} + /@typescript-eslint/scope-manager/5.50.0: + resolution: {integrity: sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/visitor-keys': 5.48.2 + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/visitor-keys': 5.50.0 dev: true - /@typescript-eslint/type-utils/5.48.2_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} + /@typescript-eslint/type-utils/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64: + resolution: {integrity: sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -564,23 +594,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.4 - '@typescript-eslint/utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 debug: 4.3.4 - eslint: 8.32.0 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 + eslint: 8.33.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.48.2: - resolution: {integrity: sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==} + /@typescript-eslint/types/5.50.0: + resolution: {integrity: sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.48.2_typescript@4.9.4: - resolution: {integrity: sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==} + /@typescript-eslint/typescript-estree/5.50.0_typescript@4.9.5: + resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -588,52 +618,52 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/visitor-keys': 5.48.2 + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/visitor-keys': 5.50.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.4 - typescript: 4.9.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.48.2_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==} + /@typescript-eslint/utils/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64: + resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.4 - eslint: 8.32.0 + '@typescript-eslint/scope-manager': 5.50.0 + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5 + eslint: 8.33.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.33.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.48.2: - resolution: {integrity: sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==} + /@typescript-eslint/visitor-keys/5.50.0: + resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.2 + '@typescript-eslint/types': 5.50.0 eslint-visitor-keys: 3.3.0 dev: true - /acorn-jsx/5.3.2_acorn@8.8.1: + /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 + acorn: 8.8.2 dev: true /acorn-walk/8.2.0: @@ -641,8 +671,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn/8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -820,8 +850,8 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge/4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} dev: true @@ -830,8 +860,8 @@ packages: engines: {node: '>=8'} dev: true - /devalue/4.2.2: - resolution: {integrity: sha512-Pkwd8qrI9O20VJ14fBNHu+on99toTNZFbgWRpZbC0zbDXpnE2WHYcrC1fHhMsF/3Ee+2yaW7vEujAT7fCYgqrA==} + /devalue/4.2.3: + resolution: {integrity: sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ==} dev: true /dir-glob/3.0.1: @@ -887,22 +917,22 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier/8.6.0_eslint@8.32.0: + /eslint-config-prettier/8.6.0_eslint@8.33.0: resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.32.0 + eslint: 8.33.0 dev: true - /eslint-plugin-svelte3/4.0.0_tmo5zkisvhu6htudosk5k7m6pu: + /eslint-plugin-svelte3/4.0.0_4omm2ewoudhgnmf7aocafatnc4: resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: - eslint: 8.32.0 + eslint: 8.33.0 svelte: 3.55.1 dev: true @@ -922,13 +952,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.32.0: + /eslint-utils/3.0.0_eslint@8.33.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.32.0 + eslint: 8.33.0 eslint-visitor-keys: 2.1.0 dev: true @@ -942,8 +972,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.32.0: - resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} + /eslint/8.33.0: + resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -958,7 +988,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.33.0 eslint-visitor-keys: 3.3.0 espree: 9.4.1 esquery: 1.4.0 @@ -967,14 +997,14 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.20.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.2.0 + js-sdsl: 4.3.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -998,8 +1028,8 @@ packages: resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2_acorn@8.8.1 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 eslint-visitor-keys: 3.3.0 dev: true @@ -1140,8 +1170,8 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals/13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -1259,8 +1289,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /js-sdsl/4.2.0: - resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true /js-yaml/4.1.0: @@ -1291,8 +1321,8 @@ packages: type-check: 0.4.0 dev: true - /local-pkg/0.4.2: - resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + /local-pkg/0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} dev: true @@ -1320,6 +1350,13 @@ packages: yallist: 4.0.0 dev: true + /lucia-auth/0.6.0: + resolution: {integrity: sha512-8j5nPl3RbbqGoZWULER4q+2PP7i8F3Eq3OeN7EnL+bxi4YAn5I+5FcNq/ikUCj8neOxGZyzJiRzFJq+t3r28+g==} + dependencies: + '@noble/hashes': 1.2.0 + nanoid: 4.0.1 + dev: false + /magic-string/0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -1388,6 +1425,12 @@ packages: hasBin: true dev: true + /nanoid/4.0.1: + resolution: {integrity: sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + dev: false + /natural-compare-lite/1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true @@ -1477,8 +1520,8 @@ packages: engines: {node: '>=8.6'} dev: true - /playwright-core/1.29.2: - resolution: {integrity: sha512-94QXm4PMgFoHAhlCuoWyaBYKb92yOcGVHdQLoxQ7Wjlc7Flg4aC/jbFW7xMR52OfXMVkWicue4WXE7QEegbIRA==} + /playwright-core/1.30.0: + resolution: {integrity: sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==} engines: {node: '>=14'} hasBin: true dev: true @@ -1521,8 +1564,8 @@ packages: dependencies: '@prisma/engines': 4.9.0 - /punycode/2.2.0: - resolution: {integrity: sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==} + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true @@ -1575,8 +1618,8 @@ packages: glob: 7.2.3 dev: true - /rollup/3.10.0: - resolution: {integrity: sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==} + /rollup/3.13.0: + resolution: {integrity: sha512-HJwQtrXAc0AmyDohTJ/2c+Bx/sWPScJLlAUJ1kuD7rAkCro8Cr2SnVB2gVYBiSLxpgD2kZ24jbyXtG++GumrYQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -1657,14 +1700,14 @@ packages: engines: {node: '>=8'} dev: true - /sorcery/0.10.0: - resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} + /sorcery/0.11.0: + resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} hasBin: true dependencies: + '@jridgewell/sourcemap-codec': 1.4.14 buffer-crc32: 0.2.13 minimist: 1.2.7 sander: 0.5.1 - sourcemap-codec: 1.4.8 dev: true /source-map-js/1.0.2: @@ -1677,11 +1720,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: true - /streamsearch/1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -1706,10 +1744,10 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal/1.0.0: - resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==} + /strip-literal/1.0.1: + resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.8.1 + acorn: 8.8.2 dev: true /supports-color/7.2.0: @@ -1724,8 +1762,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check/3.0.2_svelte@3.55.1: - resolution: {integrity: sha512-DkhKhV0Jt0gh7q9DBB26+J2Vfb9y4/4JWxnbkXBZha7542LOhwvj3edJFjyJ+xjdaXyInZ+YRRYc3V6wytP2ew==} + /svelte-check/3.0.3_svelte@3.55.1: + resolution: {integrity: sha512-ByBFXo3bfHRGIsYEasHkdMhLkNleVfszX/Ns1oip58tPJlKdo5Ssr8kgVIuo5oq00hss8AIcdesuy0Xt0BcTvg==} hasBin: true peerDependencies: svelte: ^3.55.0 @@ -1737,8 +1775,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.55.1 - svelte-preprocess: 5.0.0_atrrhq7vg4ekua4nnyrpuardle - typescript: 4.9.4 + svelte-preprocess: 5.0.1_4x7phaipmicbaooxtnresslofa + typescript: 4.9.5 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -1760,8 +1798,8 @@ packages: svelte: 3.55.1 dev: true - /svelte-preprocess/5.0.0_atrrhq7vg4ekua4nnyrpuardle: - resolution: {integrity: sha512-q7lpa7i2FBu8Pa+G0MmuQQWETBwCKgsGmuq1Sf6n8q4uaG9ZLcLP0Y+etC6bF4sE6EbLxfiI38zV6RfPe3RSfg==} + /svelte-preprocess/5.0.1_4x7phaipmicbaooxtnresslofa: + resolution: {integrity: sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ==} engines: {node: '>= 14.10.0'} requiresBuild: true peerDependencies: @@ -1802,16 +1840,15 @@ packages: '@types/sass': 1.43.1 detect-indent: 6.1.0 magic-string: 0.27.0 - sorcery: 0.10.0 + sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 3.55.1 - typescript: 4.9.4 + typescript: 4.9.5 dev: true /svelte/3.55.1: resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==} engines: {node: '>= 8'} - dev: true /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -1828,8 +1865,8 @@ packages: resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==} dev: true - /tinypool/0.3.0: - resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} + /tinypool/0.3.1: + resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} engines: {node: '>=14.0.0'} dev: true @@ -1854,18 +1891,18 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: true - /tsutils/3.21.0_typescript@4.9.4: + /tsutils/3.21.0_typescript@4.9.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.4 + typescript: 4.9.5 dev: true /type-check/0.4.0: @@ -1885,14 +1922,14 @@ packages: engines: {node: '>=10'} dev: true - /typescript/4.9.4: - resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /undici/5.15.0: - resolution: {integrity: sha512-wCAZJDyjw9Myv+Ay62LAoB+hZLPW9SmKbQkbHIhMw/acKSlpn7WohdMUc/Vd4j1iSMBO0hWwU8mjB7a5p5bl8g==} + /undici/5.16.0: + resolution: {integrity: sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==} engines: {node: '>=12.18'} dependencies: busboy: 1.6.0 @@ -1901,11 +1938,11 @@ packages: /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.2.0 + punycode: 2.3.0 dev: true - /vite/4.0.4: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} + /vite/4.1.1: + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -1932,13 +1969,13 @@ packages: esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.10.0 + rollup: 3.13.0 optionalDependencies: fsevents: 2.3.2 dev: true - /vite/4.0.4_@types+node@18.11.18: - resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} + /vite/4.1.1_@types+node@18.11.19: + resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -1962,16 +1999,16 @@ packages: terser: optional: true dependencies: - '@types/node': 18.11.18 + '@types/node': 18.11.19 esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.10.0 + rollup: 3.13.0 optionalDependencies: fsevents: 2.3.2 dev: true - /vitefu/0.2.4_vite@4.0.4: + /vitefu/0.2.4_vite@4.1.1: resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: vite: ^3.0.0 || ^4.0.0 @@ -1979,7 +2016,7 @@ packages: vite: optional: true dependencies: - vite: 4.0.4 + vite: 4.1.1 dev: true /vitest/0.25.8: @@ -2006,18 +2043,18 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 18.11.18 - acorn: 8.8.1 + '@types/node': 18.11.19 + acorn: 8.8.2 acorn-walk: 8.2.0 chai: 4.3.7 debug: 4.3.4 - local-pkg: 0.4.2 + local-pkg: 0.4.3 source-map: 0.6.1 - strip-literal: 1.0.0 + strip-literal: 1.0.1 tinybench: 2.3.1 - tinypool: 0.3.0 + tinypool: 0.3.1 tinyspy: 1.0.2 - vite: 4.0.4_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.11.19 transitivePeerDependencies: - less - sass diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6d8beb7..4e2128a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -14,4 +14,39 @@ model Article { id Int @id @default(autoincrement()) title String content String + User User @relation(fields: [userId], references: [id]) + userId String +} + +model User { + id String @id @unique + name String + username String @unique + articles Article[] + session Session[] + Key Key[] + + @@map("user") +} + +model Session { + id String @id @unique + user_id String + active_expires BigInt + idle_expires BigInt + user User @relation(references: [id], fields: [user_id], onDelete: Cascade) + + @@index([user_id]) + @@map("session") +} + +model Key { + id String @id @unique + hashed_password String? + user_id String + primary Boolean + user User @relation(references: [id], fields: [user_id], onDelete: Cascade) + + @@index([user_id]) + @@map("key") } diff --git a/src/app.d.ts b/src/app.d.ts index 19ea674..cc85c67 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -3,11 +3,24 @@ import type { PrismaClient } from "@prisma/client" declare global { namespace App { // interface Error {} - // interface Locals {} + interface Locals { + validate: import("@lucia-auth/sveltekit").Validate + validateUser: import("@lucia-auth/sveltekit").ValidateUser + setSession: import("@lucia-auth/sveltekit").SetSession + } // interface PageData {} // interface Platform {} } var __prisma: PrismaClient + + /// + declare namespace Lucia { + type Auth = import("$lib/server/lucia").Auth + type UserAttributes = { + username: string + name: string + } + } } export {} diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..5727024 --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,10 @@ +import { handleHooks } from "@lucia-auth/sveltekit" +import { auth } from "$lib/server/lucia" +import type { Handle } from "@sveltejs/kit" +import { sequence } from "@sveltejs/kit/hooks" + +export const customHandle: Handle = async ({ resolve, event }) => { + return resolve(event) +} + +export const handle: Handle = sequence(handleHooks(auth), customHandle) diff --git a/src/lib/server/lucia.ts b/src/lib/server/lucia.ts new file mode 100644 index 0000000..3afd315 --- /dev/null +++ b/src/lib/server/lucia.ts @@ -0,0 +1,18 @@ +import lucia from "lucia-auth" +import prismaAdapter from "@lucia-auth/adapter-prisma" +import { dev } from "$app/environment" +import { prisma } from "$lib/server/prisma" + +export const auth = lucia({ + adapter: prismaAdapter(prisma), + env: dev ? "DEV" : "PROD", + transformUserData: (userData) => { + return { + userId: userData.id, + username: userData.username, + name: userData.name, + } + }, +}) + +export type Auth = typeof auth diff --git a/src/lib/server/prisma.ts b/src/lib/server/prisma.ts index 339f092..a7bac24 100644 --- a/src/lib/server/prisma.ts +++ b/src/lib/server/prisma.ts @@ -1,8 +1,9 @@ import { PrismaClient } from "@prisma/client" +import { env } from "$env/dynamic/private" const prisma = global.__prisma || new PrismaClient() -if (process.env.NODE_ENV === "development") { +if (env.NODE_ENV === "development") { global.__prisma = prisma } diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts new file mode 100644 index 0000000..fb5c940 --- /dev/null +++ b/src/routes/+layout.server.ts @@ -0,0 +1,6 @@ +import type { LayoutServerLoad } from "./$types" + +export const load: LayoutServerLoad = async ({ locals }) => { + const { user, session } = await locals.validateUser() + return { user } +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index b82c45d..d8b5e68 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,5 +1,7 @@
@@ -12,9 +14,17 @@ diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 6993761..29f3e88 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,6 +1,6 @@ import type { Actions, PageServerLoad } from "./$types" import { prisma } from "$lib/server/prisma" -import { fail } from "@sveltejs/kit" +import { error, fail, redirect } from "@sveltejs/kit" export const load: PageServerLoad = async () => { return { @@ -9,7 +9,12 @@ export const load: PageServerLoad = async () => { } export const actions: Actions = { - createArticle: async ({ request }) => { + createArticle: async ({ request, locals }) => { + const { user, session } = await locals.validateUser() + if (!(user && session)) { + throw redirect(302, "/") + } + const { title, content } = Object.fromEntries( await request.formData(), ) as Record @@ -19,6 +24,7 @@ export const actions: Actions = { data: { title, content, + userId: user.userId, }, }) } catch (err) { @@ -30,13 +36,27 @@ export const actions: Actions = { status: 201, } }, - deleteArticle: async ({ url }) => { + deleteArticle: async ({ url, locals }) => { + const { user, session } = await locals.validateUser() + if (!(user && session)) { + throw redirect(302, "/") + } const id = url.searchParams.get("id") if (!id) { return fail(400, { message: "Invalid request" }) } try { + const article = await prisma.article.findUniqueOrThrow({ + where: { + id: Number(id), + }, + }) + + if (article.userId !== user.userId) { + throw error(403, "Not authorized") + } + await prisma.article.delete({ where: { id: Number(id), diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 2746c21..e465d23 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -15,21 +15,25 @@

{article.content}

-
- -
- Edit Article + {#if article.userId === data.user?.userId} +
+ +
+ Edit Article + {/if} {/each}
-
-

New Article

- - - -