├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── db-init └── schema.sql ├── docker-compose.yml ├── package.json ├── playwright.config.ts ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── index.test.ts ├── lib │ ├── config.ts │ └── surrealdb │ │ └── index.ts └── routes │ ├── +layout.ts │ └── +page.svelte ├── static ├── config.json ├── favicon.png ├── screenshot-signin.png └── screenshot-todos.png ├── svelte.config.js ├── tests └── test.ts ├── tsconfig.json └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "singleQuote": false, 4 | "trailingComma": "es5", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "pluginSearchDirs": ["."], 8 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | A starter-kit project from which to create your SvelteKit + SurrealDB projects 2 | 3 | # SurrealDB + SvelteKit Demo 4 | 5 | - Run SurrealDB in Docker `docker compose up -d` 6 | - Run SurrealDB client ... `docker compose exec db /surreal sql -c http://localhost:8000 --db test --ns test -u root -p root` and then copy-paste the contents of `db-init/schema.sql` (there should be a better way) 7 | - Run SvelteKit app: `pnpm install; npm run dev` 8 | - Visit http://localhost:5173 and "Sign Up" as a new user (also signs you in) 9 | 10 | ![Sign In / Sign Up](./static/screenshot-signin.png) 11 | 12 | - CRUD some todo's. 13 | 14 | ![CRUD todo's](./static/screenshot-todos.png) 15 | 16 | - Sign Out and Sign Up / Sign In as a different user. You should see a completely different list of todo's. 17 | - The above separation of todo records is achived by the following line in `schema.sql` -- `DEFINE FIELD user ON todo TYPE record(user) VALUE $session.sd ASSERT $value != null;` 18 | See https://github.com/surrealdb/surrealdb/discussions/1298#discussioncomment-4495145 19 | 20 | ## Developing & Building 21 | 22 | The usual SvelteKit stuff applies. 23 | -------------------------------------------------------------------------------- /db-init/schema.sql: -------------------------------------------------------------------------------- 1 | --- see https://gist.github.com/koakh/fbbc37cde630bedcf57acfd4d6a6956b 2 | 3 | ---opt1:SCHEMALESS 4 | ---DEFINE TABLE user SCHEMALESS 5 | --- PERMISSIONS 6 | --- FOR select, update WHERE id = $auth.id, 7 | --- FOR create, delete NONE; 8 | 9 | ---opt2:SCHEMAFULL 10 | DEFINE TABLE user SCHEMAFULL 11 | PERMISSIONS 12 | FOR select, update WHERE id = $auth.id, 13 | FOR create, delete NONE; 14 | 15 | DEFINE FIELD user ON user TYPE string; 16 | DEFINE FIELD pass ON user TYPE string; 17 | DEFINE FIELD settings.* ON user TYPE object; 18 | DEFINE FIELD settings.marketing ON user TYPE string; 19 | DEFINE FIELD tags ON user TYPE array; 20 | DEFINE INDEX idx_user ON user COLUMNS user UNIQUE; 21 | 22 | -- define scope 23 | DEFINE SCOPE allusers 24 | -- the JWT session will be valid for 14 days 25 | SESSION 14d 26 | -- The optional SIGNUP clause will be run when calling the signup method for this scope 27 | -- It is designed to create or add a new record to the database. 28 | -- If set, it needs to return a record or a record id 29 | -- The variables can be passed in to the signin method 30 | SIGNUP ( CREATE user SET settings.marketing = $marketing, user = $user, pass = crypto::argon2::generate($pass), tags = $tags ) 31 | -- The optional SIGNIN clause will be run when calling the signin method for this scope 32 | -- It is designed to check if a record exists in the database. 33 | -- If set, it needs to return a record or a record id 34 | -- The variables can be passed in to the signin method 35 | SIGNIN ( SELECT * FROM user WHERE user = $user AND crypto::argon2::compare(pass, $pass) ) 36 | ; 37 | 38 | -- a table for everyone 39 | --DEFINE TABLE todo SCHEMALESS PERMISSIONS FULL; 40 | DEFINE TABLE todo SCHEMAFULL 41 | PERMISSIONS 42 | FOR select, update, create, delete WHERE user = $auth.id; 43 | 44 | DEFINE FIELD title ON todo TYPE string; 45 | DEFINE FIELD completed ON todo TYPE bool; 46 | DEFINE FIELD user ON todo TYPE record(user) VALUE $session.sd ASSERT $value != null; 47 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.5' 2 | 3 | services: 4 | db: 5 | image: surrealdb/surrealdb:latest 6 | command: start --log debug --user root --pass root memory 7 | ports: 8 | - 8000:8000 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sdb-sk1", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "test": "playwright test", 10 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 11 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 12 | "test:unit": "vitest", 13 | "lint": "prettier --plugin-search-dir . --check .", 14 | "format": "prettier --plugin-search-dir . --write ." 15 | }, 16 | "devDependencies": { 17 | "@playwright/test": "^1.28.1", 18 | "@sveltejs/adapter-auto": "^1.0.0", 19 | "@sveltejs/kit": "^1.0.0", 20 | "prettier": "^2.8.0", 21 | "prettier-plugin-svelte": "^2.8.1", 22 | "surrealdb.js": "^0.5.0", 23 | "svelte": "^3.54.0", 24 | "svelte-check": "^2.9.2", 25 | "tslib": "^2.4.1", 26 | "typescript": "^4.9.3", 27 | "vite": "^4.0.0", 28 | "vitest": "^0.25.3" 29 | }, 30 | "type": "module" 31 | } 32 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import type { PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const config: PlaywrightTestConfig = { 4 | webServer: { 5 | command: 'npm run build && npm run preview', 6 | port: 4173 7 | }, 8 | testDir: 'tests' 9 | }; 10 | 11 | export default config; 12 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@playwright/test': ^1.28.1 5 | '@sveltejs/adapter-auto': ^1.0.0 6 | '@sveltejs/kit': ^1.0.0 7 | prettier: ^2.8.0 8 | prettier-plugin-svelte: ^2.8.1 9 | surrealdb.js: ^0.5.0 10 | svelte: ^3.54.0 11 | svelte-check: ^2.9.2 12 | tslib: ^2.4.1 13 | typescript: ^4.9.3 14 | vite: ^4.0.0 15 | vitest: ^0.25.3 16 | 17 | devDependencies: 18 | '@playwright/test': 1.29.1 19 | '@sveltejs/adapter-auto': 1.0.0_@sveltejs+kit@1.0.1 20 | '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.3 21 | prettier: 2.8.1 22 | prettier-plugin-svelte: 2.9.0_ajxj753sv7dbwexjherrch25ta 23 | surrealdb.js: 0.5.0 24 | svelte: 3.55.0 25 | svelte-check: 2.10.3_svelte@3.55.0 26 | tslib: 2.4.1 27 | typescript: 4.9.4 28 | vite: 4.0.3 29 | vitest: 0.25.8 30 | 31 | packages: 32 | 33 | /@esbuild/android-arm/0.16.10: 34 | resolution: {integrity: sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==} 35 | engines: {node: '>=12'} 36 | cpu: [arm] 37 | os: [android] 38 | requiresBuild: true 39 | dev: true 40 | optional: true 41 | 42 | /@esbuild/android-arm64/0.16.10: 43 | resolution: {integrity: sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==} 44 | engines: {node: '>=12'} 45 | cpu: [arm64] 46 | os: [android] 47 | requiresBuild: true 48 | dev: true 49 | optional: true 50 | 51 | /@esbuild/android-x64/0.16.10: 52 | resolution: {integrity: sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==} 53 | engines: {node: '>=12'} 54 | cpu: [x64] 55 | os: [android] 56 | requiresBuild: true 57 | dev: true 58 | optional: true 59 | 60 | /@esbuild/darwin-arm64/0.16.10: 61 | resolution: {integrity: sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==} 62 | engines: {node: '>=12'} 63 | cpu: [arm64] 64 | os: [darwin] 65 | requiresBuild: true 66 | dev: true 67 | optional: true 68 | 69 | /@esbuild/darwin-x64/0.16.10: 70 | resolution: {integrity: sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==} 71 | engines: {node: '>=12'} 72 | cpu: [x64] 73 | os: [darwin] 74 | requiresBuild: true 75 | dev: true 76 | optional: true 77 | 78 | /@esbuild/freebsd-arm64/0.16.10: 79 | resolution: {integrity: sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==} 80 | engines: {node: '>=12'} 81 | cpu: [arm64] 82 | os: [freebsd] 83 | requiresBuild: true 84 | dev: true 85 | optional: true 86 | 87 | /@esbuild/freebsd-x64/0.16.10: 88 | resolution: {integrity: sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==} 89 | engines: {node: '>=12'} 90 | cpu: [x64] 91 | os: [freebsd] 92 | requiresBuild: true 93 | dev: true 94 | optional: true 95 | 96 | /@esbuild/linux-arm/0.16.10: 97 | resolution: {integrity: sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==} 98 | engines: {node: '>=12'} 99 | cpu: [arm] 100 | os: [linux] 101 | requiresBuild: true 102 | dev: true 103 | optional: true 104 | 105 | /@esbuild/linux-arm64/0.16.10: 106 | resolution: {integrity: sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==} 107 | engines: {node: '>=12'} 108 | cpu: [arm64] 109 | os: [linux] 110 | requiresBuild: true 111 | dev: true 112 | optional: true 113 | 114 | /@esbuild/linux-ia32/0.16.10: 115 | resolution: {integrity: sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==} 116 | engines: {node: '>=12'} 117 | cpu: [ia32] 118 | os: [linux] 119 | requiresBuild: true 120 | dev: true 121 | optional: true 122 | 123 | /@esbuild/linux-loong64/0.16.10: 124 | resolution: {integrity: sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==} 125 | engines: {node: '>=12'} 126 | cpu: [loong64] 127 | os: [linux] 128 | requiresBuild: true 129 | dev: true 130 | optional: true 131 | 132 | /@esbuild/linux-mips64el/0.16.10: 133 | resolution: {integrity: sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==} 134 | engines: {node: '>=12'} 135 | cpu: [mips64el] 136 | os: [linux] 137 | requiresBuild: true 138 | dev: true 139 | optional: true 140 | 141 | /@esbuild/linux-ppc64/0.16.10: 142 | resolution: {integrity: sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==} 143 | engines: {node: '>=12'} 144 | cpu: [ppc64] 145 | os: [linux] 146 | requiresBuild: true 147 | dev: true 148 | optional: true 149 | 150 | /@esbuild/linux-riscv64/0.16.10: 151 | resolution: {integrity: sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==} 152 | engines: {node: '>=12'} 153 | cpu: [riscv64] 154 | os: [linux] 155 | requiresBuild: true 156 | dev: true 157 | optional: true 158 | 159 | /@esbuild/linux-s390x/0.16.10: 160 | resolution: {integrity: sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==} 161 | engines: {node: '>=12'} 162 | cpu: [s390x] 163 | os: [linux] 164 | requiresBuild: true 165 | dev: true 166 | optional: true 167 | 168 | /@esbuild/linux-x64/0.16.10: 169 | resolution: {integrity: sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==} 170 | engines: {node: '>=12'} 171 | cpu: [x64] 172 | os: [linux] 173 | requiresBuild: true 174 | dev: true 175 | optional: true 176 | 177 | /@esbuild/netbsd-x64/0.16.10: 178 | resolution: {integrity: sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==} 179 | engines: {node: '>=12'} 180 | cpu: [x64] 181 | os: [netbsd] 182 | requiresBuild: true 183 | dev: true 184 | optional: true 185 | 186 | /@esbuild/openbsd-x64/0.16.10: 187 | resolution: {integrity: sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==} 188 | engines: {node: '>=12'} 189 | cpu: [x64] 190 | os: [openbsd] 191 | requiresBuild: true 192 | dev: true 193 | optional: true 194 | 195 | /@esbuild/sunos-x64/0.16.10: 196 | resolution: {integrity: sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==} 197 | engines: {node: '>=12'} 198 | cpu: [x64] 199 | os: [sunos] 200 | requiresBuild: true 201 | dev: true 202 | optional: true 203 | 204 | /@esbuild/win32-arm64/0.16.10: 205 | resolution: {integrity: sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==} 206 | engines: {node: '>=12'} 207 | cpu: [arm64] 208 | os: [win32] 209 | requiresBuild: true 210 | dev: true 211 | optional: true 212 | 213 | /@esbuild/win32-ia32/0.16.10: 214 | resolution: {integrity: sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==} 215 | engines: {node: '>=12'} 216 | cpu: [ia32] 217 | os: [win32] 218 | requiresBuild: true 219 | dev: true 220 | optional: true 221 | 222 | /@esbuild/win32-x64/0.16.10: 223 | resolution: {integrity: sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==} 224 | engines: {node: '>=12'} 225 | cpu: [x64] 226 | os: [win32] 227 | requiresBuild: true 228 | dev: true 229 | optional: true 230 | 231 | /@jridgewell/resolve-uri/3.1.0: 232 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 233 | engines: {node: '>=6.0.0'} 234 | dev: true 235 | 236 | /@jridgewell/sourcemap-codec/1.4.14: 237 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 238 | dev: true 239 | 240 | /@jridgewell/trace-mapping/0.3.17: 241 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 242 | dependencies: 243 | '@jridgewell/resolve-uri': 3.1.0 244 | '@jridgewell/sourcemap-codec': 1.4.14 245 | dev: true 246 | 247 | /@nodelib/fs.scandir/2.1.5: 248 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 249 | engines: {node: '>= 8'} 250 | dependencies: 251 | '@nodelib/fs.stat': 2.0.5 252 | run-parallel: 1.2.0 253 | dev: true 254 | 255 | /@nodelib/fs.stat/2.0.5: 256 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 257 | engines: {node: '>= 8'} 258 | dev: true 259 | 260 | /@nodelib/fs.walk/1.2.8: 261 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 262 | engines: {node: '>= 8'} 263 | dependencies: 264 | '@nodelib/fs.scandir': 2.1.5 265 | fastq: 1.14.0 266 | dev: true 267 | 268 | /@playwright/test/1.29.1: 269 | resolution: {integrity: sha512-iQxk2DX5U9wOGV3+/Jh9OHPsw5H3mleUL2S4BgQuwtlAfK3PnKvn38m4Rg9zIViGHVW24opSm99HQm/UFLEy6w==} 270 | engines: {node: '>=14'} 271 | hasBin: true 272 | dependencies: 273 | '@types/node': 18.11.17 274 | playwright-core: 1.29.1 275 | dev: true 276 | 277 | /@polka/url/1.0.0-next.21: 278 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 279 | dev: true 280 | 281 | /@sveltejs/adapter-auto/1.0.0_@sveltejs+kit@1.0.1: 282 | resolution: {integrity: sha512-yKyPvlLVua1bJ/42FrR3X041mFGdB4GzTZOAEoHUcNBRE5Mhx94+eqHpC3hNvAOiLEDcKfVO0ObyKSu7qldU+w==} 283 | peerDependencies: 284 | '@sveltejs/kit': ^1.0.0 285 | dependencies: 286 | '@sveltejs/kit': 1.0.1_svelte@3.55.0+vite@4.0.3 287 | import-meta-resolve: 2.2.0 288 | dev: true 289 | 290 | /@sveltejs/kit/1.0.1_svelte@3.55.0+vite@4.0.3: 291 | resolution: {integrity: sha512-C41aCaDjA7xoUdsrc/lSdU1059UdLPIRE1vEIRRynzpMujNgp82bTMHkDosb6vykH6LrLf3tT2w2/5NYQhKYGQ==} 292 | engines: {node: ^16.14 || >=18} 293 | hasBin: true 294 | requiresBuild: true 295 | peerDependencies: 296 | svelte: ^3.54.0 297 | vite: ^4.0.0 298 | dependencies: 299 | '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.0+vite@4.0.3 300 | '@types/cookie': 0.5.1 301 | cookie: 0.5.0 302 | devalue: 4.2.0 303 | esm-env: 1.0.0 304 | kleur: 4.1.5 305 | magic-string: 0.27.0 306 | mime: 3.0.0 307 | sade: 1.8.1 308 | set-cookie-parser: 2.5.1 309 | sirv: 2.0.2 310 | svelte: 3.55.0 311 | tiny-glob: 0.2.9 312 | undici: 5.14.0 313 | vite: 4.0.3 314 | transitivePeerDependencies: 315 | - supports-color 316 | dev: true 317 | 318 | /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.0+vite@4.0.3: 319 | resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==} 320 | engines: {node: ^14.18.0 || >= 16} 321 | peerDependencies: 322 | svelte: ^3.54.0 323 | vite: ^4.0.0 324 | dependencies: 325 | debug: 4.3.4 326 | deepmerge: 4.2.2 327 | kleur: 4.1.5 328 | magic-string: 0.27.0 329 | svelte: 3.55.0 330 | svelte-hmr: 0.15.1_svelte@3.55.0 331 | vite: 4.0.3 332 | vitefu: 0.2.4_vite@4.0.3 333 | transitivePeerDependencies: 334 | - supports-color 335 | dev: true 336 | 337 | /@types/chai-subset/1.3.3: 338 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} 339 | dependencies: 340 | '@types/chai': 4.3.4 341 | dev: true 342 | 343 | /@types/chai/4.3.4: 344 | resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} 345 | dev: true 346 | 347 | /@types/cookie/0.5.1: 348 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 349 | dev: true 350 | 351 | /@types/node/18.11.17: 352 | resolution: {integrity: sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==} 353 | dev: true 354 | 355 | /@types/pug/2.0.6: 356 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 357 | dev: true 358 | 359 | /@types/sass/1.43.1: 360 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} 361 | dependencies: 362 | '@types/node': 18.11.17 363 | dev: true 364 | 365 | /acorn-walk/8.2.0: 366 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 367 | engines: {node: '>=0.4.0'} 368 | dev: true 369 | 370 | /acorn/8.8.1: 371 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 372 | engines: {node: '>=0.4.0'} 373 | hasBin: true 374 | dev: true 375 | 376 | /anymatch/3.1.3: 377 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 378 | engines: {node: '>= 8'} 379 | dependencies: 380 | normalize-path: 3.0.0 381 | picomatch: 2.3.1 382 | dev: true 383 | 384 | /assertion-error/1.1.0: 385 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 386 | dev: true 387 | 388 | /balanced-match/1.0.2: 389 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 390 | dev: true 391 | 392 | /binary-extensions/2.2.0: 393 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 394 | engines: {node: '>=8'} 395 | dev: true 396 | 397 | /brace-expansion/1.1.11: 398 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 399 | dependencies: 400 | balanced-match: 1.0.2 401 | concat-map: 0.0.1 402 | dev: true 403 | 404 | /braces/3.0.2: 405 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 406 | engines: {node: '>=8'} 407 | dependencies: 408 | fill-range: 7.0.1 409 | dev: true 410 | 411 | /buffer-crc32/0.2.13: 412 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 413 | dev: true 414 | 415 | /busboy/1.6.0: 416 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 417 | engines: {node: '>=10.16.0'} 418 | dependencies: 419 | streamsearch: 1.1.0 420 | dev: true 421 | 422 | /callsites/3.1.0: 423 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 424 | engines: {node: '>=6'} 425 | dev: true 426 | 427 | /chai/4.3.7: 428 | resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} 429 | engines: {node: '>=4'} 430 | dependencies: 431 | assertion-error: 1.1.0 432 | check-error: 1.0.2 433 | deep-eql: 4.1.3 434 | get-func-name: 2.0.0 435 | loupe: 2.3.6 436 | pathval: 1.1.1 437 | type-detect: 4.0.8 438 | dev: true 439 | 440 | /check-error/1.0.2: 441 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} 442 | dev: true 443 | 444 | /chokidar/3.5.3: 445 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 446 | engines: {node: '>= 8.10.0'} 447 | dependencies: 448 | anymatch: 3.1.3 449 | braces: 3.0.2 450 | glob-parent: 5.1.2 451 | is-binary-path: 2.1.0 452 | is-glob: 4.0.3 453 | normalize-path: 3.0.0 454 | readdirp: 3.6.0 455 | optionalDependencies: 456 | fsevents: 2.3.2 457 | dev: true 458 | 459 | /concat-map/0.0.1: 460 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 461 | dev: true 462 | 463 | /cookie/0.5.0: 464 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 465 | engines: {node: '>= 0.6'} 466 | dev: true 467 | 468 | /debug/4.3.4: 469 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 470 | engines: {node: '>=6.0'} 471 | peerDependencies: 472 | supports-color: '*' 473 | peerDependenciesMeta: 474 | supports-color: 475 | optional: true 476 | dependencies: 477 | ms: 2.1.2 478 | dev: true 479 | 480 | /deep-eql/4.1.3: 481 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 482 | engines: {node: '>=6'} 483 | dependencies: 484 | type-detect: 4.0.8 485 | dev: true 486 | 487 | /deepmerge/4.2.2: 488 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} 489 | engines: {node: '>=0.10.0'} 490 | dev: true 491 | 492 | /detect-indent/6.1.0: 493 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 494 | engines: {node: '>=8'} 495 | dev: true 496 | 497 | /devalue/4.2.0: 498 | resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==} 499 | dev: true 500 | 501 | /es6-promise/3.3.1: 502 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 503 | dev: true 504 | 505 | /esbuild/0.16.10: 506 | resolution: {integrity: sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==} 507 | engines: {node: '>=12'} 508 | hasBin: true 509 | requiresBuild: true 510 | optionalDependencies: 511 | '@esbuild/android-arm': 0.16.10 512 | '@esbuild/android-arm64': 0.16.10 513 | '@esbuild/android-x64': 0.16.10 514 | '@esbuild/darwin-arm64': 0.16.10 515 | '@esbuild/darwin-x64': 0.16.10 516 | '@esbuild/freebsd-arm64': 0.16.10 517 | '@esbuild/freebsd-x64': 0.16.10 518 | '@esbuild/linux-arm': 0.16.10 519 | '@esbuild/linux-arm64': 0.16.10 520 | '@esbuild/linux-ia32': 0.16.10 521 | '@esbuild/linux-loong64': 0.16.10 522 | '@esbuild/linux-mips64el': 0.16.10 523 | '@esbuild/linux-ppc64': 0.16.10 524 | '@esbuild/linux-riscv64': 0.16.10 525 | '@esbuild/linux-s390x': 0.16.10 526 | '@esbuild/linux-x64': 0.16.10 527 | '@esbuild/netbsd-x64': 0.16.10 528 | '@esbuild/openbsd-x64': 0.16.10 529 | '@esbuild/sunos-x64': 0.16.10 530 | '@esbuild/win32-arm64': 0.16.10 531 | '@esbuild/win32-ia32': 0.16.10 532 | '@esbuild/win32-x64': 0.16.10 533 | dev: true 534 | 535 | /esm-env/1.0.0: 536 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 537 | dev: true 538 | 539 | /fast-glob/3.2.12: 540 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 541 | engines: {node: '>=8.6.0'} 542 | dependencies: 543 | '@nodelib/fs.stat': 2.0.5 544 | '@nodelib/fs.walk': 1.2.8 545 | glob-parent: 5.1.2 546 | merge2: 1.4.1 547 | micromatch: 4.0.5 548 | dev: true 549 | 550 | /fastq/1.14.0: 551 | resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} 552 | dependencies: 553 | reusify: 1.0.4 554 | dev: true 555 | 556 | /fill-range/7.0.1: 557 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 558 | engines: {node: '>=8'} 559 | dependencies: 560 | to-regex-range: 5.0.1 561 | dev: true 562 | 563 | /fs.realpath/1.0.0: 564 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 565 | dev: true 566 | 567 | /fsevents/2.3.2: 568 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 569 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 570 | os: [darwin] 571 | requiresBuild: true 572 | dev: true 573 | optional: true 574 | 575 | /function-bind/1.1.1: 576 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 577 | dev: true 578 | 579 | /get-func-name/2.0.0: 580 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} 581 | dev: true 582 | 583 | /glob-parent/5.1.2: 584 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 585 | engines: {node: '>= 6'} 586 | dependencies: 587 | is-glob: 4.0.3 588 | dev: true 589 | 590 | /glob/7.2.3: 591 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 592 | dependencies: 593 | fs.realpath: 1.0.0 594 | inflight: 1.0.6 595 | inherits: 2.0.4 596 | minimatch: 3.1.2 597 | once: 1.4.0 598 | path-is-absolute: 1.0.1 599 | dev: true 600 | 601 | /globalyzer/0.1.0: 602 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 603 | dev: true 604 | 605 | /globrex/0.1.2: 606 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 607 | dev: true 608 | 609 | /graceful-fs/4.2.10: 610 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 611 | dev: true 612 | 613 | /has/1.0.3: 614 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 615 | engines: {node: '>= 0.4.0'} 616 | dependencies: 617 | function-bind: 1.1.1 618 | dev: true 619 | 620 | /import-fresh/3.3.0: 621 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 622 | engines: {node: '>=6'} 623 | dependencies: 624 | parent-module: 1.0.1 625 | resolve-from: 4.0.0 626 | dev: true 627 | 628 | /import-meta-resolve/2.2.0: 629 | resolution: {integrity: sha512-CpPOtiCHxP9HdtDM5F45tNiAe66Cqlv3f5uHoJjt+KlaLrUh9/Wz9vepADZ78SlqEo62aDWZtj9ydMGXV+CPnw==} 630 | dev: true 631 | 632 | /inflight/1.0.6: 633 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 634 | dependencies: 635 | once: 1.4.0 636 | wrappy: 1.0.2 637 | dev: true 638 | 639 | /inherits/2.0.4: 640 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 641 | dev: true 642 | 643 | /is-binary-path/2.1.0: 644 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 645 | engines: {node: '>=8'} 646 | dependencies: 647 | binary-extensions: 2.2.0 648 | dev: true 649 | 650 | /is-core-module/2.11.0: 651 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 652 | dependencies: 653 | has: 1.0.3 654 | dev: true 655 | 656 | /is-extglob/2.1.1: 657 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 658 | engines: {node: '>=0.10.0'} 659 | dev: true 660 | 661 | /is-glob/4.0.3: 662 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 663 | engines: {node: '>=0.10.0'} 664 | dependencies: 665 | is-extglob: 2.1.1 666 | dev: true 667 | 668 | /is-number/7.0.0: 669 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 670 | engines: {node: '>=0.12.0'} 671 | dev: true 672 | 673 | /isomorphic-ws/5.0.0_ws@8.11.0: 674 | resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} 675 | peerDependencies: 676 | ws: '*' 677 | dependencies: 678 | ws: 8.11.0 679 | dev: true 680 | 681 | /kleur/4.1.5: 682 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 683 | engines: {node: '>=6'} 684 | dev: true 685 | 686 | /local-pkg/0.4.2: 687 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} 688 | engines: {node: '>=14'} 689 | dev: true 690 | 691 | /loupe/2.3.6: 692 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} 693 | dependencies: 694 | get-func-name: 2.0.0 695 | dev: true 696 | 697 | /magic-string/0.25.9: 698 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 699 | dependencies: 700 | sourcemap-codec: 1.4.8 701 | dev: true 702 | 703 | /magic-string/0.27.0: 704 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 705 | engines: {node: '>=12'} 706 | dependencies: 707 | '@jridgewell/sourcemap-codec': 1.4.14 708 | dev: true 709 | 710 | /merge2/1.4.1: 711 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 712 | engines: {node: '>= 8'} 713 | dev: true 714 | 715 | /micromatch/4.0.5: 716 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 717 | engines: {node: '>=8.6'} 718 | dependencies: 719 | braces: 3.0.2 720 | picomatch: 2.3.1 721 | dev: true 722 | 723 | /mime/3.0.0: 724 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 725 | engines: {node: '>=10.0.0'} 726 | hasBin: true 727 | dev: true 728 | 729 | /min-indent/1.0.1: 730 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 731 | engines: {node: '>=4'} 732 | dev: true 733 | 734 | /minimatch/3.1.2: 735 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 736 | dependencies: 737 | brace-expansion: 1.1.11 738 | dev: true 739 | 740 | /minimist/1.2.7: 741 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} 742 | dev: true 743 | 744 | /mkdirp/0.5.6: 745 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 746 | hasBin: true 747 | dependencies: 748 | minimist: 1.2.7 749 | dev: true 750 | 751 | /mri/1.2.0: 752 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 753 | engines: {node: '>=4'} 754 | dev: true 755 | 756 | /mrmime/1.0.1: 757 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 758 | engines: {node: '>=10'} 759 | dev: true 760 | 761 | /ms/2.1.2: 762 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 763 | dev: true 764 | 765 | /nanoid/3.3.4: 766 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 767 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 768 | hasBin: true 769 | dev: true 770 | 771 | /normalize-path/3.0.0: 772 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 773 | engines: {node: '>=0.10.0'} 774 | dev: true 775 | 776 | /once/1.4.0: 777 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 778 | dependencies: 779 | wrappy: 1.0.2 780 | dev: true 781 | 782 | /parent-module/1.0.1: 783 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 784 | engines: {node: '>=6'} 785 | dependencies: 786 | callsites: 3.1.0 787 | dev: true 788 | 789 | /path-is-absolute/1.0.1: 790 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 791 | engines: {node: '>=0.10.0'} 792 | dev: true 793 | 794 | /path-parse/1.0.7: 795 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 796 | dev: true 797 | 798 | /pathval/1.1.1: 799 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 800 | dev: true 801 | 802 | /picocolors/1.0.0: 803 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 804 | dev: true 805 | 806 | /picomatch/2.3.1: 807 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 808 | engines: {node: '>=8.6'} 809 | dev: true 810 | 811 | /playwright-core/1.29.1: 812 | resolution: {integrity: sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg==} 813 | engines: {node: '>=14'} 814 | hasBin: true 815 | dev: true 816 | 817 | /postcss/8.4.20: 818 | resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} 819 | engines: {node: ^10 || ^12 || >=14} 820 | dependencies: 821 | nanoid: 3.3.4 822 | picocolors: 1.0.0 823 | source-map-js: 1.0.2 824 | dev: true 825 | 826 | /prettier-plugin-svelte/2.9.0_ajxj753sv7dbwexjherrch25ta: 827 | resolution: {integrity: sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==} 828 | peerDependencies: 829 | prettier: ^1.16.4 || ^2.0.0 830 | svelte: ^3.2.0 831 | dependencies: 832 | prettier: 2.8.1 833 | svelte: 3.55.0 834 | dev: true 835 | 836 | /prettier/2.8.1: 837 | resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} 838 | engines: {node: '>=10.13.0'} 839 | hasBin: true 840 | dev: true 841 | 842 | /queue-microtask/1.2.3: 843 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 844 | dev: true 845 | 846 | /readdirp/3.6.0: 847 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 848 | engines: {node: '>=8.10.0'} 849 | dependencies: 850 | picomatch: 2.3.1 851 | dev: true 852 | 853 | /resolve-from/4.0.0: 854 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 855 | engines: {node: '>=4'} 856 | dev: true 857 | 858 | /resolve/1.22.1: 859 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 860 | hasBin: true 861 | dependencies: 862 | is-core-module: 2.11.0 863 | path-parse: 1.0.7 864 | supports-preserve-symlinks-flag: 1.0.0 865 | dev: true 866 | 867 | /reusify/1.0.4: 868 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 869 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 870 | dev: true 871 | 872 | /rimraf/2.7.1: 873 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 874 | hasBin: true 875 | dependencies: 876 | glob: 7.2.3 877 | dev: true 878 | 879 | /rollup/3.8.1: 880 | resolution: {integrity: sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==} 881 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 882 | hasBin: true 883 | optionalDependencies: 884 | fsevents: 2.3.2 885 | dev: true 886 | 887 | /run-parallel/1.2.0: 888 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 889 | dependencies: 890 | queue-microtask: 1.2.3 891 | dev: true 892 | 893 | /sade/1.8.1: 894 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 895 | engines: {node: '>=6'} 896 | dependencies: 897 | mri: 1.2.0 898 | dev: true 899 | 900 | /sander/0.5.1: 901 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 902 | dependencies: 903 | es6-promise: 3.3.1 904 | graceful-fs: 4.2.10 905 | mkdirp: 0.5.6 906 | rimraf: 2.7.1 907 | dev: true 908 | 909 | /set-cookie-parser/2.5.1: 910 | resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} 911 | dev: true 912 | 913 | /sirv/2.0.2: 914 | resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==} 915 | engines: {node: '>= 10'} 916 | dependencies: 917 | '@polka/url': 1.0.0-next.21 918 | mrmime: 1.0.1 919 | totalist: 3.0.0 920 | dev: true 921 | 922 | /sorcery/0.10.0: 923 | resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} 924 | hasBin: true 925 | dependencies: 926 | buffer-crc32: 0.2.13 927 | minimist: 1.2.7 928 | sander: 0.5.1 929 | sourcemap-codec: 1.4.8 930 | dev: true 931 | 932 | /source-map-js/1.0.2: 933 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 934 | engines: {node: '>=0.10.0'} 935 | dev: true 936 | 937 | /source-map/0.6.1: 938 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 939 | engines: {node: '>=0.10.0'} 940 | dev: true 941 | 942 | /sourcemap-codec/1.4.8: 943 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 944 | deprecated: Please use @jridgewell/sourcemap-codec instead 945 | dev: true 946 | 947 | /streamsearch/1.1.0: 948 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 949 | engines: {node: '>=10.0.0'} 950 | dev: true 951 | 952 | /strip-indent/3.0.0: 953 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 954 | engines: {node: '>=8'} 955 | dependencies: 956 | min-indent: 1.0.1 957 | dev: true 958 | 959 | /strip-literal/1.0.0: 960 | resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==} 961 | dependencies: 962 | acorn: 8.8.1 963 | dev: true 964 | 965 | /supports-preserve-symlinks-flag/1.0.0: 966 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 967 | engines: {node: '>= 0.4'} 968 | dev: true 969 | 970 | /surrealdb.js/0.5.0: 971 | resolution: {integrity: sha512-CpDfCwVnG3ahr2/kUf3i9RgDtLuEzQeU5Zxuhtud5Ijq9abXzkAhS/gcvtSQ9qyZiqSQcp4u7IK3yjnd1OkqKQ==} 972 | dependencies: 973 | isomorphic-ws: 5.0.0_ws@8.11.0 974 | ws: 8.11.0 975 | transitivePeerDependencies: 976 | - bufferutil 977 | - utf-8-validate 978 | dev: true 979 | 980 | /svelte-check/2.10.3_svelte@3.55.0: 981 | resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} 982 | hasBin: true 983 | peerDependencies: 984 | svelte: ^3.24.0 985 | dependencies: 986 | '@jridgewell/trace-mapping': 0.3.17 987 | chokidar: 3.5.3 988 | fast-glob: 3.2.12 989 | import-fresh: 3.3.0 990 | picocolors: 1.0.0 991 | sade: 1.8.1 992 | svelte: 3.55.0 993 | svelte-preprocess: 4.10.7_niwyv7xychq2ag6arq5eqxbomm 994 | typescript: 4.9.4 995 | transitivePeerDependencies: 996 | - '@babel/core' 997 | - coffeescript 998 | - less 999 | - node-sass 1000 | - postcss 1001 | - postcss-load-config 1002 | - pug 1003 | - sass 1004 | - stylus 1005 | - sugarss 1006 | dev: true 1007 | 1008 | /svelte-hmr/0.15.1_svelte@3.55.0: 1009 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} 1010 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 1011 | peerDependencies: 1012 | svelte: '>=3.19.0' 1013 | dependencies: 1014 | svelte: 3.55.0 1015 | dev: true 1016 | 1017 | /svelte-preprocess/4.10.7_niwyv7xychq2ag6arq5eqxbomm: 1018 | resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} 1019 | engines: {node: '>= 9.11.2'} 1020 | requiresBuild: true 1021 | peerDependencies: 1022 | '@babel/core': ^7.10.2 1023 | coffeescript: ^2.5.1 1024 | less: ^3.11.3 || ^4.0.0 1025 | node-sass: '*' 1026 | postcss: ^7 || ^8 1027 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 1028 | pug: ^3.0.0 1029 | sass: ^1.26.8 1030 | stylus: ^0.55.0 1031 | sugarss: ^2.0.0 1032 | svelte: ^3.23.0 1033 | typescript: ^3.9.5 || ^4.0.0 1034 | peerDependenciesMeta: 1035 | '@babel/core': 1036 | optional: true 1037 | coffeescript: 1038 | optional: true 1039 | less: 1040 | optional: true 1041 | node-sass: 1042 | optional: true 1043 | postcss: 1044 | optional: true 1045 | postcss-load-config: 1046 | optional: true 1047 | pug: 1048 | optional: true 1049 | sass: 1050 | optional: true 1051 | stylus: 1052 | optional: true 1053 | sugarss: 1054 | optional: true 1055 | typescript: 1056 | optional: true 1057 | dependencies: 1058 | '@types/pug': 2.0.6 1059 | '@types/sass': 1.43.1 1060 | detect-indent: 6.1.0 1061 | magic-string: 0.25.9 1062 | sorcery: 0.10.0 1063 | strip-indent: 3.0.0 1064 | svelte: 3.55.0 1065 | typescript: 4.9.4 1066 | dev: true 1067 | 1068 | /svelte/3.55.0: 1069 | resolution: {integrity: sha512-uGu2FVMlOuey4JoKHKrpZFkoYyj0VLjJdz47zX5+gVK5odxHM40RVhar9/iK2YFRVxvfg9FkhfVlR0sjeIrOiA==} 1070 | engines: {node: '>= 8'} 1071 | dev: true 1072 | 1073 | /tiny-glob/0.2.9: 1074 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 1075 | dependencies: 1076 | globalyzer: 0.1.0 1077 | globrex: 0.1.2 1078 | dev: true 1079 | 1080 | /tinybench/2.3.1: 1081 | resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==} 1082 | dev: true 1083 | 1084 | /tinypool/0.3.0: 1085 | resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} 1086 | engines: {node: '>=14.0.0'} 1087 | dev: true 1088 | 1089 | /tinyspy/1.0.2: 1090 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} 1091 | engines: {node: '>=14.0.0'} 1092 | dev: true 1093 | 1094 | /to-regex-range/5.0.1: 1095 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1096 | engines: {node: '>=8.0'} 1097 | dependencies: 1098 | is-number: 7.0.0 1099 | dev: true 1100 | 1101 | /totalist/3.0.0: 1102 | resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==} 1103 | engines: {node: '>=6'} 1104 | dev: true 1105 | 1106 | /tslib/2.4.1: 1107 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 1108 | dev: true 1109 | 1110 | /type-detect/4.0.8: 1111 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1112 | engines: {node: '>=4'} 1113 | dev: true 1114 | 1115 | /typescript/4.9.4: 1116 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} 1117 | engines: {node: '>=4.2.0'} 1118 | hasBin: true 1119 | dev: true 1120 | 1121 | /undici/5.14.0: 1122 | resolution: {integrity: sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==} 1123 | engines: {node: '>=12.18'} 1124 | dependencies: 1125 | busboy: 1.6.0 1126 | dev: true 1127 | 1128 | /vite/4.0.3: 1129 | resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} 1130 | engines: {node: ^14.18.0 || >=16.0.0} 1131 | hasBin: true 1132 | peerDependencies: 1133 | '@types/node': '>= 14' 1134 | less: '*' 1135 | sass: '*' 1136 | stylus: '*' 1137 | sugarss: '*' 1138 | terser: ^5.4.0 1139 | peerDependenciesMeta: 1140 | '@types/node': 1141 | optional: true 1142 | less: 1143 | optional: true 1144 | sass: 1145 | optional: true 1146 | stylus: 1147 | optional: true 1148 | sugarss: 1149 | optional: true 1150 | terser: 1151 | optional: true 1152 | dependencies: 1153 | esbuild: 0.16.10 1154 | postcss: 8.4.20 1155 | resolve: 1.22.1 1156 | rollup: 3.8.1 1157 | optionalDependencies: 1158 | fsevents: 2.3.2 1159 | dev: true 1160 | 1161 | /vite/4.0.3_@types+node@18.11.17: 1162 | resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} 1163 | engines: {node: ^14.18.0 || >=16.0.0} 1164 | hasBin: true 1165 | peerDependencies: 1166 | '@types/node': '>= 14' 1167 | less: '*' 1168 | sass: '*' 1169 | stylus: '*' 1170 | sugarss: '*' 1171 | terser: ^5.4.0 1172 | peerDependenciesMeta: 1173 | '@types/node': 1174 | optional: true 1175 | less: 1176 | optional: true 1177 | sass: 1178 | optional: true 1179 | stylus: 1180 | optional: true 1181 | sugarss: 1182 | optional: true 1183 | terser: 1184 | optional: true 1185 | dependencies: 1186 | '@types/node': 18.11.17 1187 | esbuild: 0.16.10 1188 | postcss: 8.4.20 1189 | resolve: 1.22.1 1190 | rollup: 3.8.1 1191 | optionalDependencies: 1192 | fsevents: 2.3.2 1193 | dev: true 1194 | 1195 | /vitefu/0.2.4_vite@4.0.3: 1196 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 1197 | peerDependencies: 1198 | vite: ^3.0.0 || ^4.0.0 1199 | peerDependenciesMeta: 1200 | vite: 1201 | optional: true 1202 | dependencies: 1203 | vite: 4.0.3 1204 | dev: true 1205 | 1206 | /vitest/0.25.8: 1207 | resolution: {integrity: sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg==} 1208 | engines: {node: '>=v14.16.0'} 1209 | hasBin: true 1210 | peerDependencies: 1211 | '@edge-runtime/vm': '*' 1212 | '@vitest/browser': '*' 1213 | '@vitest/ui': '*' 1214 | happy-dom: '*' 1215 | jsdom: '*' 1216 | peerDependenciesMeta: 1217 | '@edge-runtime/vm': 1218 | optional: true 1219 | '@vitest/browser': 1220 | optional: true 1221 | '@vitest/ui': 1222 | optional: true 1223 | happy-dom: 1224 | optional: true 1225 | jsdom: 1226 | optional: true 1227 | dependencies: 1228 | '@types/chai': 4.3.4 1229 | '@types/chai-subset': 1.3.3 1230 | '@types/node': 18.11.17 1231 | acorn: 8.8.1 1232 | acorn-walk: 8.2.0 1233 | chai: 4.3.7 1234 | debug: 4.3.4 1235 | local-pkg: 0.4.2 1236 | source-map: 0.6.1 1237 | strip-literal: 1.0.0 1238 | tinybench: 2.3.1 1239 | tinypool: 0.3.0 1240 | tinyspy: 1.0.2 1241 | vite: 4.0.3_@types+node@18.11.17 1242 | transitivePeerDependencies: 1243 | - less 1244 | - sass 1245 | - stylus 1246 | - sugarss 1247 | - supports-color 1248 | - terser 1249 | dev: true 1250 | 1251 | /wrappy/1.0.2: 1252 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1253 | dev: true 1254 | 1255 | /ws/8.11.0: 1256 | resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} 1257 | engines: {node: '>=10.0.0'} 1258 | peerDependencies: 1259 | bufferutil: ^4.0.1 1260 | utf-8-validate: ^5.0.2 1261 | peerDependenciesMeta: 1262 | bufferutil: 1263 | optional: true 1264 | utf-8-validate: 1265 | optional: true 1266 | dev: true 1267 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | // and what to do when importing types 4 | declare namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | %sveltekit.head% 9 | 10 | 11 |
%sveltekit.body%
12 | 13 | 14 | -------------------------------------------------------------------------------- /src/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect } from 'vitest'; 2 | 3 | describe('sum test', () => { 4 | it('adds 1 + 2 to equal 3', () => { 5 | expect(1 + 2).toBe(3); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /src/lib/config.ts: -------------------------------------------------------------------------------- 1 | import { base } from "$app/paths"; 2 | 3 | async function config(_fetch = fetch) { 4 | const response = await _fetch(base + "/config.json"); 5 | const json = await response.json(); 6 | return json; 7 | } 8 | 9 | export default config; 10 | -------------------------------------------------------------------------------- /src/lib/surrealdb/index.ts: -------------------------------------------------------------------------------- 1 | import Surreal from "surrealdb.js"; 2 | import config from "$lib/config"; 3 | 4 | let s: Surreal; 5 | 6 | export async function getInstance(_fetch = fetch) { 7 | if (s) return s; 8 | const c = await config(_fetch); 9 | const { protocol, host } = window.location; 10 | // url defaults to "/rpc" (full URL string required) 11 | const { url = `${protocol}//${host}/rpc`, ns, db, user, pass } = c.surrealdb; 12 | s = Surreal.Instance; 13 | await s.connect(url); 14 | await s.use(ns, db); 15 | // await s.signin({ user, pass }); 16 | return s; 17 | } 18 | -------------------------------------------------------------------------------- /src/routes/+layout.ts: -------------------------------------------------------------------------------- 1 | import { getInstance } from "$lib/surrealdb"; 2 | import type { LayoutLoad } from "./$types"; 3 | 4 | export const ssr = false; 5 | 6 | export const load: LayoutLoad = async ({ fetch }) => { 7 | const s = await getInstance(fetch); 8 | const result = await s.query("INFO FOR DB;"); 9 | return { 10 | result, 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 53 | 54 |

Hello SurrealDB

55 | {#if token} 56 | 57 |
58 | 62 | 63 |
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | {#await getItems(counter) then items} 74 | {#each items as i (i.id)} 75 | 76 | 83 | 90 | 91 | 92 | {:else} 93 | 94 | 95 | 96 | {/each} 97 | {/await} 98 | 99 |
titlecompletedactions
77 | i.title !== e.target.value && save({ ...i, title: e.target.value })} 81 | /> 82 | save({ ...i, completed: e.target.checked })} 88 | />
No data found. Please create some.
100 | {:else} 101 |
102 | 106 | 110 | 111 | 112 |
113 | {/if} 114 | -------------------------------------------------------------------------------- /static/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "surrealdb": { 3 | "_url": "http://surrealdb-db-1.docker:8000/rpc", 4 | "ns": "test", 5 | "db": "test", 6 | "sc": "allusers" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spinspire/surrealdb-sveltekit-starter/e6f6a89cd73aead0cdf27ba31e28995a0ce9f309/static/favicon.png -------------------------------------------------------------------------------- /static/screenshot-signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spinspire/surrealdb-sveltekit-starter/e6f6a89cd73aead0cdf27ba31e28995a0ce9f309/static/screenshot-signin.png -------------------------------------------------------------------------------- /static/screenshot-todos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spinspire/surrealdb-sveltekit-starter/e6f6a89cd73aead0cdf27ba31e28995a0ce9f309/static/screenshot-todos.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/kit/vite'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | adapter: adapter() 12 | } 13 | }; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /tests/test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('index page has expected h1', async ({ page }) => { 4 | await page.goto('/'); 5 | expect(await page.textContent('h1')).toBe('Welcome to SvelteKit'); 6 | }); 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true 12 | } 13 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 14 | // 15 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 16 | // from the referenced tsconfig.json - TypeScript does not merge them in 17 | } 18 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { sveltekit } from "@sveltejs/kit/vite"; 2 | 3 | /** @type {import('vite').UserConfig} */ 4 | const config = { 5 | plugins: [sveltekit()], 6 | test: { 7 | include: ["src/**/*.{test,spec}.{js,ts}"], 8 | }, 9 | server: { 10 | proxy: { 11 | "/rpc": { 12 | target: "ws://localhost:8000", 13 | ws: true, 14 | }, 15 | }, 16 | }, 17 | }; 18 | 19 | export default config; 20 | --------------------------------------------------------------------------------