├── .gitignore ├── .gitpod.yml ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── prisma ├── migrations │ ├── 20211106032330_init │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── src ├── app.css ├── app.html ├── global.d.ts ├── hooks.ts ├── lib │ ├── Counter.svelte │ ├── form.ts │ ├── header │ │ ├── Header.svelte │ │ └── svelte-logo.svg │ ├── prisma.ts │ └── types.d.ts └── routes │ ├── __layout.svelte │ ├── about.svelte │ ├── index.svelte │ └── todos │ ├── [uid].json.ts │ ├── _api.ts │ ├── index.json.ts │ └── index.svelte ├── static ├── favicon.png ├── robots.txt ├── svelte-welcome.png └── svelte-welcome.webp ├── svelte.config.js └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /.svelte-kit 4 | /.vercel_build_output 5 | /package 6 | prisma/dev.db 7 | prisma/dev.db-journal 8 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | # Learn more about this Gitpod configuration file in the documentation at https://www.gitpod.io/docs/configuration 2 | image: gitpod/workspace-postgres 3 | 4 | ports: 5 | - port: 3000 6 | onOpen: open-preview 7 | - port: 5432 8 | onOpen: ignore 9 | - port: 5555 10 | onOpen: open-browser 11 | 12 | # List the start up tasks. You can start them in parallel in multiple terminals. See https://www.gitpod.io/docs/config-start-tasks 13 | tasks: 14 | - init: | 15 | npm install 16 | command: | 17 | export HMR_HOST=`gp url 3000` 18 | npm run dev 19 | env: 20 | DATABASE_URL: postgresql://gitpod@localhost/todos 21 | - command: npx prisma studio 22 | env: 23 | DATABASE_URL: postgresql://gitpod@localhost/todos 24 | github: 25 | prebuilds: 26 | # enable for the master/default branch (defaults to true) 27 | master: true 28 | # enable for all branches in this repo (defaults to false) 29 | branches: true 30 | # enable for pull requests coming from this repo (defaults to true) 31 | pullRequests: true 32 | # enable for pull requests coming from forks (defaults to false) 33 | pullRequestsFromForks: true 34 | # add a check to pull requests (defaults to true) 35 | addCheck: true 36 | # add a "Review in Gitpod" button as a comment to pull requests (defaults to false) 37 | addComment: false 38 | # add a "Review in Gitpod" button to the pull request's description (defaults to false) 39 | addBadge: true 40 | # add a label once the prebuild is ready to pull requests (defaults to false) 41 | addLabel: false 42 | 43 | vscode: 44 | extensions: 45 | - svelte.svelte-vscode 46 | - prisma.prisma -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .svelte-kit/** 2 | static/** 3 | build/** 4 | node_modules/** 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sveltekit-prisma 2 | 3 | This is a default [SvelteKit](https://kit.svelte.dev/) app (`npm init svelte@next`) which persists the todo items in a local SQLite database using [Prisma](https://www.prisma.io/). 4 | 5 | ## Blog post 6 | 7 | For more details on how to configure Prisma for your SvelteKit app, please have a look at the corresponding [blog post](https://www.mikenikles.com/blog/svelte-kit-prisma-a-match-made-in-digital-heaven). 8 | 9 | ## Development & Try it 10 | 11 | Click the following button to start an ephemeral development environment on [Gitpod](https://www.gitpod.io/). 12 | 13 | [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/mikenikles/sveltekit-prisma) 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "~TODO~", 3 | "version": "0.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "~TODO~", 9 | "version": "0.0.1", 10 | "hasInstallScript": true, 11 | "dependencies": { 12 | "@fontsource/fira-mono": "^4.2.2", 13 | "@lukeed/uuid": "^2.0.0", 14 | "@prisma/client": "^3.5.0", 15 | "cookie": "^0.4.1" 16 | }, 17 | "devDependencies": { 18 | "@sveltejs/adapter-vercel": "^1.0.0-next.29", 19 | "@sveltejs/kit": "next", 20 | "@types/cookie": "^0.4.0", 21 | "prettier": "~2.2.1", 22 | "prettier-plugin-svelte": "^2.2.0", 23 | "prisma": "^3.5.0", 24 | "svelte": "^3.34.0", 25 | "svelte-check": "^2.0.0", 26 | "svelte-preprocess": "^4.0.0", 27 | "tslib": "^2.0.0", 28 | "typescript": "^4.0.0" 29 | } 30 | }, 31 | "node_modules/@fontsource/fira-mono": { 32 | "version": "4.5.0", 33 | "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.0.tgz", 34 | "integrity": "sha512-KE+d3wmgq/YKM0BqgUF7p2yeBNi805Nfof1lC1wJ7E9i2EWoC363sGdKG+MQBVm+ei3GYZu+Bo8Xha1w1pkB7g==" 35 | }, 36 | "node_modules/@lukeed/csprng": { 37 | "version": "1.0.0", 38 | "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.0.tgz", 39 | "integrity": "sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==", 40 | "engines": { 41 | "node": ">=8" 42 | } 43 | }, 44 | "node_modules/@lukeed/uuid": { 45 | "version": "2.0.0", 46 | "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", 47 | "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", 48 | "dependencies": { 49 | "@lukeed/csprng": "^1.0.0" 50 | }, 51 | "engines": { 52 | "node": ">=8" 53 | } 54 | }, 55 | "node_modules/@prisma/client": { 56 | "version": "3.5.0", 57 | "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.5.0.tgz", 58 | "integrity": "sha512-LuaaisknLe9CCfJ1Rtqe9b9knvPgEEcC77OMmWdo3fSanxl5oTDxcH3IIhpULQQlJfZvDcaEXuXNU4dsNF+q1w==", 59 | "hasInstallScript": true, 60 | "dependencies": { 61 | "@prisma/engines-version": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e" 62 | }, 63 | "engines": { 64 | "node": ">=12.6" 65 | }, 66 | "peerDependencies": { 67 | "prisma": "*" 68 | }, 69 | "peerDependenciesMeta": { 70 | "prisma": { 71 | "optional": true 72 | } 73 | } 74 | }, 75 | "node_modules/@prisma/engines": { 76 | "version": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e", 77 | "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e.tgz", 78 | "integrity": "sha512-MqZUrxuLlIbjB3wu8LrRJOKcvR4k3dunKoI4Q2bPfAwLQY0XlpsLZ3TRVW1c32ooVk939p6iGNkaCUo63Et36g==", 79 | "devOptional": true, 80 | "hasInstallScript": true 81 | }, 82 | "node_modules/@prisma/engines-version": { 83 | "version": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e", 84 | "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e.tgz", 85 | "integrity": "sha512-X16YmBmj7Omso4ZbkNBe6gPYlNcnwZMUPtXsguCkn+KoMqm3DJD9M4X31gx0Gf13Q44dY3SKPJZUk44/XUj/WA==" 86 | }, 87 | "node_modules/@rollup/pluginutils": { 88 | "version": "4.1.1", 89 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", 90 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", 91 | "dev": true, 92 | "dependencies": { 93 | "estree-walker": "^2.0.1", 94 | "picomatch": "^2.2.2" 95 | }, 96 | "engines": { 97 | "node": ">= 8.0.0" 98 | } 99 | }, 100 | "node_modules/@sveltejs/adapter-vercel": { 101 | "version": "1.0.0-next.29", 102 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.29.tgz", 103 | "integrity": "sha512-2DMz4qCm5+v+/8npdbyT/uQVMr3elSOH5ZJ24k3VLug60n6/sS4RyU++RO8gjiVQqxyGvdfRFJXAX6xV4K6hzg==", 104 | "dev": true, 105 | "dependencies": { 106 | "esbuild": "^0.12.5" 107 | } 108 | }, 109 | "node_modules/@sveltejs/kit": { 110 | "version": "1.0.0-next.174", 111 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.174.tgz", 112 | "integrity": "sha512-Kgtz5kZTyPnpPb8pjMMOo+uTDRBkiObRLnFaBDnYFd2ahUuhAPHHPlbcIDwO5psN4t6UbPdpdkoLNCAyDgBLdw==", 113 | "dev": true, 114 | "dependencies": { 115 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.24", 116 | "cheap-watch": "^1.0.4", 117 | "sade": "^1.7.4", 118 | "vite": "^2.5.7" 119 | }, 120 | "bin": { 121 | "svelte-kit": "svelte-kit.js" 122 | }, 123 | "engines": { 124 | "node": "^12.20 || >=14.13" 125 | }, 126 | "peerDependencies": { 127 | "svelte": "^3.43.0" 128 | } 129 | }, 130 | "node_modules/@sveltejs/vite-plugin-svelte": { 131 | "version": "1.0.0-next.24", 132 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.24.tgz", 133 | "integrity": "sha512-b+n3jcLpk2j/25APQbk5ejCyd0faYTB2bOxR3gY0LX3MFGgdiL8zdf3/aawcPSxLdbL73YVlxNBIATGuvq03uQ==", 134 | "dev": true, 135 | "dependencies": { 136 | "@rollup/pluginutils": "^4.1.1", 137 | "debug": "^4.3.2", 138 | "kleur": "^4.1.4", 139 | "magic-string": "^0.25.7", 140 | "require-relative": "^0.8.7", 141 | "svelte-hmr": "^0.14.7" 142 | }, 143 | "engines": { 144 | "node": "^12.20 || ^14.13.1 || >= 16" 145 | }, 146 | "peerDependencies": { 147 | "diff-match-patch": "^1.0.5", 148 | "svelte": "^3.34.0", 149 | "vite": "^2.5.3" 150 | }, 151 | "peerDependenciesMeta": { 152 | "diff-match-patch": { 153 | "optional": true 154 | } 155 | } 156 | }, 157 | "node_modules/@types/cookie": { 158 | "version": "0.4.1", 159 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", 160 | "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", 161 | "dev": true 162 | }, 163 | "node_modules/@types/node": { 164 | "version": "16.4.10", 165 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.10.tgz", 166 | "integrity": "sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==", 167 | "dev": true 168 | }, 169 | "node_modules/@types/pug": { 170 | "version": "2.0.5", 171 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz", 172 | "integrity": "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==", 173 | "dev": true 174 | }, 175 | "node_modules/@types/sass": { 176 | "version": "1.16.1", 177 | "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.16.1.tgz", 178 | "integrity": "sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==", 179 | "dev": true, 180 | "dependencies": { 181 | "@types/node": "*" 182 | } 183 | }, 184 | "node_modules/ansi-styles": { 185 | "version": "4.3.0", 186 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 187 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 188 | "dev": true, 189 | "dependencies": { 190 | "color-convert": "^2.0.1" 191 | }, 192 | "engines": { 193 | "node": ">=8" 194 | }, 195 | "funding": { 196 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 197 | } 198 | }, 199 | "node_modules/anymatch": { 200 | "version": "3.1.2", 201 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 202 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 203 | "dev": true, 204 | "dependencies": { 205 | "normalize-path": "^3.0.0", 206 | "picomatch": "^2.0.4" 207 | }, 208 | "engines": { 209 | "node": ">= 8" 210 | } 211 | }, 212 | "node_modules/balanced-match": { 213 | "version": "1.0.2", 214 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 215 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 216 | "dev": true 217 | }, 218 | "node_modules/binary-extensions": { 219 | "version": "2.2.0", 220 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 221 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 222 | "dev": true, 223 | "engines": { 224 | "node": ">=8" 225 | } 226 | }, 227 | "node_modules/brace-expansion": { 228 | "version": "1.1.11", 229 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 230 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 231 | "dev": true, 232 | "dependencies": { 233 | "balanced-match": "^1.0.0", 234 | "concat-map": "0.0.1" 235 | } 236 | }, 237 | "node_modules/braces": { 238 | "version": "3.0.2", 239 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 240 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 241 | "dev": true, 242 | "dependencies": { 243 | "fill-range": "^7.0.1" 244 | }, 245 | "engines": { 246 | "node": ">=8" 247 | } 248 | }, 249 | "node_modules/callsites": { 250 | "version": "3.1.0", 251 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 252 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 253 | "dev": true, 254 | "engines": { 255 | "node": ">=6" 256 | } 257 | }, 258 | "node_modules/chalk": { 259 | "version": "4.1.2", 260 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 261 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 262 | "dev": true, 263 | "dependencies": { 264 | "ansi-styles": "^4.1.0", 265 | "supports-color": "^7.1.0" 266 | }, 267 | "engines": { 268 | "node": ">=10" 269 | }, 270 | "funding": { 271 | "url": "https://github.com/chalk/chalk?sponsor=1" 272 | } 273 | }, 274 | "node_modules/cheap-watch": { 275 | "version": "1.0.4", 276 | "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.4.tgz", 277 | "integrity": "sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==", 278 | "dev": true, 279 | "engines": { 280 | "node": ">=8" 281 | } 282 | }, 283 | "node_modules/chokidar": { 284 | "version": "3.5.2", 285 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 286 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 287 | "dev": true, 288 | "dependencies": { 289 | "anymatch": "~3.1.2", 290 | "braces": "~3.0.2", 291 | "glob-parent": "~5.1.2", 292 | "is-binary-path": "~2.1.0", 293 | "is-glob": "~4.0.1", 294 | "normalize-path": "~3.0.0", 295 | "readdirp": "~3.6.0" 296 | }, 297 | "engines": { 298 | "node": ">= 8.10.0" 299 | }, 300 | "optionalDependencies": { 301 | "fsevents": "~2.3.2" 302 | } 303 | }, 304 | "node_modules/color-convert": { 305 | "version": "2.0.1", 306 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 307 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 308 | "dev": true, 309 | "dependencies": { 310 | "color-name": "~1.1.4" 311 | }, 312 | "engines": { 313 | "node": ">=7.0.0" 314 | } 315 | }, 316 | "node_modules/color-name": { 317 | "version": "1.1.4", 318 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 319 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 320 | "dev": true 321 | }, 322 | "node_modules/concat-map": { 323 | "version": "0.0.1", 324 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 325 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 326 | "dev": true 327 | }, 328 | "node_modules/cookie": { 329 | "version": "0.4.1", 330 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 331 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", 332 | "engines": { 333 | "node": ">= 0.6" 334 | } 335 | }, 336 | "node_modules/debug": { 337 | "version": "4.3.2", 338 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 339 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 340 | "dev": true, 341 | "dependencies": { 342 | "ms": "2.1.2" 343 | }, 344 | "engines": { 345 | "node": ">=6.0" 346 | }, 347 | "peerDependenciesMeta": { 348 | "supports-color": { 349 | "optional": true 350 | } 351 | } 352 | }, 353 | "node_modules/detect-indent": { 354 | "version": "6.1.0", 355 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 356 | "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 357 | "dev": true, 358 | "engines": { 359 | "node": ">=8" 360 | } 361 | }, 362 | "node_modules/esbuild": { 363 | "version": "0.12.29", 364 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", 365 | "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", 366 | "dev": true, 367 | "hasInstallScript": true, 368 | "bin": { 369 | "esbuild": "bin/esbuild" 370 | } 371 | }, 372 | "node_modules/estree-walker": { 373 | "version": "2.0.2", 374 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 375 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 376 | "dev": true 377 | }, 378 | "node_modules/fill-range": { 379 | "version": "7.0.1", 380 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 381 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 382 | "dev": true, 383 | "dependencies": { 384 | "to-regex-range": "^5.0.1" 385 | }, 386 | "engines": { 387 | "node": ">=8" 388 | } 389 | }, 390 | "node_modules/fs.realpath": { 391 | "version": "1.0.0", 392 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 393 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 394 | "dev": true 395 | }, 396 | "node_modules/fsevents": { 397 | "version": "2.3.2", 398 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 399 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 400 | "dev": true, 401 | "hasInstallScript": true, 402 | "optional": true, 403 | "os": [ 404 | "darwin" 405 | ], 406 | "engines": { 407 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 408 | } 409 | }, 410 | "node_modules/function-bind": { 411 | "version": "1.1.1", 412 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 413 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 414 | "dev": true 415 | }, 416 | "node_modules/glob": { 417 | "version": "7.1.7", 418 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 419 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 420 | "dev": true, 421 | "dependencies": { 422 | "fs.realpath": "^1.0.0", 423 | "inflight": "^1.0.4", 424 | "inherits": "2", 425 | "minimatch": "^3.0.4", 426 | "once": "^1.3.0", 427 | "path-is-absolute": "^1.0.0" 428 | }, 429 | "engines": { 430 | "node": "*" 431 | }, 432 | "funding": { 433 | "url": "https://github.com/sponsors/isaacs" 434 | } 435 | }, 436 | "node_modules/glob-parent": { 437 | "version": "5.1.2", 438 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 439 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 440 | "dev": true, 441 | "dependencies": { 442 | "is-glob": "^4.0.1" 443 | }, 444 | "engines": { 445 | "node": ">= 6" 446 | } 447 | }, 448 | "node_modules/has": { 449 | "version": "1.0.3", 450 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 451 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 452 | "dev": true, 453 | "dependencies": { 454 | "function-bind": "^1.1.1" 455 | }, 456 | "engines": { 457 | "node": ">= 0.4.0" 458 | } 459 | }, 460 | "node_modules/has-flag": { 461 | "version": "4.0.0", 462 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 463 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 464 | "dev": true, 465 | "engines": { 466 | "node": ">=8" 467 | } 468 | }, 469 | "node_modules/import-fresh": { 470 | "version": "3.3.0", 471 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 472 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 473 | "dev": true, 474 | "dependencies": { 475 | "parent-module": "^1.0.0", 476 | "resolve-from": "^4.0.0" 477 | }, 478 | "engines": { 479 | "node": ">=6" 480 | }, 481 | "funding": { 482 | "url": "https://github.com/sponsors/sindresorhus" 483 | } 484 | }, 485 | "node_modules/inflight": { 486 | "version": "1.0.6", 487 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 488 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 489 | "dev": true, 490 | "dependencies": { 491 | "once": "^1.3.0", 492 | "wrappy": "1" 493 | } 494 | }, 495 | "node_modules/inherits": { 496 | "version": "2.0.4", 497 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 498 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 499 | "dev": true 500 | }, 501 | "node_modules/is-binary-path": { 502 | "version": "2.1.0", 503 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 504 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 505 | "dev": true, 506 | "dependencies": { 507 | "binary-extensions": "^2.0.0" 508 | }, 509 | "engines": { 510 | "node": ">=8" 511 | } 512 | }, 513 | "node_modules/is-core-module": { 514 | "version": "2.6.0", 515 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", 516 | "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", 517 | "dev": true, 518 | "dependencies": { 519 | "has": "^1.0.3" 520 | }, 521 | "funding": { 522 | "url": "https://github.com/sponsors/ljharb" 523 | } 524 | }, 525 | "node_modules/is-extglob": { 526 | "version": "2.1.1", 527 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 528 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 529 | "dev": true, 530 | "engines": { 531 | "node": ">=0.10.0" 532 | } 533 | }, 534 | "node_modules/is-glob": { 535 | "version": "4.0.1", 536 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 537 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 538 | "dev": true, 539 | "dependencies": { 540 | "is-extglob": "^2.1.1" 541 | }, 542 | "engines": { 543 | "node": ">=0.10.0" 544 | } 545 | }, 546 | "node_modules/is-number": { 547 | "version": "7.0.0", 548 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 549 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 550 | "dev": true, 551 | "engines": { 552 | "node": ">=0.12.0" 553 | } 554 | }, 555 | "node_modules/kleur": { 556 | "version": "4.1.4", 557 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", 558 | "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", 559 | "dev": true, 560 | "engines": { 561 | "node": ">=6" 562 | } 563 | }, 564 | "node_modules/magic-string": { 565 | "version": "0.25.7", 566 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 567 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 568 | "dev": true, 569 | "dependencies": { 570 | "sourcemap-codec": "^1.4.4" 571 | } 572 | }, 573 | "node_modules/min-indent": { 574 | "version": "1.0.1", 575 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 576 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 577 | "dev": true, 578 | "engines": { 579 | "node": ">=4" 580 | } 581 | }, 582 | "node_modules/minimatch": { 583 | "version": "3.0.4", 584 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 585 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 586 | "dev": true, 587 | "dependencies": { 588 | "brace-expansion": "^1.1.7" 589 | }, 590 | "engines": { 591 | "node": "*" 592 | } 593 | }, 594 | "node_modules/minimist": { 595 | "version": "1.2.5", 596 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 597 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 598 | "dev": true 599 | }, 600 | "node_modules/mri": { 601 | "version": "1.1.6", 602 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 603 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 604 | "dev": true, 605 | "engines": { 606 | "node": ">=4" 607 | } 608 | }, 609 | "node_modules/ms": { 610 | "version": "2.1.2", 611 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 612 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 613 | "dev": true 614 | }, 615 | "node_modules/nanocolors": { 616 | "version": "0.2.6", 617 | "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.6.tgz", 618 | "integrity": "sha512-lP8hjPSXTQ7qpYl5hFPVTBXGdd7+Rn3oi8GqIPNZP63L09tewRzWYFxAy26B1BYOOYaPWgmVF/BFIhDAHihwUQ==", 619 | "dev": true 620 | }, 621 | "node_modules/nanoid": { 622 | "version": "3.1.25", 623 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", 624 | "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", 625 | "dev": true, 626 | "bin": { 627 | "nanoid": "bin/nanoid.cjs" 628 | }, 629 | "engines": { 630 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 631 | } 632 | }, 633 | "node_modules/normalize-path": { 634 | "version": "3.0.0", 635 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 636 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 637 | "dev": true, 638 | "engines": { 639 | "node": ">=0.10.0" 640 | } 641 | }, 642 | "node_modules/once": { 643 | "version": "1.4.0", 644 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 645 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 646 | "dev": true, 647 | "dependencies": { 648 | "wrappy": "1" 649 | } 650 | }, 651 | "node_modules/parent-module": { 652 | "version": "1.0.1", 653 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 654 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 655 | "dev": true, 656 | "dependencies": { 657 | "callsites": "^3.0.0" 658 | }, 659 | "engines": { 660 | "node": ">=6" 661 | } 662 | }, 663 | "node_modules/path-is-absolute": { 664 | "version": "1.0.1", 665 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 666 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 667 | "dev": true, 668 | "engines": { 669 | "node": ">=0.10.0" 670 | } 671 | }, 672 | "node_modules/path-parse": { 673 | "version": "1.0.7", 674 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 675 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 676 | "dev": true 677 | }, 678 | "node_modules/picomatch": { 679 | "version": "2.3.0", 680 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 681 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 682 | "dev": true, 683 | "engines": { 684 | "node": ">=8.6" 685 | }, 686 | "funding": { 687 | "url": "https://github.com/sponsors/jonschlinkert" 688 | } 689 | }, 690 | "node_modules/postcss": { 691 | "version": "8.3.8", 692 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz", 693 | "integrity": "sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA==", 694 | "dev": true, 695 | "dependencies": { 696 | "nanocolors": "^0.2.2", 697 | "nanoid": "^3.1.25", 698 | "source-map-js": "^0.6.2" 699 | }, 700 | "engines": { 701 | "node": "^10 || ^12 || >=14" 702 | }, 703 | "funding": { 704 | "type": "opencollective", 705 | "url": "https://opencollective.com/postcss/" 706 | } 707 | }, 708 | "node_modules/prettier": { 709 | "version": "2.2.1", 710 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", 711 | "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", 712 | "dev": true, 713 | "bin": { 714 | "prettier": "bin-prettier.js" 715 | }, 716 | "engines": { 717 | "node": ">=10.13.0" 718 | } 719 | }, 720 | "node_modules/prettier-plugin-svelte": { 721 | "version": "2.3.1", 722 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.3.1.tgz", 723 | "integrity": "sha512-F1/r6OYoBq8Zgurhs1MN25tdrhPw0JW5JjioPRqpxbYdmrZ3gY/DzHGs0B6zwd4DLyRsfGB2gqhxUCbHt/D1fw==", 724 | "dev": true, 725 | "peerDependencies": { 726 | "prettier": "^1.16.4 || ^2.0.0", 727 | "svelte": "^3.2.0" 728 | } 729 | }, 730 | "node_modules/prisma": { 731 | "version": "3.5.0", 732 | "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.5.0.tgz", 733 | "integrity": "sha512-WEYQ+H98O0yigG+lI0gfh4iyBChvnM6QTXPDtY9eFraLXAmyb6tf/T2mUdrUAU1AEvHLVzQA5A+RpONZlQozBg==", 734 | "devOptional": true, 735 | "hasInstallScript": true, 736 | "dependencies": { 737 | "@prisma/engines": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e" 738 | }, 739 | "bin": { 740 | "prisma": "build/index.js", 741 | "prisma2": "build/index.js" 742 | }, 743 | "engines": { 744 | "node": ">=12.6" 745 | } 746 | }, 747 | "node_modules/readdirp": { 748 | "version": "3.6.0", 749 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 750 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 751 | "dev": true, 752 | "dependencies": { 753 | "picomatch": "^2.2.1" 754 | }, 755 | "engines": { 756 | "node": ">=8.10.0" 757 | } 758 | }, 759 | "node_modules/require-relative": { 760 | "version": "0.8.7", 761 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 762 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 763 | "dev": true 764 | }, 765 | "node_modules/resolve": { 766 | "version": "1.20.0", 767 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 768 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 769 | "dev": true, 770 | "dependencies": { 771 | "is-core-module": "^2.2.0", 772 | "path-parse": "^1.0.6" 773 | }, 774 | "funding": { 775 | "url": "https://github.com/sponsors/ljharb" 776 | } 777 | }, 778 | "node_modules/resolve-from": { 779 | "version": "4.0.0", 780 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 781 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 782 | "dev": true, 783 | "engines": { 784 | "node": ">=4" 785 | } 786 | }, 787 | "node_modules/rollup": { 788 | "version": "2.57.0", 789 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz", 790 | "integrity": "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==", 791 | "dev": true, 792 | "bin": { 793 | "rollup": "dist/bin/rollup" 794 | }, 795 | "engines": { 796 | "node": ">=10.0.0" 797 | }, 798 | "optionalDependencies": { 799 | "fsevents": "~2.3.2" 800 | } 801 | }, 802 | "node_modules/sade": { 803 | "version": "1.7.4", 804 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 805 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 806 | "dev": true, 807 | "dependencies": { 808 | "mri": "^1.1.0" 809 | }, 810 | "engines": { 811 | "node": ">= 6" 812 | } 813 | }, 814 | "node_modules/source-map": { 815 | "version": "0.7.3", 816 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 817 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 818 | "dev": true, 819 | "engines": { 820 | "node": ">= 8" 821 | } 822 | }, 823 | "node_modules/source-map-js": { 824 | "version": "0.6.2", 825 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", 826 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", 827 | "dev": true, 828 | "engines": { 829 | "node": ">=0.10.0" 830 | } 831 | }, 832 | "node_modules/sourcemap-codec": { 833 | "version": "1.4.8", 834 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 835 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 836 | "dev": true 837 | }, 838 | "node_modules/strip-indent": { 839 | "version": "3.0.0", 840 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 841 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 842 | "dev": true, 843 | "dependencies": { 844 | "min-indent": "^1.0.0" 845 | }, 846 | "engines": { 847 | "node": ">=8" 848 | } 849 | }, 850 | "node_modules/supports-color": { 851 | "version": "7.2.0", 852 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 853 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 854 | "dev": true, 855 | "dependencies": { 856 | "has-flag": "^4.0.0" 857 | }, 858 | "engines": { 859 | "node": ">=8" 860 | } 861 | }, 862 | "node_modules/svelte": { 863 | "version": "3.41.0", 864 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.41.0.tgz", 865 | "integrity": "sha512-X9/lnTcRBCrMdyFBVjfmqy1T2vyN8ejUE1OfbWSccc2Z42Amn3ab3XdBgVl+oDkZvzPfPMoxo6CEbWca7pXOew==", 866 | "dev": true, 867 | "engines": { 868 | "node": ">= 8" 869 | } 870 | }, 871 | "node_modules/svelte-check": { 872 | "version": "2.2.4", 873 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.2.4.tgz", 874 | "integrity": "sha512-eGEuZ3UEanOhlpQhICLjKejDxcZ9uYJlGnBGKAPW7uugolaBE6HpEBIiKFZN/TMRFFHQUURgGvsVn8/HJUBfeQ==", 875 | "dev": true, 876 | "dependencies": { 877 | "chalk": "^4.0.0", 878 | "chokidar": "^3.4.1", 879 | "glob": "^7.1.6", 880 | "import-fresh": "^3.2.1", 881 | "minimist": "^1.2.5", 882 | "sade": "^1.7.4", 883 | "source-map": "^0.7.3", 884 | "svelte-preprocess": "^4.0.0", 885 | "typescript": "*" 886 | }, 887 | "bin": { 888 | "svelte-check": "bin/svelte-check" 889 | }, 890 | "peerDependencies": { 891 | "svelte": "^3.24.0" 892 | } 893 | }, 894 | "node_modules/svelte-hmr": { 895 | "version": "0.14.7", 896 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.7.tgz", 897 | "integrity": "sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==", 898 | "dev": true, 899 | "peerDependencies": { 900 | "svelte": ">=3.19.0" 901 | } 902 | }, 903 | "node_modules/svelte-preprocess": { 904 | "version": "4.7.4", 905 | "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.7.4.tgz", 906 | "integrity": "sha512-mDAmaltQl6e5zU2VEtoWEf7eLTfuOTGr9zt+BpA3AGHo8MIhKiNSPE9OLTCTOMgj0vj/uL9QBbaNmpG4G1CgIA==", 907 | "dev": true, 908 | "hasInstallScript": true, 909 | "dependencies": { 910 | "@types/pug": "^2.0.4", 911 | "@types/sass": "^1.16.0", 912 | "detect-indent": "^6.0.0", 913 | "strip-indent": "^3.0.0" 914 | }, 915 | "engines": { 916 | "node": ">= 9.11.2" 917 | }, 918 | "peerDependencies": { 919 | "@babel/core": "^7.10.2", 920 | "coffeescript": "^2.5.1", 921 | "less": "^3.11.3", 922 | "postcss": "^7 || ^8", 923 | "postcss-load-config": "^2.1.0 || ^3.0.0", 924 | "pug": "^3.0.0", 925 | "sass": "^1.26.8", 926 | "stylus": "^0.54.7", 927 | "sugarss": "^2.0.0", 928 | "svelte": "^3.23.0", 929 | "typescript": "^3.9.5 || ^4.0.0" 930 | }, 931 | "peerDependenciesMeta": { 932 | "@babel/core": { 933 | "optional": true 934 | }, 935 | "coffeescript": { 936 | "optional": true 937 | }, 938 | "less": { 939 | "optional": true 940 | }, 941 | "node-sass": { 942 | "optional": true 943 | }, 944 | "postcss": { 945 | "optional": true 946 | }, 947 | "postcss-load-config": { 948 | "optional": true 949 | }, 950 | "pug": { 951 | "optional": true 952 | }, 953 | "sass": { 954 | "optional": true 955 | }, 956 | "stylus": { 957 | "optional": true 958 | }, 959 | "sugarss": { 960 | "optional": true 961 | }, 962 | "typescript": { 963 | "optional": true 964 | } 965 | } 966 | }, 967 | "node_modules/to-regex-range": { 968 | "version": "5.0.1", 969 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 970 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 971 | "dev": true, 972 | "dependencies": { 973 | "is-number": "^7.0.0" 974 | }, 975 | "engines": { 976 | "node": ">=8.0" 977 | } 978 | }, 979 | "node_modules/tslib": { 980 | "version": "2.3.0", 981 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 982 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", 983 | "dev": true 984 | }, 985 | "node_modules/typescript": { 986 | "version": "4.3.5", 987 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 988 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", 989 | "dev": true, 990 | "bin": { 991 | "tsc": "bin/tsc", 992 | "tsserver": "bin/tsserver" 993 | }, 994 | "engines": { 995 | "node": ">=4.2.0" 996 | } 997 | }, 998 | "node_modules/vite": { 999 | "version": "2.5.10", 1000 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.10.tgz", 1001 | "integrity": "sha512-0ObiHTi5AHyXdJcvZ67HMsDgVpjT5RehvVKv6+Q0jFZ7zDI28PF5zK9mYz2avxdA+4iJMdwCz6wnGNnn4WX5Gg==", 1002 | "dev": true, 1003 | "dependencies": { 1004 | "esbuild": "^0.12.17", 1005 | "postcss": "^8.3.6", 1006 | "resolve": "^1.20.0", 1007 | "rollup": "^2.38.5" 1008 | }, 1009 | "bin": { 1010 | "vite": "bin/vite.js" 1011 | }, 1012 | "engines": { 1013 | "node": ">=12.2.0" 1014 | }, 1015 | "optionalDependencies": { 1016 | "fsevents": "~2.3.2" 1017 | } 1018 | }, 1019 | "node_modules/wrappy": { 1020 | "version": "1.0.2", 1021 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1022 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1023 | "dev": true 1024 | } 1025 | }, 1026 | "dependencies": { 1027 | "@fontsource/fira-mono": { 1028 | "version": "4.5.0", 1029 | "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.0.tgz", 1030 | "integrity": "sha512-KE+d3wmgq/YKM0BqgUF7p2yeBNi805Nfof1lC1wJ7E9i2EWoC363sGdKG+MQBVm+ei3GYZu+Bo8Xha1w1pkB7g==" 1031 | }, 1032 | "@lukeed/csprng": { 1033 | "version": "1.0.0", 1034 | "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.0.tgz", 1035 | "integrity": "sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==" 1036 | }, 1037 | "@lukeed/uuid": { 1038 | "version": "2.0.0", 1039 | "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", 1040 | "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", 1041 | "requires": { 1042 | "@lukeed/csprng": "^1.0.0" 1043 | } 1044 | }, 1045 | "@prisma/client": { 1046 | "version": "3.5.0", 1047 | "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.5.0.tgz", 1048 | "integrity": "sha512-LuaaisknLe9CCfJ1Rtqe9b9knvPgEEcC77OMmWdo3fSanxl5oTDxcH3IIhpULQQlJfZvDcaEXuXNU4dsNF+q1w==", 1049 | "requires": { 1050 | "@prisma/engines-version": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e" 1051 | } 1052 | }, 1053 | "@prisma/engines": { 1054 | "version": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e", 1055 | "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e.tgz", 1056 | "integrity": "sha512-MqZUrxuLlIbjB3wu8LrRJOKcvR4k3dunKoI4Q2bPfAwLQY0XlpsLZ3TRVW1c32ooVk939p6iGNkaCUo63Et36g==", 1057 | "devOptional": true 1058 | }, 1059 | "@prisma/engines-version": { 1060 | "version": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e", 1061 | "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e.tgz", 1062 | "integrity": "sha512-X16YmBmj7Omso4ZbkNBe6gPYlNcnwZMUPtXsguCkn+KoMqm3DJD9M4X31gx0Gf13Q44dY3SKPJZUk44/XUj/WA==" 1063 | }, 1064 | "@rollup/pluginutils": { 1065 | "version": "4.1.1", 1066 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", 1067 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", 1068 | "dev": true, 1069 | "requires": { 1070 | "estree-walker": "^2.0.1", 1071 | "picomatch": "^2.2.2" 1072 | } 1073 | }, 1074 | "@sveltejs/adapter-vercel": { 1075 | "version": "1.0.0-next.29", 1076 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.29.tgz", 1077 | "integrity": "sha512-2DMz4qCm5+v+/8npdbyT/uQVMr3elSOH5ZJ24k3VLug60n6/sS4RyU++RO8gjiVQqxyGvdfRFJXAX6xV4K6hzg==", 1078 | "dev": true, 1079 | "requires": { 1080 | "esbuild": "^0.12.5" 1081 | } 1082 | }, 1083 | "@sveltejs/kit": { 1084 | "version": "1.0.0-next.174", 1085 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.174.tgz", 1086 | "integrity": "sha512-Kgtz5kZTyPnpPb8pjMMOo+uTDRBkiObRLnFaBDnYFd2ahUuhAPHHPlbcIDwO5psN4t6UbPdpdkoLNCAyDgBLdw==", 1087 | "dev": true, 1088 | "requires": { 1089 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.24", 1090 | "cheap-watch": "^1.0.4", 1091 | "sade": "^1.7.4", 1092 | "vite": "^2.5.7" 1093 | } 1094 | }, 1095 | "@sveltejs/vite-plugin-svelte": { 1096 | "version": "1.0.0-next.24", 1097 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.24.tgz", 1098 | "integrity": "sha512-b+n3jcLpk2j/25APQbk5ejCyd0faYTB2bOxR3gY0LX3MFGgdiL8zdf3/aawcPSxLdbL73YVlxNBIATGuvq03uQ==", 1099 | "dev": true, 1100 | "requires": { 1101 | "@rollup/pluginutils": "^4.1.1", 1102 | "debug": "^4.3.2", 1103 | "kleur": "^4.1.4", 1104 | "magic-string": "^0.25.7", 1105 | "require-relative": "^0.8.7", 1106 | "svelte-hmr": "^0.14.7" 1107 | } 1108 | }, 1109 | "@types/cookie": { 1110 | "version": "0.4.1", 1111 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", 1112 | "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", 1113 | "dev": true 1114 | }, 1115 | "@types/node": { 1116 | "version": "16.4.10", 1117 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.10.tgz", 1118 | "integrity": "sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==", 1119 | "dev": true 1120 | }, 1121 | "@types/pug": { 1122 | "version": "2.0.5", 1123 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz", 1124 | "integrity": "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==", 1125 | "dev": true 1126 | }, 1127 | "@types/sass": { 1128 | "version": "1.16.1", 1129 | "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.16.1.tgz", 1130 | "integrity": "sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==", 1131 | "dev": true, 1132 | "requires": { 1133 | "@types/node": "*" 1134 | } 1135 | }, 1136 | "ansi-styles": { 1137 | "version": "4.3.0", 1138 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1139 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1140 | "dev": true, 1141 | "requires": { 1142 | "color-convert": "^2.0.1" 1143 | } 1144 | }, 1145 | "anymatch": { 1146 | "version": "3.1.2", 1147 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 1148 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 1149 | "dev": true, 1150 | "requires": { 1151 | "normalize-path": "^3.0.0", 1152 | "picomatch": "^2.0.4" 1153 | } 1154 | }, 1155 | "balanced-match": { 1156 | "version": "1.0.2", 1157 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1158 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1159 | "dev": true 1160 | }, 1161 | "binary-extensions": { 1162 | "version": "2.2.0", 1163 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1164 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1165 | "dev": true 1166 | }, 1167 | "brace-expansion": { 1168 | "version": "1.1.11", 1169 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1170 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1171 | "dev": true, 1172 | "requires": { 1173 | "balanced-match": "^1.0.0", 1174 | "concat-map": "0.0.1" 1175 | } 1176 | }, 1177 | "braces": { 1178 | "version": "3.0.2", 1179 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1180 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1181 | "dev": true, 1182 | "requires": { 1183 | "fill-range": "^7.0.1" 1184 | } 1185 | }, 1186 | "callsites": { 1187 | "version": "3.1.0", 1188 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1189 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1190 | "dev": true 1191 | }, 1192 | "chalk": { 1193 | "version": "4.1.2", 1194 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1195 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1196 | "dev": true, 1197 | "requires": { 1198 | "ansi-styles": "^4.1.0", 1199 | "supports-color": "^7.1.0" 1200 | } 1201 | }, 1202 | "cheap-watch": { 1203 | "version": "1.0.4", 1204 | "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.4.tgz", 1205 | "integrity": "sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==", 1206 | "dev": true 1207 | }, 1208 | "chokidar": { 1209 | "version": "3.5.2", 1210 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 1211 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 1212 | "dev": true, 1213 | "requires": { 1214 | "anymatch": "~3.1.2", 1215 | "braces": "~3.0.2", 1216 | "fsevents": "~2.3.2", 1217 | "glob-parent": "~5.1.2", 1218 | "is-binary-path": "~2.1.0", 1219 | "is-glob": "~4.0.1", 1220 | "normalize-path": "~3.0.0", 1221 | "readdirp": "~3.6.0" 1222 | } 1223 | }, 1224 | "color-convert": { 1225 | "version": "2.0.1", 1226 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1227 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1228 | "dev": true, 1229 | "requires": { 1230 | "color-name": "~1.1.4" 1231 | } 1232 | }, 1233 | "color-name": { 1234 | "version": "1.1.4", 1235 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1236 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1237 | "dev": true 1238 | }, 1239 | "concat-map": { 1240 | "version": "0.0.1", 1241 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1242 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1243 | "dev": true 1244 | }, 1245 | "cookie": { 1246 | "version": "0.4.1", 1247 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 1248 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" 1249 | }, 1250 | "debug": { 1251 | "version": "4.3.2", 1252 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1253 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1254 | "dev": true, 1255 | "requires": { 1256 | "ms": "2.1.2" 1257 | } 1258 | }, 1259 | "detect-indent": { 1260 | "version": "6.1.0", 1261 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 1262 | "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 1263 | "dev": true 1264 | }, 1265 | "esbuild": { 1266 | "version": "0.12.29", 1267 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", 1268 | "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", 1269 | "dev": true 1270 | }, 1271 | "estree-walker": { 1272 | "version": "2.0.2", 1273 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1274 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1275 | "dev": true 1276 | }, 1277 | "fill-range": { 1278 | "version": "7.0.1", 1279 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1280 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1281 | "dev": true, 1282 | "requires": { 1283 | "to-regex-range": "^5.0.1" 1284 | } 1285 | }, 1286 | "fs.realpath": { 1287 | "version": "1.0.0", 1288 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1289 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1290 | "dev": true 1291 | }, 1292 | "fsevents": { 1293 | "version": "2.3.2", 1294 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1295 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1296 | "dev": true, 1297 | "optional": true 1298 | }, 1299 | "function-bind": { 1300 | "version": "1.1.1", 1301 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1302 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1303 | "dev": true 1304 | }, 1305 | "glob": { 1306 | "version": "7.1.7", 1307 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 1308 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 1309 | "dev": true, 1310 | "requires": { 1311 | "fs.realpath": "^1.0.0", 1312 | "inflight": "^1.0.4", 1313 | "inherits": "2", 1314 | "minimatch": "^3.0.4", 1315 | "once": "^1.3.0", 1316 | "path-is-absolute": "^1.0.0" 1317 | } 1318 | }, 1319 | "glob-parent": { 1320 | "version": "5.1.2", 1321 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1322 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1323 | "dev": true, 1324 | "requires": { 1325 | "is-glob": "^4.0.1" 1326 | } 1327 | }, 1328 | "has": { 1329 | "version": "1.0.3", 1330 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1331 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1332 | "dev": true, 1333 | "requires": { 1334 | "function-bind": "^1.1.1" 1335 | } 1336 | }, 1337 | "has-flag": { 1338 | "version": "4.0.0", 1339 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1340 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1341 | "dev": true 1342 | }, 1343 | "import-fresh": { 1344 | "version": "3.3.0", 1345 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1346 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1347 | "dev": true, 1348 | "requires": { 1349 | "parent-module": "^1.0.0", 1350 | "resolve-from": "^4.0.0" 1351 | } 1352 | }, 1353 | "inflight": { 1354 | "version": "1.0.6", 1355 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1356 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1357 | "dev": true, 1358 | "requires": { 1359 | "once": "^1.3.0", 1360 | "wrappy": "1" 1361 | } 1362 | }, 1363 | "inherits": { 1364 | "version": "2.0.4", 1365 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1366 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1367 | "dev": true 1368 | }, 1369 | "is-binary-path": { 1370 | "version": "2.1.0", 1371 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1372 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1373 | "dev": true, 1374 | "requires": { 1375 | "binary-extensions": "^2.0.0" 1376 | } 1377 | }, 1378 | "is-core-module": { 1379 | "version": "2.6.0", 1380 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", 1381 | "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", 1382 | "dev": true, 1383 | "requires": { 1384 | "has": "^1.0.3" 1385 | } 1386 | }, 1387 | "is-extglob": { 1388 | "version": "2.1.1", 1389 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1390 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1391 | "dev": true 1392 | }, 1393 | "is-glob": { 1394 | "version": "4.0.1", 1395 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1396 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1397 | "dev": true, 1398 | "requires": { 1399 | "is-extglob": "^2.1.1" 1400 | } 1401 | }, 1402 | "is-number": { 1403 | "version": "7.0.0", 1404 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1405 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1406 | "dev": true 1407 | }, 1408 | "kleur": { 1409 | "version": "4.1.4", 1410 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", 1411 | "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", 1412 | "dev": true 1413 | }, 1414 | "magic-string": { 1415 | "version": "0.25.7", 1416 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1417 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1418 | "dev": true, 1419 | "requires": { 1420 | "sourcemap-codec": "^1.4.4" 1421 | } 1422 | }, 1423 | "min-indent": { 1424 | "version": "1.0.1", 1425 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 1426 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 1427 | "dev": true 1428 | }, 1429 | "minimatch": { 1430 | "version": "3.0.4", 1431 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1432 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1433 | "dev": true, 1434 | "requires": { 1435 | "brace-expansion": "^1.1.7" 1436 | } 1437 | }, 1438 | "minimist": { 1439 | "version": "1.2.5", 1440 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1441 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1442 | "dev": true 1443 | }, 1444 | "mri": { 1445 | "version": "1.1.6", 1446 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 1447 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 1448 | "dev": true 1449 | }, 1450 | "ms": { 1451 | "version": "2.1.2", 1452 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1453 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1454 | "dev": true 1455 | }, 1456 | "nanocolors": { 1457 | "version": "0.2.6", 1458 | "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.6.tgz", 1459 | "integrity": "sha512-lP8hjPSXTQ7qpYl5hFPVTBXGdd7+Rn3oi8GqIPNZP63L09tewRzWYFxAy26B1BYOOYaPWgmVF/BFIhDAHihwUQ==", 1460 | "dev": true 1461 | }, 1462 | "nanoid": { 1463 | "version": "3.1.25", 1464 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", 1465 | "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", 1466 | "dev": true 1467 | }, 1468 | "normalize-path": { 1469 | "version": "3.0.0", 1470 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1471 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1472 | "dev": true 1473 | }, 1474 | "once": { 1475 | "version": "1.4.0", 1476 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1477 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1478 | "dev": true, 1479 | "requires": { 1480 | "wrappy": "1" 1481 | } 1482 | }, 1483 | "parent-module": { 1484 | "version": "1.0.1", 1485 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1486 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1487 | "dev": true, 1488 | "requires": { 1489 | "callsites": "^3.0.0" 1490 | } 1491 | }, 1492 | "path-is-absolute": { 1493 | "version": "1.0.1", 1494 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1495 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1496 | "dev": true 1497 | }, 1498 | "path-parse": { 1499 | "version": "1.0.7", 1500 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1501 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1502 | "dev": true 1503 | }, 1504 | "picomatch": { 1505 | "version": "2.3.0", 1506 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1507 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1508 | "dev": true 1509 | }, 1510 | "postcss": { 1511 | "version": "8.3.8", 1512 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.8.tgz", 1513 | "integrity": "sha512-GT5bTjjZnwDifajzczOC+r3FI3Cu+PgPvrsjhQdRqa2kTJ4968/X9CUce9xttIB0xOs5c6xf0TCWZo/y9lF6bA==", 1514 | "dev": true, 1515 | "requires": { 1516 | "nanocolors": "^0.2.2", 1517 | "nanoid": "^3.1.25", 1518 | "source-map-js": "^0.6.2" 1519 | } 1520 | }, 1521 | "prettier": { 1522 | "version": "2.2.1", 1523 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", 1524 | "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", 1525 | "dev": true 1526 | }, 1527 | "prettier-plugin-svelte": { 1528 | "version": "2.3.1", 1529 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.3.1.tgz", 1530 | "integrity": "sha512-F1/r6OYoBq8Zgurhs1MN25tdrhPw0JW5JjioPRqpxbYdmrZ3gY/DzHGs0B6zwd4DLyRsfGB2gqhxUCbHt/D1fw==", 1531 | "dev": true, 1532 | "requires": {} 1533 | }, 1534 | "prisma": { 1535 | "version": "3.5.0", 1536 | "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.5.0.tgz", 1537 | "integrity": "sha512-WEYQ+H98O0yigG+lI0gfh4iyBChvnM6QTXPDtY9eFraLXAmyb6tf/T2mUdrUAU1AEvHLVzQA5A+RpONZlQozBg==", 1538 | "devOptional": true, 1539 | "requires": { 1540 | "@prisma/engines": "3.5.0-38.78a5df6def6943431f4c022e1428dbc3e833cf8e" 1541 | } 1542 | }, 1543 | "readdirp": { 1544 | "version": "3.6.0", 1545 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1546 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1547 | "dev": true, 1548 | "requires": { 1549 | "picomatch": "^2.2.1" 1550 | } 1551 | }, 1552 | "require-relative": { 1553 | "version": "0.8.7", 1554 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 1555 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 1556 | "dev": true 1557 | }, 1558 | "resolve": { 1559 | "version": "1.20.0", 1560 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1561 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1562 | "dev": true, 1563 | "requires": { 1564 | "is-core-module": "^2.2.0", 1565 | "path-parse": "^1.0.6" 1566 | } 1567 | }, 1568 | "resolve-from": { 1569 | "version": "4.0.0", 1570 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1571 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1572 | "dev": true 1573 | }, 1574 | "rollup": { 1575 | "version": "2.57.0", 1576 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.57.0.tgz", 1577 | "integrity": "sha512-bKQIh1rWKofRee6mv8SrF2HdP6pea5QkwBZSMImJysFj39gQuiV8MEPBjXOCpzk3wSYp63M2v2wkWBmFC8O/rg==", 1578 | "dev": true, 1579 | "requires": { 1580 | "fsevents": "~2.3.2" 1581 | } 1582 | }, 1583 | "sade": { 1584 | "version": "1.7.4", 1585 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 1586 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 1587 | "dev": true, 1588 | "requires": { 1589 | "mri": "^1.1.0" 1590 | } 1591 | }, 1592 | "source-map": { 1593 | "version": "0.7.3", 1594 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1595 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1596 | "dev": true 1597 | }, 1598 | "source-map-js": { 1599 | "version": "0.6.2", 1600 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", 1601 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", 1602 | "dev": true 1603 | }, 1604 | "sourcemap-codec": { 1605 | "version": "1.4.8", 1606 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1607 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1608 | "dev": true 1609 | }, 1610 | "strip-indent": { 1611 | "version": "3.0.0", 1612 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 1613 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 1614 | "dev": true, 1615 | "requires": { 1616 | "min-indent": "^1.0.0" 1617 | } 1618 | }, 1619 | "supports-color": { 1620 | "version": "7.2.0", 1621 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1622 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1623 | "dev": true, 1624 | "requires": { 1625 | "has-flag": "^4.0.0" 1626 | } 1627 | }, 1628 | "svelte": { 1629 | "version": "3.41.0", 1630 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.41.0.tgz", 1631 | "integrity": "sha512-X9/lnTcRBCrMdyFBVjfmqy1T2vyN8ejUE1OfbWSccc2Z42Amn3ab3XdBgVl+oDkZvzPfPMoxo6CEbWca7pXOew==", 1632 | "dev": true 1633 | }, 1634 | "svelte-check": { 1635 | "version": "2.2.4", 1636 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.2.4.tgz", 1637 | "integrity": "sha512-eGEuZ3UEanOhlpQhICLjKejDxcZ9uYJlGnBGKAPW7uugolaBE6HpEBIiKFZN/TMRFFHQUURgGvsVn8/HJUBfeQ==", 1638 | "dev": true, 1639 | "requires": { 1640 | "chalk": "^4.0.0", 1641 | "chokidar": "^3.4.1", 1642 | "glob": "^7.1.6", 1643 | "import-fresh": "^3.2.1", 1644 | "minimist": "^1.2.5", 1645 | "sade": "^1.7.4", 1646 | "source-map": "^0.7.3", 1647 | "svelte-preprocess": "^4.0.0", 1648 | "typescript": "*" 1649 | } 1650 | }, 1651 | "svelte-hmr": { 1652 | "version": "0.14.7", 1653 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.7.tgz", 1654 | "integrity": "sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==", 1655 | "dev": true, 1656 | "requires": {} 1657 | }, 1658 | "svelte-preprocess": { 1659 | "version": "4.7.4", 1660 | "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.7.4.tgz", 1661 | "integrity": "sha512-mDAmaltQl6e5zU2VEtoWEf7eLTfuOTGr9zt+BpA3AGHo8MIhKiNSPE9OLTCTOMgj0vj/uL9QBbaNmpG4G1CgIA==", 1662 | "dev": true, 1663 | "requires": { 1664 | "@types/pug": "^2.0.4", 1665 | "@types/sass": "^1.16.0", 1666 | "detect-indent": "^6.0.0", 1667 | "strip-indent": "^3.0.0" 1668 | } 1669 | }, 1670 | "to-regex-range": { 1671 | "version": "5.0.1", 1672 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1673 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1674 | "dev": true, 1675 | "requires": { 1676 | "is-number": "^7.0.0" 1677 | } 1678 | }, 1679 | "tslib": { 1680 | "version": "2.3.0", 1681 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", 1682 | "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", 1683 | "dev": true 1684 | }, 1685 | "typescript": { 1686 | "version": "4.3.5", 1687 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 1688 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", 1689 | "dev": true 1690 | }, 1691 | "vite": { 1692 | "version": "2.5.10", 1693 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.10.tgz", 1694 | "integrity": "sha512-0ObiHTi5AHyXdJcvZ67HMsDgVpjT5RehvVKv6+Q0jFZ7zDI28PF5zK9mYz2avxdA+4iJMdwCz6wnGNnn4WX5Gg==", 1695 | "dev": true, 1696 | "requires": { 1697 | "esbuild": "^0.12.17", 1698 | "fsevents": "~2.3.2", 1699 | "postcss": "^8.3.6", 1700 | "resolve": "^1.20.0", 1701 | "rollup": "^2.38.5" 1702 | } 1703 | }, 1704 | "wrappy": { 1705 | "version": "1.0.2", 1706 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1707 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1708 | "dev": true 1709 | } 1710 | } 1711 | } 1712 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "~TODO~", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "dev": "svelte-kit dev", 6 | "build": "svelte-kit build", 7 | "preview": "svelte-kit preview", 8 | "check": "svelte-check --tsconfig ./tsconfig.json", 9 | "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", 10 | "lint": "prettier --check --plugin-search-dir=. .", 11 | "format": "prettier --write --plugin-search-dir=. .", 12 | "postinstall": "prisma generate", 13 | "postbuild": "cp node_modules/@prisma/engines/*query* .vercel_build_output/functions/node/render/;cp prisma/schema.prisma .vercel_build_output/functions/node/render/", 14 | "predev": "npm run prisma:migrate:dev", 15 | "prisma:migrate:dev": "prisma migrate dev", 16 | "prisma:migrate:reset": "prisma migrate reset --force", 17 | "vercel-build": "prisma generate && prisma migrate deploy && npm run build" 18 | }, 19 | "devDependencies": { 20 | "@sveltejs/adapter-vercel": "^1.0.0-next.29", 21 | "@sveltejs/kit": "next", 22 | "@types/cookie": "^0.4.0", 23 | "prettier": "~2.2.1", 24 | "prettier-plugin-svelte": "^2.2.0", 25 | "prisma": "^3.5.0", 26 | "svelte": "^3.34.0", 27 | "svelte-check": "^2.0.0", 28 | "svelte-preprocess": "^4.0.0", 29 | "tslib": "^2.0.0", 30 | "typescript": "^4.0.0" 31 | }, 32 | "type": "module", 33 | "dependencies": { 34 | "@fontsource/fira-mono": "^4.2.2", 35 | "@lukeed/uuid": "^2.0.0", 36 | "@prisma/client": "^3.5.0", 37 | "cookie": "^0.4.1" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /prisma/migrations/20211106032330_init/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Todo" ( 3 | "uid" TEXT NOT NULL, 4 | "created_at" TIMESTAMP(3) NOT NULL, 5 | "text" TEXT NOT NULL, 6 | "done" BOOLEAN NOT NULL, 7 | 8 | PRIMARY KEY ("uid") 9 | ); 10 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | // This is your Prisma schema file, 2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 | 4 | datasource db { 5 | provider = "postgresql" 6 | url = env("DATABASE_URL") 7 | } 8 | 9 | generator client { 10 | provider = "prisma-client-js" 11 | binaryTargets = ["native"] 12 | } 13 | 14 | model Todo { 15 | uid String @id @default(cuid()) 16 | created_at DateTime 17 | text String 18 | done Boolean 19 | } 20 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | @import '@fontsource/fira-mono'; 2 | 3 | :root { 4 | font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 5 | Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 6 | --font-mono: 'Fira Mono', monospace; 7 | --pure-white: #ffffff; 8 | --primary-color: #b9c6d2; 9 | --secondary-color: #d0dde9; 10 | --tertiary-color: #edf0f8; 11 | --accent-color: #ff3e00; 12 | --heading-color: rgba(0, 0, 0, 0.7); 13 | --text-color: #444444; 14 | --background-without-opacity: rgba(255, 255, 255, 0.7); 15 | --column-width: 42rem; 16 | --column-margin-top: 4rem; 17 | } 18 | 19 | body { 20 | min-height: 100vh; 21 | margin: 0; 22 | background-color: var(--primary-color); 23 | background: linear-gradient( 24 | 180deg, 25 | var(--primary-color) 0%, 26 | var(--secondary-color) 10.45%, 27 | var(--tertiary-color) 41.35% 28 | ); 29 | } 30 | 31 | body::before { 32 | content: ''; 33 | width: 80vw; 34 | height: 100vh; 35 | position: absolute; 36 | top: 0; 37 | left: 10vw; 38 | z-index: -1; 39 | background: radial-gradient( 40 | 50% 50% at 50% 50%, 41 | var(--pure-white) 0%, 42 | rgba(255, 255, 255, 0) 100% 43 | ); 44 | opacity: 0.05; 45 | } 46 | 47 | #svelte { 48 | min-height: 100vh; 49 | display: flex; 50 | flex-direction: column; 51 | } 52 | 53 | h1, 54 | h2, 55 | p { 56 | font-weight: 400; 57 | color: var(--heading-color); 58 | } 59 | 60 | p { 61 | line-height: 1.5; 62 | } 63 | 64 | a { 65 | color: var(--accent-color); 66 | text-decoration: none; 67 | } 68 | 69 | a:hover { 70 | text-decoration: underline; 71 | } 72 | 73 | h1 { 74 | font-size: 2rem; 75 | margin-bottom: 0 0 1em 0; 76 | text-align: center; 77 | } 78 | 79 | h2 { 80 | font-size: 1rem; 81 | } 82 | 83 | pre { 84 | font-size: 16px; 85 | font-family: var(--font-mono); 86 | background-color: rgba(255, 255, 255, 0.45); 87 | border-radius: 3px; 88 | box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); 89 | padding: 0.5em; 90 | overflow-x: auto; 91 | color: var(--text-color); 92 | } 93 | 94 | input, 95 | button { 96 | font-size: inherit; 97 | font-family: inherit; 98 | } 99 | 100 | button:focus:not(:focus-visible) { 101 | outline: none; 102 | } 103 | 104 | @media (min-width: 720px) { 105 | h1 { 106 | font-size: 2.4rem; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | %svelte.head% 9 | 10 | 11 |
%svelte.body%
12 | 13 | 14 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/hooks.ts: -------------------------------------------------------------------------------- 1 | import cookie from 'cookie'; 2 | import { v4 as uuid } from '@lukeed/uuid'; 3 | import type { Handle } from '@sveltejs/kit'; 4 | 5 | export const handle: Handle = async ({ request, resolve }) => { 6 | const cookies = cookie.parse(request.headers.cookie || ''); 7 | request.locals.userid = cookies.userid || uuid(); 8 | 9 | // TODO https://github.com/sveltejs/kit/issues/1046 10 | if (request.query.has('_method')) { 11 | request.method = request.query.get('_method').toUpperCase(); 12 | } 13 | 14 | const response = await resolve(request); 15 | 16 | if (!cookies.userid) { 17 | // if this is the first time the user has visited this app, 18 | // set a cookie so that we recognise them when they return 19 | response.headers['set-cookie'] = `userid=${request.locals.userid}; Path=/; HttpOnly`; 20 | } 21 | 22 | return response; 23 | }; 24 | -------------------------------------------------------------------------------- /src/lib/Counter.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 22 | 23 |
24 |
25 | 26 | {Math.floor($displayed_count)} 27 |
28 |
29 | 30 | 35 |
36 | 37 | 99 | -------------------------------------------------------------------------------- /src/lib/form.ts: -------------------------------------------------------------------------------- 1 | // this action (https://svelte.dev/tutorial/actions) allows us to 2 | // progressively enhance a
that already works without JS 3 | export function enhance( 4 | form: HTMLFormElement, 5 | { 6 | pending, 7 | error, 8 | result 9 | }: { 10 | pending?: (data: FormData, form: HTMLFormElement) => void; 11 | error?: (res: Response, error: Error, form: HTMLFormElement) => void; 12 | result: (res: Response, form: HTMLFormElement) => void; 13 | } 14 | ) { 15 | let current_token: {}; 16 | 17 | async function handle_submit(e: Event) { 18 | const token = (current_token = {}); 19 | 20 | e.preventDefault(); 21 | 22 | const body = new FormData(form); 23 | 24 | if (pending) pending(body, form); 25 | 26 | try { 27 | const res = await fetch(form.action, { 28 | method: form.method, 29 | headers: { 30 | accept: 'application/json' 31 | }, 32 | body 33 | }); 34 | 35 | if (token !== current_token) return; 36 | 37 | if (res.ok) { 38 | result(res, form); 39 | } else if (error) { 40 | error(res, null, form); 41 | } else { 42 | console.error(await res.text()); 43 | } 44 | } catch (e) { 45 | if (error) { 46 | error(null, e, form); 47 | } else { 48 | throw e; 49 | } 50 | } 51 | } 52 | 53 | form.addEventListener('submit', handle_submit); 54 | 55 | return { 56 | destroy() { 57 | form.removeEventListener('submit', handle_submit); 58 | } 59 | }; 60 | } 61 | -------------------------------------------------------------------------------- /src/lib/header/Header.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |
8 | 9 | SvelteKit 10 | 11 |
12 | 13 | 26 | 27 |
28 | 29 |
30 |
31 | 32 | 121 | -------------------------------------------------------------------------------- /src/lib/header/svelte-logo.svg: -------------------------------------------------------------------------------- 1 | svelte-logo -------------------------------------------------------------------------------- /src/lib/prisma.ts: -------------------------------------------------------------------------------- 1 | import Prisma, * as PrismaAll from "@prisma/client"; 2 | 3 | const PrismaClient = Prisma?.PrismaClient || PrismaAll?.PrismaClient; 4 | export default PrismaClient; 5 | -------------------------------------------------------------------------------- /src/lib/types.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Can be made globally available by placing this 3 | * inside `global.d.ts` and removing `export` keyword 4 | */ 5 | export interface Locals { 6 | userid: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/__layout.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 | 8 |
9 | 10 |
11 | 12 | 15 | 16 | 46 | -------------------------------------------------------------------------------- /src/routes/about.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | About 19 | 20 | 21 |
22 |

About this app

23 | 24 |

25 | This is a SvelteKit app. You can make your own by typing the 26 | following into your command line and following the prompts: 27 |

28 | 29 | 30 |
npm init svelte@next
31 | 32 |

33 | The page you're looking at is purely static HTML, with no client-side interactivity needed. 34 | Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening 35 | the devtools network panel and reloading. 36 |

37 | 38 |

39 | The TODOs page illustrates SvelteKit's data loading and form handling. Try using 40 | it with JavaScript disabled! 41 |

42 |
43 | 44 | 51 | -------------------------------------------------------------------------------- /src/routes/index.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 10 | Home 11 | 12 | 13 |
14 |

15 |
16 | 17 | 18 | Welcome 19 | 20 |
21 | 22 | to your new
SvelteKit app 23 |

24 | 25 |

26 | try editing src/routes/index.svelte 27 |

28 | 29 | 30 |
31 | 32 | 60 | -------------------------------------------------------------------------------- /src/routes/todos/[uid].json.ts: -------------------------------------------------------------------------------- 1 | import { api } from './_api'; 2 | import type { RequestHandler } from '@sveltejs/kit'; 3 | import type { Locals } from '$lib/types'; 4 | 5 | // PATCH /todos/:uid.json 6 | export const patch: RequestHandler = async (request) => { 7 | return api(request, `todos/${request.locals.userid}/${request.params.uid}`, { 8 | text: request.body.get('text'), 9 | done: request.body.has('done') ? !!request.body.get('done') : undefined 10 | }); 11 | }; 12 | 13 | // DELETE /todos/:uid.json 14 | export const del: RequestHandler = async (request) => { 15 | return api(request, `todos/${request.locals.userid}/${request.params.uid}`); 16 | }; 17 | -------------------------------------------------------------------------------- /src/routes/todos/_api.ts: -------------------------------------------------------------------------------- 1 | import type { Request } from '@sveltejs/kit'; 2 | import type { Locals } from '$lib/types'; 3 | import PrismaClient from '$lib/prisma'; 4 | 5 | /* 6 | This module is used by the /todos.json and /todos/[uid].json 7 | endpoints to make calls to api.svelte.dev, which stores todos 8 | for each user. The leading underscore indicates that this is 9 | a private module, _not_ an endpoint — visiting /todos/_api 10 | will net you a 404 response. 11 | 12 | (The data on the todo app will expire periodically; no 13 | guarantees are made. Don't use it to organise your life.) 14 | */ 15 | 16 | const prisma = new PrismaClient(); 17 | 18 | export type Todo = { 19 | uid: string; 20 | created_at: Date; 21 | text: string; 22 | done: boolean; 23 | }; 24 | 25 | 26 | export async function api(request: Request, resource: string, data?: Todo) { 27 | // user must have a cookie set 28 | if (!request.locals.userid) { 29 | return { status: 401 }; 30 | } 31 | 32 | let body = {}; 33 | let status = 500; 34 | switch (request.method.toUpperCase()) { 35 | case "DELETE": 36 | await prisma.todo.delete({ 37 | where: { 38 | uid: resource.split("/").pop() 39 | } 40 | }) 41 | status = 200; 42 | break; 43 | case "GET": 44 | body = await prisma.todo.findMany(); 45 | status = 200; 46 | break; 47 | case "PATCH": 48 | body = await prisma.todo.update({ 49 | data: { 50 | done: data.done, 51 | text: data.text 52 | }, 53 | where: { 54 | uid: resource.split("/").pop() 55 | } 56 | }) 57 | status = 200; 58 | break; 59 | case "POST": 60 | body = await prisma.todo.create({ 61 | data: { 62 | created_at: new Date(), 63 | done: false, 64 | text: data.text, 65 | } 66 | }) 67 | status = 201; 68 | break; 69 | } 70 | 71 | // if the request came from a submission, the browser's default 72 | // behaviour is to show the URL corresponding to the form's "action" 73 | // attribute. in those cases, we want to redirect them back to the 74 | // /todos page, rather than showing the response 75 | if (request.method !== 'GET' && request.headers.accept !== 'application/json') { 76 | return { 77 | status: 303, 78 | headers: { 79 | location: '/todos' 80 | } 81 | }; 82 | } 83 | 84 | return { 85 | status, 86 | body 87 | }; 88 | } 89 | -------------------------------------------------------------------------------- /src/routes/todos/index.json.ts: -------------------------------------------------------------------------------- 1 | import { api } from './_api'; 2 | import type { RequestHandler } from '@sveltejs/kit'; 3 | import type { Locals } from '$lib/types'; 4 | 5 | // GET /todos.json 6 | export const get: RequestHandler = async (request) => { 7 | // request.locals.userid comes from src/hooks.js 8 | const response = await api(request, `todos/${request.locals.userid}`); 9 | 10 | if (response.status === 404) { 11 | // user hasn't created a todo list. 12 | // start with an empty array 13 | return { body: [] }; 14 | } 15 | 16 | return response; 17 | }; 18 | 19 | // POST /todos.json 20 | export const post: RequestHandler = async (request) => { 21 | const response = await api(request, `todos/${request.locals.userid}`, { 22 | // because index.svelte posts a FormData object, 23 | // request.body is _also_ a (readonly) FormData 24 | // object, which allows us to get form data 25 | // with the `body.get(key)` method 26 | text: request.body.get('text') 27 | }); 28 | 29 | return response; 30 | }; 31 | -------------------------------------------------------------------------------- /src/routes/todos/index.svelte: -------------------------------------------------------------------------------- 1 | 24 | 25 | 41 | 42 | 43 | Todos 44 | 45 | 46 |
47 |

Todos

48 | 49 | { 55 | const created = await res.json(); 56 | todos = [...todos, created]; 57 | 58 | form.reset(); 59 | } 60 | }} 61 | > 62 | 63 | 64 | 65 | {#each todos as todo (todo.uid)} 66 |
72 |
{ 77 | todo.done = !!data.get('done'); 78 | }, 79 | result: patch 80 | }} 81 | > 82 | 83 |
110 | {/each} 111 |
112 | 113 | 222 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mootoday/sveltekit-prisma/b497fbcd6e912c20388a5a7ee3a67b186b9af8ae/static/favicon.png -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /static/svelte-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mootoday/sveltekit-prisma/b497fbcd6e912c20388a5a7ee3a67b186b9af8ae/static/svelte-welcome.png -------------------------------------------------------------------------------- /static/svelte-welcome.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mootoday/sveltekit-prisma/b497fbcd6e912c20388a5a7ee3a67b186b9af8ae/static/svelte-welcome.webp -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import vercel from '@sveltejs/adapter-vercel'; 2 | import preprocess from 'svelte-preprocess'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://github.com/sveltejs/svelte-preprocess 7 | // for more information about preprocessors 8 | preprocess: preprocess(), 9 | 10 | kit: { 11 | adapter: vercel(), 12 | // hydrate the
element in src/app.html 13 | target: '#svelte', 14 | vite: { 15 | server: { 16 | hmr: { 17 | clientPort: process.env.HMR_HOST ? 443 : 24678, 18 | host: process.env.HMR_HOST ? process.env.HMR_HOST.substring("https://".length) : "localhost" 19 | } 20 | } 21 | } 22 | } 23 | }; 24 | 25 | export default config; 26 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "node", 4 | "module": "es2020", 5 | "lib": ["es2020", "DOM"], 6 | "target": "es2019", 7 | /** 8 | svelte-preprocess cannot figure out whether you have a value or a type, so tell TypeScript 9 | to enforce using \`import type\` instead of \`import\` for Types. 10 | */ 11 | "importsNotUsedAsValues": "error", 12 | "isolatedModules": true, 13 | "resolveJsonModule": true, 14 | /** 15 | To have warnings/errors of the Svelte compiler at the correct position, 16 | enable source maps by default. 17 | */ 18 | "sourceMap": true, 19 | "esModuleInterop": true, 20 | "skipLibCheck": true, 21 | "forceConsistentCasingInFileNames": true, 22 | "baseUrl": ".", 23 | "allowJs": true, 24 | "checkJs": true, 25 | "paths": { 26 | "$lib": ["src/lib"], 27 | "$lib/*": ["src/lib/*"] 28 | } 29 | }, 30 | "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.svelte"] 31 | } 32 | --------------------------------------------------------------------------------