From 56d60da9bb082fba2e4da43d4c4ef869855f5fa7 Mon Sep 17 00:00:00 2001 From: vtempest Date: Thu, 26 Dec 2024 00:23:48 -0800 Subject: [PATCH 1/2] necessary for real world production use. custom sign in page, local sql db with schema for email auth, top 5 oauth with icons in demo. --- LICENSE | 15 - bun.lockb | Bin 0 -> 129872 bytes local.db | Bin 0 -> 32768 bytes package.json | 30 +- pnpm-lock.yaml | 1421 --------------------------- postcss.config.cjs | 14 + src/app.css | 52 + src/auth.ts | 70 -- src/components/external-icon.svelte | 19 - src/components/footer.svelte | 56 -- src/components/header.svelte | 4 +- src/hooks.server.ts | 2 +- src/lib/SignInButton.svelte | 12 - src/lib/db/drizzle.config.ts | 38 + src/lib/db/schema.ts | 61 ++ src/lib/server/auth.ts | 50 + src/routes/+layout.svelte | 54 +- src/routes/protected/+page.svelte | 2 +- src/routes/signin/+page.server.ts | 7 +- src/routes/signin/+page.svelte | 135 +++ src/routes/signout/+page.server.ts | 3 +- svelte.config.js | 6 +- tailwind.config.js | 11 + tsconfig.json | 9 +- vite.config.js | 2 +- 25 files changed, 402 insertions(+), 1671 deletions(-) delete mode 100644 LICENSE create mode 100644 bun.lockb create mode 100644 local.db delete mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.cjs create mode 100644 src/app.css delete mode 100644 src/auth.ts delete mode 100644 src/components/external-icon.svelte delete mode 100644 src/components/footer.svelte delete mode 100644 src/lib/SignInButton.svelte create mode 100644 src/lib/db/drizzle.config.ts create mode 100644 src/lib/db/schema.ts create mode 100644 src/lib/server/auth.ts create mode 100644 src/routes/signin/+page.svelte create mode 100644 tailwind.config.js diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 360d357..0000000 --- a/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -ISC License - -Copyright (c) 2022-2024, Balázs Orbán - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..9803b1a1b1e3e701494539a015f5bee1304daaa5 GIT binary patch literal 129872 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�e^WsKPCH8odM;oF^lz#R8Se<<~1w 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 N89#meKl2pezW~3ml?wm> literal 0 HcmV?d00001 diff --git a/package.json b/package.json index eeca83a..4978254 100644 --- a/package.json +++ b/package.json @@ -10,20 +10,30 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + "db:generate": "drizzle-kit generate --config=./src/lib/db/drizzle.config.ts", + "db:push": "drizzle-kit push --config=./src/lib/db/drizzle.config.ts", + "db:studio": "drizzle-kit studio --config=./src/lib/db/drizzle.config.ts", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json" }, "devDependencies": { - "@sveltejs/adapter-auto": "3.2.0", - "@sveltejs/kit": "2.5.7", - "@sveltejs/vite-plugin-svelte": "^3.1.0", - "svelte": "4.2.19", - "svelte-check": "3.6.9", - "typescript": "5.4.5", - "vite": "5.2.14" + "@sveltejs/adapter-auto": "3.3.1", + "@sveltejs/kit": "2.15.0", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "autoprefixer": "^10.4.20", + "drizzle-kit": "^0.30.1", + "postcss": "^8.4.49", + "postcss-load-config": "^6.0.1", + "svelte": "5.16.0", + "svelte-check": "4.1.1", + "tailwindcss": "^3.4.17", + "typescript": "5.7.2", + "vite": "6.0.6" }, "dependencies": { - "@auth/sveltekit": "latest" + "@auth/drizzle-adapter": "^1.7.4", + "@auth/sveltekit": "^1.7.4", + "@libsql/client": "^0.14.0", + "drizzle-orm": "^0.38.3" }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 91586e2..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,1421 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@auth/sveltekit': - specifier: latest - version: 1.0.1(@sveltejs/kit@2.5.7)(svelte@4.2.15) - devDependencies: - '@sveltejs/adapter-auto': - specifier: 3.2.0 - version: 3.2.0(@sveltejs/kit@2.5.7) - '@sveltejs/kit': - specifier: 2.5.7 - version: 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) - '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.15)(vite@5.2.10) - svelte: - specifier: 4.2.15 - version: 4.2.15 - svelte-check: - specifier: 3.6.9 - version: 3.6.9(svelte@4.2.15) - typescript: - specifier: 5.4.5 - version: 5.4.5 - vite: - specifier: 5.2.10 - version: 5.2.10 - -packages: - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - - '@auth/core@0.30.0': - resolution: {integrity: sha512-8AE4m/nk+4EIiVCJwxZAsJeAQuzpEC8M8768mmKVn60CGDdupKQkVhxbRlm5Qh7eNRCoFFME+0DvtaX2aXrYaA==} - peerDependencies: - '@simplewebauthn/browser': ^9.0.1 - '@simplewebauthn/server': ^9.0.2 - nodemailer: ^6.8.0 - peerDependenciesMeta: - '@simplewebauthn/browser': - optional: true - '@simplewebauthn/server': - optional: true - nodemailer: - optional: true - - '@auth/sveltekit@1.0.1': - resolution: {integrity: sha512-PNV/r20o1fRNs72CjwMgiw4Ti12BYm/GVpuMbTzNxHE+eZLWuw4MZY05LtMvy9VmN8LWlEKxTmAQKj7nUmYJNA==} - peerDependencies: - '@sveltejs/kit': ^1.0.0 || ^2.0.0 - svelte: ^3.54.0 || ^4.0.0 || ^5 - - '@esbuild/aix-ppc64@0.20.2': - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.20.2': - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.20.2': - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.20.2': - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.20.2': - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.20.2': - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.20.2': - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.20.2': - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.20.2': - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.20.2': - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.20.2': - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.20.2': - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.20.2': - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.20.2': - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.20.2': - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.20.2': - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.20.2': - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.20.2': - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.20.2': - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.20.2': - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.20.2': - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.20.2': - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.20.2': - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@jridgewell/gen-mapping@0.3.4': - resolution: {integrity: sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.23': - resolution: {integrity: sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@panva/hkdf@1.1.1': - resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==} - - '@polka/url@1.0.0-next.24': - resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} - - '@rollup/rollup-android-arm-eabi@4.16.0': - resolution: {integrity: sha512-4fDVBAfWYlw2CtYgHEWarAYSozTx5OYLsSM/cdGW7H51FwI10DaGnjKgdqWyWXY/VjugelzriCiKf1UdM20Bxg==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.16.0': - resolution: {integrity: sha512-JltUBgsKgN108NO4/hj0B/dJYNrqqmdRCtUet5tFDi/w+0tvQP0FToyWBV4HKBcSX4cvFChrCyt5Rh4FX6M6QQ==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.16.0': - resolution: {integrity: sha512-UwF7tkWf0roggMRv7Vrkof7VgX9tEZIc4vbaQl0/HNX3loWlcum+0ODp1Qsd8s7XvQGT+Zboxx1qxav3vq8YDw==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.16.0': - resolution: {integrity: sha512-RIY42wn6+Yb0qD29T7Dvm9/AhxrkGDf7X5dgI6rUFXR19+vCLh3u45yLcKOayu2ZQEba9rf/+BX3EggVwckiIw==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.16.0': - resolution: {integrity: sha512-r2TGCIKzqk8VwjOvW7sveledh6aPao131ejUfZNIyFlWBCruF4HOu51KtLArDa7LL6qKd0vkgxGX3/2NmYpWig==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.16.0': - resolution: {integrity: sha512-/QwaDp0RXQTtm25wQFSl02zEm9oveRXr9qAHbdxWCm9YG9dR8esqpyqzS/3GgHDm7jHktPNz9gTENfoUKRCcXQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.16.0': - resolution: {integrity: sha512-iypHsz7YEfoyNL0iHbQ7B7pY6hpymvvMgFXXaMd5+WCtvJ9zqWPZKFmo78UeWzWNmTP9JtPiNIQt6efRxx/MNA==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.16.0': - resolution: {integrity: sha512-7UpYcO0uVeomnoL5MpQhrS0FT7xZUJrEXtKVLmps5bRA7x5AiA1PDuPnMbxcOBWjIM2HHIG1t3ndnRTVMIbk5A==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.16.0': - resolution: {integrity: sha512-FSuFy4/hOQy0lH135ifnElP/6dKoHcZGHovsaRY0jrfNRR2yjMnVYaqNHKGKy0b/1I8DkD/JtclgJfq7SPti1w==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.16.0': - resolution: {integrity: sha512-qxAB8MiHuDI8jU0D+WI9Gym3fvUJHA/AjKRXxbEH921SB3AeKQStq1FKFA59dAoqqCArjJ1voXM/gMvgEc1q4Q==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.16.0': - resolution: {integrity: sha512-j/9yBgWFlNFBfG/S1M2zkBNLeLkNVG59T5c4tlmlrxU+XITWJ3aMVWdpcZ/+mu7auGZftAXueAgAE9mb4lAlag==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.16.0': - resolution: {integrity: sha512-SjsBA1a9wrEleNneGEsR40HdxKdwCatyHC547o/XINqwPW4cqTYiNy/lL1WTJYWU/KgWIb8HH4SgmFStbWoBzw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.16.0': - resolution: {integrity: sha512-YKCs7ghJZ5po6/qgfONiXyFKOKcTK4Kerzk/Kc89QK0JT94Qg4NurL+3Y3rZh5am2tu1OlvHPpBHQNBE8cFgJQ==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.16.0': - resolution: {integrity: sha512-+wtkF+z2nw0ZwwHji01wOW0loxFl24lBNxPtVAXtnPPDL9Ew0EhiCMOegXe/EAH3Zlr8Iw9tyPJXB3DltQLEyw==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.16.0': - resolution: {integrity: sha512-7qLyKTL7Lf2g0B8bduETVAEI3WVUVwBRVcECojVevPNVAmi19IW1P2X+uMSwhmWNy36Q/qEvxXsfts1I8wpawg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.16.0': - resolution: {integrity: sha512-tkfxXt+7c3Ecgn7ln9NJPdBM+QKwQdmFFpgAP+FYhAuRS5y3tY8xeza82gFjbPpytkHmaQnVdMtuzbToCz2tuw==} - cpu: [x64] - os: [win32] - - '@sveltejs/adapter-auto@3.2.0': - resolution: {integrity: sha512-She5nKT47kwHE18v9NMe6pbJcvULr82u0V3yZ0ej3n1laWKGgkgdEABE9/ak5iDPs93LqsBkuIo51kkwCLBjJA==} - peerDependencies: - '@sveltejs/kit': ^2.0.0 - - '@sveltejs/kit@2.5.7': - resolution: {integrity: sha512-6uedTzrb7nQrw6HALxnPrPaXdIN2jJJTzTIl96Z3P5NiG+OAfpdPbrWrvkJ3GN4CfWqrmU4dJqwMMRMTD/C7ow==} - engines: {node: '>=18.13'} - hasBin: true - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 - - '@sveltejs/vite-plugin-svelte-inspector@2.0.0': - resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} - engines: {node: ^18.0.0 || >=20} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.0 - - '@sveltejs/vite-plugin-svelte@3.1.0': - resolution: {integrity: sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw==} - engines: {node: ^18.0.0 || >=20} - peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.0 - - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - '@types/pug@2.0.10': - resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - - axobject-query@4.0.0: - resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} - - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - - esbuild@0.20.2: - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} - engines: {node: '>=12'} - hasBin: true - - esm-env@1.0.0: - resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - - jose@5.2.2: - resolution: {integrity: sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - - magic-string@0.30.7: - resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} - engines: {node: '>=12'} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - oauth4webapi@2.10.3: - resolution: {integrity: sha512-9FkXEXfzVKzH63GUOZz1zMr3wBaICSzk6DLXx+CGdrQ10ItNk2ePWzYYc1fdmKq1ayGFb2aX97sRCoZ2s0mkDw==} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - - preact-render-to-string@5.2.3: - resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} - peerDependencies: - preact: '>=10' - - preact@10.11.3: - resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} - - pretty-format@3.8.0: - resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true - - rollup@4.16.0: - resolution: {integrity: sha512-joxy/Hd4Ee289394//Q1aoebcxXyHasDieCTk8YtP4G4al4TUlx85EnuCLrfrdtLzrna9kNjH++Sx063wxSgmA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - sander@0.5.1: - resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - - set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - sorcery@0.11.0: - resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} - hasBin: true - - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - svelte-check@3.6.9: - resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==} - hasBin: true - peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - - svelte-hmr@0.16.0: - resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - - svelte-preprocess@5.1.3: - resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} - engines: {node: '>= 16.0.0', pnpm: ^8.0.0} - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - - svelte@4.2.15: - resolution: {integrity: sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==} - engines: {node: '>=16'} - - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - - vite@5.2.10: - resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - -snapshots: - - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 - - '@auth/core@0.30.0': - dependencies: - '@panva/hkdf': 1.1.1 - '@types/cookie': 0.6.0 - cookie: 0.6.0 - jose: 5.2.2 - oauth4webapi: 2.10.3 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) - - '@auth/sveltekit@1.0.1(@sveltejs/kit@2.5.7)(svelte@4.2.15)': - dependencies: - '@auth/core': 0.30.0 - '@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) - set-cookie-parser: 2.6.0 - svelte: 4.2.15 - transitivePeerDependencies: - - '@simplewebauthn/browser' - - '@simplewebauthn/server' - - nodemailer - - '@esbuild/aix-ppc64@0.20.2': - optional: true - - '@esbuild/android-arm64@0.20.2': - optional: true - - '@esbuild/android-arm@0.20.2': - optional: true - - '@esbuild/android-x64@0.20.2': - optional: true - - '@esbuild/darwin-arm64@0.20.2': - optional: true - - '@esbuild/darwin-x64@0.20.2': - optional: true - - '@esbuild/freebsd-arm64@0.20.2': - optional: true - - '@esbuild/freebsd-x64@0.20.2': - optional: true - - '@esbuild/linux-arm64@0.20.2': - optional: true - - '@esbuild/linux-arm@0.20.2': - optional: true - - '@esbuild/linux-ia32@0.20.2': - optional: true - - '@esbuild/linux-loong64@0.20.2': - optional: true - - '@esbuild/linux-mips64el@0.20.2': - optional: true - - '@esbuild/linux-ppc64@0.20.2': - optional: true - - '@esbuild/linux-riscv64@0.20.2': - optional: true - - '@esbuild/linux-s390x@0.20.2': - optional: true - - '@esbuild/linux-x64@0.20.2': - optional: true - - '@esbuild/netbsd-x64@0.20.2': - optional: true - - '@esbuild/openbsd-x64@0.20.2': - optional: true - - '@esbuild/sunos-x64@0.20.2': - optional: true - - '@esbuild/win32-arm64@0.20.2': - optional: true - - '@esbuild/win32-ia32@0.20.2': - optional: true - - '@esbuild/win32-x64@0.20.2': - optional: true - - '@jridgewell/gen-mapping@0.3.4': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.23': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@panva/hkdf@1.1.1': {} - - '@polka/url@1.0.0-next.24': {} - - '@rollup/rollup-android-arm-eabi@4.16.0': - optional: true - - '@rollup/rollup-android-arm64@4.16.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.16.0': - optional: true - - '@rollup/rollup-darwin-x64@4.16.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.16.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.16.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.16.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.16.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.16.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.16.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.16.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.16.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.16.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.16.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.16.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.16.0': - optional: true - - '@sveltejs/adapter-auto@3.2.0(@sveltejs/kit@2.5.7)': - dependencies: - '@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) - import-meta-resolve: 4.0.0 - - '@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10)': - dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.10) - '@types/cookie': 0.6.0 - cookie: 0.6.0 - devalue: 5.0.0 - esm-env: 1.0.0 - import-meta-resolve: 4.0.0 - kleur: 4.1.5 - magic-string: 0.30.7 - mrmime: 2.0.0 - sade: 1.8.1 - set-cookie-parser: 2.6.0 - sirv: 2.0.4 - svelte: 4.2.15 - tiny-glob: 0.2.9 - vite: 5.2.10 - - '@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10)': - dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.10) - debug: 4.3.4 - svelte: 4.2.15 - vite: 5.2.10 - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.10)': - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) - debug: 4.3.4 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.10 - svelte: 4.2.15 - svelte-hmr: 0.16.0(svelte@4.2.15) - vite: 5.2.10 - vitefu: 0.2.5(vite@5.2.10) - transitivePeerDependencies: - - supports-color - - '@types/cookie@0.6.0': {} - - '@types/estree@1.0.5': {} - - '@types/pug@2.0.10': {} - - acorn@8.11.3: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - - axobject-query@4.0.0: - dependencies: - dequal: 2.0.3 - - balanced-match@1.0.2: {} - - binary-extensions@2.2.0: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - buffer-crc32@0.2.13: {} - - callsites@3.1.0: {} - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - code-red@1.0.4: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.5 - acorn: 8.11.3 - estree-walker: 3.0.3 - periscopic: 3.1.0 - - concat-map@0.0.1: {} - - cookie@0.6.0: {} - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.0.2 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - deepmerge@4.3.1: {} - - dequal@2.0.3: {} - - detect-indent@6.1.0: {} - - devalue@5.0.0: {} - - es6-promise@3.3.1: {} - - esbuild@0.20.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.20.2 - '@esbuild/android-arm': 0.20.2 - '@esbuild/android-arm64': 0.20.2 - '@esbuild/android-x64': 0.20.2 - '@esbuild/darwin-arm64': 0.20.2 - '@esbuild/darwin-x64': 0.20.2 - '@esbuild/freebsd-arm64': 0.20.2 - '@esbuild/freebsd-x64': 0.20.2 - '@esbuild/linux-arm': 0.20.2 - '@esbuild/linux-arm64': 0.20.2 - '@esbuild/linux-ia32': 0.20.2 - '@esbuild/linux-loong64': 0.20.2 - '@esbuild/linux-mips64el': 0.20.2 - '@esbuild/linux-ppc64': 0.20.2 - '@esbuild/linux-riscv64': 0.20.2 - '@esbuild/linux-s390x': 0.20.2 - '@esbuild/linux-x64': 0.20.2 - '@esbuild/netbsd-x64': 0.20.2 - '@esbuild/openbsd-x64': 0.20.2 - '@esbuild/sunos-x64': 0.20.2 - '@esbuild/win32-arm64': 0.20.2 - '@esbuild/win32-ia32': 0.20.2 - '@esbuild/win32-x64': 0.20.2 - - esm-env@1.0.0: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.5 - - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globalyzer@0.1.0: {} - - globrex@0.1.2: {} - - graceful-fs@4.2.11: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-meta-resolve@4.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - - jose@5.2.2: {} - - kleur@4.1.5: {} - - locate-character@3.0.0: {} - - magic-string@0.30.10: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - - magic-string@0.30.7: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - - mdn-data@2.0.30: {} - - merge2@1.4.1: {} - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - min-indent@1.0.1: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimist@1.2.8: {} - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mri@1.2.0: {} - - mrmime@2.0.0: {} - - ms@2.1.2: {} - - nanoid@3.3.7: {} - - normalize-path@3.0.0: {} - - oauth4webapi@2.10.3: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-is-absolute@1.0.1: {} - - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - - picocolors@1.0.0: {} - - picomatch@2.3.1: {} - - postcss@8.4.38: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 - - preact-render-to-string@5.2.3(preact@10.11.3): - dependencies: - preact: 10.11.3 - pretty-format: 3.8.0 - - preact@10.11.3: {} - - pretty-format@3.8.0: {} - - queue-microtask@1.2.3: {} - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - resolve-from@4.0.0: {} - - reusify@1.0.4: {} - - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - - rollup@4.16.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.16.0 - '@rollup/rollup-android-arm64': 4.16.0 - '@rollup/rollup-darwin-arm64': 4.16.0 - '@rollup/rollup-darwin-x64': 4.16.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.16.0 - '@rollup/rollup-linux-arm-musleabihf': 4.16.0 - '@rollup/rollup-linux-arm64-gnu': 4.16.0 - '@rollup/rollup-linux-arm64-musl': 4.16.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.16.0 - '@rollup/rollup-linux-riscv64-gnu': 4.16.0 - '@rollup/rollup-linux-s390x-gnu': 4.16.0 - '@rollup/rollup-linux-x64-gnu': 4.16.0 - '@rollup/rollup-linux-x64-musl': 4.16.0 - '@rollup/rollup-win32-arm64-msvc': 4.16.0 - '@rollup/rollup-win32-ia32-msvc': 4.16.0 - '@rollup/rollup-win32-x64-msvc': 4.16.0 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - sade@1.8.1: - dependencies: - mri: 1.2.0 - - sander@0.5.1: - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - - set-cookie-parser@2.6.0: {} - - sirv@2.0.4: - dependencies: - '@polka/url': 1.0.0-next.24 - mrmime: 2.0.0 - totalist: 3.0.1 - - sorcery@0.11.0: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - buffer-crc32: 0.2.13 - minimist: 1.2.8 - sander: 0.5.1 - - source-map-js@1.0.2: {} - - source-map-js@1.2.0: {} - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - - svelte-check@3.6.9(svelte@4.2.15): - dependencies: - '@jridgewell/trace-mapping': 0.3.23 - chokidar: 3.6.0 - fast-glob: 3.3.2 - import-fresh: 3.3.0 - picocolors: 1.0.0 - sade: 1.8.1 - svelte: 4.2.15 - svelte-preprocess: 5.1.3(svelte@4.2.15)(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss - - svelte-hmr@0.16.0(svelte@4.2.15): - dependencies: - svelte: 4.2.15 - - svelte-preprocess@5.1.3(svelte@4.2.15)(typescript@5.4.5): - dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.7 - sorcery: 0.11.0 - strip-indent: 3.0.0 - svelte: 4.2.15 - typescript: 5.4.5 - - svelte@4.2.15: - dependencies: - '@ampproject/remapping': 2.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.23 - '@types/estree': 1.0.5 - acorn: 8.11.3 - aria-query: 5.3.0 - axobject-query: 4.0.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 - is-reference: 3.0.2 - locate-character: 3.0.0 - magic-string: 0.30.7 - periscopic: 3.1.0 - - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - totalist@3.0.1: {} - - typescript@5.4.5: {} - - vite@5.2.10: - dependencies: - esbuild: 0.20.2 - postcss: 8.4.38 - rollup: 4.16.0 - optionalDependencies: - fsevents: 2.3.3 - - vitefu@0.2.5(vite@5.2.10): - dependencies: - vite: 5.2.10 - - wrappy@1.0.2: {} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..c0d30ff --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const tailwindcss = require("tailwindcss"); +const autoprefixer = require("autoprefixer"); + +const config = { + plugins: [ + //Some plugins, like tailwindcss/nesting, need to run before Tailwind, + tailwindcss(), + //But others, like autoprefixer, need to run after, + autoprefixer + ] +}; + +module.exports = config; diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..a2b1376 --- /dev/null +++ b/src/app.css @@ -0,0 +1,52 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + + +:global(body) { + font-family: + ui-sans-serif, + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + "Helvetica Neue", + Arial, + "Noto Sans", + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + padding: 0 1rem 0rem 1rem; + max-width: 768px; + margin: 0 auto; + background: #fff; + color: #333; + } + :global(li), + :global(p) { + line-height: 1.5rem; + } + :global(a) { + font-weight: 500; + } + :global(hr) { + border: 1px solid #ddd; + } + :global(iframe) { + background: #ccc; + border: 1px solid #ccc; + height: 10rem; + width: 100%; + border-radius: 0.5rem; + filter: invert(1); + } + .container { + height: 100dvh; + display: flex; + flex-direction: column; + justify-content: start; + align-items: stretch; + } \ No newline at end of file diff --git a/src/auth.ts b/src/auth.ts deleted file mode 100644 index 7924a16..0000000 --- a/src/auth.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { SvelteKitAuth } from "@auth/sveltekit" -import Apple from "@auth/sveltekit/providers/apple" -import Auth0 from "@auth/sveltekit/providers/auth0" -import AzureB2C from "@auth/sveltekit/providers/azure-ad-b2c" -import BoxyHQSAML from "@auth/sveltekit/providers/boxyhq-saml" -import Cognito from "@auth/sveltekit/providers/cognito" -import Coinbase from "@auth/sveltekit/providers/coinbase" -import Discord from "@auth/sveltekit/providers/discord" -import Dropbox from "@auth/sveltekit/providers/dropbox" -import Facebook from "@auth/sveltekit/providers/facebook" -import GitHub from "@auth/sveltekit/providers/github" -import GitLab from "@auth/sveltekit/providers/gitlab" -import Google from "@auth/sveltekit/providers/google" -import Hubspot from "@auth/sveltekit/providers/hubspot" -import Keycloak from "@auth/sveltekit/providers/keycloak" -import LinkedIn from "@auth/sveltekit/providers/linkedin" -import Netlify from "@auth/sveltekit/providers/netlify" -import Okta from "@auth/sveltekit/providers/okta" -import Passage from "@auth/sveltekit/providers/passage" -import Pinterest from "@auth/sveltekit/providers/pinterest" -import Reddit from "@auth/sveltekit/providers/reddit" -import Slack from "@auth/sveltekit/providers/slack" -import Spotify from "@auth/sveltekit/providers/spotify" -import Twitch from "@auth/sveltekit/providers/twitch" -import Twitter from "@auth/sveltekit/providers/twitter" -import WorkOS from "@auth/sveltekit/providers/workos" -import Zoom from "@auth/sveltekit/providers/zoom" -import { env } from "$env/dynamic/private" - -export const { handle, signIn, signOut } = SvelteKitAuth({ - trustHost: true, - providers: [ - Apple, - Auth0, - AzureB2C({ - clientId: env.AUTH_AZURE_AD_B2C_ID, - clientSecret: env.AUTH_AZURE_AD_B2C_SECRET, - issuer: env.AUTH_AZURE_AD_B2C_ISSUER, - }), - BoxyHQSAML({ - clientId: "dummy", - clientSecret: "dummy", - issuer: env.AUTH_BOXYHQ_SAML_ISSUER, - }), - Cognito, - Coinbase, - Discord, - Dropbox, - Facebook, - GitHub, - GitLab, - Google, - Hubspot, - Keycloak, - LinkedIn, - Netlify, - Okta, - Passage, - Pinterest, - Reddit, - Slack, - Spotify, - Twitch, - Twitter, - WorkOS({ - connection: env.AUTH_WORKOS_CONNECTION!, - }), - Zoom, - ], -}) diff --git a/src/components/external-icon.svelte b/src/components/external-icon.svelte deleted file mode 100644 index db2de54..0000000 --- a/src/components/external-icon.svelte +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/src/components/footer.svelte b/src/components/footer.svelte deleted file mode 100644 index ab045f9..0000000 --- a/src/components/footer.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - - - diff --git a/src/components/header.svelte b/src/components/header.svelte index 7fe13ed..3986d96 100644 --- a/src/components/header.svelte +++ b/src/components/header.svelte @@ -6,12 +6,12 @@
- User avatar + /> --> {#if $page.data.session} {$page.data.session.user?.email ?? $page.data.session.user?.name} diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 69f0f9e..badb89b 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1 +1 @@ -export { handle } from "./auth" +export { handle } from "$lib/server/auth" diff --git a/src/lib/SignInButton.svelte b/src/lib/SignInButton.svelte deleted file mode 100644 index 7de98fc..0000000 --- a/src/lib/SignInButton.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - -
- {#if provider.callbackUrl} - - {/if} - -
diff --git a/src/lib/db/drizzle.config.ts b/src/lib/db/drizzle.config.ts new file mode 100644 index 0000000..f592e1a --- /dev/null +++ b/src/lib/db/drizzle.config.ts @@ -0,0 +1,38 @@ +import path from "path"; +import fs from "fs"; +import type { Config } from "drizzle-kit"; + +const isDev = process.env.ENV == "dev"; +let dbCredentials; + +if (isDev) { + dbCredentials = { + url: "file:local.db" + }; +} else { + dbCredentials = { + // @ts-ignore + wranglerConfigPath: "wrangler.toml", + dbName: "qwksearch-db" + }; +} + +export default { + schema: "./src/lib/db/schema.ts", + out: "migrations", + dialect: "sqlite", + dbCredentials +} satisfies Config; + + + +/** + Create your D1 database via dashboard or with bunx wrangler d1 create my-db-prod. +Copy the console output database_name and database_id. +Go to wrangler.toml and change database_name and database_id. +Go to drizzle.config.ts and change db name in dbName. +Go to package.json and change db name in db:push:* and db:backup:prod. +Generate and migrate the schema to dev or prod db: +bun run db:migrate; bun run db:push:dev; bun run db:push:prod. + + */ \ No newline at end of file diff --git a/src/lib/db/schema.ts b/src/lib/db/schema.ts new file mode 100644 index 0000000..cbe7dc9 --- /dev/null +++ b/src/lib/db/schema.ts @@ -0,0 +1,61 @@ +import { integer, sqliteTable, text, primaryKey } from "drizzle-orm/sqlite-core" +import { createClient } from "@libsql/client" +import { drizzle } from "drizzle-orm/libsql" + +export const db = drizzle(createClient({ + url: "file:local.db", +})) + + + + +/************** AUTH MODELS ****************/ + +export const users = sqliteTable("user", { + id: text("id") + .primaryKey() + .$defaultFn(() => crypto.randomUUID()), + name: text("name"), + email: text("email").unique(), + emailVerified: integer("emailVerified", { mode: "timestamp_ms" }), + image: text("image"), +}) + +export const accounts = sqliteTable( + "account", + { + userId: text("userId") + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + type: text("type").$type().notNull(), + provider: text("provider").notNull(), + providerAccountId: text("providerAccountId").notNull(), + refresh_token: text("refresh_token"), + access_token: text("access_token"), + expires_at: integer("expires_at"), + token_type: text("token_type"), + scope: text("scope"), + id_token: text("id_token"), + session_state: text("session_state"), + }, + (account) => ({ + compoundKey: primaryKey({ + columns: [account.provider, account.providerAccountId], + }), + }) +) + +export const verificationTokens = sqliteTable( + "verificationToken", + { + identifier: text("identifier").notNull(), + token: text("token").notNull(), + expires: integer("expires", { mode: "timestamp_ms" }).notNull(), + }, + (verificationToken) => ({ + compositePk: primaryKey({ + columns: [verificationToken.identifier, verificationToken.token], + }), + }) +) + \ No newline at end of file diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts new file mode 100644 index 0000000..9f27305 --- /dev/null +++ b/src/lib/server/auth.ts @@ -0,0 +1,50 @@ +import { SvelteKitAuth } from "@auth/sveltekit" +import Apple from "@auth/sveltekit/providers/apple" +import Auth0 from "@auth/sveltekit/providers/auth0" +import AzureB2C from "@auth/sveltekit/providers/azure-ad-b2c" +import BoxyHQSAML from "@auth/sveltekit/providers/boxyhq-saml" +import Cognito from "@auth/sveltekit/providers/cognito" +import Coinbase from "@auth/sveltekit/providers/coinbase" +import Discord from "@auth/sveltekit/providers/discord" +import Dropbox from "@auth/sveltekit/providers/dropbox" +import Facebook from "@auth/sveltekit/providers/facebook" +import GitHub from "@auth/sveltekit/providers/github" +import GitLab from "@auth/sveltekit/providers/gitlab" +import Google from "@auth/sveltekit/providers/google" +import Hubspot from "@auth/sveltekit/providers/hubspot" +import Keycloak from "@auth/sveltekit/providers/keycloak" +import LinkedIn from "@auth/sveltekit/providers/linkedin" +import MicrosoftEntraID from "@auth/sveltekit/providers/microsoft-entra-id" +import Resend from "@auth/sveltekit/providers/resend" +import { DrizzleAdapter } from "@auth/drizzle-adapter" +import { db } from "$lib/db/schema" +import type { Provider } from "@auth/sveltekit/providers" + +export const { handle, signIn, signOut } = SvelteKitAuth({ + trustHost: true, + adapter: DrizzleAdapter(db), + secret: process.env.SECRET, + callbacks: { + async session({ session, user }) { + return session + }, + }, + session: { + strategy: "jwt", + maxAge: 30 * 24 * 60 * 60, // 30 days + }, + providers : [ + Google, + Discord, + LinkedIn, + Facebook, + MicrosoftEntraID, + Resend({ + from: "support@qwksearch.com", + }), + ], + pages: { + signIn: "/signin", + }, +}) + diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index fd915fd..0f30428 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,60 +1,10 @@
-
- - diff --git a/src/routes/protected/+page.svelte b/src/routes/protected/+page.svelte index 4acf5a3..42fdf6e 100644 --- a/src/routes/protected/+page.svelte +++ b/src/routes/protected/+page.svelte @@ -8,7 +8,7 @@ This is a protected content. You can access this content because you are signed in.

-

Session expiry: {$page.data.session?.expires}

+

Hello {$page.data.session?.user?.name}

{:else}

Access Denied

{/if} diff --git a/src/routes/signin/+page.server.ts b/src/routes/signin/+page.server.ts index 915d6be..0ccd38c 100644 --- a/src/routes/signin/+page.server.ts +++ b/src/routes/signin/+page.server.ts @@ -1,4 +1,5 @@ -import { signIn } from "../../auth" -import type { Actions } from "./$types" +import { signIn } from "$lib/server/auth" -export const actions = { default: signIn } satisfies Actions +import type { Actions } from "./$types" + +export const actions = { default: signIn } satisfies Actions \ No newline at end of file diff --git a/src/routes/signin/+page.svelte b/src/routes/signin/+page.svelte new file mode 100644 index 0000000..94794f0 --- /dev/null +++ b/src/routes/signin/+page.svelte @@ -0,0 +1,135 @@ + + + Sign in + + +
+
+
+
+ {#each providerMap as provider} + {#if provider.name !== "Resend"} + + +
+
+ {@html getProviderLogo(provider.name) || ""} +
+ + Login with {#if provider.name === "Microsoft Entra ID"}Microsoft{:else}{provider.name}{/if} + +
+
+ {/if} + {/each} +
+ +
+
+
+
+
+ or +
+
+ +
+ {#each providerMap as provider} + {#if provider.name === "Resend"} + +
+
+ Send Email with Login Link +
+
+
+ {/if} + {/each} +
+
+
+
diff --git a/src/routes/signout/+page.server.ts b/src/routes/signout/+page.server.ts index 1bc8b77..1361991 100644 --- a/src/routes/signout/+page.server.ts +++ b/src/routes/signout/+page.server.ts @@ -1,4 +1,5 @@ -import { signOut } from "../../auth" + +import { signOut } from "$lib/server/auth" import type { Actions } from "./$types" export const actions = { default: signOut } satisfies Actions diff --git a/svelte.config.js b/svelte.config.js index 368cb39..4fc3610 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,7 +1,8 @@ import adapter from "@sveltejs/adapter-auto" +/** @typedef {import('@sveltejs/kit').Config} Config */ import { vitePreprocess } from "@sveltejs/vite-plugin-svelte" -/** @type {import('@sveltejs/kit').Config} */ + /** @type {Config} */ const config = { // Consult https://kit.svelte.dev/docs/integrations#preprocessors // for more information about preprocessors @@ -11,8 +12,7 @@ const config = { adapter: adapter(), alias: { $components: "src/components", - $lib: "src/components", - $routes: "src/routes", + $lib: "src/lib", }, }, } diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..b6e2cca --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ + /** @type {Config} */ +/** @typedef {import('tailwindcss').Config} Config */ +export default { + content: [ + './src/**/*.{html,js,svelte,ts}' + ], + theme: { + extend: {}, + }, + plugins: [], +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 794b95b..feb501c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,9 +9,10 @@ "skipLibCheck": true, "sourceMap": true, "strict": true + }, + "tsc-alias": { + "resolveFullPaths": true, + "verbose": false } - // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in + } diff --git a/vite.config.js b/vite.config.js index fd586b2..32623de 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,7 +3,7 @@ import { defineConfig } from "vite" export default defineConfig({ server: { - port: 3000, + port: 5173, }, plugins: [sveltekit()], }) From ddba60abaa593f9ce8f187515773630c03b10f68 Mon Sep 17 00:00:00 2001 From: vtempest Date: Thu, 26 Dec 2024 00:28:52 -0800 Subject: [PATCH 2/2] footer is back --- src/components/external-icon.svelte | 19 ++++++++++ src/components/footer.svelte | 56 +++++++++++++++++++++++++++++ src/routes/+layout.svelte | 3 ++ 3 files changed, 78 insertions(+) create mode 100644 src/components/external-icon.svelte create mode 100644 src/components/footer.svelte diff --git a/src/components/external-icon.svelte b/src/components/external-icon.svelte new file mode 100644 index 0000000..db2de54 --- /dev/null +++ b/src/components/external-icon.svelte @@ -0,0 +1,19 @@ + diff --git a/src/components/footer.svelte b/src/components/footer.svelte new file mode 100644 index 0000000..ab045f9 --- /dev/null +++ b/src/components/footer.svelte @@ -0,0 +1,56 @@ + + + + + diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0f30428..9f4ceba 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,9 +2,12 @@ import '../app.css'; import Header from "$components/header.svelte" + import Footer from "$components/footer.svelte" +
+