├── .gitignore ├── .gitpod.yml ├── .vscode └── settings.json ├── README.md ├── assets └── favicon.png ├── package-lock.json ├── package.json ├── src ├── lessons │ ├── lessons.html │ └── lessons.ts ├── practice │ ├── answers.ts │ ├── practice.html │ └── practice.ts └── result │ └── result.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .idea 3 | dist/ 4 | .parcel-cache -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | vscode: 2 | extensions: 3 | - esbenp.prettier-vscode 4 | - dracula-theme.theme-dracula 5 | - ritwickdey.liveserver 6 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "esbenp.prettier-vscode", 3 | "[javascript]": { 4 | "editor.defaultFormatter": "esbenp.prettier-vscode" 5 | }, 6 | "editor.formatOnSave": true 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Typescript pamati (Kurss) 2 | 3 | Šajā repozitorijā atradīsi bāzes projektu kursam "Typescript pamati". 4 | 5 | Kursa gaitā viss tiek rakstīts `src/lessons/lessons.ts` 6 | 7 | Gala rezultāts atrodams `src/result/result.ts` 8 | 9 | Praktiskie uzdevumi atrodami `src/practice/practice.ts` 10 | 11 | Praktisko uzdevumu atbildes atrodamas `src/practice/answers.ts` 12 | 13 | ## Lai sāktu darbu Gitpod 14 | 15 | Atver projektu Gitpod un un palaid terminālī komandu `npm install` 16 | 17 | [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/codelex-io/typescript-course) 18 | 19 | ## Lai sāktu darbu uz savas darbstacijas 20 | 21 | Uzstādi savā datorā [VSCode](https://code.visualstudio.com/download) un [Node.js](https://nodejs.org/en/download/) 22 | 23 | Noklonē šo projektu uz sava datora vai lejuplādē zip formātā, spiežot uz pogas Code labajā augšējā stūrī. 24 | 25 | Atver ielādēto mapīti ar VSCode un terminālī palaid komandu `npm install` 26 | -------------------------------------------------------------------------------- /assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codelex-io/typescript-course/505a1d1332e68cb86f241cbe59fc0c88a32b0117/assets/favicon.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-tutorials", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "typescript-tutorials", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "typescript": "^5.0.4" 13 | }, 14 | "devDependencies": { 15 | "@parcel/transformer-image": "^2.8.3", 16 | "@parcel/transformer-typescript-tsc": "^2.8.3", 17 | "parcel": "^2.8.3", 18 | "prettier": "^2.8.7" 19 | } 20 | }, 21 | "node_modules/@babel/code-frame": { 22 | "version": "7.21.4", 23 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", 24 | "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", 25 | "dev": true, 26 | "dependencies": { 27 | "@babel/highlight": "^7.18.6" 28 | }, 29 | "engines": { 30 | "node": ">=6.9.0" 31 | } 32 | }, 33 | "node_modules/@babel/helper-validator-identifier": { 34 | "version": "7.19.1", 35 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 36 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 37 | "dev": true, 38 | "engines": { 39 | "node": ">=6.9.0" 40 | } 41 | }, 42 | "node_modules/@babel/highlight": { 43 | "version": "7.18.6", 44 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 45 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 46 | "dev": true, 47 | "dependencies": { 48 | "@babel/helper-validator-identifier": "^7.18.6", 49 | "chalk": "^2.0.0", 50 | "js-tokens": "^4.0.0" 51 | }, 52 | "engines": { 53 | "node": ">=6.9.0" 54 | } 55 | }, 56 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 57 | "version": "3.2.1", 58 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 59 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 60 | "dev": true, 61 | "dependencies": { 62 | "color-convert": "^1.9.0" 63 | }, 64 | "engines": { 65 | "node": ">=4" 66 | } 67 | }, 68 | "node_modules/@babel/highlight/node_modules/chalk": { 69 | "version": "2.4.2", 70 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 71 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 72 | "dev": true, 73 | "dependencies": { 74 | "ansi-styles": "^3.2.1", 75 | "escape-string-regexp": "^1.0.5", 76 | "supports-color": "^5.3.0" 77 | }, 78 | "engines": { 79 | "node": ">=4" 80 | } 81 | }, 82 | "node_modules/@babel/highlight/node_modules/color-convert": { 83 | "version": "1.9.3", 84 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 85 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 86 | "dev": true, 87 | "dependencies": { 88 | "color-name": "1.1.3" 89 | } 90 | }, 91 | "node_modules/@babel/highlight/node_modules/color-name": { 92 | "version": "1.1.3", 93 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 94 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 95 | "dev": true 96 | }, 97 | "node_modules/@babel/highlight/node_modules/has-flag": { 98 | "version": "3.0.0", 99 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 100 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 101 | "dev": true, 102 | "engines": { 103 | "node": ">=4" 104 | } 105 | }, 106 | "node_modules/@babel/highlight/node_modules/supports-color": { 107 | "version": "5.5.0", 108 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 109 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 110 | "dev": true, 111 | "dependencies": { 112 | "has-flag": "^3.0.0" 113 | }, 114 | "engines": { 115 | "node": ">=4" 116 | } 117 | }, 118 | "node_modules/@jridgewell/gen-mapping": { 119 | "version": "0.3.3", 120 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 121 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 122 | "dev": true, 123 | "dependencies": { 124 | "@jridgewell/set-array": "^1.0.1", 125 | "@jridgewell/sourcemap-codec": "^1.4.10", 126 | "@jridgewell/trace-mapping": "^0.3.9" 127 | }, 128 | "engines": { 129 | "node": ">=6.0.0" 130 | } 131 | }, 132 | "node_modules/@jridgewell/resolve-uri": { 133 | "version": "3.1.0", 134 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 135 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 136 | "dev": true, 137 | "engines": { 138 | "node": ">=6.0.0" 139 | } 140 | }, 141 | "node_modules/@jridgewell/set-array": { 142 | "version": "1.1.2", 143 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 144 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 145 | "dev": true, 146 | "engines": { 147 | "node": ">=6.0.0" 148 | } 149 | }, 150 | "node_modules/@jridgewell/source-map": { 151 | "version": "0.3.3", 152 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", 153 | "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", 154 | "dev": true, 155 | "dependencies": { 156 | "@jridgewell/gen-mapping": "^0.3.0", 157 | "@jridgewell/trace-mapping": "^0.3.9" 158 | } 159 | }, 160 | "node_modules/@jridgewell/sourcemap-codec": { 161 | "version": "1.4.15", 162 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 163 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 164 | "dev": true 165 | }, 166 | "node_modules/@jridgewell/trace-mapping": { 167 | "version": "0.3.18", 168 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", 169 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", 170 | "dev": true, 171 | "dependencies": { 172 | "@jridgewell/resolve-uri": "3.1.0", 173 | "@jridgewell/sourcemap-codec": "1.4.14" 174 | } 175 | }, 176 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { 177 | "version": "1.4.14", 178 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 179 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 180 | "dev": true 181 | }, 182 | "node_modules/@lezer/common": { 183 | "version": "0.15.12", 184 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", 185 | "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", 186 | "dev": true 187 | }, 188 | "node_modules/@lezer/lr": { 189 | "version": "0.15.8", 190 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", 191 | "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", 192 | "dev": true, 193 | "dependencies": { 194 | "@lezer/common": "^0.15.0" 195 | } 196 | }, 197 | "node_modules/@lmdb/lmdb-darwin-arm64": { 198 | "version": "2.5.2", 199 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz", 200 | "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==", 201 | "cpu": [ 202 | "arm64" 203 | ], 204 | "dev": true, 205 | "optional": true, 206 | "os": [ 207 | "darwin" 208 | ] 209 | }, 210 | "node_modules/@lmdb/lmdb-darwin-x64": { 211 | "version": "2.5.2", 212 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz", 213 | "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==", 214 | "cpu": [ 215 | "x64" 216 | ], 217 | "dev": true, 218 | "optional": true, 219 | "os": [ 220 | "darwin" 221 | ] 222 | }, 223 | "node_modules/@lmdb/lmdb-linux-arm": { 224 | "version": "2.5.2", 225 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz", 226 | "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==", 227 | "cpu": [ 228 | "arm" 229 | ], 230 | "dev": true, 231 | "optional": true, 232 | "os": [ 233 | "linux" 234 | ] 235 | }, 236 | "node_modules/@lmdb/lmdb-linux-arm64": { 237 | "version": "2.5.2", 238 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz", 239 | "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==", 240 | "cpu": [ 241 | "arm64" 242 | ], 243 | "dev": true, 244 | "optional": true, 245 | "os": [ 246 | "linux" 247 | ] 248 | }, 249 | "node_modules/@lmdb/lmdb-linux-x64": { 250 | "version": "2.5.2", 251 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz", 252 | "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==", 253 | "cpu": [ 254 | "x64" 255 | ], 256 | "dev": true, 257 | "optional": true, 258 | "os": [ 259 | "linux" 260 | ] 261 | }, 262 | "node_modules/@lmdb/lmdb-win32-x64": { 263 | "version": "2.5.2", 264 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz", 265 | "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==", 266 | "cpu": [ 267 | "x64" 268 | ], 269 | "dev": true, 270 | "optional": true, 271 | "os": [ 272 | "win32" 273 | ] 274 | }, 275 | "node_modules/@mischnic/json-sourcemap": { 276 | "version": "0.1.0", 277 | "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", 278 | "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", 279 | "dev": true, 280 | "dependencies": { 281 | "@lezer/common": "^0.15.7", 282 | "@lezer/lr": "^0.15.4", 283 | "json5": "^2.2.1" 284 | }, 285 | "engines": { 286 | "node": ">=12.0.0" 287 | } 288 | }, 289 | "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { 290 | "version": "3.0.2", 291 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", 292 | "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", 293 | "cpu": [ 294 | "arm64" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "darwin" 300 | ] 301 | }, 302 | "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { 303 | "version": "3.0.2", 304 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", 305 | "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", 306 | "cpu": [ 307 | "x64" 308 | ], 309 | "dev": true, 310 | "optional": true, 311 | "os": [ 312 | "darwin" 313 | ] 314 | }, 315 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { 316 | "version": "3.0.2", 317 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", 318 | "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", 319 | "cpu": [ 320 | "arm" 321 | ], 322 | "dev": true, 323 | "optional": true, 324 | "os": [ 325 | "linux" 326 | ] 327 | }, 328 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { 329 | "version": "3.0.2", 330 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", 331 | "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", 332 | "cpu": [ 333 | "arm64" 334 | ], 335 | "dev": true, 336 | "optional": true, 337 | "os": [ 338 | "linux" 339 | ] 340 | }, 341 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { 342 | "version": "3.0.2", 343 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", 344 | "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", 345 | "cpu": [ 346 | "x64" 347 | ], 348 | "dev": true, 349 | "optional": true, 350 | "os": [ 351 | "linux" 352 | ] 353 | }, 354 | "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { 355 | "version": "3.0.2", 356 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", 357 | "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", 358 | "cpu": [ 359 | "x64" 360 | ], 361 | "dev": true, 362 | "optional": true, 363 | "os": [ 364 | "win32" 365 | ] 366 | }, 367 | "node_modules/@parcel/bundler-default": { 368 | "version": "2.8.3", 369 | "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", 370 | "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==", 371 | "dev": true, 372 | "dependencies": { 373 | "@parcel/diagnostic": "2.8.3", 374 | "@parcel/graph": "2.8.3", 375 | "@parcel/hash": "2.8.3", 376 | "@parcel/plugin": "2.8.3", 377 | "@parcel/utils": "2.8.3", 378 | "nullthrows": "^1.1.1" 379 | }, 380 | "engines": { 381 | "node": ">= 12.0.0", 382 | "parcel": "^2.8.3" 383 | }, 384 | "funding": { 385 | "type": "opencollective", 386 | "url": "https://opencollective.com/parcel" 387 | } 388 | }, 389 | "node_modules/@parcel/cache": { 390 | "version": "2.8.3", 391 | "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz", 392 | "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==", 393 | "dev": true, 394 | "dependencies": { 395 | "@parcel/fs": "2.8.3", 396 | "@parcel/logger": "2.8.3", 397 | "@parcel/utils": "2.8.3", 398 | "lmdb": "2.5.2" 399 | }, 400 | "engines": { 401 | "node": ">= 12.0.0" 402 | }, 403 | "funding": { 404 | "type": "opencollective", 405 | "url": "https://opencollective.com/parcel" 406 | }, 407 | "peerDependencies": { 408 | "@parcel/core": "^2.8.3" 409 | } 410 | }, 411 | "node_modules/@parcel/codeframe": { 412 | "version": "2.8.3", 413 | "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz", 414 | "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==", 415 | "dev": true, 416 | "dependencies": { 417 | "chalk": "^4.1.0" 418 | }, 419 | "engines": { 420 | "node": ">= 12.0.0" 421 | }, 422 | "funding": { 423 | "type": "opencollective", 424 | "url": "https://opencollective.com/parcel" 425 | } 426 | }, 427 | "node_modules/@parcel/compressor-raw": { 428 | "version": "2.8.3", 429 | "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz", 430 | "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==", 431 | "dev": true, 432 | "dependencies": { 433 | "@parcel/plugin": "2.8.3" 434 | }, 435 | "engines": { 436 | "node": ">= 12.0.0", 437 | "parcel": "^2.8.3" 438 | }, 439 | "funding": { 440 | "type": "opencollective", 441 | "url": "https://opencollective.com/parcel" 442 | } 443 | }, 444 | "node_modules/@parcel/config-default": { 445 | "version": "2.8.3", 446 | "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz", 447 | "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==", 448 | "dev": true, 449 | "dependencies": { 450 | "@parcel/bundler-default": "2.8.3", 451 | "@parcel/compressor-raw": "2.8.3", 452 | "@parcel/namer-default": "2.8.3", 453 | "@parcel/optimizer-css": "2.8.3", 454 | "@parcel/optimizer-htmlnano": "2.8.3", 455 | "@parcel/optimizer-image": "2.8.3", 456 | "@parcel/optimizer-svgo": "2.8.3", 457 | "@parcel/optimizer-terser": "2.8.3", 458 | "@parcel/packager-css": "2.8.3", 459 | "@parcel/packager-html": "2.8.3", 460 | "@parcel/packager-js": "2.8.3", 461 | "@parcel/packager-raw": "2.8.3", 462 | "@parcel/packager-svg": "2.8.3", 463 | "@parcel/reporter-dev-server": "2.8.3", 464 | "@parcel/resolver-default": "2.8.3", 465 | "@parcel/runtime-browser-hmr": "2.8.3", 466 | "@parcel/runtime-js": "2.8.3", 467 | "@parcel/runtime-react-refresh": "2.8.3", 468 | "@parcel/runtime-service-worker": "2.8.3", 469 | "@parcel/transformer-babel": "2.8.3", 470 | "@parcel/transformer-css": "2.8.3", 471 | "@parcel/transformer-html": "2.8.3", 472 | "@parcel/transformer-image": "2.8.3", 473 | "@parcel/transformer-js": "2.8.3", 474 | "@parcel/transformer-json": "2.8.3", 475 | "@parcel/transformer-postcss": "2.8.3", 476 | "@parcel/transformer-posthtml": "2.8.3", 477 | "@parcel/transformer-raw": "2.8.3", 478 | "@parcel/transformer-react-refresh-wrap": "2.8.3", 479 | "@parcel/transformer-svg": "2.8.3" 480 | }, 481 | "funding": { 482 | "type": "opencollective", 483 | "url": "https://opencollective.com/parcel" 484 | }, 485 | "peerDependencies": { 486 | "@parcel/core": "^2.8.3" 487 | } 488 | }, 489 | "node_modules/@parcel/core": { 490 | "version": "2.8.3", 491 | "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz", 492 | "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==", 493 | "dev": true, 494 | "dependencies": { 495 | "@mischnic/json-sourcemap": "^0.1.0", 496 | "@parcel/cache": "2.8.3", 497 | "@parcel/diagnostic": "2.8.3", 498 | "@parcel/events": "2.8.3", 499 | "@parcel/fs": "2.8.3", 500 | "@parcel/graph": "2.8.3", 501 | "@parcel/hash": "2.8.3", 502 | "@parcel/logger": "2.8.3", 503 | "@parcel/package-manager": "2.8.3", 504 | "@parcel/plugin": "2.8.3", 505 | "@parcel/source-map": "^2.1.1", 506 | "@parcel/types": "2.8.3", 507 | "@parcel/utils": "2.8.3", 508 | "@parcel/workers": "2.8.3", 509 | "abortcontroller-polyfill": "^1.1.9", 510 | "base-x": "^3.0.8", 511 | "browserslist": "^4.6.6", 512 | "clone": "^2.1.1", 513 | "dotenv": "^7.0.0", 514 | "dotenv-expand": "^5.1.0", 515 | "json5": "^2.2.0", 516 | "msgpackr": "^1.5.4", 517 | "nullthrows": "^1.1.1", 518 | "semver": "^5.7.1" 519 | }, 520 | "engines": { 521 | "node": ">= 12.0.0" 522 | }, 523 | "funding": { 524 | "type": "opencollective", 525 | "url": "https://opencollective.com/parcel" 526 | } 527 | }, 528 | "node_modules/@parcel/diagnostic": { 529 | "version": "2.8.3", 530 | "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz", 531 | "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==", 532 | "dev": true, 533 | "dependencies": { 534 | "@mischnic/json-sourcemap": "^0.1.0", 535 | "nullthrows": "^1.1.1" 536 | }, 537 | "engines": { 538 | "node": ">= 12.0.0" 539 | }, 540 | "funding": { 541 | "type": "opencollective", 542 | "url": "https://opencollective.com/parcel" 543 | } 544 | }, 545 | "node_modules/@parcel/events": { 546 | "version": "2.8.3", 547 | "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz", 548 | "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==", 549 | "dev": true, 550 | "engines": { 551 | "node": ">= 12.0.0" 552 | }, 553 | "funding": { 554 | "type": "opencollective", 555 | "url": "https://opencollective.com/parcel" 556 | } 557 | }, 558 | "node_modules/@parcel/fs": { 559 | "version": "2.8.3", 560 | "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz", 561 | "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==", 562 | "dev": true, 563 | "dependencies": { 564 | "@parcel/fs-search": "2.8.3", 565 | "@parcel/types": "2.8.3", 566 | "@parcel/utils": "2.8.3", 567 | "@parcel/watcher": "^2.0.7", 568 | "@parcel/workers": "2.8.3" 569 | }, 570 | "engines": { 571 | "node": ">= 12.0.0" 572 | }, 573 | "funding": { 574 | "type": "opencollective", 575 | "url": "https://opencollective.com/parcel" 576 | }, 577 | "peerDependencies": { 578 | "@parcel/core": "^2.8.3" 579 | } 580 | }, 581 | "node_modules/@parcel/fs-search": { 582 | "version": "2.8.3", 583 | "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz", 584 | "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==", 585 | "dev": true, 586 | "dependencies": { 587 | "detect-libc": "^1.0.3" 588 | }, 589 | "engines": { 590 | "node": ">= 12.0.0" 591 | }, 592 | "funding": { 593 | "type": "opencollective", 594 | "url": "https://opencollective.com/parcel" 595 | } 596 | }, 597 | "node_modules/@parcel/graph": { 598 | "version": "2.8.3", 599 | "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz", 600 | "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==", 601 | "dev": true, 602 | "dependencies": { 603 | "nullthrows": "^1.1.1" 604 | }, 605 | "engines": { 606 | "node": ">= 12.0.0" 607 | }, 608 | "funding": { 609 | "type": "opencollective", 610 | "url": "https://opencollective.com/parcel" 611 | } 612 | }, 613 | "node_modules/@parcel/hash": { 614 | "version": "2.8.3", 615 | "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz", 616 | "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==", 617 | "dev": true, 618 | "dependencies": { 619 | "detect-libc": "^1.0.3", 620 | "xxhash-wasm": "^0.4.2" 621 | }, 622 | "engines": { 623 | "node": ">= 12.0.0" 624 | }, 625 | "funding": { 626 | "type": "opencollective", 627 | "url": "https://opencollective.com/parcel" 628 | } 629 | }, 630 | "node_modules/@parcel/logger": { 631 | "version": "2.8.3", 632 | "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz", 633 | "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==", 634 | "dev": true, 635 | "dependencies": { 636 | "@parcel/diagnostic": "2.8.3", 637 | "@parcel/events": "2.8.3" 638 | }, 639 | "engines": { 640 | "node": ">= 12.0.0" 641 | }, 642 | "funding": { 643 | "type": "opencollective", 644 | "url": "https://opencollective.com/parcel" 645 | } 646 | }, 647 | "node_modules/@parcel/markdown-ansi": { 648 | "version": "2.8.3", 649 | "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz", 650 | "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==", 651 | "dev": true, 652 | "dependencies": { 653 | "chalk": "^4.1.0" 654 | }, 655 | "engines": { 656 | "node": ">= 12.0.0" 657 | }, 658 | "funding": { 659 | "type": "opencollective", 660 | "url": "https://opencollective.com/parcel" 661 | } 662 | }, 663 | "node_modules/@parcel/namer-default": { 664 | "version": "2.8.3", 665 | "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz", 666 | "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==", 667 | "dev": true, 668 | "dependencies": { 669 | "@parcel/diagnostic": "2.8.3", 670 | "@parcel/plugin": "2.8.3", 671 | "nullthrows": "^1.1.1" 672 | }, 673 | "engines": { 674 | "node": ">= 12.0.0", 675 | "parcel": "^2.8.3" 676 | }, 677 | "funding": { 678 | "type": "opencollective", 679 | "url": "https://opencollective.com/parcel" 680 | } 681 | }, 682 | "node_modules/@parcel/node-resolver-core": { 683 | "version": "2.8.3", 684 | "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz", 685 | "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==", 686 | "dev": true, 687 | "dependencies": { 688 | "@parcel/diagnostic": "2.8.3", 689 | "@parcel/utils": "2.8.3", 690 | "nullthrows": "^1.1.1", 691 | "semver": "^5.7.1" 692 | }, 693 | "engines": { 694 | "node": ">= 12.0.0" 695 | }, 696 | "funding": { 697 | "type": "opencollective", 698 | "url": "https://opencollective.com/parcel" 699 | } 700 | }, 701 | "node_modules/@parcel/optimizer-css": { 702 | "version": "2.8.3", 703 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz", 704 | "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==", 705 | "dev": true, 706 | "dependencies": { 707 | "@parcel/diagnostic": "2.8.3", 708 | "@parcel/plugin": "2.8.3", 709 | "@parcel/source-map": "^2.1.1", 710 | "@parcel/utils": "2.8.3", 711 | "browserslist": "^4.6.6", 712 | "lightningcss": "^1.16.1", 713 | "nullthrows": "^1.1.1" 714 | }, 715 | "engines": { 716 | "node": ">= 12.0.0", 717 | "parcel": "^2.8.3" 718 | }, 719 | "funding": { 720 | "type": "opencollective", 721 | "url": "https://opencollective.com/parcel" 722 | } 723 | }, 724 | "node_modules/@parcel/optimizer-htmlnano": { 725 | "version": "2.8.3", 726 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz", 727 | "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==", 728 | "dev": true, 729 | "dependencies": { 730 | "@parcel/plugin": "2.8.3", 731 | "htmlnano": "^2.0.0", 732 | "nullthrows": "^1.1.1", 733 | "posthtml": "^0.16.5", 734 | "svgo": "^2.4.0" 735 | }, 736 | "engines": { 737 | "node": ">= 12.0.0", 738 | "parcel": "^2.8.3" 739 | }, 740 | "funding": { 741 | "type": "opencollective", 742 | "url": "https://opencollective.com/parcel" 743 | } 744 | }, 745 | "node_modules/@parcel/optimizer-htmlnano/node_modules/css-select": { 746 | "version": "4.3.0", 747 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 748 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 749 | "dev": true, 750 | "dependencies": { 751 | "boolbase": "^1.0.0", 752 | "css-what": "^6.0.1", 753 | "domhandler": "^4.3.1", 754 | "domutils": "^2.8.0", 755 | "nth-check": "^2.0.1" 756 | }, 757 | "funding": { 758 | "url": "https://github.com/sponsors/fb55" 759 | } 760 | }, 761 | "node_modules/@parcel/optimizer-htmlnano/node_modules/css-tree": { 762 | "version": "1.1.3", 763 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 764 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 765 | "dev": true, 766 | "dependencies": { 767 | "mdn-data": "2.0.14", 768 | "source-map": "^0.6.1" 769 | }, 770 | "engines": { 771 | "node": ">=8.0.0" 772 | } 773 | }, 774 | "node_modules/@parcel/optimizer-htmlnano/node_modules/csso": { 775 | "version": "4.2.0", 776 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 777 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 778 | "dev": true, 779 | "dependencies": { 780 | "css-tree": "^1.1.2" 781 | }, 782 | "engines": { 783 | "node": ">=8.0.0" 784 | } 785 | }, 786 | "node_modules/@parcel/optimizer-htmlnano/node_modules/mdn-data": { 787 | "version": "2.0.14", 788 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 789 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", 790 | "dev": true 791 | }, 792 | "node_modules/@parcel/optimizer-htmlnano/node_modules/svgo": { 793 | "version": "2.8.0", 794 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", 795 | "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", 796 | "dev": true, 797 | "dependencies": { 798 | "@trysound/sax": "0.2.0", 799 | "commander": "^7.2.0", 800 | "css-select": "^4.1.3", 801 | "css-tree": "^1.1.3", 802 | "csso": "^4.2.0", 803 | "picocolors": "^1.0.0", 804 | "stable": "^0.1.8" 805 | }, 806 | "bin": { 807 | "svgo": "bin/svgo" 808 | }, 809 | "engines": { 810 | "node": ">=10.13.0" 811 | } 812 | }, 813 | "node_modules/@parcel/optimizer-image": { 814 | "version": "2.8.3", 815 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz", 816 | "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==", 817 | "dev": true, 818 | "dependencies": { 819 | "@parcel/diagnostic": "2.8.3", 820 | "@parcel/plugin": "2.8.3", 821 | "@parcel/utils": "2.8.3", 822 | "@parcel/workers": "2.8.3", 823 | "detect-libc": "^1.0.3" 824 | }, 825 | "engines": { 826 | "node": ">= 12.0.0", 827 | "parcel": "^2.8.3" 828 | }, 829 | "funding": { 830 | "type": "opencollective", 831 | "url": "https://opencollective.com/parcel" 832 | } 833 | }, 834 | "node_modules/@parcel/optimizer-svgo": { 835 | "version": "2.8.3", 836 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz", 837 | "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==", 838 | "dev": true, 839 | "dependencies": { 840 | "@parcel/diagnostic": "2.8.3", 841 | "@parcel/plugin": "2.8.3", 842 | "@parcel/utils": "2.8.3", 843 | "svgo": "^2.4.0" 844 | }, 845 | "engines": { 846 | "node": ">= 12.0.0", 847 | "parcel": "^2.8.3" 848 | }, 849 | "funding": { 850 | "type": "opencollective", 851 | "url": "https://opencollective.com/parcel" 852 | } 853 | }, 854 | "node_modules/@parcel/optimizer-svgo/node_modules/css-select": { 855 | "version": "4.3.0", 856 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 857 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 858 | "dev": true, 859 | "dependencies": { 860 | "boolbase": "^1.0.0", 861 | "css-what": "^6.0.1", 862 | "domhandler": "^4.3.1", 863 | "domutils": "^2.8.0", 864 | "nth-check": "^2.0.1" 865 | }, 866 | "funding": { 867 | "url": "https://github.com/sponsors/fb55" 868 | } 869 | }, 870 | "node_modules/@parcel/optimizer-svgo/node_modules/css-tree": { 871 | "version": "1.1.3", 872 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 873 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 874 | "dev": true, 875 | "dependencies": { 876 | "mdn-data": "2.0.14", 877 | "source-map": "^0.6.1" 878 | }, 879 | "engines": { 880 | "node": ">=8.0.0" 881 | } 882 | }, 883 | "node_modules/@parcel/optimizer-svgo/node_modules/csso": { 884 | "version": "4.2.0", 885 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 886 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 887 | "dev": true, 888 | "dependencies": { 889 | "css-tree": "^1.1.2" 890 | }, 891 | "engines": { 892 | "node": ">=8.0.0" 893 | } 894 | }, 895 | "node_modules/@parcel/optimizer-svgo/node_modules/mdn-data": { 896 | "version": "2.0.14", 897 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 898 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", 899 | "dev": true 900 | }, 901 | "node_modules/@parcel/optimizer-svgo/node_modules/svgo": { 902 | "version": "2.8.0", 903 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", 904 | "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", 905 | "dev": true, 906 | "dependencies": { 907 | "@trysound/sax": "0.2.0", 908 | "commander": "^7.2.0", 909 | "css-select": "^4.1.3", 910 | "css-tree": "^1.1.3", 911 | "csso": "^4.2.0", 912 | "picocolors": "^1.0.0", 913 | "stable": "^0.1.8" 914 | }, 915 | "bin": { 916 | "svgo": "bin/svgo" 917 | }, 918 | "engines": { 919 | "node": ">=10.13.0" 920 | } 921 | }, 922 | "node_modules/@parcel/optimizer-terser": { 923 | "version": "2.8.3", 924 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz", 925 | "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==", 926 | "dev": true, 927 | "dependencies": { 928 | "@parcel/diagnostic": "2.8.3", 929 | "@parcel/plugin": "2.8.3", 930 | "@parcel/source-map": "^2.1.1", 931 | "@parcel/utils": "2.8.3", 932 | "nullthrows": "^1.1.1", 933 | "terser": "^5.2.0" 934 | }, 935 | "engines": { 936 | "node": ">= 12.0.0", 937 | "parcel": "^2.8.3" 938 | }, 939 | "funding": { 940 | "type": "opencollective", 941 | "url": "https://opencollective.com/parcel" 942 | } 943 | }, 944 | "node_modules/@parcel/package-manager": { 945 | "version": "2.8.3", 946 | "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz", 947 | "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==", 948 | "dev": true, 949 | "dependencies": { 950 | "@parcel/diagnostic": "2.8.3", 951 | "@parcel/fs": "2.8.3", 952 | "@parcel/logger": "2.8.3", 953 | "@parcel/types": "2.8.3", 954 | "@parcel/utils": "2.8.3", 955 | "@parcel/workers": "2.8.3", 956 | "semver": "^5.7.1" 957 | }, 958 | "engines": { 959 | "node": ">= 12.0.0" 960 | }, 961 | "funding": { 962 | "type": "opencollective", 963 | "url": "https://opencollective.com/parcel" 964 | }, 965 | "peerDependencies": { 966 | "@parcel/core": "^2.8.3" 967 | } 968 | }, 969 | "node_modules/@parcel/packager-css": { 970 | "version": "2.8.3", 971 | "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz", 972 | "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==", 973 | "dev": true, 974 | "dependencies": { 975 | "@parcel/plugin": "2.8.3", 976 | "@parcel/source-map": "^2.1.1", 977 | "@parcel/utils": "2.8.3", 978 | "nullthrows": "^1.1.1" 979 | }, 980 | "engines": { 981 | "node": ">= 12.0.0", 982 | "parcel": "^2.8.3" 983 | }, 984 | "funding": { 985 | "type": "opencollective", 986 | "url": "https://opencollective.com/parcel" 987 | } 988 | }, 989 | "node_modules/@parcel/packager-html": { 990 | "version": "2.8.3", 991 | "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz", 992 | "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==", 993 | "dev": true, 994 | "dependencies": { 995 | "@parcel/plugin": "2.8.3", 996 | "@parcel/types": "2.8.3", 997 | "@parcel/utils": "2.8.3", 998 | "nullthrows": "^1.1.1", 999 | "posthtml": "^0.16.5" 1000 | }, 1001 | "engines": { 1002 | "node": ">= 12.0.0", 1003 | "parcel": "^2.8.3" 1004 | }, 1005 | "funding": { 1006 | "type": "opencollective", 1007 | "url": "https://opencollective.com/parcel" 1008 | } 1009 | }, 1010 | "node_modules/@parcel/packager-js": { 1011 | "version": "2.8.3", 1012 | "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz", 1013 | "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==", 1014 | "dev": true, 1015 | "dependencies": { 1016 | "@parcel/diagnostic": "2.8.3", 1017 | "@parcel/hash": "2.8.3", 1018 | "@parcel/plugin": "2.8.3", 1019 | "@parcel/source-map": "^2.1.1", 1020 | "@parcel/utils": "2.8.3", 1021 | "globals": "^13.2.0", 1022 | "nullthrows": "^1.1.1" 1023 | }, 1024 | "engines": { 1025 | "node": ">= 12.0.0", 1026 | "parcel": "^2.8.3" 1027 | }, 1028 | "funding": { 1029 | "type": "opencollective", 1030 | "url": "https://opencollective.com/parcel" 1031 | } 1032 | }, 1033 | "node_modules/@parcel/packager-raw": { 1034 | "version": "2.8.3", 1035 | "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz", 1036 | "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==", 1037 | "dev": true, 1038 | "dependencies": { 1039 | "@parcel/plugin": "2.8.3" 1040 | }, 1041 | "engines": { 1042 | "node": ">= 12.0.0", 1043 | "parcel": "^2.8.3" 1044 | }, 1045 | "funding": { 1046 | "type": "opencollective", 1047 | "url": "https://opencollective.com/parcel" 1048 | } 1049 | }, 1050 | "node_modules/@parcel/packager-svg": { 1051 | "version": "2.8.3", 1052 | "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz", 1053 | "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==", 1054 | "dev": true, 1055 | "dependencies": { 1056 | "@parcel/plugin": "2.8.3", 1057 | "@parcel/types": "2.8.3", 1058 | "@parcel/utils": "2.8.3", 1059 | "posthtml": "^0.16.4" 1060 | }, 1061 | "engines": { 1062 | "node": ">= 12.0.0", 1063 | "parcel": "^2.8.3" 1064 | }, 1065 | "funding": { 1066 | "type": "opencollective", 1067 | "url": "https://opencollective.com/parcel" 1068 | } 1069 | }, 1070 | "node_modules/@parcel/plugin": { 1071 | "version": "2.8.3", 1072 | "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz", 1073 | "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==", 1074 | "dev": true, 1075 | "dependencies": { 1076 | "@parcel/types": "2.8.3" 1077 | }, 1078 | "engines": { 1079 | "node": ">= 12.0.0" 1080 | }, 1081 | "funding": { 1082 | "type": "opencollective", 1083 | "url": "https://opencollective.com/parcel" 1084 | } 1085 | }, 1086 | "node_modules/@parcel/reporter-cli": { 1087 | "version": "2.8.3", 1088 | "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz", 1089 | "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==", 1090 | "dev": true, 1091 | "dependencies": { 1092 | "@parcel/plugin": "2.8.3", 1093 | "@parcel/types": "2.8.3", 1094 | "@parcel/utils": "2.8.3", 1095 | "chalk": "^4.1.0", 1096 | "term-size": "^2.2.1" 1097 | }, 1098 | "engines": { 1099 | "node": ">= 12.0.0", 1100 | "parcel": "^2.8.3" 1101 | }, 1102 | "funding": { 1103 | "type": "opencollective", 1104 | "url": "https://opencollective.com/parcel" 1105 | } 1106 | }, 1107 | "node_modules/@parcel/reporter-dev-server": { 1108 | "version": "2.8.3", 1109 | "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz", 1110 | "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==", 1111 | "dev": true, 1112 | "dependencies": { 1113 | "@parcel/plugin": "2.8.3", 1114 | "@parcel/utils": "2.8.3" 1115 | }, 1116 | "engines": { 1117 | "node": ">= 12.0.0", 1118 | "parcel": "^2.8.3" 1119 | }, 1120 | "funding": { 1121 | "type": "opencollective", 1122 | "url": "https://opencollective.com/parcel" 1123 | } 1124 | }, 1125 | "node_modules/@parcel/resolver-default": { 1126 | "version": "2.8.3", 1127 | "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz", 1128 | "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==", 1129 | "dev": true, 1130 | "dependencies": { 1131 | "@parcel/node-resolver-core": "2.8.3", 1132 | "@parcel/plugin": "2.8.3" 1133 | }, 1134 | "engines": { 1135 | "node": ">= 12.0.0", 1136 | "parcel": "^2.8.3" 1137 | }, 1138 | "funding": { 1139 | "type": "opencollective", 1140 | "url": "https://opencollective.com/parcel" 1141 | } 1142 | }, 1143 | "node_modules/@parcel/runtime-browser-hmr": { 1144 | "version": "2.8.3", 1145 | "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz", 1146 | "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "@parcel/plugin": "2.8.3", 1150 | "@parcel/utils": "2.8.3" 1151 | }, 1152 | "engines": { 1153 | "node": ">= 12.0.0", 1154 | "parcel": "^2.8.3" 1155 | }, 1156 | "funding": { 1157 | "type": "opencollective", 1158 | "url": "https://opencollective.com/parcel" 1159 | } 1160 | }, 1161 | "node_modules/@parcel/runtime-js": { 1162 | "version": "2.8.3", 1163 | "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz", 1164 | "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==", 1165 | "dev": true, 1166 | "dependencies": { 1167 | "@parcel/plugin": "2.8.3", 1168 | "@parcel/utils": "2.8.3", 1169 | "nullthrows": "^1.1.1" 1170 | }, 1171 | "engines": { 1172 | "node": ">= 12.0.0", 1173 | "parcel": "^2.8.3" 1174 | }, 1175 | "funding": { 1176 | "type": "opencollective", 1177 | "url": "https://opencollective.com/parcel" 1178 | } 1179 | }, 1180 | "node_modules/@parcel/runtime-react-refresh": { 1181 | "version": "2.8.3", 1182 | "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz", 1183 | "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==", 1184 | "dev": true, 1185 | "dependencies": { 1186 | "@parcel/plugin": "2.8.3", 1187 | "@parcel/utils": "2.8.3", 1188 | "react-error-overlay": "6.0.9", 1189 | "react-refresh": "^0.9.0" 1190 | }, 1191 | "engines": { 1192 | "node": ">= 12.0.0", 1193 | "parcel": "^2.8.3" 1194 | }, 1195 | "funding": { 1196 | "type": "opencollective", 1197 | "url": "https://opencollective.com/parcel" 1198 | } 1199 | }, 1200 | "node_modules/@parcel/runtime-service-worker": { 1201 | "version": "2.8.3", 1202 | "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz", 1203 | "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==", 1204 | "dev": true, 1205 | "dependencies": { 1206 | "@parcel/plugin": "2.8.3", 1207 | "@parcel/utils": "2.8.3", 1208 | "nullthrows": "^1.1.1" 1209 | }, 1210 | "engines": { 1211 | "node": ">= 12.0.0", 1212 | "parcel": "^2.8.3" 1213 | }, 1214 | "funding": { 1215 | "type": "opencollective", 1216 | "url": "https://opencollective.com/parcel" 1217 | } 1218 | }, 1219 | "node_modules/@parcel/source-map": { 1220 | "version": "2.1.1", 1221 | "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", 1222 | "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", 1223 | "dev": true, 1224 | "dependencies": { 1225 | "detect-libc": "^1.0.3" 1226 | }, 1227 | "engines": { 1228 | "node": "^12.18.3 || >=14" 1229 | } 1230 | }, 1231 | "node_modules/@parcel/transformer-babel": { 1232 | "version": "2.8.3", 1233 | "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz", 1234 | "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==", 1235 | "dev": true, 1236 | "dependencies": { 1237 | "@parcel/diagnostic": "2.8.3", 1238 | "@parcel/plugin": "2.8.3", 1239 | "@parcel/source-map": "^2.1.1", 1240 | "@parcel/utils": "2.8.3", 1241 | "browserslist": "^4.6.6", 1242 | "json5": "^2.2.0", 1243 | "nullthrows": "^1.1.1", 1244 | "semver": "^5.7.0" 1245 | }, 1246 | "engines": { 1247 | "node": ">= 12.0.0", 1248 | "parcel": "^2.8.3" 1249 | }, 1250 | "funding": { 1251 | "type": "opencollective", 1252 | "url": "https://opencollective.com/parcel" 1253 | } 1254 | }, 1255 | "node_modules/@parcel/transformer-css": { 1256 | "version": "2.8.3", 1257 | "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz", 1258 | "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==", 1259 | "dev": true, 1260 | "dependencies": { 1261 | "@parcel/diagnostic": "2.8.3", 1262 | "@parcel/plugin": "2.8.3", 1263 | "@parcel/source-map": "^2.1.1", 1264 | "@parcel/utils": "2.8.3", 1265 | "browserslist": "^4.6.6", 1266 | "lightningcss": "^1.16.1", 1267 | "nullthrows": "^1.1.1" 1268 | }, 1269 | "engines": { 1270 | "node": ">= 12.0.0", 1271 | "parcel": "^2.8.3" 1272 | }, 1273 | "funding": { 1274 | "type": "opencollective", 1275 | "url": "https://opencollective.com/parcel" 1276 | } 1277 | }, 1278 | "node_modules/@parcel/transformer-html": { 1279 | "version": "2.8.3", 1280 | "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz", 1281 | "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==", 1282 | "dev": true, 1283 | "dependencies": { 1284 | "@parcel/diagnostic": "2.8.3", 1285 | "@parcel/hash": "2.8.3", 1286 | "@parcel/plugin": "2.8.3", 1287 | "nullthrows": "^1.1.1", 1288 | "posthtml": "^0.16.5", 1289 | "posthtml-parser": "^0.10.1", 1290 | "posthtml-render": "^3.0.0", 1291 | "semver": "^5.7.1", 1292 | "srcset": "4" 1293 | }, 1294 | "engines": { 1295 | "node": ">= 12.0.0", 1296 | "parcel": "^2.8.3" 1297 | }, 1298 | "funding": { 1299 | "type": "opencollective", 1300 | "url": "https://opencollective.com/parcel" 1301 | } 1302 | }, 1303 | "node_modules/@parcel/transformer-image": { 1304 | "version": "2.8.3", 1305 | "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz", 1306 | "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==", 1307 | "dev": true, 1308 | "dependencies": { 1309 | "@parcel/plugin": "2.8.3", 1310 | "@parcel/utils": "2.8.3", 1311 | "@parcel/workers": "2.8.3", 1312 | "nullthrows": "^1.1.1" 1313 | }, 1314 | "engines": { 1315 | "node": ">= 12.0.0", 1316 | "parcel": "^2.8.3" 1317 | }, 1318 | "peerDependencies": { 1319 | "@parcel/core": "^2.8.3" 1320 | } 1321 | }, 1322 | "node_modules/@parcel/transformer-js": { 1323 | "version": "2.8.3", 1324 | "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz", 1325 | "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==", 1326 | "dev": true, 1327 | "dependencies": { 1328 | "@parcel/diagnostic": "2.8.3", 1329 | "@parcel/plugin": "2.8.3", 1330 | "@parcel/source-map": "^2.1.1", 1331 | "@parcel/utils": "2.8.3", 1332 | "@parcel/workers": "2.8.3", 1333 | "@swc/helpers": "^0.4.12", 1334 | "browserslist": "^4.6.6", 1335 | "detect-libc": "^1.0.3", 1336 | "nullthrows": "^1.1.1", 1337 | "regenerator-runtime": "^0.13.7", 1338 | "semver": "^5.7.1" 1339 | }, 1340 | "engines": { 1341 | "node": ">= 12.0.0", 1342 | "parcel": "^2.8.3" 1343 | }, 1344 | "funding": { 1345 | "type": "opencollective", 1346 | "url": "https://opencollective.com/parcel" 1347 | }, 1348 | "peerDependencies": { 1349 | "@parcel/core": "^2.8.3" 1350 | } 1351 | }, 1352 | "node_modules/@parcel/transformer-json": { 1353 | "version": "2.8.3", 1354 | "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz", 1355 | "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==", 1356 | "dev": true, 1357 | "dependencies": { 1358 | "@parcel/plugin": "2.8.3", 1359 | "json5": "^2.2.0" 1360 | }, 1361 | "engines": { 1362 | "node": ">= 12.0.0", 1363 | "parcel": "^2.8.3" 1364 | }, 1365 | "funding": { 1366 | "type": "opencollective", 1367 | "url": "https://opencollective.com/parcel" 1368 | } 1369 | }, 1370 | "node_modules/@parcel/transformer-postcss": { 1371 | "version": "2.8.3", 1372 | "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz", 1373 | "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==", 1374 | "dev": true, 1375 | "dependencies": { 1376 | "@parcel/diagnostic": "2.8.3", 1377 | "@parcel/hash": "2.8.3", 1378 | "@parcel/plugin": "2.8.3", 1379 | "@parcel/utils": "2.8.3", 1380 | "clone": "^2.1.1", 1381 | "nullthrows": "^1.1.1", 1382 | "postcss-value-parser": "^4.2.0", 1383 | "semver": "^5.7.1" 1384 | }, 1385 | "engines": { 1386 | "node": ">= 12.0.0", 1387 | "parcel": "^2.8.3" 1388 | }, 1389 | "funding": { 1390 | "type": "opencollective", 1391 | "url": "https://opencollective.com/parcel" 1392 | } 1393 | }, 1394 | "node_modules/@parcel/transformer-posthtml": { 1395 | "version": "2.8.3", 1396 | "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz", 1397 | "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==", 1398 | "dev": true, 1399 | "dependencies": { 1400 | "@parcel/plugin": "2.8.3", 1401 | "@parcel/utils": "2.8.3", 1402 | "nullthrows": "^1.1.1", 1403 | "posthtml": "^0.16.5", 1404 | "posthtml-parser": "^0.10.1", 1405 | "posthtml-render": "^3.0.0", 1406 | "semver": "^5.7.1" 1407 | }, 1408 | "engines": { 1409 | "node": ">= 12.0.0", 1410 | "parcel": "^2.8.3" 1411 | }, 1412 | "funding": { 1413 | "type": "opencollective", 1414 | "url": "https://opencollective.com/parcel" 1415 | } 1416 | }, 1417 | "node_modules/@parcel/transformer-raw": { 1418 | "version": "2.8.3", 1419 | "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz", 1420 | "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==", 1421 | "dev": true, 1422 | "dependencies": { 1423 | "@parcel/plugin": "2.8.3" 1424 | }, 1425 | "engines": { 1426 | "node": ">= 12.0.0", 1427 | "parcel": "^2.8.3" 1428 | }, 1429 | "funding": { 1430 | "type": "opencollective", 1431 | "url": "https://opencollective.com/parcel" 1432 | } 1433 | }, 1434 | "node_modules/@parcel/transformer-react-refresh-wrap": { 1435 | "version": "2.8.3", 1436 | "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz", 1437 | "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==", 1438 | "dev": true, 1439 | "dependencies": { 1440 | "@parcel/plugin": "2.8.3", 1441 | "@parcel/utils": "2.8.3", 1442 | "react-refresh": "^0.9.0" 1443 | }, 1444 | "engines": { 1445 | "node": ">= 12.0.0", 1446 | "parcel": "^2.8.3" 1447 | }, 1448 | "funding": { 1449 | "type": "opencollective", 1450 | "url": "https://opencollective.com/parcel" 1451 | } 1452 | }, 1453 | "node_modules/@parcel/transformer-svg": { 1454 | "version": "2.8.3", 1455 | "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz", 1456 | "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==", 1457 | "dev": true, 1458 | "dependencies": { 1459 | "@parcel/diagnostic": "2.8.3", 1460 | "@parcel/hash": "2.8.3", 1461 | "@parcel/plugin": "2.8.3", 1462 | "nullthrows": "^1.1.1", 1463 | "posthtml": "^0.16.5", 1464 | "posthtml-parser": "^0.10.1", 1465 | "posthtml-render": "^3.0.0", 1466 | "semver": "^5.7.1" 1467 | }, 1468 | "engines": { 1469 | "node": ">= 12.0.0", 1470 | "parcel": "^2.8.3" 1471 | }, 1472 | "funding": { 1473 | "type": "opencollective", 1474 | "url": "https://opencollective.com/parcel" 1475 | } 1476 | }, 1477 | "node_modules/@parcel/transformer-typescript-tsc": { 1478 | "version": "2.8.3", 1479 | "resolved": "https://registry.npmjs.org/@parcel/transformer-typescript-tsc/-/transformer-typescript-tsc-2.8.3.tgz", 1480 | "integrity": "sha512-hig99OrUJhXuGLN+Nxisvfkj3cggH6GM1nDcS3KWEGoD+UkxLaXkd32Od/mvJ4nUN/ThbAPqwIljmgkgPlYzbw==", 1481 | "dev": true, 1482 | "dependencies": { 1483 | "@parcel/plugin": "2.8.3", 1484 | "@parcel/source-map": "^2.1.1", 1485 | "@parcel/ts-utils": "2.8.3" 1486 | }, 1487 | "engines": { 1488 | "node": ">= 12.0.0", 1489 | "parcel": "^2.8.3" 1490 | }, 1491 | "funding": { 1492 | "type": "opencollective", 1493 | "url": "https://opencollective.com/parcel" 1494 | }, 1495 | "peerDependencies": { 1496 | "typescript": ">=3.0.0" 1497 | } 1498 | }, 1499 | "node_modules/@parcel/ts-utils": { 1500 | "version": "2.8.3", 1501 | "resolved": "https://registry.npmjs.org/@parcel/ts-utils/-/ts-utils-2.8.3.tgz", 1502 | "integrity": "sha512-4HMt9B9LF2pDFvSKGImho48tlCvCUl7ly1ZMXvQdmEq2i0yoS81tDsmxX3yly/RVUVeUCGAj1JRuuy1lw5zw1A==", 1503 | "dev": true, 1504 | "dependencies": { 1505 | "nullthrows": "^1.1.1" 1506 | }, 1507 | "engines": { 1508 | "node": ">= 12.0.0" 1509 | }, 1510 | "funding": { 1511 | "type": "opencollective", 1512 | "url": "https://opencollective.com/parcel" 1513 | }, 1514 | "peerDependencies": { 1515 | "typescript": ">=3.0.0" 1516 | } 1517 | }, 1518 | "node_modules/@parcel/types": { 1519 | "version": "2.8.3", 1520 | "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz", 1521 | "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==", 1522 | "dev": true, 1523 | "dependencies": { 1524 | "@parcel/cache": "2.8.3", 1525 | "@parcel/diagnostic": "2.8.3", 1526 | "@parcel/fs": "2.8.3", 1527 | "@parcel/package-manager": "2.8.3", 1528 | "@parcel/source-map": "^2.1.1", 1529 | "@parcel/workers": "2.8.3", 1530 | "utility-types": "^3.10.0" 1531 | } 1532 | }, 1533 | "node_modules/@parcel/utils": { 1534 | "version": "2.8.3", 1535 | "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz", 1536 | "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==", 1537 | "dev": true, 1538 | "dependencies": { 1539 | "@parcel/codeframe": "2.8.3", 1540 | "@parcel/diagnostic": "2.8.3", 1541 | "@parcel/hash": "2.8.3", 1542 | "@parcel/logger": "2.8.3", 1543 | "@parcel/markdown-ansi": "2.8.3", 1544 | "@parcel/source-map": "^2.1.1", 1545 | "chalk": "^4.1.0" 1546 | }, 1547 | "engines": { 1548 | "node": ">= 12.0.0" 1549 | }, 1550 | "funding": { 1551 | "type": "opencollective", 1552 | "url": "https://opencollective.com/parcel" 1553 | } 1554 | }, 1555 | "node_modules/@parcel/watcher": { 1556 | "version": "2.1.0", 1557 | "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz", 1558 | "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==", 1559 | "dev": true, 1560 | "hasInstallScript": true, 1561 | "dependencies": { 1562 | "is-glob": "^4.0.3", 1563 | "micromatch": "^4.0.5", 1564 | "node-addon-api": "^3.2.1", 1565 | "node-gyp-build": "^4.3.0" 1566 | }, 1567 | "engines": { 1568 | "node": ">= 10.0.0" 1569 | }, 1570 | "funding": { 1571 | "type": "opencollective", 1572 | "url": "https://opencollective.com/parcel" 1573 | } 1574 | }, 1575 | "node_modules/@parcel/workers": { 1576 | "version": "2.8.3", 1577 | "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz", 1578 | "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==", 1579 | "dev": true, 1580 | "dependencies": { 1581 | "@parcel/diagnostic": "2.8.3", 1582 | "@parcel/logger": "2.8.3", 1583 | "@parcel/types": "2.8.3", 1584 | "@parcel/utils": "2.8.3", 1585 | "chrome-trace-event": "^1.0.2", 1586 | "nullthrows": "^1.1.1" 1587 | }, 1588 | "engines": { 1589 | "node": ">= 12.0.0" 1590 | }, 1591 | "funding": { 1592 | "type": "opencollective", 1593 | "url": "https://opencollective.com/parcel" 1594 | }, 1595 | "peerDependencies": { 1596 | "@parcel/core": "^2.8.3" 1597 | } 1598 | }, 1599 | "node_modules/@swc/helpers": { 1600 | "version": "0.4.14", 1601 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", 1602 | "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", 1603 | "dev": true, 1604 | "dependencies": { 1605 | "tslib": "^2.4.0" 1606 | } 1607 | }, 1608 | "node_modules/@trysound/sax": { 1609 | "version": "0.2.0", 1610 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", 1611 | "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", 1612 | "dev": true, 1613 | "engines": { 1614 | "node": ">=10.13.0" 1615 | } 1616 | }, 1617 | "node_modules/abortcontroller-polyfill": { 1618 | "version": "1.7.5", 1619 | "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", 1620 | "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", 1621 | "dev": true 1622 | }, 1623 | "node_modules/acorn": { 1624 | "version": "8.8.2", 1625 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 1626 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 1627 | "dev": true, 1628 | "bin": { 1629 | "acorn": "bin/acorn" 1630 | }, 1631 | "engines": { 1632 | "node": ">=0.4.0" 1633 | } 1634 | }, 1635 | "node_modules/ansi-styles": { 1636 | "version": "4.3.0", 1637 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1638 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1639 | "dev": true, 1640 | "dependencies": { 1641 | "color-convert": "^2.0.1" 1642 | }, 1643 | "engines": { 1644 | "node": ">=8" 1645 | }, 1646 | "funding": { 1647 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1648 | } 1649 | }, 1650 | "node_modules/argparse": { 1651 | "version": "2.0.1", 1652 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1653 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1654 | "dev": true 1655 | }, 1656 | "node_modules/base-x": { 1657 | "version": "3.0.9", 1658 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", 1659 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", 1660 | "dev": true, 1661 | "dependencies": { 1662 | "safe-buffer": "^5.0.1" 1663 | } 1664 | }, 1665 | "node_modules/boolbase": { 1666 | "version": "1.0.0", 1667 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 1668 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 1669 | "dev": true 1670 | }, 1671 | "node_modules/braces": { 1672 | "version": "3.0.2", 1673 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1674 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1675 | "dev": true, 1676 | "dependencies": { 1677 | "fill-range": "^7.0.1" 1678 | }, 1679 | "engines": { 1680 | "node": ">=8" 1681 | } 1682 | }, 1683 | "node_modules/browserslist": { 1684 | "version": "4.21.5", 1685 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", 1686 | "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", 1687 | "dev": true, 1688 | "funding": [ 1689 | { 1690 | "type": "opencollective", 1691 | "url": "https://opencollective.com/browserslist" 1692 | }, 1693 | { 1694 | "type": "tidelift", 1695 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1696 | } 1697 | ], 1698 | "dependencies": { 1699 | "caniuse-lite": "^1.0.30001449", 1700 | "electron-to-chromium": "^1.4.284", 1701 | "node-releases": "^2.0.8", 1702 | "update-browserslist-db": "^1.0.10" 1703 | }, 1704 | "bin": { 1705 | "browserslist": "cli.js" 1706 | }, 1707 | "engines": { 1708 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1709 | } 1710 | }, 1711 | "node_modules/buffer-from": { 1712 | "version": "1.1.2", 1713 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1714 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1715 | "dev": true 1716 | }, 1717 | "node_modules/callsites": { 1718 | "version": "3.1.0", 1719 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1720 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1721 | "dev": true, 1722 | "engines": { 1723 | "node": ">=6" 1724 | } 1725 | }, 1726 | "node_modules/caniuse-lite": { 1727 | "version": "1.0.30001481", 1728 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", 1729 | "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", 1730 | "dev": true, 1731 | "funding": [ 1732 | { 1733 | "type": "opencollective", 1734 | "url": "https://opencollective.com/browserslist" 1735 | }, 1736 | { 1737 | "type": "tidelift", 1738 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1739 | }, 1740 | { 1741 | "type": "github", 1742 | "url": "https://github.com/sponsors/ai" 1743 | } 1744 | ] 1745 | }, 1746 | "node_modules/chalk": { 1747 | "version": "4.1.2", 1748 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1749 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1750 | "dev": true, 1751 | "dependencies": { 1752 | "ansi-styles": "^4.1.0", 1753 | "supports-color": "^7.1.0" 1754 | }, 1755 | "engines": { 1756 | "node": ">=10" 1757 | }, 1758 | "funding": { 1759 | "url": "https://github.com/chalk/chalk?sponsor=1" 1760 | } 1761 | }, 1762 | "node_modules/chrome-trace-event": { 1763 | "version": "1.0.3", 1764 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 1765 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 1766 | "dev": true, 1767 | "engines": { 1768 | "node": ">=6.0" 1769 | } 1770 | }, 1771 | "node_modules/clone": { 1772 | "version": "2.1.2", 1773 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 1774 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", 1775 | "dev": true, 1776 | "engines": { 1777 | "node": ">=0.8" 1778 | } 1779 | }, 1780 | "node_modules/color-convert": { 1781 | "version": "2.0.1", 1782 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1783 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1784 | "dev": true, 1785 | "dependencies": { 1786 | "color-name": "~1.1.4" 1787 | }, 1788 | "engines": { 1789 | "node": ">=7.0.0" 1790 | } 1791 | }, 1792 | "node_modules/color-name": { 1793 | "version": "1.1.4", 1794 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1795 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1796 | "dev": true 1797 | }, 1798 | "node_modules/commander": { 1799 | "version": "7.2.0", 1800 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 1801 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 1802 | "dev": true, 1803 | "engines": { 1804 | "node": ">= 10" 1805 | } 1806 | }, 1807 | "node_modules/cosmiconfig": { 1808 | "version": "8.1.3", 1809 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", 1810 | "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", 1811 | "dev": true, 1812 | "dependencies": { 1813 | "import-fresh": "^3.2.1", 1814 | "js-yaml": "^4.1.0", 1815 | "parse-json": "^5.0.0", 1816 | "path-type": "^4.0.0" 1817 | }, 1818 | "engines": { 1819 | "node": ">=14" 1820 | }, 1821 | "funding": { 1822 | "url": "https://github.com/sponsors/d-fischer" 1823 | } 1824 | }, 1825 | "node_modules/css-select": { 1826 | "version": "5.1.0", 1827 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", 1828 | "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", 1829 | "dev": true, 1830 | "optional": true, 1831 | "peer": true, 1832 | "dependencies": { 1833 | "boolbase": "^1.0.0", 1834 | "css-what": "^6.1.0", 1835 | "domhandler": "^5.0.2", 1836 | "domutils": "^3.0.1", 1837 | "nth-check": "^2.0.1" 1838 | }, 1839 | "funding": { 1840 | "url": "https://github.com/sponsors/fb55" 1841 | } 1842 | }, 1843 | "node_modules/css-select/node_modules/dom-serializer": { 1844 | "version": "2.0.0", 1845 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", 1846 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", 1847 | "dev": true, 1848 | "optional": true, 1849 | "peer": true, 1850 | "dependencies": { 1851 | "domelementtype": "^2.3.0", 1852 | "domhandler": "^5.0.2", 1853 | "entities": "^4.2.0" 1854 | }, 1855 | "funding": { 1856 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 1857 | } 1858 | }, 1859 | "node_modules/css-select/node_modules/domhandler": { 1860 | "version": "5.0.3", 1861 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", 1862 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", 1863 | "dev": true, 1864 | "optional": true, 1865 | "peer": true, 1866 | "dependencies": { 1867 | "domelementtype": "^2.3.0" 1868 | }, 1869 | "engines": { 1870 | "node": ">= 4" 1871 | }, 1872 | "funding": { 1873 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1874 | } 1875 | }, 1876 | "node_modules/css-select/node_modules/domutils": { 1877 | "version": "3.0.1", 1878 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", 1879 | "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", 1880 | "dev": true, 1881 | "optional": true, 1882 | "peer": true, 1883 | "dependencies": { 1884 | "dom-serializer": "^2.0.0", 1885 | "domelementtype": "^2.3.0", 1886 | "domhandler": "^5.0.1" 1887 | }, 1888 | "funding": { 1889 | "url": "https://github.com/fb55/domutils?sponsor=1" 1890 | } 1891 | }, 1892 | "node_modules/css-select/node_modules/entities": { 1893 | "version": "4.5.0", 1894 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1895 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1896 | "dev": true, 1897 | "optional": true, 1898 | "peer": true, 1899 | "engines": { 1900 | "node": ">=0.12" 1901 | }, 1902 | "funding": { 1903 | "url": "https://github.com/fb55/entities?sponsor=1" 1904 | } 1905 | }, 1906 | "node_modules/css-tree": { 1907 | "version": "2.3.1", 1908 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", 1909 | "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", 1910 | "dev": true, 1911 | "optional": true, 1912 | "peer": true, 1913 | "dependencies": { 1914 | "mdn-data": "2.0.30", 1915 | "source-map-js": "^1.0.1" 1916 | }, 1917 | "engines": { 1918 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 1919 | } 1920 | }, 1921 | "node_modules/css-what": { 1922 | "version": "6.1.0", 1923 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 1924 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 1925 | "dev": true, 1926 | "engines": { 1927 | "node": ">= 6" 1928 | }, 1929 | "funding": { 1930 | "url": "https://github.com/sponsors/fb55" 1931 | } 1932 | }, 1933 | "node_modules/csso": { 1934 | "version": "5.0.5", 1935 | "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", 1936 | "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", 1937 | "dev": true, 1938 | "optional": true, 1939 | "peer": true, 1940 | "dependencies": { 1941 | "css-tree": "~2.2.0" 1942 | }, 1943 | "engines": { 1944 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", 1945 | "npm": ">=7.0.0" 1946 | } 1947 | }, 1948 | "node_modules/csso/node_modules/css-tree": { 1949 | "version": "2.2.1", 1950 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", 1951 | "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", 1952 | "dev": true, 1953 | "optional": true, 1954 | "peer": true, 1955 | "dependencies": { 1956 | "mdn-data": "2.0.28", 1957 | "source-map-js": "^1.0.1" 1958 | }, 1959 | "engines": { 1960 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", 1961 | "npm": ">=7.0.0" 1962 | } 1963 | }, 1964 | "node_modules/csso/node_modules/mdn-data": { 1965 | "version": "2.0.28", 1966 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", 1967 | "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", 1968 | "dev": true, 1969 | "optional": true, 1970 | "peer": true 1971 | }, 1972 | "node_modules/detect-libc": { 1973 | "version": "1.0.3", 1974 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 1975 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", 1976 | "dev": true, 1977 | "bin": { 1978 | "detect-libc": "bin/detect-libc.js" 1979 | }, 1980 | "engines": { 1981 | "node": ">=0.10" 1982 | } 1983 | }, 1984 | "node_modules/dom-serializer": { 1985 | "version": "1.4.1", 1986 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 1987 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 1988 | "dev": true, 1989 | "dependencies": { 1990 | "domelementtype": "^2.0.1", 1991 | "domhandler": "^4.2.0", 1992 | "entities": "^2.0.0" 1993 | }, 1994 | "funding": { 1995 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 1996 | } 1997 | }, 1998 | "node_modules/dom-serializer/node_modules/entities": { 1999 | "version": "2.2.0", 2000 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 2001 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 2002 | "dev": true, 2003 | "funding": { 2004 | "url": "https://github.com/fb55/entities?sponsor=1" 2005 | } 2006 | }, 2007 | "node_modules/domelementtype": { 2008 | "version": "2.3.0", 2009 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 2010 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 2011 | "dev": true, 2012 | "funding": [ 2013 | { 2014 | "type": "github", 2015 | "url": "https://github.com/sponsors/fb55" 2016 | } 2017 | ] 2018 | }, 2019 | "node_modules/domhandler": { 2020 | "version": "4.3.1", 2021 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 2022 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 2023 | "dev": true, 2024 | "dependencies": { 2025 | "domelementtype": "^2.2.0" 2026 | }, 2027 | "engines": { 2028 | "node": ">= 4" 2029 | }, 2030 | "funding": { 2031 | "url": "https://github.com/fb55/domhandler?sponsor=1" 2032 | } 2033 | }, 2034 | "node_modules/domutils": { 2035 | "version": "2.8.0", 2036 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 2037 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 2038 | "dev": true, 2039 | "dependencies": { 2040 | "dom-serializer": "^1.0.1", 2041 | "domelementtype": "^2.2.0", 2042 | "domhandler": "^4.2.0" 2043 | }, 2044 | "funding": { 2045 | "url": "https://github.com/fb55/domutils?sponsor=1" 2046 | } 2047 | }, 2048 | "node_modules/dotenv": { 2049 | "version": "7.0.0", 2050 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", 2051 | "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", 2052 | "dev": true, 2053 | "engines": { 2054 | "node": ">=6" 2055 | } 2056 | }, 2057 | "node_modules/dotenv-expand": { 2058 | "version": "5.1.0", 2059 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", 2060 | "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", 2061 | "dev": true 2062 | }, 2063 | "node_modules/electron-to-chromium": { 2064 | "version": "1.4.368", 2065 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz", 2066 | "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==", 2067 | "dev": true 2068 | }, 2069 | "node_modules/entities": { 2070 | "version": "3.0.1", 2071 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", 2072 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", 2073 | "dev": true, 2074 | "engines": { 2075 | "node": ">=0.12" 2076 | }, 2077 | "funding": { 2078 | "url": "https://github.com/fb55/entities?sponsor=1" 2079 | } 2080 | }, 2081 | "node_modules/error-ex": { 2082 | "version": "1.3.2", 2083 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 2084 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 2085 | "dev": true, 2086 | "dependencies": { 2087 | "is-arrayish": "^0.2.1" 2088 | } 2089 | }, 2090 | "node_modules/escalade": { 2091 | "version": "3.1.1", 2092 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2093 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2094 | "dev": true, 2095 | "engines": { 2096 | "node": ">=6" 2097 | } 2098 | }, 2099 | "node_modules/escape-string-regexp": { 2100 | "version": "1.0.5", 2101 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2102 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 2103 | "dev": true, 2104 | "engines": { 2105 | "node": ">=0.8.0" 2106 | } 2107 | }, 2108 | "node_modules/fill-range": { 2109 | "version": "7.0.1", 2110 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2111 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2112 | "dev": true, 2113 | "dependencies": { 2114 | "to-regex-range": "^5.0.1" 2115 | }, 2116 | "engines": { 2117 | "node": ">=8" 2118 | } 2119 | }, 2120 | "node_modules/get-port": { 2121 | "version": "4.2.0", 2122 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", 2123 | "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", 2124 | "dev": true, 2125 | "engines": { 2126 | "node": ">=6" 2127 | } 2128 | }, 2129 | "node_modules/globals": { 2130 | "version": "13.20.0", 2131 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 2132 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 2133 | "dev": true, 2134 | "dependencies": { 2135 | "type-fest": "^0.20.2" 2136 | }, 2137 | "engines": { 2138 | "node": ">=8" 2139 | }, 2140 | "funding": { 2141 | "url": "https://github.com/sponsors/sindresorhus" 2142 | } 2143 | }, 2144 | "node_modules/has-flag": { 2145 | "version": "4.0.0", 2146 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2147 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2148 | "dev": true, 2149 | "engines": { 2150 | "node": ">=8" 2151 | } 2152 | }, 2153 | "node_modules/htmlnano": { 2154 | "version": "2.0.4", 2155 | "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz", 2156 | "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==", 2157 | "dev": true, 2158 | "dependencies": { 2159 | "cosmiconfig": "^8.0.0", 2160 | "posthtml": "^0.16.5", 2161 | "timsort": "^0.3.0" 2162 | }, 2163 | "peerDependencies": { 2164 | "cssnano": "^6.0.0", 2165 | "postcss": "^8.3.11", 2166 | "purgecss": "^5.0.0", 2167 | "relateurl": "^0.2.7", 2168 | "srcset": "4.0.0", 2169 | "svgo": "^3.0.2", 2170 | "terser": "^5.10.0", 2171 | "uncss": "^0.17.3" 2172 | }, 2173 | "peerDependenciesMeta": { 2174 | "cssnano": { 2175 | "optional": true 2176 | }, 2177 | "postcss": { 2178 | "optional": true 2179 | }, 2180 | "purgecss": { 2181 | "optional": true 2182 | }, 2183 | "relateurl": { 2184 | "optional": true 2185 | }, 2186 | "srcset": { 2187 | "optional": true 2188 | }, 2189 | "svgo": { 2190 | "optional": true 2191 | }, 2192 | "terser": { 2193 | "optional": true 2194 | }, 2195 | "uncss": { 2196 | "optional": true 2197 | } 2198 | } 2199 | }, 2200 | "node_modules/htmlparser2": { 2201 | "version": "7.2.0", 2202 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", 2203 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", 2204 | "dev": true, 2205 | "funding": [ 2206 | "https://github.com/fb55/htmlparser2?sponsor=1", 2207 | { 2208 | "type": "github", 2209 | "url": "https://github.com/sponsors/fb55" 2210 | } 2211 | ], 2212 | "dependencies": { 2213 | "domelementtype": "^2.0.1", 2214 | "domhandler": "^4.2.2", 2215 | "domutils": "^2.8.0", 2216 | "entities": "^3.0.1" 2217 | } 2218 | }, 2219 | "node_modules/import-fresh": { 2220 | "version": "3.3.0", 2221 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2222 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2223 | "dev": true, 2224 | "dependencies": { 2225 | "parent-module": "^1.0.0", 2226 | "resolve-from": "^4.0.0" 2227 | }, 2228 | "engines": { 2229 | "node": ">=6" 2230 | }, 2231 | "funding": { 2232 | "url": "https://github.com/sponsors/sindresorhus" 2233 | } 2234 | }, 2235 | "node_modules/is-arrayish": { 2236 | "version": "0.2.1", 2237 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2238 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 2239 | "dev": true 2240 | }, 2241 | "node_modules/is-extglob": { 2242 | "version": "2.1.1", 2243 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2244 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2245 | "dev": true, 2246 | "engines": { 2247 | "node": ">=0.10.0" 2248 | } 2249 | }, 2250 | "node_modules/is-glob": { 2251 | "version": "4.0.3", 2252 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2253 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2254 | "dev": true, 2255 | "dependencies": { 2256 | "is-extglob": "^2.1.1" 2257 | }, 2258 | "engines": { 2259 | "node": ">=0.10.0" 2260 | } 2261 | }, 2262 | "node_modules/is-json": { 2263 | "version": "2.0.1", 2264 | "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", 2265 | "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", 2266 | "dev": true 2267 | }, 2268 | "node_modules/is-number": { 2269 | "version": "7.0.0", 2270 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2271 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2272 | "dev": true, 2273 | "engines": { 2274 | "node": ">=0.12.0" 2275 | } 2276 | }, 2277 | "node_modules/js-tokens": { 2278 | "version": "4.0.0", 2279 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2280 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2281 | "dev": true 2282 | }, 2283 | "node_modules/js-yaml": { 2284 | "version": "4.1.0", 2285 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2286 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2287 | "dev": true, 2288 | "dependencies": { 2289 | "argparse": "^2.0.1" 2290 | }, 2291 | "bin": { 2292 | "js-yaml": "bin/js-yaml.js" 2293 | } 2294 | }, 2295 | "node_modules/json-parse-even-better-errors": { 2296 | "version": "2.3.1", 2297 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2298 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2299 | "dev": true 2300 | }, 2301 | "node_modules/json5": { 2302 | "version": "2.2.3", 2303 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2304 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2305 | "dev": true, 2306 | "bin": { 2307 | "json5": "lib/cli.js" 2308 | }, 2309 | "engines": { 2310 | "node": ">=6" 2311 | } 2312 | }, 2313 | "node_modules/lightningcss": { 2314 | "version": "1.20.0", 2315 | "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.20.0.tgz", 2316 | "integrity": "sha512-4bj8aP+Vi+or8Gwq/hknmicr4PmA8D9uL/3qY0N0daX5vYBMYERGI6Y93nzoeRgQMULq+gtrN/FvJYtH0xNN8g==", 2317 | "dev": true, 2318 | "dependencies": { 2319 | "detect-libc": "^1.0.3" 2320 | }, 2321 | "engines": { 2322 | "node": ">= 12.0.0" 2323 | }, 2324 | "funding": { 2325 | "type": "opencollective", 2326 | "url": "https://opencollective.com/parcel" 2327 | }, 2328 | "optionalDependencies": { 2329 | "lightningcss-darwin-arm64": "1.20.0", 2330 | "lightningcss-darwin-x64": "1.20.0", 2331 | "lightningcss-linux-arm-gnueabihf": "1.20.0", 2332 | "lightningcss-linux-arm64-gnu": "1.20.0", 2333 | "lightningcss-linux-arm64-musl": "1.20.0", 2334 | "lightningcss-linux-x64-gnu": "1.20.0", 2335 | "lightningcss-linux-x64-musl": "1.20.0", 2336 | "lightningcss-win32-x64-msvc": "1.20.0" 2337 | } 2338 | }, 2339 | "node_modules/lightningcss-darwin-arm64": { 2340 | "version": "1.20.0", 2341 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.20.0.tgz", 2342 | "integrity": "sha512-aYEohJTlzwB8URJaNiS57tMbjyLub0mYvxlxKQk8SZv+irXx6MoBWpDNQKKTS9gg1pGf/eAwjpa3BLAoCBsh1A==", 2343 | "cpu": [ 2344 | "arm64" 2345 | ], 2346 | "dev": true, 2347 | "optional": true, 2348 | "os": [ 2349 | "darwin" 2350 | ], 2351 | "engines": { 2352 | "node": ">= 12.0.0" 2353 | }, 2354 | "funding": { 2355 | "type": "opencollective", 2356 | "url": "https://opencollective.com/parcel" 2357 | } 2358 | }, 2359 | "node_modules/lightningcss-darwin-x64": { 2360 | "version": "1.20.0", 2361 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.20.0.tgz", 2362 | "integrity": "sha512-cmMgY8FFWVaGgtift7eKKkHMqlz9O09/yTdlCXEDOeDP9yeo6vHOBTRP7ojb368kjw8Ew3l0L2uT1Gtx56eNkg==", 2363 | "cpu": [ 2364 | "x64" 2365 | ], 2366 | "dev": true, 2367 | "optional": true, 2368 | "os": [ 2369 | "darwin" 2370 | ], 2371 | "engines": { 2372 | "node": ">= 12.0.0" 2373 | }, 2374 | "funding": { 2375 | "type": "opencollective", 2376 | "url": "https://opencollective.com/parcel" 2377 | } 2378 | }, 2379 | "node_modules/lightningcss-linux-arm-gnueabihf": { 2380 | "version": "1.20.0", 2381 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.20.0.tgz", 2382 | "integrity": "sha512-/m+NDO1O6JCv7R9F0XWlXcintQHx4MPNU+kt8jZJO07LLdGwCfvjN31GVcwVPlStnnx/cU8uTTmax6g/Qu/whg==", 2383 | "cpu": [ 2384 | "arm" 2385 | ], 2386 | "dev": true, 2387 | "optional": true, 2388 | "os": [ 2389 | "linux" 2390 | ], 2391 | "engines": { 2392 | "node": ">= 12.0.0" 2393 | }, 2394 | "funding": { 2395 | "type": "opencollective", 2396 | "url": "https://opencollective.com/parcel" 2397 | } 2398 | }, 2399 | "node_modules/lightningcss-linux-arm64-gnu": { 2400 | "version": "1.20.0", 2401 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.20.0.tgz", 2402 | "integrity": "sha512-gtXoa6v0HvMRLbev6Hsef0+Q5He7NslB+Rs7G49Y5LUSdJeGIATEN+j8JzHC0DnxCsOGbEgGRmvtJzzYDkkluw==", 2403 | "cpu": [ 2404 | "arm64" 2405 | ], 2406 | "dev": true, 2407 | "optional": true, 2408 | "os": [ 2409 | "linux" 2410 | ], 2411 | "engines": { 2412 | "node": ">= 12.0.0" 2413 | }, 2414 | "funding": { 2415 | "type": "opencollective", 2416 | "url": "https://opencollective.com/parcel" 2417 | } 2418 | }, 2419 | "node_modules/lightningcss-linux-arm64-musl": { 2420 | "version": "1.20.0", 2421 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.20.0.tgz", 2422 | "integrity": "sha512-Po7XpucM1kZnkiyd2BNwTExSDcZ8jm8uB9u+Sq44qjpkf5f75jreQwn3DQm9I1t5C6tB9HGt30HExMju9umJBQ==", 2423 | "cpu": [ 2424 | "arm64" 2425 | ], 2426 | "dev": true, 2427 | "optional": true, 2428 | "os": [ 2429 | "linux" 2430 | ], 2431 | "engines": { 2432 | "node": ">= 12.0.0" 2433 | }, 2434 | "funding": { 2435 | "type": "opencollective", 2436 | "url": "https://opencollective.com/parcel" 2437 | } 2438 | }, 2439 | "node_modules/lightningcss-linux-x64-gnu": { 2440 | "version": "1.20.0", 2441 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.20.0.tgz", 2442 | "integrity": "sha512-8yR/fGNn/P0I+Lc3PK+VWPET/zdSpBfHFIG0DJ38TywMbItVKvnFvoTBwnIm4LqBz7g2G2dDexnNP95za2Ll8g==", 2443 | "cpu": [ 2444 | "x64" 2445 | ], 2446 | "dev": true, 2447 | "optional": true, 2448 | "os": [ 2449 | "linux" 2450 | ], 2451 | "engines": { 2452 | "node": ">= 12.0.0" 2453 | }, 2454 | "funding": { 2455 | "type": "opencollective", 2456 | "url": "https://opencollective.com/parcel" 2457 | } 2458 | }, 2459 | "node_modules/lightningcss-linux-x64-musl": { 2460 | "version": "1.20.0", 2461 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.20.0.tgz", 2462 | "integrity": "sha512-EmpJ+VkPZ8RACiB4m+l8TmapmE1W2UvJKDHE+ML/3Ihr9tRKUs3CibfnQTFZC8aSsrxgXagDAN+PgCDDhIyriA==", 2463 | "cpu": [ 2464 | "x64" 2465 | ], 2466 | "dev": true, 2467 | "optional": true, 2468 | "os": [ 2469 | "linux" 2470 | ], 2471 | "engines": { 2472 | "node": ">= 12.0.0" 2473 | }, 2474 | "funding": { 2475 | "type": "opencollective", 2476 | "url": "https://opencollective.com/parcel" 2477 | } 2478 | }, 2479 | "node_modules/lightningcss-win32-x64-msvc": { 2480 | "version": "1.20.0", 2481 | "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.20.0.tgz", 2482 | "integrity": "sha512-BRdPvbq7Cc1qxAzp2emqWJHrqsEkf4ggxS29VOnxT7jhkdHKU+a26OVMjvm/OL0NH0ToNOZNAPvHMSexiEgBeA==", 2483 | "cpu": [ 2484 | "x64" 2485 | ], 2486 | "dev": true, 2487 | "optional": true, 2488 | "os": [ 2489 | "win32" 2490 | ], 2491 | "engines": { 2492 | "node": ">= 12.0.0" 2493 | }, 2494 | "funding": { 2495 | "type": "opencollective", 2496 | "url": "https://opencollective.com/parcel" 2497 | } 2498 | }, 2499 | "node_modules/lines-and-columns": { 2500 | "version": "1.2.4", 2501 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2502 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2503 | "dev": true 2504 | }, 2505 | "node_modules/lmdb": { 2506 | "version": "2.5.2", 2507 | "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz", 2508 | "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==", 2509 | "dev": true, 2510 | "hasInstallScript": true, 2511 | "dependencies": { 2512 | "msgpackr": "^1.5.4", 2513 | "node-addon-api": "^4.3.0", 2514 | "node-gyp-build-optional-packages": "5.0.3", 2515 | "ordered-binary": "^1.2.4", 2516 | "weak-lru-cache": "^1.2.2" 2517 | }, 2518 | "optionalDependencies": { 2519 | "@lmdb/lmdb-darwin-arm64": "2.5.2", 2520 | "@lmdb/lmdb-darwin-x64": "2.5.2", 2521 | "@lmdb/lmdb-linux-arm": "2.5.2", 2522 | "@lmdb/lmdb-linux-arm64": "2.5.2", 2523 | "@lmdb/lmdb-linux-x64": "2.5.2", 2524 | "@lmdb/lmdb-win32-x64": "2.5.2" 2525 | } 2526 | }, 2527 | "node_modules/lmdb/node_modules/node-addon-api": { 2528 | "version": "4.3.0", 2529 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", 2530 | "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", 2531 | "dev": true 2532 | }, 2533 | "node_modules/mdn-data": { 2534 | "version": "2.0.30", 2535 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", 2536 | "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", 2537 | "dev": true, 2538 | "optional": true, 2539 | "peer": true 2540 | }, 2541 | "node_modules/micromatch": { 2542 | "version": "4.0.5", 2543 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2544 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2545 | "dev": true, 2546 | "dependencies": { 2547 | "braces": "^3.0.2", 2548 | "picomatch": "^2.3.1" 2549 | }, 2550 | "engines": { 2551 | "node": ">=8.6" 2552 | } 2553 | }, 2554 | "node_modules/msgpackr": { 2555 | "version": "1.8.5", 2556 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", 2557 | "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", 2558 | "dev": true, 2559 | "optionalDependencies": { 2560 | "msgpackr-extract": "^3.0.1" 2561 | } 2562 | }, 2563 | "node_modules/msgpackr-extract": { 2564 | "version": "3.0.2", 2565 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", 2566 | "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", 2567 | "dev": true, 2568 | "hasInstallScript": true, 2569 | "optional": true, 2570 | "dependencies": { 2571 | "node-gyp-build-optional-packages": "5.0.7" 2572 | }, 2573 | "bin": { 2574 | "download-msgpackr-prebuilds": "bin/download-prebuilds.js" 2575 | }, 2576 | "optionalDependencies": { 2577 | "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", 2578 | "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", 2579 | "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", 2580 | "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", 2581 | "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", 2582 | "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" 2583 | } 2584 | }, 2585 | "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { 2586 | "version": "5.0.7", 2587 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", 2588 | "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", 2589 | "dev": true, 2590 | "optional": true, 2591 | "bin": { 2592 | "node-gyp-build-optional-packages": "bin.js", 2593 | "node-gyp-build-optional-packages-optional": "optional.js", 2594 | "node-gyp-build-optional-packages-test": "build-test.js" 2595 | } 2596 | }, 2597 | "node_modules/node-addon-api": { 2598 | "version": "3.2.1", 2599 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", 2600 | "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", 2601 | "dev": true 2602 | }, 2603 | "node_modules/node-gyp-build": { 2604 | "version": "4.6.0", 2605 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", 2606 | "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", 2607 | "dev": true, 2608 | "bin": { 2609 | "node-gyp-build": "bin.js", 2610 | "node-gyp-build-optional": "optional.js", 2611 | "node-gyp-build-test": "build-test.js" 2612 | } 2613 | }, 2614 | "node_modules/node-gyp-build-optional-packages": { 2615 | "version": "5.0.3", 2616 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz", 2617 | "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==", 2618 | "dev": true, 2619 | "bin": { 2620 | "node-gyp-build-optional-packages": "bin.js", 2621 | "node-gyp-build-optional-packages-optional": "optional.js", 2622 | "node-gyp-build-optional-packages-test": "build-test.js" 2623 | } 2624 | }, 2625 | "node_modules/node-releases": { 2626 | "version": "2.0.10", 2627 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", 2628 | "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", 2629 | "dev": true 2630 | }, 2631 | "node_modules/nth-check": { 2632 | "version": "2.1.1", 2633 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 2634 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 2635 | "dev": true, 2636 | "dependencies": { 2637 | "boolbase": "^1.0.0" 2638 | }, 2639 | "funding": { 2640 | "url": "https://github.com/fb55/nth-check?sponsor=1" 2641 | } 2642 | }, 2643 | "node_modules/nullthrows": { 2644 | "version": "1.1.1", 2645 | "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", 2646 | "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", 2647 | "dev": true 2648 | }, 2649 | "node_modules/ordered-binary": { 2650 | "version": "1.4.0", 2651 | "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz", 2652 | "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==", 2653 | "dev": true 2654 | }, 2655 | "node_modules/parcel": { 2656 | "version": "2.8.3", 2657 | "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz", 2658 | "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==", 2659 | "dev": true, 2660 | "dependencies": { 2661 | "@parcel/config-default": "2.8.3", 2662 | "@parcel/core": "2.8.3", 2663 | "@parcel/diagnostic": "2.8.3", 2664 | "@parcel/events": "2.8.3", 2665 | "@parcel/fs": "2.8.3", 2666 | "@parcel/logger": "2.8.3", 2667 | "@parcel/package-manager": "2.8.3", 2668 | "@parcel/reporter-cli": "2.8.3", 2669 | "@parcel/reporter-dev-server": "2.8.3", 2670 | "@parcel/utils": "2.8.3", 2671 | "chalk": "^4.1.0", 2672 | "commander": "^7.0.0", 2673 | "get-port": "^4.2.0", 2674 | "v8-compile-cache": "^2.0.0" 2675 | }, 2676 | "bin": { 2677 | "parcel": "lib/bin.js" 2678 | }, 2679 | "engines": { 2680 | "node": ">= 12.0.0" 2681 | }, 2682 | "funding": { 2683 | "type": "opencollective", 2684 | "url": "https://opencollective.com/parcel" 2685 | } 2686 | }, 2687 | "node_modules/parent-module": { 2688 | "version": "1.0.1", 2689 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2690 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2691 | "dev": true, 2692 | "dependencies": { 2693 | "callsites": "^3.0.0" 2694 | }, 2695 | "engines": { 2696 | "node": ">=6" 2697 | } 2698 | }, 2699 | "node_modules/parse-json": { 2700 | "version": "5.2.0", 2701 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 2702 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 2703 | "dev": true, 2704 | "dependencies": { 2705 | "@babel/code-frame": "^7.0.0", 2706 | "error-ex": "^1.3.1", 2707 | "json-parse-even-better-errors": "^2.3.0", 2708 | "lines-and-columns": "^1.1.6" 2709 | }, 2710 | "engines": { 2711 | "node": ">=8" 2712 | }, 2713 | "funding": { 2714 | "url": "https://github.com/sponsors/sindresorhus" 2715 | } 2716 | }, 2717 | "node_modules/path-type": { 2718 | "version": "4.0.0", 2719 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2720 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2721 | "dev": true, 2722 | "engines": { 2723 | "node": ">=8" 2724 | } 2725 | }, 2726 | "node_modules/picocolors": { 2727 | "version": "1.0.0", 2728 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2729 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2730 | "dev": true 2731 | }, 2732 | "node_modules/picomatch": { 2733 | "version": "2.3.1", 2734 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2735 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2736 | "dev": true, 2737 | "engines": { 2738 | "node": ">=8.6" 2739 | }, 2740 | "funding": { 2741 | "url": "https://github.com/sponsors/jonschlinkert" 2742 | } 2743 | }, 2744 | "node_modules/postcss-value-parser": { 2745 | "version": "4.2.0", 2746 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2747 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2748 | "dev": true 2749 | }, 2750 | "node_modules/posthtml": { 2751 | "version": "0.16.6", 2752 | "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", 2753 | "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", 2754 | "dev": true, 2755 | "dependencies": { 2756 | "posthtml-parser": "^0.11.0", 2757 | "posthtml-render": "^3.0.0" 2758 | }, 2759 | "engines": { 2760 | "node": ">=12.0.0" 2761 | } 2762 | }, 2763 | "node_modules/posthtml-parser": { 2764 | "version": "0.10.2", 2765 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", 2766 | "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", 2767 | "dev": true, 2768 | "dependencies": { 2769 | "htmlparser2": "^7.1.1" 2770 | }, 2771 | "engines": { 2772 | "node": ">=12" 2773 | } 2774 | }, 2775 | "node_modules/posthtml-render": { 2776 | "version": "3.0.0", 2777 | "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", 2778 | "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", 2779 | "dev": true, 2780 | "dependencies": { 2781 | "is-json": "^2.0.1" 2782 | }, 2783 | "engines": { 2784 | "node": ">=12" 2785 | } 2786 | }, 2787 | "node_modules/posthtml/node_modules/posthtml-parser": { 2788 | "version": "0.11.0", 2789 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", 2790 | "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", 2791 | "dev": true, 2792 | "dependencies": { 2793 | "htmlparser2": "^7.1.1" 2794 | }, 2795 | "engines": { 2796 | "node": ">=12" 2797 | } 2798 | }, 2799 | "node_modules/prettier": { 2800 | "version": "2.8.7", 2801 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", 2802 | "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", 2803 | "dev": true, 2804 | "bin": { 2805 | "prettier": "bin-prettier.js" 2806 | }, 2807 | "engines": { 2808 | "node": ">=10.13.0" 2809 | }, 2810 | "funding": { 2811 | "url": "https://github.com/prettier/prettier?sponsor=1" 2812 | } 2813 | }, 2814 | "node_modules/react-error-overlay": { 2815 | "version": "6.0.9", 2816 | "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", 2817 | "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", 2818 | "dev": true 2819 | }, 2820 | "node_modules/react-refresh": { 2821 | "version": "0.9.0", 2822 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", 2823 | "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", 2824 | "dev": true, 2825 | "engines": { 2826 | "node": ">=0.10.0" 2827 | } 2828 | }, 2829 | "node_modules/regenerator-runtime": { 2830 | "version": "0.13.11", 2831 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 2832 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", 2833 | "dev": true 2834 | }, 2835 | "node_modules/resolve-from": { 2836 | "version": "4.0.0", 2837 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2838 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2839 | "dev": true, 2840 | "engines": { 2841 | "node": ">=4" 2842 | } 2843 | }, 2844 | "node_modules/safe-buffer": { 2845 | "version": "5.2.1", 2846 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2847 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2848 | "dev": true, 2849 | "funding": [ 2850 | { 2851 | "type": "github", 2852 | "url": "https://github.com/sponsors/feross" 2853 | }, 2854 | { 2855 | "type": "patreon", 2856 | "url": "https://www.patreon.com/feross" 2857 | }, 2858 | { 2859 | "type": "consulting", 2860 | "url": "https://feross.org/support" 2861 | } 2862 | ] 2863 | }, 2864 | "node_modules/semver": { 2865 | "version": "5.7.1", 2866 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2867 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2868 | "dev": true, 2869 | "bin": { 2870 | "semver": "bin/semver" 2871 | } 2872 | }, 2873 | "node_modules/source-map": { 2874 | "version": "0.6.1", 2875 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2876 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2877 | "dev": true, 2878 | "engines": { 2879 | "node": ">=0.10.0" 2880 | } 2881 | }, 2882 | "node_modules/source-map-js": { 2883 | "version": "1.0.2", 2884 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2885 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2886 | "dev": true, 2887 | "optional": true, 2888 | "peer": true, 2889 | "engines": { 2890 | "node": ">=0.10.0" 2891 | } 2892 | }, 2893 | "node_modules/source-map-support": { 2894 | "version": "0.5.21", 2895 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2896 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2897 | "dev": true, 2898 | "dependencies": { 2899 | "buffer-from": "^1.0.0", 2900 | "source-map": "^0.6.0" 2901 | } 2902 | }, 2903 | "node_modules/srcset": { 2904 | "version": "4.0.0", 2905 | "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", 2906 | "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", 2907 | "dev": true, 2908 | "engines": { 2909 | "node": ">=12" 2910 | }, 2911 | "funding": { 2912 | "url": "https://github.com/sponsors/sindresorhus" 2913 | } 2914 | }, 2915 | "node_modules/stable": { 2916 | "version": "0.1.8", 2917 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 2918 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", 2919 | "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", 2920 | "dev": true 2921 | }, 2922 | "node_modules/supports-color": { 2923 | "version": "7.2.0", 2924 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2925 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2926 | "dev": true, 2927 | "dependencies": { 2928 | "has-flag": "^4.0.0" 2929 | }, 2930 | "engines": { 2931 | "node": ">=8" 2932 | } 2933 | }, 2934 | "node_modules/svgo": { 2935 | "version": "3.0.2", 2936 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", 2937 | "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", 2938 | "dev": true, 2939 | "optional": true, 2940 | "peer": true, 2941 | "dependencies": { 2942 | "@trysound/sax": "0.2.0", 2943 | "commander": "^7.2.0", 2944 | "css-select": "^5.1.0", 2945 | "css-tree": "^2.2.1", 2946 | "csso": "^5.0.5", 2947 | "picocolors": "^1.0.0" 2948 | }, 2949 | "bin": { 2950 | "svgo": "bin/svgo" 2951 | }, 2952 | "engines": { 2953 | "node": ">=14.0.0" 2954 | }, 2955 | "funding": { 2956 | "type": "opencollective", 2957 | "url": "https://opencollective.com/svgo" 2958 | } 2959 | }, 2960 | "node_modules/term-size": { 2961 | "version": "2.2.1", 2962 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", 2963 | "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", 2964 | "dev": true, 2965 | "engines": { 2966 | "node": ">=8" 2967 | }, 2968 | "funding": { 2969 | "url": "https://github.com/sponsors/sindresorhus" 2970 | } 2971 | }, 2972 | "node_modules/terser": { 2973 | "version": "5.17.1", 2974 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", 2975 | "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", 2976 | "dev": true, 2977 | "dependencies": { 2978 | "@jridgewell/source-map": "^0.3.2", 2979 | "acorn": "^8.5.0", 2980 | "commander": "^2.20.0", 2981 | "source-map-support": "~0.5.20" 2982 | }, 2983 | "bin": { 2984 | "terser": "bin/terser" 2985 | }, 2986 | "engines": { 2987 | "node": ">=10" 2988 | } 2989 | }, 2990 | "node_modules/terser/node_modules/commander": { 2991 | "version": "2.20.3", 2992 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 2993 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 2994 | "dev": true 2995 | }, 2996 | "node_modules/timsort": { 2997 | "version": "0.3.0", 2998 | "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", 2999 | "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", 3000 | "dev": true 3001 | }, 3002 | "node_modules/to-regex-range": { 3003 | "version": "5.0.1", 3004 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3005 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3006 | "dev": true, 3007 | "dependencies": { 3008 | "is-number": "^7.0.0" 3009 | }, 3010 | "engines": { 3011 | "node": ">=8.0" 3012 | } 3013 | }, 3014 | "node_modules/tslib": { 3015 | "version": "2.5.0", 3016 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 3017 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", 3018 | "dev": true 3019 | }, 3020 | "node_modules/type-fest": { 3021 | "version": "0.20.2", 3022 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3023 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3024 | "dev": true, 3025 | "engines": { 3026 | "node": ">=10" 3027 | }, 3028 | "funding": { 3029 | "url": "https://github.com/sponsors/sindresorhus" 3030 | } 3031 | }, 3032 | "node_modules/typescript": { 3033 | "version": "5.0.4", 3034 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 3035 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 3036 | "bin": { 3037 | "tsc": "bin/tsc", 3038 | "tsserver": "bin/tsserver" 3039 | }, 3040 | "engines": { 3041 | "node": ">=12.20" 3042 | } 3043 | }, 3044 | "node_modules/update-browserslist-db": { 3045 | "version": "1.0.11", 3046 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 3047 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 3048 | "dev": true, 3049 | "funding": [ 3050 | { 3051 | "type": "opencollective", 3052 | "url": "https://opencollective.com/browserslist" 3053 | }, 3054 | { 3055 | "type": "tidelift", 3056 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3057 | }, 3058 | { 3059 | "type": "github", 3060 | "url": "https://github.com/sponsors/ai" 3061 | } 3062 | ], 3063 | "dependencies": { 3064 | "escalade": "^3.1.1", 3065 | "picocolors": "^1.0.0" 3066 | }, 3067 | "bin": { 3068 | "update-browserslist-db": "cli.js" 3069 | }, 3070 | "peerDependencies": { 3071 | "browserslist": ">= 4.21.0" 3072 | } 3073 | }, 3074 | "node_modules/utility-types": { 3075 | "version": "3.10.0", 3076 | "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", 3077 | "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", 3078 | "dev": true, 3079 | "engines": { 3080 | "node": ">= 4" 3081 | } 3082 | }, 3083 | "node_modules/v8-compile-cache": { 3084 | "version": "2.3.0", 3085 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 3086 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 3087 | "dev": true 3088 | }, 3089 | "node_modules/weak-lru-cache": { 3090 | "version": "1.2.2", 3091 | "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", 3092 | "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", 3093 | "dev": true 3094 | }, 3095 | "node_modules/xxhash-wasm": { 3096 | "version": "0.4.2", 3097 | "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", 3098 | "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", 3099 | "dev": true 3100 | } 3101 | } 3102 | } 3103 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-tutorials", 3 | "browserslist": "> 0.5%, last 2 versions, not dead", 4 | "version": "1.0.0", 5 | "description": "Typescript tutorial materials for beginners", 6 | "scripts": { 7 | "practice": "parcel src/practice/practice.html", 8 | "lessons": "parcel src/lessons/lessons.html", 9 | "build": "parcel build dist" 10 | }, 11 | "author": "Codelex", 12 | "license": "ISC", 13 | "dependencies": { 14 | "typescript": "^5.0.4" 15 | }, 16 | "devDependencies": { 17 | "@parcel/transformer-image": "^2.8.3", 18 | "@parcel/transformer-typescript-tsc": "^2.8.3", 19 | "parcel": "^2.8.3", 20 | "prettier": "^2.8.7" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/lessons/lessons.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CODELEX 7 | 8 | 27 | 28 | 29 |
30 |

