├── .eslintrc.cjs ├── .gitignore ├── .prettierrc ├── README.md ├── jsconfig.json ├── netlify.toml ├── package-lock.json ├── package.json ├── src ├── app.css ├── app.html ├── global.d.ts ├── hooks.js ├── lib │ ├── DateModal.svelte │ ├── Welcome.svelte │ ├── date.js │ ├── db.js │ ├── nav │ │ ├── Nav.svelte │ │ └── svelte-logo.svg │ └── stores │ │ ├── lists.js │ │ └── todos.js └── routes │ ├── __error.svelte │ ├── __layout.svelte │ ├── auth │ ├── login.js │ ├── logout.js │ └── register.js │ ├── index.svelte │ ├── lists │ ├── [listId].svelte │ ├── index.json.js │ └── index.svelte │ ├── login │ └── index.svelte │ ├── register │ └── index.svelte │ ├── settings │ └── index.svelte │ ├── todos │ ├── index.json.js │ └── index.svelte │ └── user │ └── index.js ├── static ├── favicon.png ├── robots.txt ├── svelte-welcome.png ├── svelte-welcome.webp └── themes │ ├── dark.css │ └── light.css └── svelte.config.js /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['eslint:recommended', 'prettier'], 4 | plugins: ['svelte3'], 5 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], 6 | parserOptions: { 7 | sourceType: 'module', 8 | ecmaVersion: 2019 9 | }, 10 | env: { 11 | browser: true, 12 | es2017: true, 13 | node: true 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "tabWidth": 4, 4 | "semi": false, 5 | "singleQuote": true, 6 | "trailingComma": "none", 7 | "printWidth": 100 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sveltekit Todos 2 | 3 | https://sveltekit-todos.netlify.app 4 | 5 | To-do app made with [Sveltekit](https://kit.svelte.dev/) and [MongoDB Atlas](https://www.mongodb.com/atlas). 6 | 7 | - Custom lists for categorizing tasks 8 | - Due dates 9 | - Clean UI 10 | 11 | 12 | 13 | The goal behind making this was to familiarize myself with MongoDB and the structure of a fullstack Sveltekit application. 14 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "$lib": ["src/lib"], 6 | "$lib/*": ["src/lib/*"] 7 | } 8 | }, 9 | "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] 10 | } 11 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "npm run build" 3 | publish = "build" 4 | 5 | [dev] 6 | command = "svelte-kit dev" 7 | 8 | [functions] 9 | directory = "netlify/functions" 10 | node_bundler = "esbuild" -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sveltekittest", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.12.11", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 10 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.15.7", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", 19 | "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.16.0", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", 25 | "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.15.7", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "ansi-styles": { 34 | "version": "3.2.1", 35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 37 | "dev": true, 38 | "requires": { 39 | "color-convert": "^1.9.0" 40 | } 41 | }, 42 | "chalk": { 43 | "version": "2.4.2", 44 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 45 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 46 | "dev": true, 47 | "requires": { 48 | "ansi-styles": "^3.2.1", 49 | "escape-string-regexp": "^1.0.5", 50 | "supports-color": "^5.3.0" 51 | } 52 | }, 53 | "color-convert": { 54 | "version": "1.9.3", 55 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 56 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 57 | "dev": true, 58 | "requires": { 59 | "color-name": "1.1.3" 60 | } 61 | }, 62 | "color-name": { 63 | "version": "1.1.3", 64 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 65 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 66 | "dev": true 67 | }, 68 | "escape-string-regexp": { 69 | "version": "1.0.5", 70 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 71 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 72 | "dev": true 73 | }, 74 | "has-flag": { 75 | "version": "3.0.0", 76 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 77 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 78 | "dev": true 79 | }, 80 | "supports-color": { 81 | "version": "5.5.0", 82 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 83 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 84 | "dev": true, 85 | "requires": { 86 | "has-flag": "^3.0.0" 87 | } 88 | } 89 | } 90 | }, 91 | "@eslint/eslintrc": { 92 | "version": "0.4.3", 93 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", 94 | "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", 95 | "dev": true, 96 | "requires": { 97 | "ajv": "^6.12.4", 98 | "debug": "^4.1.1", 99 | "espree": "^7.3.0", 100 | "globals": "^13.9.0", 101 | "ignore": "^4.0.6", 102 | "import-fresh": "^3.2.1", 103 | "js-yaml": "^3.13.1", 104 | "minimatch": "^3.0.4", 105 | "strip-json-comments": "^3.1.1" 106 | } 107 | }, 108 | "@fontsource/fira-mono": { 109 | "version": "4.5.0", 110 | "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.0.tgz", 111 | "integrity": "sha512-KE+d3wmgq/YKM0BqgUF7p2yeBNi805Nfof1lC1wJ7E9i2EWoC363sGdKG+MQBVm+ei3GYZu+Bo8Xha1w1pkB7g==" 112 | }, 113 | "@humanwhocodes/config-array": { 114 | "version": "0.5.0", 115 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", 116 | "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", 117 | "dev": true, 118 | "requires": { 119 | "@humanwhocodes/object-schema": "^1.2.0", 120 | "debug": "^4.1.1", 121 | "minimatch": "^3.0.4" 122 | } 123 | }, 124 | "@humanwhocodes/object-schema": { 125 | "version": "1.2.1", 126 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 127 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 128 | "dev": true 129 | }, 130 | "@iarna/toml": { 131 | "version": "2.2.5", 132 | "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", 133 | "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", 134 | "dev": true 135 | }, 136 | "@lukeed/csprng": { 137 | "version": "1.0.0", 138 | "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.0.tgz", 139 | "integrity": "sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==" 140 | }, 141 | "@lukeed/uuid": { 142 | "version": "2.0.0", 143 | "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", 144 | "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", 145 | "requires": { 146 | "@lukeed/csprng": "^1.0.0" 147 | } 148 | }, 149 | "@rollup/pluginutils": { 150 | "version": "4.1.1", 151 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", 152 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", 153 | "dev": true, 154 | "requires": { 155 | "estree-walker": "^2.0.1", 156 | "picomatch": "^2.2.2" 157 | } 158 | }, 159 | "@sveltejs/adapter-netlify": { 160 | "version": "1.0.0-next.35", 161 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.35.tgz", 162 | "integrity": "sha512-3PC1RaRReu652ot+LC9EOjkebnZehdwvUm0zhPC8OFPJJccQwq6Y1kbHDeACIIFRTaKLIRBpuYh3idP6ffUGdw==", 163 | "dev": true, 164 | "requires": { 165 | "@iarna/toml": "^2.2.5", 166 | "esbuild": "^0.13.4" 167 | } 168 | }, 169 | "@sveltejs/kit": { 170 | "version": "1.0.0-next.201", 171 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.201.tgz", 172 | "integrity": "sha512-WcYexOEPWgDWOk0oOteTU5QwWykdIcOFJig+akeHqwE/jVtPURLZFtTNx0ymUWXN4S+dUXf60KF6HEMv74FHpA==", 173 | "dev": true, 174 | "requires": { 175 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.30", 176 | "cheap-watch": "^1.0.4", 177 | "sade": "^1.7.4", 178 | "vite": "^2.6.12" 179 | } 180 | }, 181 | "@sveltejs/vite-plugin-svelte": { 182 | "version": "1.0.0-next.30", 183 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.30.tgz", 184 | "integrity": "sha512-YQqdMxjL1VgSFk4/+IY3yLwuRRapPafPiZTiaGEq1psbJYSNYUWx9F1zMm32GMsnogg3zn99mGJOqe3ld3HZSg==", 185 | "dev": true, 186 | "requires": { 187 | "@rollup/pluginutils": "^4.1.1", 188 | "debug": "^4.3.2", 189 | "kleur": "^4.1.4", 190 | "magic-string": "^0.25.7", 191 | "require-relative": "^0.8.7", 192 | "svelte-hmr": "^0.14.7" 193 | } 194 | }, 195 | "@types/node": { 196 | "version": "16.11.7", 197 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", 198 | "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" 199 | }, 200 | "@types/webidl-conversions": { 201 | "version": "6.1.1", 202 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", 203 | "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" 204 | }, 205 | "@types/whatwg-url": { 206 | "version": "8.2.1", 207 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", 208 | "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", 209 | "requires": { 210 | "@types/node": "*", 211 | "@types/webidl-conversions": "*" 212 | } 213 | }, 214 | "acorn": { 215 | "version": "7.4.1", 216 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 217 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 218 | "dev": true 219 | }, 220 | "acorn-jsx": { 221 | "version": "5.3.2", 222 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 223 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 224 | "dev": true 225 | }, 226 | "ajv": { 227 | "version": "6.12.6", 228 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 229 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 230 | "dev": true, 231 | "requires": { 232 | "fast-deep-equal": "^3.1.1", 233 | "fast-json-stable-stringify": "^2.0.0", 234 | "json-schema-traverse": "^0.4.1", 235 | "uri-js": "^4.2.2" 236 | } 237 | }, 238 | "ansi-colors": { 239 | "version": "4.1.1", 240 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 241 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 242 | "dev": true 243 | }, 244 | "ansi-regex": { 245 | "version": "5.0.1", 246 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 247 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 248 | "dev": true 249 | }, 250 | "ansi-styles": { 251 | "version": "4.3.0", 252 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 253 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 254 | "dev": true, 255 | "requires": { 256 | "color-convert": "^2.0.1" 257 | } 258 | }, 259 | "argparse": { 260 | "version": "1.0.10", 261 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 262 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 263 | "dev": true, 264 | "requires": { 265 | "sprintf-js": "~1.0.2" 266 | } 267 | }, 268 | "astral-regex": { 269 | "version": "2.0.0", 270 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", 271 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", 272 | "dev": true 273 | }, 274 | "balanced-match": { 275 | "version": "1.0.2", 276 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 277 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 278 | "dev": true 279 | }, 280 | "base64-js": { 281 | "version": "1.5.1", 282 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 283 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 284 | }, 285 | "brace-expansion": { 286 | "version": "1.1.11", 287 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 288 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 289 | "dev": true, 290 | "requires": { 291 | "balanced-match": "^1.0.0", 292 | "concat-map": "0.0.1" 293 | } 294 | }, 295 | "bson": { 296 | "version": "4.5.4", 297 | "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.4.tgz", 298 | "integrity": "sha512-wIt0bPACnx8Ju9r6IsS2wVtGDHBr9Dxb+U29A1YED2pu8XOhS8aKjOnLZ8sxyXkPwanoK7iWWVhS1+coxde6xA==", 299 | "requires": { 300 | "buffer": "^5.6.0" 301 | } 302 | }, 303 | "buffer": { 304 | "version": "5.7.1", 305 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 306 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 307 | "requires": { 308 | "base64-js": "^1.3.1", 309 | "ieee754": "^1.1.13" 310 | } 311 | }, 312 | "callsites": { 313 | "version": "3.1.0", 314 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 315 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 316 | "dev": true 317 | }, 318 | "chalk": { 319 | "version": "4.1.2", 320 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 321 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 322 | "dev": true, 323 | "requires": { 324 | "ansi-styles": "^4.1.0", 325 | "supports-color": "^7.1.0" 326 | } 327 | }, 328 | "cheap-watch": { 329 | "version": "1.0.4", 330 | "resolved": "https://registry.npmjs.org/cheap-watch/-/cheap-watch-1.0.4.tgz", 331 | "integrity": "sha512-QR/9FrtRL5fjfUJBhAKCdi0lSRQ3rVRRum3GF9wDKp2TJbEIMGhUEr2yU8lORzm9Isdjx7/k9S0DFDx+z5VGtw==", 332 | "dev": true 333 | }, 334 | "color-convert": { 335 | "version": "2.0.1", 336 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 337 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 338 | "dev": true, 339 | "requires": { 340 | "color-name": "~1.1.4" 341 | } 342 | }, 343 | "color-name": { 344 | "version": "1.1.4", 345 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 346 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 347 | "dev": true 348 | }, 349 | "concat-map": { 350 | "version": "0.0.1", 351 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 352 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 353 | "dev": true 354 | }, 355 | "cookie": { 356 | "version": "0.4.1", 357 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 358 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" 359 | }, 360 | "cross-spawn": { 361 | "version": "7.0.3", 362 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 363 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 364 | "dev": true, 365 | "requires": { 366 | "path-key": "^3.1.0", 367 | "shebang-command": "^2.0.0", 368 | "which": "^2.0.1" 369 | } 370 | }, 371 | "debug": { 372 | "version": "4.3.2", 373 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 374 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 375 | "dev": true, 376 | "requires": { 377 | "ms": "2.1.2" 378 | } 379 | }, 380 | "deep-is": { 381 | "version": "0.1.4", 382 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 383 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 384 | "dev": true 385 | }, 386 | "denque": { 387 | "version": "2.0.1", 388 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", 389 | "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" 390 | }, 391 | "doctrine": { 392 | "version": "3.0.0", 393 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 394 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 395 | "dev": true, 396 | "requires": { 397 | "esutils": "^2.0.2" 398 | } 399 | }, 400 | "dotenv": { 401 | "version": "10.0.0", 402 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", 403 | "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" 404 | }, 405 | "emoji-regex": { 406 | "version": "8.0.0", 407 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 408 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 409 | "dev": true 410 | }, 411 | "enquirer": { 412 | "version": "2.3.6", 413 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 414 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 415 | "dev": true, 416 | "requires": { 417 | "ansi-colors": "^4.1.1" 418 | } 419 | }, 420 | "esbuild": { 421 | "version": "0.13.12", 422 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz", 423 | "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==", 424 | "dev": true, 425 | "requires": { 426 | "esbuild-android-arm64": "0.13.12", 427 | "esbuild-darwin-64": "0.13.12", 428 | "esbuild-darwin-arm64": "0.13.12", 429 | "esbuild-freebsd-64": "0.13.12", 430 | "esbuild-freebsd-arm64": "0.13.12", 431 | "esbuild-linux-32": "0.13.12", 432 | "esbuild-linux-64": "0.13.12", 433 | "esbuild-linux-arm": "0.13.12", 434 | "esbuild-linux-arm64": "0.13.12", 435 | "esbuild-linux-mips64le": "0.13.12", 436 | "esbuild-linux-ppc64le": "0.13.12", 437 | "esbuild-netbsd-64": "0.13.12", 438 | "esbuild-openbsd-64": "0.13.12", 439 | "esbuild-sunos-64": "0.13.12", 440 | "esbuild-windows-32": "0.13.12", 441 | "esbuild-windows-64": "0.13.12", 442 | "esbuild-windows-arm64": "0.13.12" 443 | } 444 | }, 445 | "esbuild-android-arm64": { 446 | "version": "0.13.12", 447 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz", 448 | "integrity": "sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw==", 449 | "dev": true, 450 | "optional": true 451 | }, 452 | "esbuild-darwin-64": { 453 | "version": "0.13.12", 454 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz", 455 | "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==", 456 | "dev": true, 457 | "optional": true 458 | }, 459 | "esbuild-darwin-arm64": { 460 | "version": "0.13.12", 461 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz", 462 | "integrity": "sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ==", 463 | "dev": true, 464 | "optional": true 465 | }, 466 | "esbuild-freebsd-64": { 467 | "version": "0.13.12", 468 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz", 469 | "integrity": "sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA==", 470 | "dev": true, 471 | "optional": true 472 | }, 473 | "esbuild-freebsd-arm64": { 474 | "version": "0.13.12", 475 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz", 476 | "integrity": "sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw==", 477 | "dev": true, 478 | "optional": true 479 | }, 480 | "esbuild-linux-32": { 481 | "version": "0.13.12", 482 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz", 483 | "integrity": "sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ==", 484 | "dev": true, 485 | "optional": true 486 | }, 487 | "esbuild-linux-64": { 488 | "version": "0.13.12", 489 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz", 490 | "integrity": "sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q==", 491 | "dev": true, 492 | "optional": true 493 | }, 494 | "esbuild-linux-arm": { 495 | "version": "0.13.12", 496 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz", 497 | "integrity": "sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw==", 498 | "dev": true, 499 | "optional": true 500 | }, 501 | "esbuild-linux-arm64": { 502 | "version": "0.13.12", 503 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz", 504 | "integrity": "sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA==", 505 | "dev": true, 506 | "optional": true 507 | }, 508 | "esbuild-linux-mips64le": { 509 | "version": "0.13.12", 510 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz", 511 | "integrity": "sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g==", 512 | "dev": true, 513 | "optional": true 514 | }, 515 | "esbuild-linux-ppc64le": { 516 | "version": "0.13.12", 517 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz", 518 | "integrity": "sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw==", 519 | "dev": true, 520 | "optional": true 521 | }, 522 | "esbuild-netbsd-64": { 523 | "version": "0.13.12", 524 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz", 525 | "integrity": "sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA==", 526 | "dev": true, 527 | "optional": true 528 | }, 529 | "esbuild-openbsd-64": { 530 | "version": "0.13.12", 531 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz", 532 | "integrity": "sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ==", 533 | "dev": true, 534 | "optional": true 535 | }, 536 | "esbuild-sunos-64": { 537 | "version": "0.13.12", 538 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz", 539 | "integrity": "sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw==", 540 | "dev": true, 541 | "optional": true 542 | }, 543 | "esbuild-windows-32": { 544 | "version": "0.13.12", 545 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz", 546 | "integrity": "sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ==", 547 | "dev": true, 548 | "optional": true 549 | }, 550 | "esbuild-windows-64": { 551 | "version": "0.13.12", 552 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz", 553 | "integrity": "sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ==", 554 | "dev": true, 555 | "optional": true 556 | }, 557 | "esbuild-windows-arm64": { 558 | "version": "0.13.12", 559 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz", 560 | "integrity": "sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ==", 561 | "dev": true, 562 | "optional": true 563 | }, 564 | "escape-string-regexp": { 565 | "version": "4.0.0", 566 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 567 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 568 | "dev": true 569 | }, 570 | "eslint": { 571 | "version": "7.32.0", 572 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", 573 | "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", 574 | "dev": true, 575 | "requires": { 576 | "@babel/code-frame": "7.12.11", 577 | "@eslint/eslintrc": "^0.4.3", 578 | "@humanwhocodes/config-array": "^0.5.0", 579 | "ajv": "^6.10.0", 580 | "chalk": "^4.0.0", 581 | "cross-spawn": "^7.0.2", 582 | "debug": "^4.0.1", 583 | "doctrine": "^3.0.0", 584 | "enquirer": "^2.3.5", 585 | "escape-string-regexp": "^4.0.0", 586 | "eslint-scope": "^5.1.1", 587 | "eslint-utils": "^2.1.0", 588 | "eslint-visitor-keys": "^2.0.0", 589 | "espree": "^7.3.1", 590 | "esquery": "^1.4.0", 591 | "esutils": "^2.0.2", 592 | "fast-deep-equal": "^3.1.3", 593 | "file-entry-cache": "^6.0.1", 594 | "functional-red-black-tree": "^1.0.1", 595 | "glob-parent": "^5.1.2", 596 | "globals": "^13.6.0", 597 | "ignore": "^4.0.6", 598 | "import-fresh": "^3.0.0", 599 | "imurmurhash": "^0.1.4", 600 | "is-glob": "^4.0.0", 601 | "js-yaml": "^3.13.1", 602 | "json-stable-stringify-without-jsonify": "^1.0.1", 603 | "levn": "^0.4.1", 604 | "lodash.merge": "^4.6.2", 605 | "minimatch": "^3.0.4", 606 | "natural-compare": "^1.4.0", 607 | "optionator": "^0.9.1", 608 | "progress": "^2.0.0", 609 | "regexpp": "^3.1.0", 610 | "semver": "^7.2.1", 611 | "strip-ansi": "^6.0.0", 612 | "strip-json-comments": "^3.1.0", 613 | "table": "^6.0.9", 614 | "text-table": "^0.2.0", 615 | "v8-compile-cache": "^2.0.3" 616 | } 617 | }, 618 | "eslint-config-prettier": { 619 | "version": "8.3.0", 620 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", 621 | "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", 622 | "dev": true 623 | }, 624 | "eslint-plugin-svelte3": { 625 | "version": "3.2.1", 626 | "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-3.2.1.tgz", 627 | "integrity": "sha512-YoBR9mLoKCjGghJ/gvpnFZKaMEu/VRcuxpSRS8KuozuEo7CdBH7bmBHa6FmMm0i4kJnOyx+PVsaptz96K6H/4Q==", 628 | "dev": true 629 | }, 630 | "eslint-scope": { 631 | "version": "5.1.1", 632 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 633 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 634 | "dev": true, 635 | "requires": { 636 | "esrecurse": "^4.3.0", 637 | "estraverse": "^4.1.1" 638 | } 639 | }, 640 | "eslint-utils": { 641 | "version": "2.1.0", 642 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 643 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 644 | "dev": true, 645 | "requires": { 646 | "eslint-visitor-keys": "^1.1.0" 647 | }, 648 | "dependencies": { 649 | "eslint-visitor-keys": { 650 | "version": "1.3.0", 651 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 652 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 653 | "dev": true 654 | } 655 | } 656 | }, 657 | "eslint-visitor-keys": { 658 | "version": "2.1.0", 659 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 660 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 661 | "dev": true 662 | }, 663 | "espree": { 664 | "version": "7.3.1", 665 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", 666 | "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", 667 | "dev": true, 668 | "requires": { 669 | "acorn": "^7.4.0", 670 | "acorn-jsx": "^5.3.1", 671 | "eslint-visitor-keys": "^1.3.0" 672 | }, 673 | "dependencies": { 674 | "eslint-visitor-keys": { 675 | "version": "1.3.0", 676 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 677 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 678 | "dev": true 679 | } 680 | } 681 | }, 682 | "esprima": { 683 | "version": "4.0.1", 684 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 685 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 686 | "dev": true 687 | }, 688 | "esquery": { 689 | "version": "1.4.0", 690 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 691 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 692 | "dev": true, 693 | "requires": { 694 | "estraverse": "^5.1.0" 695 | }, 696 | "dependencies": { 697 | "estraverse": { 698 | "version": "5.3.0", 699 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 700 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 701 | "dev": true 702 | } 703 | } 704 | }, 705 | "esrecurse": { 706 | "version": "4.3.0", 707 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 708 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 709 | "dev": true, 710 | "requires": { 711 | "estraverse": "^5.2.0" 712 | }, 713 | "dependencies": { 714 | "estraverse": { 715 | "version": "5.3.0", 716 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 717 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 718 | "dev": true 719 | } 720 | } 721 | }, 722 | "estraverse": { 723 | "version": "4.3.0", 724 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 725 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 726 | "dev": true 727 | }, 728 | "estree-walker": { 729 | "version": "2.0.2", 730 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 731 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 732 | "dev": true 733 | }, 734 | "esutils": { 735 | "version": "2.0.3", 736 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 737 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 738 | "dev": true 739 | }, 740 | "fast-deep-equal": { 741 | "version": "3.1.3", 742 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 743 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 744 | "dev": true 745 | }, 746 | "fast-json-stable-stringify": { 747 | "version": "2.1.0", 748 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 749 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 750 | "dev": true 751 | }, 752 | "fast-levenshtein": { 753 | "version": "2.0.6", 754 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 755 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 756 | "dev": true 757 | }, 758 | "file-entry-cache": { 759 | "version": "6.0.1", 760 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 761 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 762 | "dev": true, 763 | "requires": { 764 | "flat-cache": "^3.0.4" 765 | } 766 | }, 767 | "flat-cache": { 768 | "version": "3.0.4", 769 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 770 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 771 | "dev": true, 772 | "requires": { 773 | "flatted": "^3.1.0", 774 | "rimraf": "^3.0.2" 775 | } 776 | }, 777 | "flatted": { 778 | "version": "3.2.2", 779 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", 780 | "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", 781 | "dev": true 782 | }, 783 | "fs.realpath": { 784 | "version": "1.0.0", 785 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 786 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 787 | "dev": true 788 | }, 789 | "fsevents": { 790 | "version": "2.3.2", 791 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 792 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 793 | "dev": true, 794 | "optional": true 795 | }, 796 | "function-bind": { 797 | "version": "1.1.1", 798 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 799 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 800 | "dev": true 801 | }, 802 | "functional-red-black-tree": { 803 | "version": "1.0.1", 804 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 805 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 806 | "dev": true 807 | }, 808 | "glob": { 809 | "version": "7.2.0", 810 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 811 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 812 | "dev": true, 813 | "requires": { 814 | "fs.realpath": "^1.0.0", 815 | "inflight": "^1.0.4", 816 | "inherits": "2", 817 | "minimatch": "^3.0.4", 818 | "once": "^1.3.0", 819 | "path-is-absolute": "^1.0.0" 820 | } 821 | }, 822 | "glob-parent": { 823 | "version": "5.1.2", 824 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 825 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 826 | "dev": true, 827 | "requires": { 828 | "is-glob": "^4.0.1" 829 | } 830 | }, 831 | "globals": { 832 | "version": "13.12.0", 833 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", 834 | "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", 835 | "dev": true, 836 | "requires": { 837 | "type-fest": "^0.20.2" 838 | } 839 | }, 840 | "has": { 841 | "version": "1.0.3", 842 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 843 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 844 | "dev": true, 845 | "requires": { 846 | "function-bind": "^1.1.1" 847 | } 848 | }, 849 | "has-flag": { 850 | "version": "4.0.0", 851 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 852 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 853 | "dev": true 854 | }, 855 | "ieee754": { 856 | "version": "1.2.1", 857 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 858 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 859 | }, 860 | "ignore": { 861 | "version": "4.0.6", 862 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 863 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 864 | "dev": true 865 | }, 866 | "import-fresh": { 867 | "version": "3.3.0", 868 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 869 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 870 | "dev": true, 871 | "requires": { 872 | "parent-module": "^1.0.0", 873 | "resolve-from": "^4.0.0" 874 | } 875 | }, 876 | "imurmurhash": { 877 | "version": "0.1.4", 878 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 879 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 880 | "dev": true 881 | }, 882 | "inflight": { 883 | "version": "1.0.6", 884 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 885 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 886 | "dev": true, 887 | "requires": { 888 | "once": "^1.3.0", 889 | "wrappy": "1" 890 | } 891 | }, 892 | "inherits": { 893 | "version": "2.0.4", 894 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 895 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 896 | "dev": true 897 | }, 898 | "is-core-module": { 899 | "version": "2.8.0", 900 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", 901 | "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", 902 | "dev": true, 903 | "requires": { 904 | "has": "^1.0.3" 905 | } 906 | }, 907 | "is-extglob": { 908 | "version": "2.1.1", 909 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 910 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 911 | "dev": true 912 | }, 913 | "is-fullwidth-code-point": { 914 | "version": "3.0.0", 915 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 916 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 917 | "dev": true 918 | }, 919 | "is-glob": { 920 | "version": "4.0.3", 921 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 922 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 923 | "dev": true, 924 | "requires": { 925 | "is-extglob": "^2.1.1" 926 | } 927 | }, 928 | "isexe": { 929 | "version": "2.0.0", 930 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 931 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 932 | "dev": true 933 | }, 934 | "js-tokens": { 935 | "version": "4.0.0", 936 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 937 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 938 | "dev": true 939 | }, 940 | "js-yaml": { 941 | "version": "3.14.1", 942 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 943 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 944 | "dev": true, 945 | "requires": { 946 | "argparse": "^1.0.7", 947 | "esprima": "^4.0.0" 948 | } 949 | }, 950 | "json-schema-traverse": { 951 | "version": "0.4.1", 952 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 953 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 954 | "dev": true 955 | }, 956 | "json-stable-stringify-without-jsonify": { 957 | "version": "1.0.1", 958 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 959 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 960 | "dev": true 961 | }, 962 | "kleur": { 963 | "version": "4.1.4", 964 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", 965 | "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", 966 | "dev": true 967 | }, 968 | "levn": { 969 | "version": "0.4.1", 970 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 971 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 972 | "dev": true, 973 | "requires": { 974 | "prelude-ls": "^1.2.1", 975 | "type-check": "~0.4.0" 976 | } 977 | }, 978 | "lodash.clonedeep": { 979 | "version": "4.5.0", 980 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 981 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", 982 | "dev": true 983 | }, 984 | "lodash.merge": { 985 | "version": "4.6.2", 986 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 987 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 988 | "dev": true 989 | }, 990 | "lodash.truncate": { 991 | "version": "4.4.2", 992 | "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", 993 | "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", 994 | "dev": true 995 | }, 996 | "lru-cache": { 997 | "version": "6.0.0", 998 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 999 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1000 | "dev": true, 1001 | "requires": { 1002 | "yallist": "^4.0.0" 1003 | } 1004 | }, 1005 | "magic-string": { 1006 | "version": "0.25.7", 1007 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1008 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1009 | "dev": true, 1010 | "requires": { 1011 | "sourcemap-codec": "^1.4.4" 1012 | } 1013 | }, 1014 | "memory-pager": { 1015 | "version": "1.5.0", 1016 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1017 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1018 | "optional": true 1019 | }, 1020 | "minimatch": { 1021 | "version": "3.0.4", 1022 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1023 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1024 | "dev": true, 1025 | "requires": { 1026 | "brace-expansion": "^1.1.7" 1027 | } 1028 | }, 1029 | "mongodb": { 1030 | "version": "4.1.4", 1031 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.4.tgz", 1032 | "integrity": "sha512-Cv/sk8on/tpvvqbEvR1h03mdyNdyvvO+WhtFlL4jrZ+DSsN/oSQHVqmJQI/sBCqqbOArFcYCAYDfyzqFwV4GSQ==", 1033 | "requires": { 1034 | "bson": "^4.5.4", 1035 | "denque": "^2.0.1", 1036 | "mongodb-connection-string-url": "^2.1.0", 1037 | "saslprep": "^1.0.3" 1038 | } 1039 | }, 1040 | "mongodb-connection-string-url": { 1041 | "version": "2.1.0", 1042 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.1.0.tgz", 1043 | "integrity": "sha512-Qf9Zw7KGiRljWvMrrUFDdVqo46KIEiDuCzvEN97rh/PcKzk2bd6n9KuzEwBwW9xo5glwx69y1mI6s+jFUD/aIQ==", 1044 | "requires": { 1045 | "@types/whatwg-url": "^8.2.1", 1046 | "whatwg-url": "^9.1.0" 1047 | } 1048 | }, 1049 | "mri": { 1050 | "version": "1.2.0", 1051 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1052 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 1053 | "dev": true 1054 | }, 1055 | "ms": { 1056 | "version": "2.1.2", 1057 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1058 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1059 | "dev": true 1060 | }, 1061 | "nanoid": { 1062 | "version": "3.1.30", 1063 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", 1064 | "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", 1065 | "dev": true 1066 | }, 1067 | "natural-compare": { 1068 | "version": "1.4.0", 1069 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1070 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1071 | "dev": true 1072 | }, 1073 | "once": { 1074 | "version": "1.4.0", 1075 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1076 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1077 | "dev": true, 1078 | "requires": { 1079 | "wrappy": "1" 1080 | } 1081 | }, 1082 | "optionator": { 1083 | "version": "0.9.1", 1084 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 1085 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 1086 | "dev": true, 1087 | "requires": { 1088 | "deep-is": "^0.1.3", 1089 | "fast-levenshtein": "^2.0.6", 1090 | "levn": "^0.4.1", 1091 | "prelude-ls": "^1.2.1", 1092 | "type-check": "^0.4.0", 1093 | "word-wrap": "^1.2.3" 1094 | } 1095 | }, 1096 | "parent-module": { 1097 | "version": "1.0.1", 1098 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1099 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1100 | "dev": true, 1101 | "requires": { 1102 | "callsites": "^3.0.0" 1103 | } 1104 | }, 1105 | "path-is-absolute": { 1106 | "version": "1.0.1", 1107 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1108 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1109 | "dev": true 1110 | }, 1111 | "path-key": { 1112 | "version": "3.1.1", 1113 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1114 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1115 | "dev": true 1116 | }, 1117 | "path-parse": { 1118 | "version": "1.0.7", 1119 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1120 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1121 | "dev": true 1122 | }, 1123 | "picocolors": { 1124 | "version": "1.0.0", 1125 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1126 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1127 | "dev": true 1128 | }, 1129 | "picomatch": { 1130 | "version": "2.3.0", 1131 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1132 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1133 | "dev": true 1134 | }, 1135 | "postcss": { 1136 | "version": "8.4.1", 1137 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.1.tgz", 1138 | "integrity": "sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==", 1139 | "dev": true, 1140 | "requires": { 1141 | "nanoid": "^3.1.30", 1142 | "picocolors": "^1.0.0", 1143 | "source-map-js": "^1.0.1" 1144 | } 1145 | }, 1146 | "prelude-ls": { 1147 | "version": "1.2.1", 1148 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1149 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1150 | "dev": true 1151 | }, 1152 | "prettier": { 1153 | "version": "2.4.1", 1154 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", 1155 | "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", 1156 | "dev": true 1157 | }, 1158 | "prettier-plugin-svelte": { 1159 | "version": "2.4.0", 1160 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.4.0.tgz", 1161 | "integrity": "sha512-JwJ9bOz4XHLQtiLnX4mTSSDUdhu12WH8sTwy/XTDCSyPlah6IcV7NWeYBZscPEcceu2YnW8Y9sJCP40Z2UH9GA==", 1162 | "dev": true 1163 | }, 1164 | "progress": { 1165 | "version": "2.0.3", 1166 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1167 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1168 | "dev": true 1169 | }, 1170 | "punycode": { 1171 | "version": "2.1.1", 1172 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1173 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1174 | }, 1175 | "regexpp": { 1176 | "version": "3.2.0", 1177 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1178 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1179 | "dev": true 1180 | }, 1181 | "require-from-string": { 1182 | "version": "2.0.2", 1183 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1184 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1185 | "dev": true 1186 | }, 1187 | "require-relative": { 1188 | "version": "0.8.7", 1189 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 1190 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 1191 | "dev": true 1192 | }, 1193 | "resolve": { 1194 | "version": "1.20.0", 1195 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1196 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1197 | "dev": true, 1198 | "requires": { 1199 | "is-core-module": "^2.2.0", 1200 | "path-parse": "^1.0.6" 1201 | } 1202 | }, 1203 | "resolve-from": { 1204 | "version": "4.0.0", 1205 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1206 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1207 | "dev": true 1208 | }, 1209 | "rimraf": { 1210 | "version": "3.0.2", 1211 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1212 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1213 | "dev": true, 1214 | "requires": { 1215 | "glob": "^7.1.3" 1216 | } 1217 | }, 1218 | "rollup": { 1219 | "version": "2.60.1", 1220 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.1.tgz", 1221 | "integrity": "sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==", 1222 | "dev": true, 1223 | "requires": { 1224 | "fsevents": "~2.3.2" 1225 | } 1226 | }, 1227 | "sade": { 1228 | "version": "1.7.4", 1229 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 1230 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 1231 | "dev": true, 1232 | "requires": { 1233 | "mri": "^1.1.0" 1234 | } 1235 | }, 1236 | "saslprep": { 1237 | "version": "1.0.3", 1238 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1239 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1240 | "optional": true, 1241 | "requires": { 1242 | "sparse-bitfield": "^3.0.3" 1243 | } 1244 | }, 1245 | "semver": { 1246 | "version": "7.3.5", 1247 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1248 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1249 | "dev": true, 1250 | "requires": { 1251 | "lru-cache": "^6.0.0" 1252 | } 1253 | }, 1254 | "shebang-command": { 1255 | "version": "2.0.0", 1256 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1257 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1258 | "dev": true, 1259 | "requires": { 1260 | "shebang-regex": "^3.0.0" 1261 | } 1262 | }, 1263 | "shebang-regex": { 1264 | "version": "3.0.0", 1265 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1266 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1267 | "dev": true 1268 | }, 1269 | "slice-ansi": { 1270 | "version": "4.0.0", 1271 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", 1272 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", 1273 | "dev": true, 1274 | "requires": { 1275 | "ansi-styles": "^4.0.0", 1276 | "astral-regex": "^2.0.0", 1277 | "is-fullwidth-code-point": "^3.0.0" 1278 | } 1279 | }, 1280 | "source-map-js": { 1281 | "version": "1.0.1", 1282 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", 1283 | "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", 1284 | "dev": true 1285 | }, 1286 | "sourcemap-codec": { 1287 | "version": "1.4.8", 1288 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1289 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1290 | "dev": true 1291 | }, 1292 | "sparse-bitfield": { 1293 | "version": "3.0.3", 1294 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1295 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 1296 | "optional": true, 1297 | "requires": { 1298 | "memory-pager": "^1.0.2" 1299 | } 1300 | }, 1301 | "sprintf-js": { 1302 | "version": "1.0.3", 1303 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1304 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1305 | "dev": true 1306 | }, 1307 | "string-hash": { 1308 | "version": "1.1.3", 1309 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", 1310 | "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" 1311 | }, 1312 | "string-width": { 1313 | "version": "4.2.3", 1314 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1315 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1316 | "dev": true, 1317 | "requires": { 1318 | "emoji-regex": "^8.0.0", 1319 | "is-fullwidth-code-point": "^3.0.0", 1320 | "strip-ansi": "^6.0.1" 1321 | } 1322 | }, 1323 | "strip-ansi": { 1324 | "version": "6.0.1", 1325 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1326 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1327 | "dev": true, 1328 | "requires": { 1329 | "ansi-regex": "^5.0.1" 1330 | } 1331 | }, 1332 | "strip-json-comments": { 1333 | "version": "3.1.1", 1334 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1335 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1336 | "dev": true 1337 | }, 1338 | "supports-color": { 1339 | "version": "7.2.0", 1340 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1341 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1342 | "dev": true, 1343 | "requires": { 1344 | "has-flag": "^4.0.0" 1345 | } 1346 | }, 1347 | "svelte": { 1348 | "version": "3.44.1", 1349 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.44.1.tgz", 1350 | "integrity": "sha512-4DrCEJoBvdR689efHNSxIQn2pnFwB7E7j2yLEJtHE/P8hxwZWIphCtJ8are7bjl/iVMlcEf5uh5pJ68IwR09vQ==", 1351 | "dev": true 1352 | }, 1353 | "svelte-hmr": { 1354 | "version": "0.14.7", 1355 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.7.tgz", 1356 | "integrity": "sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==", 1357 | "dev": true 1358 | }, 1359 | "table": { 1360 | "version": "6.7.2", 1361 | "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", 1362 | "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", 1363 | "dev": true, 1364 | "requires": { 1365 | "ajv": "^8.0.1", 1366 | "lodash.clonedeep": "^4.5.0", 1367 | "lodash.truncate": "^4.4.2", 1368 | "slice-ansi": "^4.0.0", 1369 | "string-width": "^4.2.3", 1370 | "strip-ansi": "^6.0.1" 1371 | }, 1372 | "dependencies": { 1373 | "ajv": { 1374 | "version": "8.6.3", 1375 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", 1376 | "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", 1377 | "dev": true, 1378 | "requires": { 1379 | "fast-deep-equal": "^3.1.1", 1380 | "json-schema-traverse": "^1.0.0", 1381 | "require-from-string": "^2.0.2", 1382 | "uri-js": "^4.2.2" 1383 | } 1384 | }, 1385 | "json-schema-traverse": { 1386 | "version": "1.0.0", 1387 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1388 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1389 | "dev": true 1390 | } 1391 | } 1392 | }, 1393 | "text-table": { 1394 | "version": "0.2.0", 1395 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1396 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1397 | "dev": true 1398 | }, 1399 | "tr46": { 1400 | "version": "2.1.0", 1401 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", 1402 | "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", 1403 | "requires": { 1404 | "punycode": "^2.1.1" 1405 | } 1406 | }, 1407 | "type-check": { 1408 | "version": "0.4.0", 1409 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1410 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1411 | "dev": true, 1412 | "requires": { 1413 | "prelude-ls": "^1.2.1" 1414 | } 1415 | }, 1416 | "type-fest": { 1417 | "version": "0.20.2", 1418 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1419 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1420 | "dev": true 1421 | }, 1422 | "uri-js": { 1423 | "version": "4.4.1", 1424 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1425 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1426 | "dev": true, 1427 | "requires": { 1428 | "punycode": "^2.1.0" 1429 | } 1430 | }, 1431 | "uuid": { 1432 | "version": "8.3.2", 1433 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1434 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1435 | }, 1436 | "v8-compile-cache": { 1437 | "version": "2.3.0", 1438 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 1439 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 1440 | "dev": true 1441 | }, 1442 | "vite": { 1443 | "version": "2.6.14", 1444 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.6.14.tgz", 1445 | "integrity": "sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA==", 1446 | "dev": true, 1447 | "requires": { 1448 | "esbuild": "^0.13.2", 1449 | "fsevents": "~2.3.2", 1450 | "postcss": "^8.3.8", 1451 | "resolve": "^1.20.0", 1452 | "rollup": "^2.57.0" 1453 | } 1454 | }, 1455 | "webidl-conversions": { 1456 | "version": "6.1.0", 1457 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", 1458 | "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" 1459 | }, 1460 | "whatwg-url": { 1461 | "version": "9.1.0", 1462 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", 1463 | "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", 1464 | "requires": { 1465 | "tr46": "^2.1.0", 1466 | "webidl-conversions": "^6.1.0" 1467 | } 1468 | }, 1469 | "which": { 1470 | "version": "2.0.2", 1471 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1472 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1473 | "dev": true, 1474 | "requires": { 1475 | "isexe": "^2.0.0" 1476 | } 1477 | }, 1478 | "word-wrap": { 1479 | "version": "1.2.3", 1480 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1481 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1482 | "dev": true 1483 | }, 1484 | "wrappy": { 1485 | "version": "1.0.2", 1486 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1487 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1488 | "dev": true 1489 | }, 1490 | "yallist": { 1491 | "version": "4.0.0", 1492 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1493 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1494 | "dev": true 1495 | } 1496 | } 1497 | } 1498 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sveltekittest", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "dev": "svelte-kit dev", 6 | "build": "svelte-kit build", 7 | "preview": "svelte-kit preview", 8 | "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .", 9 | "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ." 10 | }, 11 | "devDependencies": { 12 | "@sveltejs/adapter-netlify": "^1.0.0-next.35", 13 | "@sveltejs/kit": "next", 14 | "eslint": "^7.32.0", 15 | "eslint-config-prettier": "^8.3.0", 16 | "eslint-plugin-svelte3": "^3.2.1", 17 | "prettier": "^2.4.1", 18 | "prettier-plugin-svelte": "^2.4.0", 19 | "svelte": "^3.34.0" 20 | }, 21 | "type": "module", 22 | "dependencies": { 23 | "@fontsource/fira-mono": "^4.5.0", 24 | "@lukeed/uuid": "^2.0.0", 25 | "cookie": "^0.4.1", 26 | "dotenv": "^10.0.0", 27 | "mongodb": "^4.1.4", 28 | "string-hash": "^1.1.3", 29 | "uuid": "^8.3.2" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: 'Outfit'; 3 | font-weight: 300; 4 | font-size: 112.5%; 5 | } 6 | 7 | * { 8 | box-sizing: border-box; 9 | scrollbar-width: thin; 10 | } 11 | 12 | body { 13 | min-height: 100vh; 14 | margin: 0; 15 | background: var(--bg-color-2); 16 | color: var(--font-color); 17 | overflow: hidden; 18 | } 19 | 20 | #svelte { 21 | min-height: 100vh; 22 | display: flex; 23 | } 24 | 25 | ::-webkit-scrollbar { 26 | width: 7.5px; 27 | } 28 | ::-webkit-scrollbar-track { 29 | background: transparent; 30 | } 31 | ::-webkit-scrollbar-thumb { 32 | background: var(--bg-color-1-5); 33 | } 34 | 35 | ::placeholder, 36 | ::-webkit-input-placeholder { 37 | color: var(--sub-color); 38 | } 39 | 40 | :focus { 41 | outline: none; 42 | } 43 | 44 | input, 45 | button { 46 | color: inherit; 47 | font: inherit; 48 | border: none; 49 | background: transparent; 50 | } 51 | 52 | button { 53 | flex-shrink: 0; 54 | } 55 | button:hover { 56 | cursor: pointer; 57 | } 58 | 59 | hr { 60 | height: 2px; 61 | background: var(--bg-color-2-5); 62 | border: none; 63 | flex-shrink: 0; 64 | border-radius: 2px; 65 | } 66 | 67 | .heading-container { 68 | background: var(--bg-color-1); 69 | position: sticky; 70 | top: 0; 71 | width: 100%; 72 | padding: 20px 40px 10px 40px; 73 | border-radius: 18px; 74 | display: flex; 75 | align-items: center; 76 | } 77 | .heading-container h1 { 78 | margin: 0; 79 | margin-right: auto; 80 | } 81 | 82 | .scroll-container { 83 | display: flex; 84 | flex-direction: column; 85 | overflow-y: auto; 86 | scrollbar-color: var(--bg-color-1-5) transparent; 87 | height: 100%; 88 | } 89 | 90 | .item-container { 91 | padding: 10px 40px 86px 40px; 92 | } 93 | 94 | .text-container { 95 | width: 100%; 96 | display: flex; 97 | flex-direction: column; 98 | } 99 | 100 | .name { 101 | width: 100%; 102 | background: transparent; 103 | padding: 0; 104 | line-height: 24px; 105 | } 106 | .name:focus { 107 | outline: none; 108 | } 109 | 110 | .icon-button { 111 | display: flex; 112 | justify-content: center; 113 | width: 20px; 114 | height: 20px; 115 | padding: 0; 116 | color: var(--sub-color); 117 | } 118 | .icon-button:hover { 119 | color: var(--font-color); 120 | } 121 | .icon-button i { 122 | line-height: 20px; 123 | } 124 | 125 | .icon-button-lg { 126 | width: 36px; 127 | height: 36px; 128 | background: var(--bg-color-2); 129 | border-radius: 10px; 130 | margin-left: 12px; 131 | } 132 | .icon-button-lg:hover { 133 | background-color: var(--bg-color-2-5); 134 | } 135 | .icon-button-lg i { 136 | font-size: 20px; 137 | } 138 | 139 | .todo { 140 | display: flex; 141 | background: var(--bg-color-2); 142 | align-items: center; 143 | border-radius: 12px; 144 | padding: 10px 12px; 145 | margin-bottom: 8px; 146 | } 147 | .todo.completed .name { 148 | text-decoration: line-through; 149 | color: var(--sub-color); 150 | } 151 | .todo.completed .checkbox i { 152 | display: inline-block; 153 | } 154 | 155 | .checkbox { 156 | border-radius: 6px; 157 | margin-right: 12px; 158 | background: var(--bg-color-3); 159 | } 160 | .checkbox:hover { 161 | background: var(--bg-color-3-5); 162 | } 163 | .checkbox:active { 164 | background: var(--font-color); 165 | } 166 | .checkbox i { 167 | display: none; 168 | color: var(--font-color); 169 | margin-right: 2px !important; 170 | } 171 | 172 | .delete { 173 | margin-left: 12px; 174 | } 175 | 176 | .new-container { 177 | margin-top: auto; 178 | background: var(--bg-color-1); 179 | padding: 10px 40px 20px 40px; 180 | position: sticky; 181 | bottom: 0; 182 | width: 100%; 183 | border-radius: 18px; 184 | } 185 | 186 | .new { 187 | display: flex; 188 | background: var(--bg-color-2); 189 | align-items: center; 190 | border-radius: 12px; 191 | padding: 10px 12px; 192 | } 193 | .new .name { 194 | width: 100%; 195 | } 196 | 197 | .add { 198 | margin-right: 12px; 199 | font-size: 20px; 200 | } 201 | .add.active { 202 | color: var(--font-color); 203 | } 204 | .add.active:hover { 205 | color: var(--font-color); 206 | } 207 | .add:hover { 208 | color: var(--sub-color); 209 | } 210 | 211 | .due-date, 212 | .new-date { 213 | margin-left: 12px; 214 | } 215 | 216 | .due-date { 217 | color: var(--sub-color); 218 | font-size: 0.8em; 219 | padding: 0; 220 | } 221 | .due-date.overdue { 222 | color: hsl(0, 60%, 60%); 223 | } 224 | .due-date:hover { 225 | color: var(--font-color); 226 | } 227 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 23 | 24 | %svelte.head% 25 | 26 | 27 |
%svelte.body%
28 | 29 | 30 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/hooks.js: -------------------------------------------------------------------------------- 1 | import cookie from 'cookie' 2 | import clientPromise from '$lib/db' 3 | 4 | // Sets context in endpoints 5 | // Try console logging context in your endpoints' HTTP methods to understand the structure 6 | export const handle = async ({ request, resolve }) => { 7 | console.log('handle') 8 | // Connecting to DB 9 | // All database code can only run inside async functions as it uses await 10 | 11 | // Getting cookies from request headers - all requests have cookies on them 12 | const cookies = cookie.parse(request.headers.cookie || '') 13 | 14 | // If there are no cookies, the user is not authenticated 15 | if (cookies.sessionId) { 16 | // Searching DB for the user with the right cookie 17 | // All database code can only run inside async functions as it uses await 18 | const client = await clientPromise 19 | const db = client.db('Todos') 20 | const cookie = await db.collection('cookies').findOne({ _id: cookies.sessionId }) 21 | console.log('getting cookie') 22 | 23 | // If there is that user, authenticate him and pass his email to context 24 | if (cookie) { 25 | request.locals.user = { 26 | _id: cookie.userId 27 | } 28 | } 29 | } 30 | 31 | const response = await resolve(request) 32 | 33 | return { 34 | ...response, 35 | headers: { 36 | ...response.headers 37 | // You can add custom headers here 38 | // 'x-custom-header': 'potato' 39 | } 40 | } 41 | } 42 | 43 | // Sets session on client-side 44 | // try console logging session in routes' load({ session }) functions 45 | export const getSession = async (request) => { 46 | console.log('getSession') 47 | if (request.locals.user) { 48 | const client = await clientPromise 49 | const db = client.db('Todos') 50 | request.locals.user = await db.collection('users').findOne({ _id: request.locals.user._id }) 51 | delete request.locals.user.password 52 | request.locals.todos = await db 53 | .collection('todos') 54 | .find({ userId: request.locals.user._id }) 55 | .toArray() 56 | request.locals.lists = await db 57 | .collection('lists') 58 | .find({ userId: request.locals.user._id }) 59 | .toArray() 60 | } 61 | return request.locals 62 | } 63 | -------------------------------------------------------------------------------- /src/lib/DateModal.svelte: -------------------------------------------------------------------------------- 1 | 44 | 45 | {#if shown} 46 |
47 | 58 |
59 | {/if} 60 | 61 | 109 | -------------------------------------------------------------------------------- /src/lib/Welcome.svelte: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Welcome to Sveltekit Todos

4 | Login 5 | Register 6 |
7 |
8 | 9 | 45 | -------------------------------------------------------------------------------- /src/lib/date.js: -------------------------------------------------------------------------------- 1 | const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] 2 | const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 3 | 4 | export function epochToText(epoch) { 5 | let current = new Date() 6 | let date = new Date(epoch) 7 | let str = 'Due ' 8 | if (isToday(current, date)) { 9 | let diff = Math.floor((date - current) / 1000 / 60) 10 | if (diff > 0 && diff < 60) { 11 | str += `in ${diff} min` 12 | } else if (diff <= 0 && diff > -60) { 13 | str += `${Math.abs(diff)} min ago` 14 | } else { 15 | str += `at ${formatTime(date)}` 16 | } 17 | } else { 18 | if (isYesterday(current, date)) { 19 | str += 'yesterday ' 20 | } else if (isTomorrow(current, date)) { 21 | str += 'tomorrow ' 22 | } else { 23 | str += `${days[date.getDay()]}, ${months[date.getMonth()]} ${date.getDate()} ` 24 | } 25 | str += `at ${formatTime(date)}` 26 | } 27 | return str 28 | } 29 | 30 | function formatTime(date) { 31 | let hours = date.getHours() 32 | let mins = String(date.getMinutes()).padStart(2, '0') 33 | if (hours === 0) { 34 | return `12:${mins} AM` 35 | } 36 | if (hours < 12) { 37 | return `${hours}:${mins} AM` 38 | } 39 | if (hours === 12) { 40 | return `12:${mins} PM` 41 | } 42 | if (hours > 12) { 43 | return `${hours - 12}:${mins} PM` 44 | } 45 | } 46 | 47 | function isToday(current, date) { 48 | return ( 49 | current.getDate() === date.getDate() && 50 | current.getMonth() === date.getMonth() && 51 | current.getFullYear() === date.getFullYear() 52 | ) 53 | } 54 | 55 | function isTomorrow(current, date) { 56 | let copy = new Date(date.getTime()) 57 | copy.setDate(date.getDate() - 1) 58 | return isToday(current, copy) 59 | } 60 | 61 | function isYesterday(current, date) { 62 | let copy = new Date(date.getTime()) 63 | copy.setDate(copy.getDate() + 1) 64 | return isToday(current, copy) 65 | } 66 | -------------------------------------------------------------------------------- /src/lib/db.js: -------------------------------------------------------------------------------- 1 | import dotenv from 'dotenv' 2 | dotenv.config() 3 | 4 | import { MongoClient } from 'mongodb' 5 | 6 | const uri = process.env['MONGODB_URI'] 7 | const options = { 8 | useUnifiedTopology: true, 9 | useNewUrlParser: true 10 | } 11 | 12 | let client 13 | let clientPromise 14 | 15 | if (!uri) { 16 | throw new Error('Please add your Mongo URI to .env.local') 17 | } 18 | 19 | if (process.env['NODE_ENV'] === 'development') { 20 | // In development mode, use a global variable 21 | // so that the value is preserved across module reloads 22 | // caused by HMR (Hot Module Replacement). 23 | if (!global._mongoClientPromise) { 24 | client = new MongoClient(uri, options) 25 | global._mongoClientPromise = client.connect() 26 | } 27 | clientPromise = global._mongoClientPromise 28 | } else { 29 | // In production mode, it's best to 30 | // not use a global variable. 31 | client = new MongoClient(uri, options) 32 | clientPromise = client.connect() 33 | } 34 | 35 | // Export a module-scoped MongoClient promise. 36 | // By doing this in a separate module, 37 | // the client can be shared across functions. 38 | export default clientPromise 39 | -------------------------------------------------------------------------------- /src/lib/nav/Nav.svelte: -------------------------------------------------------------------------------- 1 | 21 | 22 | 51 | 52 | 126 | -------------------------------------------------------------------------------- /src/lib/nav/svelte-logo.svg: -------------------------------------------------------------------------------- 1 | svelte-logo -------------------------------------------------------------------------------- /src/lib/stores/lists.js: -------------------------------------------------------------------------------- 1 | import { writable } from 'svelte/store' 2 | 3 | export let lists = writable() 4 | 5 | export async function loadLists() { 6 | console.log('loadLists') 7 | try { 8 | const res = await fetch(`/lists.json`) 9 | const json = await res.json() 10 | lists.set(json.lists) 11 | } catch (e) { 12 | console.log(e) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/lib/stores/todos.js: -------------------------------------------------------------------------------- 1 | import { writable } from 'svelte/store' 2 | 3 | export let todos = writable() 4 | 5 | export async function loadTodos() { 6 | console.log('loadTodos') 7 | try { 8 | const res = await fetch(`/todos.json`) 9 | const json = await res.json() 10 | todos.set(json.todos) 11 | } catch (e) { 12 | console.log(e) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/routes/__error.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 15 | 16 |
17 |

{status}

18 |
{error}
19 |
20 | 21 | 29 | -------------------------------------------------------------------------------- /src/routes/__layout.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | {#if $session.user} 35 |