CODELEX

31 |
32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/lessons/lessons.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codelex-io/typescript-course/505a1d1332e68cb86f241cbe59fc0c88a32b0117/src/lessons/lessons.ts -------------------------------------------------------------------------------- /src/practice/answers.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | /* 3 | In this file you will find coding challenges. Add your code in designated areas. 4 | You can find answers in answers.ts file. 5 | Add types to all variables you create. 6 | */ 7 | 8 | /* 9 | Challenge 1 ---------------------------------------------------------------------------------- 10 | */ 11 | 12 | /* 13 | Declare a constant variable myName and set it's value to your name. Log myName in console. 14 | */ 15 | 16 | const myName: string = "Baiba"; 17 | console.log(myName); 18 | 19 | /* 20 | Declare a variable yourAge and set it's value to 100. 21 | Change the value of yourAge to your age on the next line. Log yourAge in console. 22 | */ 23 | 24 | let yourAge: number = 100; 25 | yourAge = 27; 26 | console.log(yourAge); 27 | 28 | /* 29 | Declare a constant variable favouriteColor and set it's value to your favourite color. 30 | Log favouriteColor in console. 31 | Try to change the value or favouriteColor on next line. 32 | Understand why it isn't working and delete it. 33 | */ 34 | 35 | const favouriteColor: string = "Green"; 36 | console.log(favouriteColor); 37 | // favouriteColor = "Red"; 38 | 39 | /* 40 | Declare a variable favouriteFood and don't set it's value. Type string. 41 | On the next line change favouriteFood value to your favourite food. 42 | Log favouriteFood in console. 43 | */ 44 | 45 | let favouriteFood: string; 46 | favouriteFood = "Pasta"; 47 | console.log(favouriteFood); 48 | 49 | /* 50 | Challenge 2 ---------------------------------------------------------------------------------- 51 | */ 52 | 53 | /* 54 | Declare a constant variable fiftyNine and set it's value to "59". 55 | Declare a constant variable fiftyNineAsNumber and set it's value to fiftyNine convert converted to number. 56 | */ 57 | 58 | const fiftyNine: string = "59"; 59 | const fiftyNineAsNumber: number = Number(fiftyNine); 60 | 61 | /* 62 | Declare a constant variable food and set it's value to a random food item 63 | Declare a constant variable randomItem and set it's value to a random item 64 | */ 65 | 66 | const food: string = "Pasta"; 67 | const randomItem: string = "Phone"; 68 | 69 | /* 70 | Declare a constant variable randomSentence and 71 | set it's value to "My favorite food is {food} and I bought a new {randomItem}". 72 | Use + symbol to construct the sentence 73 | replacing {food} and {randomItem} with your previously declared variables. 74 | Log randomSentence in console. 75 | */ 76 | 77 | const randomSentence: string = 78 | "My favorite food is " + food + " and I bought a new " + randomItem; 79 | console.log(randomSentence); 80 | 81 | /* 82 | Declare a constant variable randomSentenceWithLiterals 83 | and set it's value to "My favorite food is {food} and I bought a new {randomItem}" 84 | Use template literals to construct the sentence 85 | replacing {food} and {randomItem} with your previously declared variables. 86 | Log randomSentenceWithLiterals in console. 87 | */ 88 | 89 | const randomSentenceWithLiterals: string = `My favorite food is ${food} and I bought a new ${randomItem}`; 90 | console.log(randomSentenceWithLiterals); 91 | 92 | /* 93 | Declare a constant variable importantMessage and set it's value to "WATER THE FLOWERS!". 94 | Declare a constant variable unimportantMessage and set it's value to importantMessage formatted 95 | to be all lowercase letters and with no exclamation mark. 96 | Log unimportantMessage in console. 97 | */ 98 | 99 | const importantMessage: string = "WATER THE FLOWERS!"; 100 | 101 | const unimportantMessage: string = importantMessage 102 | .toLowerCase() 103 | .replace("!", ""); 104 | 105 | console.log(unimportantMessage); 106 | 107 | /* 108 | Declare a constant variable story 109 | and set it's value to "The quick brown fox jumps over the lazy dog.". 110 | Declare a constant variable shortStory and set it's value to story formatted 111 | to be only "lazy dog". 112 | Log shortSentence in console. 113 | */ 114 | 115 | const story: string = "The quick brown fox jumps over the lazy dog."; 116 | const shortStory: string = story.slice(35, 43); 117 | console.log(shortStory); 118 | 119 | /* 120 | Challenge 3 ---------------------------------------------------------------------------------- 121 | */ 122 | 123 | /* 124 | Declare a constant variable bigNumber and set it's value to 307.98765. 125 | Declare a constant variable twelve and set it's value to 12. 126 | Declare a variable thirdChallengeResult and don't set it's value. Type number. 127 | Change thirdChallengeResult value on next line to equal bigNumber minus twelve. 128 | Log thirdChallengeResult in the console. 129 | Change thirdChallengeResult value on next line to equal bigNumber divided by twelve. 130 | Log thirdChallengeResult in the console. 131 | Change thirdChallengeResult value on next line to equal bigNumber rounded to a whole number (rounded down). 132 | Log thirdChallengeResult in the console. 133 | Change thirdChallengeResult value on next line to equal bigNumber rounded to a whole number (rounded up). 134 | Log thirdChallengeResult in the console. 135 | Change thirdChallengeResult value on next line to equal bigNumber rounded to 2 numbers after the decimal point. 136 | Log thirdChallengeResult in the console. 137 | Declare a constant variable thirdChallengeResultAsString of 138 | type string and set it's value to result formatted as a string; 139 | */ 140 | 141 | const bigNumber: number = 307.987655; 142 | const twelve: number = 12; 143 | 144 | let thirdChallengeResult: number; 145 | 146 | thirdChallengeResult = bigNumber - twelve; 147 | console.log(thirdChallengeResult); 148 | 149 | thirdChallengeResult = bigNumber / twelve; 150 | console.log(thirdChallengeResult); 151 | 152 | thirdChallengeResult = Math.floor(bigNumber); 153 | console.log(thirdChallengeResult); 154 | 155 | thirdChallengeResult = Math.round(bigNumber); 156 | console.log(thirdChallengeResult); 157 | 158 | thirdChallengeResult = Number(bigNumber.toFixed(2)); 159 | console.log(thirdChallengeResult); 160 | 161 | const thirdChallengeResultAsString: string = String(bigNumber); 162 | 163 | /* 164 | Challenge 4 ---------------------------------------------------------------------------------- 165 | */ 166 | 167 | /* 168 | Declare a constant variable isHuman and set it's value to true. 169 | Declare a constant variable isWizard and set it's value to isHuman formatted to be the opposite value. 170 | Log isWizard in console. 171 | */ 172 | 173 | const isHuman: boolean = true; 174 | const isWizard: boolean = !isHuman; 175 | 176 | console.log(isWizard); 177 | 178 | /* 179 | Declare a constant variable five and set it's value to 5. 180 | Declare a constant variable eleven and set it's value to 11. 181 | Declare a constant variable isElevennPlusFiveLargerThanTen and set it's value to 182 | a comparison of eleven plus five is larger than 10. 183 | Log isElevenPlusFiveLargerThanTen in console. 184 | */ 185 | 186 | const five: number = 5; 187 | const eleven: number = 11; 188 | 189 | const isElevenPlusFiveLargerThanTen: boolean = eleven + five > 10; 190 | console.log(isElevenPlusFiveLargerThanTen); 191 | 192 | /* 193 | Declare a constant variable boringStory and set it's value to "This is a boring story". 194 | Log boringStory in console formatted to a boolean value. 195 | Log boringStory in console formatted to the opposite boolean value. 196 | Log boringStory in console formatted to a boolean value that indicates whether boringStory includes "cat". 197 | */ 198 | 199 | const boringStory: string = "This is a boring story!"; 200 | 201 | console.log(!!boringStory); 202 | console.log(!boringStory); 203 | console.log(boringStory.includes("cat")); 204 | 205 | /* 206 | Challenge 5 ---------------------------------------------------------------------------------- 207 | */ 208 | 209 | /* 210 | Declare a constant variable randomFact and set it's value to "Copper door knobs are self-disinfecting.". 211 | Log sentence length in console. 212 | Log in console comparioson of whether sencence length is larger than 5 or larger than 20. 213 | Log in console comparison of whether sencence length is exactly 40 214 | and is equal to "Copper door knobs are self-disinfecting.". 215 | */ 216 | 217 | const randomFact: string = "Copper door knobs are self-disinfecting."; 218 | 219 | console.log(randomFact.length); 220 | console.log(randomFact.length > 5 || randomFact.length > 20); 221 | console.log( 222 | randomFact.length === 40 && "Copper door knobs are self-disinfecting." 223 | ); 224 | 225 | /* 226 | Challenge 6 ---------------------------------------------------------------------------------- 227 | */ 228 | 229 | /* 230 | Declare a constant variable hasDriversLicense and set it's value to true. 231 | Declare a constant variable hasGoodVision and set it's value to true. 232 | Declare a constant variable isTired and set it's value to false. 233 | Create an if statement and console log "Sarah is able to drive!", if Sarah has Drivers License, 234 | has good vision and is not tired. 235 | Else console log "Someone else should drive..." 236 | */ 237 | 238 | const hasDriversLicense: boolean = true; 239 | const hasGoodVision: boolean = true; 240 | const isTired: boolean = false; 241 | 242 | if (hasDriversLicense && hasGoodVision && !isTired) { 243 | console.log("Sarah is able to drive!"); 244 | } else { 245 | console.log("Someone else should drive..."); 246 | } 247 | 248 | /* 249 | Challenge 7 ---------------------------------------------------------------------------------- 250 | */ 251 | 252 | /* 253 | Change the given if statement to conditional (ternary) operator 254 | */ 255 | 256 | const isAwesome: boolean = true; 257 | if (isAwesome) { 258 | console.log("Awesome!"); 259 | } else { 260 | console.log("Is not awesome!"); 261 | } 262 | 263 | isAwesome ? console.log("Awesome!") : console.log("Is not awesome!"); 264 | 265 | /* 266 | Challenge 8 ---------------------------------------------------------------------------------- 267 | */ 268 | 269 | /* 270 | Declare a variable myAlphabet and set its value to an array of letters A-G. 271 | Console log the length of myAlphabet. 272 | Console log myAlphabet formatted to be a string. 273 | Console log myAlphabet formatted to be in the opposite order. 274 | Console log the first element of myAlphabet. 275 | Console log the last element of myAlphabet. 276 | On the next line change the value of myAlphabet to have another value "Z" (use spread operator). 277 | Console log myAlphabet. 278 | On the next line change the value of myAlphabet to have another value "X" (use push()). 279 | Console log myAlphabet. 280 | */ 281 | 282 | let myAlphabet: string[] = ["A", "B", "C", "D", "E", "F", "G"]; 283 | 284 | console.log(myAlphabet.length); 285 | console.log(myAlphabet.join("")); 286 | console.log(myAlphabet.reverse()); 287 | console.log(myAlphabet[0]); 288 | console.log(myAlphabet[myAlphabet.length - 1]); 289 | 290 | myAlphabet = [...myAlphabet, "Z"]; 291 | console.log(myAlphabet); 292 | 293 | myAlphabet.push("X"); 294 | console.log(myAlphabet); 295 | -------------------------------------------------------------------------------- /src/practice/practice.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CODELEX 7 | 8 | 27 | 28 | 29 |
30 |

CODELEX

31 |
32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/practice/practice.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | /* 3 | In this file you will find coding challenges. Add your code in designated areas. 4 | You can find answers in answers.ts file. 5 | Add types to all variables you create. 6 | Command to run the file: npm run practice 7 | */ 8 | 9 | /* 10 | Challenge 1 ---------------------------------------------------------------------------------- 11 | */ 12 | 13 | /* 14 | Declare a constant variable myName and set it's value to your name. Log myName in console. 15 | */ 16 | 17 | /* Add your code here */ 18 | 19 | /* 20 | Declare a variable yourAge and set it's value to 100. 21 | Change the value of yourAge to your age on the next line. Log yourAge in console. 22 | */ 23 | 24 | /* Add your code here */ 25 | 26 | /* 27 | Declare a constant variable favouriteColor and set it's value to your favourite color. 28 | Log favouriteColor in console. 29 | Try to change the value or favouriteColor on next line. 30 | Understand why it isn't working and delete it. 31 | */ 32 | 33 | /* Add your code here */ 34 | 35 | /* 36 | Declare a variable favouriteFood and don't set it's value. Type string. 37 | On the next line change favouriteFood value to your favourite food. 38 | Log favouriteFood in console. 39 | */ 40 | 41 | /* Add your code here */ 42 | 43 | /* 44 | Challenge 2 ---------------------------------------------------------------------------------- 45 | */ 46 | 47 | /* 48 | Declare a constant variable fiftyNine and set it's value to "59". 49 | Declare a constant variable fiftyNineAsNumber and set it's value to fiftyNine convert converted to number. 50 | */ 51 | 52 | /* Add your code here */ 53 | 54 | /* 55 | Declare a constant variable food and set it's value to a random food item 56 | Declare a constant variable randomItem and set it's value to a random item 57 | */ 58 | 59 | /* Add your code here */ 60 | 61 | /* 62 | Declare a constant variable randomSentence and 63 | set it's value to "My favorite food is {food} and I bought a new {randomItem}". 64 | Use + symbol to construct the sentence 65 | replacing {food} and {randomItem} with your previously declared variables. 66 | Log randomSentence in console. 67 | */ 68 | 69 | /* Add your code here */ 70 | 71 | /* 72 | Declare a constant variable randomSentenceWithLiterals 73 | and set it's value to "My favorite food is {food} and I bought a new {randomItem}" 74 | Use template literals to construct the sentence 75 | replacing {food} and {randomItem} with your previously declared variables. 76 | Log randomSentenceWithLiterals in console. 77 | */ 78 | 79 | /* Add your code here */ 80 | 81 | /* 82 | Declare a constant variable importantMessage and set it's value to "WATER THE FLOWERS!". 83 | Declare a constant variable unimportantMessage and set it's value to importantMessage formatted 84 | to be all lowercase letters and with no exclamation mark. 85 | Log unimportantMessage in console. 86 | */ 87 | 88 | /* Add your code here */ 89 | 90 | /* 91 | Declare a constant variable story 92 | and set it's value to "The quick brown fox jumps over the lazy dog.". 93 | Declare a constant variable shortStory and set it's value to story formatted 94 | to be only "lazy dog". 95 | Log shortSentence in console. 96 | */ 97 | 98 | /* Add your code here */ 99 | 100 | /* 101 | Challenge 3 ---------------------------------------------------------------------------------- 102 | */ 103 | 104 | /* 105 | Declare a constant variable bigNumber and set it's value to 307.98765. 106 | Declare a constant variable twelve and set it's value to 12. 107 | Declare a variable thirdChallengeResult and don't set it's value. Type number. 108 | Change thirdChallengeResult value on next line to equal bigNumber minus twelve. 109 | Log thirdChallengeResult in the console. 110 | Change thirdChallengeResult value on next line to equal bigNumber divided by twelve. 111 | Log thirdChallengeResult in the console. 112 | Change thirdChallengeResult value on next line to equal bigNumber rounded to a whole number (rounded down). 113 | Log thirdChallengeResult in the console. 114 | Change thirdChallengeResult value on next line to equal bigNumber rounded to a whole number (rounded up). 115 | Log thirdChallengeResult in the console. 116 | Change thirdChallengeResult value on next line to equal bigNumber rounded to 2 numbers after the decimal point. 117 | Log thirdChallengeResult in the console. 118 | Declare a constant variable thirdChallengeResultAsString of 119 | type string and set it's value to result formatted as a string; 120 | */ 121 | 122 | /* Add your code here */ 123 | 124 | /* 125 | Challenge 4 ---------------------------------------------------------------------------------- 126 | */ 127 | 128 | /* 129 | Declare a constant variable isHuman and set it's value to true. 130 | Declare a constant variable isWizard and set it's value to isHuman formatted to be the opposite value. 131 | Log isWizard in console. 132 | */ 133 | 134 | /* Add your code here */ 135 | 136 | /* 137 | Declare a constant variable five and set it's value to 5. 138 | Declare a constant variable eleven and set it's value to 11. 139 | Declare a constant variable isElevennPlusFiveLargerThanTen and set it's value to 140 | a comparison of eleven plus five is larger than 10. 141 | Log isElevenPlusFiveLargerThanTen in console. 142 | */ 143 | 144 | /* Add your code here */ 145 | 146 | /* 147 | Declare a constant variable boringStory and set it's value to "This is a boring story". 148 | Log boringStory in console formatted to a boolean value. 149 | Log boringStory in console formatted to the opposite boolean value. 150 | Log boringStory in console formatted to a boolean value that indicates whether boringStory includes "cat". 151 | */ 152 | 153 | /* Add your code here */ 154 | 155 | /* 156 | Challenge 5 ---------------------------------------------------------------------------------- 157 | */ 158 | 159 | /* 160 | Declare a constant variable randomFact and set it's value to "Copper door knobs are self-disinfecting.". 161 | Log sentence length in console. 162 | Log in console comparioson of whether sencence length is larger than 5 or larger than 20. 163 | Log in console comparison of whether sencence length is exactly 40 164 | and is equal to "Copper door knobs are self-disinfecting.". 165 | */ 166 | 167 | /* Add your code here */ 168 | 169 | /* 170 | Challenge 6 ---------------------------------------------------------------------------------- 171 | */ 172 | 173 | /* 174 | Declare a constant variable hasDriversLicense and set it's value to true. 175 | Declare a constant variable hasGoodVision and set it's value to true. 176 | Declare a constant variable isTired and set it's value to false. 177 | Create an if statement and console log "Sarah is able to drive!", if Sarah has Drivers License, 178 | has good vision and is not tired. 179 | Else console log "Someone else should drive..." 180 | */ 181 | 182 | /* Add your code here */ 183 | 184 | /* 185 | Challenge 7 ---------------------------------------------------------------------------------- 186 | */ 187 | 188 | /* 189 | Change the given if statement to conditional (ternary) operator 190 | */ 191 | 192 | const isAwesome: boolean = true; 193 | if (isAwesome) { 194 | console.log("Awesome!"); 195 | } else { 196 | console.log("Is not awesome!"); 197 | } 198 | 199 | /* Add your code here */ 200 | 201 | /* 202 | Challenge 8 ---------------------------------------------------------------------------------- 203 | */ 204 | 205 | /* 206 | Declare a variable myAlphabet and set its value to an array of letters A-G. 207 | Console log the length of myAlphabet. 208 | Console log myAlphabet formatted to be a string. 209 | Console log myAlphabet formatted to be in the opposite order. 210 | Console log the first element of myAlphabet. 211 | Console log the last element of myAlphabet. 212 | On the next line change the value of myAlphabet to have another value "Z" (use spread operator). 213 | Console log myAlphabet. 214 | On the next line change the value of myAlphabet to have another value "X" (use push()). 215 | Console log myAlphabet. 216 | */ 217 | 218 | /* Add your code here */ 219 | -------------------------------------------------------------------------------- /src/result/result.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | // console.log() ------------------------------------------------------- 3 | 4 | console.log("Sveika pasaule!"); 5 | console.log(55); 6 | console.log(55 + 10 - 18 + 6); 7 | console.log("Man patīk", "skriet"); 8 | console.log("Šis ir", 2021, "gads"); 9 | 10 | const currentYear: number = 2021; 11 | console.log(currentYear); 12 | console.log("Šis ir", currentYear, "gads"); 13 | 14 | const currentYearText: string = "Šis ir"; 15 | console.log(currentYearText, currentYear); 16 | 17 | // const -------------------------------------------------------------- 18 | 19 | // console.log(nextYear); 20 | const nextYear: number = 2022; 21 | const celebration: string = "Jaunais gads"; 22 | const isNewYear: boolean = true; 23 | 24 | console.log(nextYear); 25 | 26 | // celebration = "Jāņi"; 27 | 28 | // const isNewYear: boolean = false; 29 | 30 | // let --------------------------------------------------------------- 31 | 32 | let description: string | number = "Skaista vāze!"; 33 | 34 | description = "Ļoti skaista vāze"; 35 | console.log(description); 36 | 37 | description = "Kaķis"; 38 | console.log(description); 39 | 40 | description = 5; 41 | console.log(description); 42 | 43 | // let description; 44 | 45 | let vegetable: string; 46 | // console.log(vegetable); 47 | 48 | vegetable = "Gurķis"; 49 | console.log(vegetable); 50 | 51 | // var ---------------------------------------------------------------- 52 | 53 | var greeter: string = "hello"; 54 | var greeter: string = "hello hello"; 55 | 56 | greeter = "hey hi"; 57 | 58 | console.log(greeter); 59 | 60 | if (4 < 5) { 61 | var greeter: string = "say Hello instead"; 62 | } 63 | 64 | console.log(greeter); 65 | 66 | // String concat ------------------------------------------------------ 67 | console.log("Harijs Poters(27) ir burvis"); 68 | 69 | const poterName: string = "Harijs Poters"; 70 | const poterAge: number = 27; 71 | const poterOccupation: string = "burvis"; 72 | 73 | const introFirst: string = 74 | poterName + "(" + poterAge + ")" + " ir " + poterOccupation; 75 | console.log(introFirst); 76 | 77 | const introSecond: string = `${poterName}(${poterAge}) ir ${poterOccupation}`; 78 | console.log(introSecond); 79 | 80 | const introThird: string = poterName.concat( 81 | "(", 82 | "" + poterAge, 83 | ") ir ", 84 | poterOccupation 85 | ); 86 | console.log(introThird); 87 | 88 | // String methods) -------------------------------------------------------------- 89 | 90 | const id: string = "12345"; 91 | 92 | const idAsNumberFirst: number = Number(id); 93 | console.log(idAsNumberFirst); 94 | // console.log(typeof idAsNumberFirst); 95 | 96 | const idAsNumberSecond: number = parseInt(id, 10); 97 | console.log(idAsNumberSecond); 98 | // console.log(typeof idAsNumberSecond); 99 | 100 | const idAsNumberThird: number = +id; 101 | console.log(idAsNumberThird); 102 | 103 | const lowerCaseWord: string = "panna"; 104 | const upperCaseWord: string = lowerCaseWord.toUpperCase(); 105 | console.log(upperCaseWord); 106 | 107 | const firstChar: string = upperCaseWord.charAt(0); 108 | console.log(firstChar); 109 | 110 | console.log(lowerCaseWord.length); 111 | 112 | const newLowerCaseWord: string = lowerCaseWord.replace("panna", "v"); 113 | console.log(newLowerCaseWord); 114 | 115 | const longSentence: string = "Sveiki mani sauc Harijs Poters"; 116 | const shortSentence: string = longSentence.slice(17, 30); 117 | console.log(shortSentence); 118 | 119 | const whiteSpaceWord: string = " Hello "; 120 | console.log(whiteSpaceWord); 121 | 122 | const noWhiteSpaceWord: string = whiteSpaceWord.trim(); 123 | console.log(noWhiteSpaceWord); 124 | 125 | // Number ------------------------------------------------------------------------- 126 | const price: number = 3.96873; 127 | const twenty: number = 20; 128 | 129 | console.log("" + price); 130 | console.log(String(price)); 131 | console.log(`${5}`); 132 | console.log(twenty.toString()); 133 | 134 | let result: number; 135 | 136 | result = price + twenty; 137 | console.log(result); 138 | 139 | result = price * twenty; 140 | console.log(result); 141 | 142 | result = Math.floor(price); 143 | console.log(result); 144 | 145 | result = Math.round(price); 146 | console.log(result); 147 | 148 | result = Number(price.toFixed(2)); 149 | console.log(result); 150 | 151 | let mindBlown: number = 1; 152 | 153 | mindBlown = mindBlown + 1; // 2 154 | console.log(mindBlown); 155 | 156 | mindBlown++; // 3 157 | console.log(mindBlown); 158 | 159 | mindBlown = mindBlown - 1; // 2 160 | console.log(mindBlown); 161 | 162 | mindBlown--; // 1 163 | console.log(mindBlown); 164 | 165 | mindBlown = mindBlown + 7; // 8 166 | console.log(mindBlown); 167 | 168 | mindBlown += 7; // 15 169 | console.log(mindBlown); 170 | 171 | mindBlown -= 7; // 8 172 | console.log(mindBlown); 173 | 174 | mindBlown = mindBlown * 10; //80 175 | console.log(mindBlown); 176 | 177 | mindBlown *= 10; // 800 178 | console.log(mindBlown); 179 | 180 | // Boolean -------------------------------------------------------------------------- 181 | const truthyValue: boolean = true; 182 | const falsyValue: boolean = false; 183 | 184 | console.log(Boolean(0)); // false 185 | console.log(Boolean(456)); // true 186 | console.log(Boolean("")); // false 187 | console.log(Boolean("Hello")); // true 188 | console.log(Boolean(undefined)); // false 189 | console.log(Boolean(null)); //false 190 | console.log(Boolean(NaN)); // false 191 | 192 | const dog: string = "Duksis"; 193 | console.log(!!dog); 194 | console.log(!!0); 195 | console.log(!!55); 196 | 197 | const comparison: boolean = 7 > 5; 198 | console.log(comparison); 199 | 200 | console.log(10 < 5); 201 | 202 | console.log(100 <= 20); 203 | 204 | console.log(!false); 205 | 206 | const isCat: boolean = false; 207 | const isDog: boolean = !isCat; 208 | console.log(isDog); 209 | 210 | // == and === -------------------------------------------------------- 211 | 212 | let five: any = "5"; 213 | 214 | console.log(5 == 5); 215 | console.log(five == 5); // true 216 | 217 | console.log(five + 100); 218 | 219 | console.log(5 === 5); 220 | console.log(five === 5); 221 | 222 | const goodDay: string = "Laba diena"; 223 | console.log(goodDay.length === 11); 224 | console.log(goodDay.length); 225 | 226 | // Logical operators ------------------------------------------------------------------ 227 | 228 | const trueOrTrueBoolean: boolean = Boolean("Friend" || "Enemy"); 229 | console.log(trueOrTrueBoolean); 230 | 231 | const trueOrTrueExample: string = "Friend" || "Enemy"; 232 | console.log(trueOrTrueExample); 233 | 234 | const trueOrFalseBoolean: boolean = !!("Friend" || undefined); 235 | console.log(trueOrFalseBoolean); 236 | 237 | const trueOrFalseExample: string = "Friend" || undefined; 238 | console.log(trueOrFalseExample); 239 | 240 | const falseOrTrueBoolean: boolean = !!(undefined || "Friend"); 241 | console.log(falseOrTrueBoolean); 242 | 243 | const falseOrTrueExample: string = undefined || "Friend"; 244 | console.log(falseOrTrueExample); 245 | 246 | const falseOrFalseBoolean: boolean = !!(0 || undefined); 247 | console.log(falseOrFalseBoolean); 248 | 249 | const falseOrFalseExample: number | undefined = 0 || undefined; 250 | console.log(falseOrFalseExample); 251 | 252 | const trueAndTrueBoolean: boolean = !!("Friend" && "Enemy"); 253 | console.log(trueAndTrueBoolean); 254 | 255 | const trueAndTrueExample: string = "Friend" && "Enemy"; 256 | console.log(trueAndTrueExample); 257 | 258 | // If, else if, else ----------------------------------------------------------------------------- 259 | const truth: boolean = true; 260 | 261 | if (truth) { 262 | console.log("Ja ir true, tad notiek šis"); 263 | } 264 | 265 | if (!truth) { 266 | console.log("Ja ir false, tad notiek šis"); 267 | } 268 | 269 | let time: number = 10; 270 | 271 | if (time > 3 || time < 5) { 272 | console.log("time ir lielāks par 3 vai mazāks par 5"); 273 | } else { 274 | console.log("time nav lielāks par 3 un nav mazāks par 5"); 275 | } 276 | 277 | if (time) { 278 | console.log("time ir patiesa vērtība"); 279 | } else { 280 | console.log("time nav patiesa vērtība"); 281 | } 282 | 283 | /* let height: number; // undefined 284 | 285 | if (height) { 286 | console.log("Ir augstums", height); 287 | } else { 288 | height = 5; 289 | } 290 | 291 | console.log(height); */ 292 | 293 | const partyTitle: string = "Dzimšanas diena"; 294 | const guestCount: number = 10; 295 | let isHappening: boolean; 296 | 297 | if (partyTitle && guestCount > 100) { 298 | isHappening = true; 299 | } else { 300 | isHappening = false; 301 | } 302 | 303 | console.log("Balle notiek", isHappening); 304 | 305 | const gameIsInPogress: boolean = false; 306 | const isGoal: boolean = true; 307 | 308 | if (gameIsInPogress && isGoal) { 309 | console.log("Spēle notiek un ir vārti"); 310 | } else if (gameIsInPogress) { 311 | console.log("Spēle notiek, bet vārtu nav"); 312 | } else if (isGoal) { 313 | console.log("Spēle nenotiek, bet ir vārti"); 314 | } else { 315 | console.log("Spēle nenotiek un vārtu arī nav"); 316 | } 317 | 318 | // Ternary operator --------------------------------------------------------------------- 319 | if (10 > 5) { 320 | console.log("Hey"); 321 | } else { 322 | console.log("Hi"); 323 | } 324 | 325 | 10 > 5 ? console.log("Hey") : console.log("Hi"); 326 | 327 | const tomato: string = "Tomāts"; 328 | let total: number; 329 | 330 | if (tomato === "Tomāts") { 331 | total = 10; 332 | } else { 333 | total = 0; 334 | } 335 | 336 | total = tomato === "Tomāts" ? 10 : 0; 337 | 338 | console.log(total); 339 | 340 | isHappening = partyTitle && guestCount > 100 ? true : false; 341 | 342 | // Switch statement -------------------------------------------------------------------- 343 | let fruit: string = "Apelsīns"; 344 | 345 | switch (fruit) { 346 | case "Banāns": 347 | console.log("Tas ir banāns"); 348 | break; 349 | case "Mandarīns": 350 | case "Apelsīns": 351 | console.log("Tulīt būs Ziemassvētki"); 352 | break; 353 | default: 354 | console.log("Tas nav neviens no dotajiem"); 355 | } 356 | 357 | let keyCode: number = 38; 358 | 359 | switch (keyCode) { 360 | case 37: 361 | console.log("Pa kreisi"); 362 | break; 363 | case 38: 364 | console.log("Uz augšu"); 365 | break; 366 | case 39: 367 | console.log("Pa labi"); 368 | break; 369 | case 40: 370 | console.log("Uz leju"); 371 | break; 372 | } 373 | 374 | // Arrays -------------------------------------------------------------------- 375 | 376 | const fruits: string[] = ["Melone", "Banāns", "Kivī"]; 377 | console.log(fruits); 378 | console.log(fruits[0]); 379 | console.log(fruits[1]); 380 | console.log(fruits[fruits.length - 1]); 381 | console.log(fruits.length); 382 | console.log(["Kaķis"] === ["Kaķis"]); 383 | console.log(fruits === fruits); 384 | 385 | fruits.push("Citrons"); 386 | console.log(fruits); 387 | 388 | fruits.pop(); 389 | console.log(fruits); 390 | 391 | fruits.shift(); 392 | console.log(fruits); 393 | 394 | fruits.unshift("Citrons"); 395 | console.log(fruits); 396 | 397 | const bananaIndex: number = fruits.indexOf("Banāns"); 398 | console.log(bananaIndex); 399 | 400 | fruits.splice(1, 1); 401 | console.log(fruits); 402 | 403 | const fruitsSliced: string[] = fruits.slice(0, 1); 404 | console.log(fruitsSliced); 405 | console.log(fruits); 406 | 407 | const fruitsJoined: string = fruits.join("-"); 408 | console.log(fruitsJoined); 409 | 410 | // Spread operator ------------------------------------------------------------------- 411 | 412 | const people: string[] = ["Anna", "Baiba", "Jānis", "Pēteris"]; 413 | const colors: string[] = ["Red", "Green", "Blue"]; 414 | 415 | const colorsCopy: string[] = colors; 416 | 417 | colorsCopy.pop(); 418 | console.log(colorsCopy); 419 | console.log(colors); 420 | 421 | const peopleCopy: string[] = [...people]; 422 | peopleCopy.pop(); 423 | console.log(peopleCopy); 424 | console.log(people); 425 | 426 | const peopleCopySecond: string[] = [...people, "Gatis", "Sabīne"]; 427 | console.log(peopleCopySecond); 428 | 429 | const colorsAndPeople: string[] = colors.concat(people); 430 | console.log(colorsAndPeople); 431 | 432 | const colorsAndPeopleSecond: string[] = [...colors, ...people]; 433 | console.log(colorsAndPeopleSecond); 434 | 435 | const colorIds: number[] = [1, 2, 3, 4]; 436 | const reversedColorIds: number[] = colorIds.reverse(); 437 | console.log(reversedColorIds); 438 | 439 | // For loop ------------------------------------------------------------------- 440 | 441 | for (let i = 1; i < 6; i++) { 442 | console.log(i); 443 | } 444 | 445 | const n: number = 5; 446 | 447 | for (let i = 1; i <= n; i++) { 448 | console.log("Čau"); 449 | } 450 | 451 | const vegetables: string[] = ["Tomāts", "Gurķis", "Kāposts"]; 452 | 453 | for (let i = 0; i <= vegetables.length - 1; i++) { 454 | console.log(vegetables[i]); 455 | } 456 | 457 | let sum: number = 0; 458 | 459 | for (let i = 1; i <= 3; i++) { 460 | sum = sum + i; 461 | console.log(sum); 462 | } 463 | 464 | console.log(sum); 465 | 466 | const numbers: number[] = [10, 100, 200, 35, 440, 5]; 467 | const bigNumbers: number[] = []; 468 | 469 | for (let i = 0; i < numbers.length; i++) { 470 | if (numbers[i] > 100) { 471 | bigNumbers.push(numbers[i]); 472 | } 473 | } 474 | 475 | console.log(bigNumbers); 476 | 477 | // While, do while loop ----------------------------------------------------------------- 478 | 479 | let i: number = 1; 480 | 481 | while (i < 4) { 482 | console.log(i); 483 | i++; 484 | } 485 | 486 | let numberArray: number[] = []; 487 | i = 0; 488 | 489 | while (i <= 4) { 490 | numberArray.push(i); 491 | i++; 492 | } 493 | 494 | console.log(numberArray); 495 | 496 | i = 0; 497 | 498 | do { 499 | numberArray.push(i); 500 | i++; 501 | } while (i <= 10); 502 | 503 | console.log(numberArray); 504 | 505 | i = 0; 506 | 507 | do { 508 | i++; 509 | console.log(i); 510 | } while (i <= 10); 511 | 512 | // Functions ------------------------------------------------------------------------ 513 | 514 | logFivePlusSeven(); 515 | 516 | function logFivePlusSeven(): void { 517 | console.log(5 + 7); 518 | } 519 | 520 | logFivePlusSeven(); 521 | logFivePlusSeven(); 522 | 523 | function add(a: number, b: number): number { 524 | return a + b; 525 | } 526 | 527 | const sixPlusNine: number = add(6, 9); 528 | console.log(sixPlusNine); 529 | console.log(add(100, 60)); 530 | 531 | function congratulate(name: string, prize: number): void { 532 | const congratsText = `Apsveicam, ${name}. Tu vinnēji ${prize}`; 533 | console.log(congratsText); 534 | } 535 | 536 | congratulate("Hermione", 1000); 537 | congratulate("Hagrids", 5000); 538 | 539 | // sayHello(); 540 | const sayHello = function (): void { 541 | console.log("Čau"); 542 | }; 543 | 544 | sayHello(); 545 | sayHello(); 546 | sayHello(); 547 | 548 | const square = function (a: number): number { 549 | return a * a; 550 | }; 551 | 552 | const fiveSquared: number = square(5); 553 | console.log(fiveSquared); 554 | console.log(square(8)); 555 | 556 | const halve = function (a: number): number | string { 557 | if (a % 2 === 0) { 558 | return a / 2; 559 | } else { 560 | return "Skaitlis nav pāra"; 561 | } 562 | }; 563 | 564 | console.log(halve(10)); 565 | console.log(halve(13)); 566 | 567 | // Arrow functions ----------------------------------------------------------- 568 | 569 | function subtractFirst(a: number, b: number): number { 570 | return a - b; 571 | } 572 | 573 | const subtractSecond = function (a: number, b: number): number { 574 | return a - b; 575 | }; 576 | 577 | const subtractThird = (a: number, b: number): number => { 578 | return a - b; 579 | }; 580 | 581 | const subtractFourth = (a: number, b: number): number => a - b; 582 | 583 | console.log(subtractFourth(20, 8)); 584 | 585 | const checkIfContainsCat = (sentence: string): boolean => 586 | sentence.includes("kaķis"); 587 | 588 | console.log(checkIfContainsCat("Man mājās ir kaķis")); 589 | console.log(checkIfContainsCat("Man ir suns")); 590 | 591 | if (checkIfContainsCat("Man ir kaķis")) { 592 | console.log("Ir kaķis"); 593 | } else { 594 | console.log("Nav kaķa"); 595 | } 596 | 597 | const subtractConditional = (a: number, b: number): number => 598 | a > b ? a - b : b - a; 599 | 600 | console.log(subtractConditional(10, 6)); 601 | console.log(subtractConditional(3, 10)); 602 | 603 | const multiply = (a: number, b: number) => a * b; 604 | console.log(multiply(3, 2)); 605 | 606 | const humanNames: string[] = ["Baiba", "Aija", "Centis"]; 607 | 608 | const getFirstLetters = (names: string[]): string => { 609 | let result: string = ""; 610 | 611 | names.forEach((name) => { 612 | result = result + name.charAt(0); 613 | }); 614 | 615 | return result; 616 | }; 617 | 618 | console.log(getFirstLetters(humanNames)); 619 | 620 | // Objects ---------------------------------------------------------- 621 | 622 | interface Person { 623 | id: number; 624 | name: string; 625 | "last-name": string; 626 | isWizard: boolean; 627 | friends: string[]; 628 | contactInfo: ContactInfo; 629 | enemies: Enemy[]; 630 | sayHi: () => void; 631 | } 632 | 633 | interface ContactInfo { 634 | email: string; 635 | phone: string; 636 | } 637 | 638 | interface Enemy { 639 | id: number; 640 | name: string; 641 | } 642 | 643 | const person: Person = { 644 | id: 1, 645 | name: "Harijs", 646 | "last-name": "Poters", 647 | isWizard: true, 648 | friends: ["Hermione", "Rons", "Hagrids"], 649 | contactInfo: { 650 | email: "badass.wizard@inbox.lv", 651 | phone: "222 333 444", 652 | }, 653 | enemies: [ 654 | { 655 | id: 1, 656 | name: "Voldemors", 657 | }, 658 | ], 659 | sayHi: () => console.log("Čau"), 660 | }; 661 | 662 | console.log(person.name); 663 | console.log(person.id); 664 | console.log(person.friends); 665 | console.log(person.contactInfo.email); 666 | console.log(person.enemies[0].name); 667 | console.log(person["last-name"]); 668 | 669 | person.sayHi(); 670 | 671 | // Object methods -------------------------------------------------------------- 672 | 673 | interface BlogPost { 674 | id: number; 675 | title: string; 676 | description: string; 677 | rating?: number; 678 | } 679 | 680 | const blogPost: BlogPost = { 681 | id: 1, 682 | title: "Labākā diena šogad", 683 | description: "Šodien bija mana dzimšanas diena", 684 | }; 685 | 686 | const blogKeys: string[] = Object.keys(blogPost); 687 | console.log(blogKeys); 688 | 689 | const blogValues: (string | number)[] = Object.values(blogPost); 690 | console.log(blogValues); 691 | 692 | const blogEntries: (string | number)[][] = Object.entries(blogPost); 693 | console.log(blogEntries); 694 | 695 | console.log({} === {}); 696 | console.log(blogPost === blogPost); 697 | 698 | blogPost.title = "Laba diena"; 699 | console.log(blogPost); 700 | 701 | const blogPostCopy: BlogPost = { ...blogPost, rating: 7.5 }; 702 | console.log(blogPostCopy); 703 | 704 | blogPost.rating = 9.5; 705 | console.log(blogPost); 706 | 707 | // map() ------------------------------------------------------------- 708 | 709 | const naturalNumbers: number[] = [1, 2, 3]; 710 | let doubles: number[] = []; 711 | 712 | for (let i = 0; i < naturalNumbers.length; i++) { 713 | doubles.push(naturalNumbers[i] * 2); 714 | } 715 | 716 | console.log(doubles); 717 | 718 | doubles = naturalNumbers.map((it) => it * 2); 719 | console.log(doubles); 720 | 721 | const triples: number[] = naturalNumbers.map((it) => it * 3); 722 | console.log(triples); 723 | 724 | const alphabet: string[] = ["A", "B", "C", "D"]; 725 | 726 | const alphabetSmall: string[] = alphabet.map((letter) => letter.toLowerCase()); 727 | 728 | console.log(alphabetSmall); 729 | 730 | interface Player { 731 | name: string; 732 | wins: number; 733 | losses: number; 734 | score?: number; 735 | } 736 | 737 | const players: Player[] = [ 738 | { 739 | name: "Bonija", 740 | wins: 5, 741 | losses: 2, 742 | }, 743 | { 744 | name: "Klaids", 745 | wins: 6, 746 | losses: 5, 747 | }, 748 | ]; 749 | 750 | const playerNames: string[] = players.map((player) => player.name); 751 | console.log(playerNames); 752 | 753 | const playerWins: number[] = players.map((player) => player.wins); 754 | console.log(playerWins); 755 | 756 | const playersWithScore: Player[] = players.map((player) => { 757 | return { ...player, score: player.wins - player.losses }; 758 | }); 759 | console.log(playersWithScore); 760 | 761 | // Filter -------------------------------------------------------------------- 762 | 763 | const randomNumbers: number[] = [45, 28, 1, 2, 3, 100]; 764 | 765 | const randomNumbersFiltered: number[] = randomNumbers.filter((randomNumber) => { 766 | return randomNumber > 5; 767 | }); 768 | console.log(randomNumbersFiltered); 769 | 770 | const words: string[] = ["Limits", "Elite", "Saulessargs", "Lietussargs"]; 771 | 772 | const longWords: string[] = words.filter((word) => word.length > 6); 773 | console.log(longWords); 774 | 775 | interface ShopItem { 776 | id: number; 777 | title: string; 778 | isAvailable: boolean; 779 | type: string; 780 | } 781 | 782 | const shopItems: ShopItem[] = [ 783 | { 784 | id: 1, 785 | title: "Grāmata", 786 | isAvailable: false, 787 | type: "books", 788 | }, 789 | { 790 | id: 2, 791 | title: "Televizors", 792 | isAvailable: true, 793 | type: "electronics", 794 | }, 795 | ]; 796 | 797 | const findShopItems: ShopItem[] = shopItems.filter( 798 | (shopItem) => shopItem.id !== 1 799 | ); 800 | console.log(findShopItems); 801 | 802 | const availableItems: ShopItem[] = shopItems.filter( 803 | (shopItem) => shopItem.isAvailable === true 804 | ); 805 | console.log(availableItems); 806 | 807 | // forEach() ---------------------------------------------------------------------------- 808 | 809 | const smallLetters: string[] = ["a", "b", "c"]; 810 | 811 | for (let i = 0; i < smallLetters.length; i++) { 812 | console.log(smallLetters[i]); 813 | } 814 | 815 | smallLetters.forEach((letter) => console.log(letter)); 816 | 817 | interface FoodItem { 818 | name: string; 819 | ingredients: string[]; 820 | } 821 | 822 | const foodItems: FoodItem[] = [ 823 | { name: "Pica", ingredients: ["Mīkla", "Kečups", "Siers"] }, 824 | { name: "Burgeris", ingredients: ["Maize", "Kotlete"] }, 825 | { name: "Pasta", ingredients: ["Makaroni"] }, 826 | ]; 827 | 828 | foodItems.forEach((foodItem, i) => { 829 | console.log("Indekss", i, "Nosaukums", foodItem.name); 830 | }); 831 | 832 | for (let i = 0; i < foodItems.length; i++) { 833 | const food = foodItems[i]; 834 | for (let j = 0; j < food.ingredients.length; j++) { 835 | const ingredient = food.ingredients[j]; 836 | console.log(ingredient); 837 | } 838 | } 839 | 840 | foodItems.forEach((foodItem) => { 841 | foodItem.ingredients.forEach((ingredient) => { 842 | console.log(ingredient); 843 | }); 844 | }); 845 | 846 | // sort(), find(), findIndex() ------------------------------------------------------ 847 | 848 | const heroes: string[] = ["Supermens", "Betmens", "Akvamens"]; 849 | // heroes.sort(); 850 | console.log(heroes); 851 | 852 | const sortedHeroes: string[] = [...heroes].sort(); 853 | console.log(heroes); 854 | console.log(sortedHeroes); 855 | 856 | const heroIds: number[] = [10, 5, 11, 25]; 857 | heroIds.sort(); 858 | console.log(heroIds); 859 | 860 | heroIds.sort((a, b) => a - b); 861 | console.log(heroIds); 862 | 863 | heroIds.sort((a, b) => b - a); 864 | console.log(heroIds); 865 | 866 | const batmanIndex: number = heroes.indexOf("Betmeens"); 867 | console.log(batmanIndex); 868 | 869 | interface Human { 870 | name: string; 871 | age: number; 872 | } 873 | 874 | const humans: Human[] = [ 875 | { name: "Edward", age: 107 }, 876 | { name: "Jacob", age: 15 }, 877 | { name: "Bella", age: 17 }, 878 | ]; 879 | 880 | humans.sort((a, b) => a.age - b.age); 881 | 882 | console.log(humans); 883 | 884 | const edward: Human | undefined = humans.find( 885 | (human) => human.name === "Edward" 886 | ); 887 | 888 | console.log(edward); 889 | 890 | const bellaIndex: number = humans.findIndex((human) => human.name === "Bella"); 891 | 892 | console.log(bellaIndex); 893 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 4 | "module": "commonjs" /* Specify what module code is generated. */, 5 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, 6 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 7 | "strict": true /* Enable all strict type-checking options. */, 8 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 9 | } 10 | } 11 | --------------------------------------------------------------------------------