A music player that connects to your cloud/distributed storage.

Improve metadata processing (#407)

authored by Steven Vandevelde and committed by GitHub 082733af e560991e

+1
.gitignore
··· 1 .DS_Store 2 .gren 3 app 4 fission.yaml* 5 elm-stuff
··· 1 .DS_Store 2 .gren 3 + .zed 4 app 5 fission.yaml* 6 elm-stuff
+3
CHANGELOG.md
··· 2 3 ## 3.4.0 4 5 - **Removed native builds.** I no longer want to maintain native builds for Diffuse. I personally use it straight in the browser or install it as a PWA. Alternatively, there's software like [Multi](https://github.com/kofigumbs/multi) that allow you to package web applications into native apps. There are icons in the [src](/src/Static/Images) folder that you can use as the app icon. 6 - Adjusted search behaviour, now searches while typing (with a small delay). 7 - Allows you to make playlists public when using Fission/ODD SDK. 8 - Fixes issue with Safari where reloading after a search caused the loader to be shown indefinitely. 9 - Fixes syncing issues with Fission/ODD SDK (was called Webnative before) 10 - Made the project easier to build. 11 - Removes support for older browsers. 12 13
··· 2 3 ## 3.4.0 4 5 + - **Improved audio metadata parsing**. Now uses [mediainfo.js](https://github.com/buzz/mediainfo.js). 6 - **Removed native builds.** I no longer want to maintain native builds for Diffuse. I personally use it straight in the browser or install it as a PWA. Alternatively, there's software like [Multi](https://github.com/kofigumbs/multi) that allow you to package web applications into native apps. There are icons in the [src](/src/Static/Images) folder that you can use as the app icon. 7 - Adjusted search behaviour, now searches while typing (with a small delay). 8 - Allows you to make playlists public when using Fission/ODD SDK. 9 - Fixes issue with Safari where reloading after a search caused the loader to be shown indefinitely. 10 + - Fixes some issues with cover grouping. 11 - Fixes syncing issues with Fission/ODD SDK (was called Webnative before) 12 - Made the project easier to build. 13 + - Reduced unnecessary error messages. 14 - Removes support for older browsers. 15 16
+11 -5
Justfile
··· 6 SRC_DIR := "./src" 7 SYSTEM_DIR := "./system" 8 9 - ESBUILD := NPM_DIR + "/.bin/esbuild --target=esnext --format=esm --bundle" 10 11 12 default: dev ··· 15 # Tasks 16 # ===== 17 18 - @build: clean css elm js system license 19 echo "> Build completed ⚡" 20 21 22 - @build-prod: quality clean (css "minify") elm-prod js-prod system license 23 echo "> Production build completed 🛳" 24 25 ··· 41 echo "> Cleaning build directory" 42 rm -rf {{BUILD_DIR}} || true 43 mkdir -p {{BUILD_DIR}} 44 45 46 @css minify="false": ··· 174 175 176 @elm-housekeeping: 177 echo "> Running elm-review" 178 {{NPM_DIR}}/.bin/elm-review {{SRC_DIR}} --config system/Review --fix-all 179 - echo "> Running elm-format" 180 - elm-format {{SRC_DIR}} --yes 181 182 183 @quality: check-versions
··· 6 SRC_DIR := "./src" 7 SYSTEM_DIR := "./system" 8 9 + ESBUILD := "node system/Js/esbuild.mjs" 10 11 12 default: dev ··· 15 # Tasks 16 # ===== 17 18 + @build: clean css elm copy-wasm js system license 19 echo "> Build completed ⚡" 20 21 22 + @build-prod: quality clean (css "minify") elm-prod copy-wasm js-prod system license 23 echo "> Production build completed 🛳" 24 25 ··· 41 echo "> Cleaning build directory" 42 rm -rf {{BUILD_DIR}} || true 43 mkdir -p {{BUILD_DIR}} 44 + 45 + 46 + @copy-wasm: 47 + echo "> Copying WASM files" 48 + mkdir -p {{BUILD_DIR}}/wasm 49 + cp {{NPM_DIR}}/mediainfo.js/dist/MediaInfoModule.wasm {{BUILD_DIR}}/wasm/media-info.wasm 50 51 52 @css minify="false": ··· 180 181 182 @elm-housekeeping: 183 + echo "> Running elm-format" 184 + {{NPM_DIR}}/.bin/elm-format {{SRC_DIR}} --yes 185 echo "> Running elm-review" 186 {{NPM_DIR}}/.bin/elm-review {{SRC_DIR}} --config system/Review --fix-all 187 188 189 @quality: check-versions
+1250 -693
package-lock.json
··· 18 "load-script2": "^2.0.5", 19 "localforage": "^1.10.0", 20 "lunr": "^2.3.8", 21 "music-metadata-browser": "^2.5.10", 22 - "readable-stream": "^4.4.2", 23 "remotestoragejs": "^2.0.0-beta.6", 24 "serve": "^14.2.1", 25 "throttle-debounce": "^5.0.0", 26 "timer.js": "^1.0.4", 27 "tocca": "^2.0.9", 28 - "uint8arrays": "^4.0.6" 29 }, 30 "devDependencies": { 31 - "@typescript-eslint/eslint-plugin": "^6.2.1", 32 - "@typescript-eslint/parser": "^6.2.1", 33 - "assert": "^2.0.0", 34 - "autoprefixer": "^10.4.14", 35 "buffer": "^6.0.3", 36 "elm": "0.19.1-6", 37 - "elm-review": "^2.10.2", 38 - "esbuild": "^0.18.18", 39 - "eslint": "^8.46.0", 40 "events": "^3.3.0", 41 "gren-lang": "^0.3.0", 42 "just-install": "^2.0.1", 43 - "postcss": "^8.4.27", 44 - "postcss-custom-properties": "^13.3.0", 45 - "postcss-import": "^15.1.0", 46 "stream": "^0.0.2", 47 - "tailwindcss": "^3.3.3", 48 "tailwindcss-animations": "^2.0.0", 49 - "tailwindcss-interaction-variants": "^5.0.0" 50 } 51 }, 52 "node_modules/@aashutoshrathi/word-wrap": { ··· 70 "url": "https://github.com/sponsors/sindresorhus" 71 } 72 }, 73 "node_modules/@chainsafe/is-ip": { 74 "version": "2.0.1", 75 "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", ··· 84 } 85 }, 86 "node_modules/@csstools/cascade-layer-name-parser": { 87 - "version": "1.0.4", 88 - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.4.tgz", 89 - "integrity": "sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg==", 90 "dev": true, 91 "funding": [ 92 { ··· 102 "node": "^14 || ^16 || >=18" 103 }, 104 "peerDependencies": { 105 - "@csstools/css-parser-algorithms": "^2.3.1", 106 - "@csstools/css-tokenizer": "^2.2.0" 107 } 108 }, 109 "node_modules/@csstools/css-parser-algorithms": { 110 - "version": "2.3.1", 111 - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", 112 - "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", 113 "dev": true, 114 "funding": [ 115 { ··· 125 "node": "^14 || ^16 || >=18" 126 }, 127 "peerDependencies": { 128 - "@csstools/css-tokenizer": "^2.2.0" 129 } 130 }, 131 "node_modules/@csstools/css-tokenizer": { 132 - "version": "2.2.0", 133 - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", 134 - "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", 135 "dev": true, 136 "funding": [ 137 { ··· 199 "win32" 200 ] 201 }, 202 "node_modules/@esbuild/android-arm": { 203 - "version": "0.18.18", 204 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.18.tgz", 205 - "integrity": "sha512-oBymf7ZwplAawSxmiSlBCf+FMcY0f4bs5QP2jn43JKUf0M9DnrUTjqa5RvFPl1elw+sMfcpfBRPK+rb+E1q7zg==", 206 "cpu": [ 207 "arm" 208 ], ··· 216 } 217 }, 218 "node_modules/@esbuild/android-arm64": { 219 - "version": "0.18.18", 220 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.18.tgz", 221 - "integrity": "sha512-dkAPYzRHq3dNXIzOyAknYOzsx8o3KWaNiuu56B2rP9IFPmFWMS58WQcTlUQi6iloku8ZyHHMluCe5sTWhKq/Yw==", 222 "cpu": [ 223 "arm64" 224 ], ··· 232 } 233 }, 234 "node_modules/@esbuild/android-x64": { 235 - "version": "0.18.18", 236 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.18.tgz", 237 - "integrity": "sha512-r7/pVcrUQMYkjvtE/1/n6BxhWM+/9tvLxDG1ev1ce4z3YsqoxMK9bbOM6bFcj0BowMeGQvOZWcBV182lFFKmrw==", 238 "cpu": [ 239 "x64" 240 ], ··· 248 } 249 }, 250 "node_modules/@esbuild/darwin-arm64": { 251 - "version": "0.18.18", 252 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.18.tgz", 253 - "integrity": "sha512-MSe2iV9MAH3wfP0g+vzN9bp36rtPPuCSk+bT5E2vv/d8krvW5uB/Pi/Q5+txUZuxsG3GcO8dhygjnFq0wJU9hQ==", 254 "cpu": [ 255 "arm64" 256 ], ··· 264 } 265 }, 266 "node_modules/@esbuild/darwin-x64": { 267 - "version": "0.18.18", 268 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.18.tgz", 269 - "integrity": "sha512-ARFYISOWkaifjcr48YtO70gcDNeOf1H2RnmOj6ip3xHIj66f3dAbhcd5Nph5np6oHI7DhHIcr9MWO18RvUL1bw==", 270 "cpu": [ 271 "x64" 272 ], ··· 280 } 281 }, 282 "node_modules/@esbuild/freebsd-arm64": { 283 - "version": "0.18.18", 284 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.18.tgz", 285 - "integrity": "sha512-BHnXmexzEWRU2ZySJosU0Ts0NRnJnNrMB6t4EiIaOSel73I8iLsNiTPLH0rJulAh19cYZutsB5XHK6N8fi5eMg==", 286 "cpu": [ 287 "arm64" 288 ], ··· 296 } 297 }, 298 "node_modules/@esbuild/freebsd-x64": { 299 - "version": "0.18.18", 300 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.18.tgz", 301 - "integrity": "sha512-n823w35wm0ZOobbuE//0sJjuz1Qj619+AwjgOcAJMN2pomZhH9BONCtn+KlfrmM/NWZ+27yB/eGVFzUIWLeh3w==", 302 "cpu": [ 303 "x64" 304 ], ··· 312 } 313 }, 314 "node_modules/@esbuild/linux-arm": { 315 - "version": "0.18.18", 316 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.18.tgz", 317 - "integrity": "sha512-Kck3jxPLQU4VeAGwe8Q4NU+IWIx+suULYOFUI9T0C2J1+UQlOHJ08ITN+MaJJ+2youzJOmKmcphH/t3SJxQ1Tw==", 318 "cpu": [ 319 "arm" 320 ], ··· 328 } 329 }, 330 "node_modules/@esbuild/linux-arm64": { 331 - "version": "0.18.18", 332 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.18.tgz", 333 - "integrity": "sha512-zANxnwF0sCinDcAqoMohGoWBK9QaFJ65Vgh0ZE+RXtURaMwx+RfmfLElqtnn7X8OYNckMoIXSg7u+tZ3tqTlrA==", 334 "cpu": [ 335 "arm64" 336 ], ··· 344 } 345 }, 346 "node_modules/@esbuild/linux-ia32": { 347 - "version": "0.18.18", 348 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.18.tgz", 349 - "integrity": "sha512-+VHz2sIRlY5u8IlaLJpdf5TL2kM76yx186pW7bpTB+vLWpzcFQVP04L842ZB2Ty13A1VXUvy3DbU1jV65P2skg==", 350 "cpu": [ 351 "ia32" 352 ], ··· 360 } 361 }, 362 "node_modules/@esbuild/linux-loong64": { 363 - "version": "0.18.18", 364 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.18.tgz", 365 - "integrity": "sha512-fXPEPdeGBvguo/1+Na8OIWz3667BN1cwbGtTEZWTd0qdyTsk5gGf9jVX8MblElbDb/Cpw6y5JiaQuL96YmvBwQ==", 366 "cpu": [ 367 "loong64" 368 ], ··· 376 } 377 }, 378 "node_modules/@esbuild/linux-mips64el": { 379 - "version": "0.18.18", 380 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.18.tgz", 381 - "integrity": "sha512-dLvRB87pIBIRnEIC32LIcgwK1JzlIuADIRjLKdUIpxauKwMuS/xMpN+cFl+0nN4RHNYOZ57DmXFFmQAcdlFOmw==", 382 "cpu": [ 383 "mips64el" 384 ], ··· 392 } 393 }, 394 "node_modules/@esbuild/linux-ppc64": { 395 - "version": "0.18.18", 396 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.18.tgz", 397 - "integrity": "sha512-fRChqIJZ7hLkXSKfBLYgsX9Ssb5OGCjk3dzCETF5QSS1qjTgayLv0ALUdJDB9QOh/nbWwp+qfLZU6md4XcjL7w==", 398 "cpu": [ 399 "ppc64" 400 ], ··· 408 } 409 }, 410 "node_modules/@esbuild/linux-riscv64": { 411 - "version": "0.18.18", 412 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.18.tgz", 413 - "integrity": "sha512-ALK/BT3u7Hoa/vHjow6W6+MKF0ohYcVcVA1EpskI4bkBPVuDLrUDqt2YFifg5UcZc8qup0CwQqWmFUd6VMNgaA==", 414 "cpu": [ 415 "riscv64" 416 ], ··· 424 } 425 }, 426 "node_modules/@esbuild/linux-s390x": { 427 - "version": "0.18.18", 428 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.18.tgz", 429 - "integrity": "sha512-crT7jtOXd9iirY65B+mJQ6W0HWdNy8dtkZqKGWNcBnunpLcTCfne5y5bKic9bhyYzKpQEsO+C/VBPD8iF0RhRw==", 430 "cpu": [ 431 "s390x" 432 ], ··· 440 } 441 }, 442 "node_modules/@esbuild/linux-x64": { 443 - "version": "0.18.18", 444 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.18.tgz", 445 - "integrity": "sha512-/NSgghjBOW9ELqjXDYxOCCIsvQUZpvua1/6NdnA9Vnrp9UzEydyDdFXljUjMMS9p5KxMzbMO9frjHYGVHBfCHg==", 446 "cpu": [ 447 "x64" 448 ], ··· 456 } 457 }, 458 "node_modules/@esbuild/netbsd-x64": { 459 - "version": "0.18.18", 460 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.18.tgz", 461 - "integrity": "sha512-8Otf05Vx5sZjLLDulgr5QS5lsWXMplKZEyHMArH9/S4olLlhzmdhQBPhzhJTNwaL2FJNdWcUPNGAcoD5zDTfUA==", 462 "cpu": [ 463 "x64" 464 ], ··· 472 } 473 }, 474 "node_modules/@esbuild/openbsd-x64": { 475 - "version": "0.18.18", 476 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.18.tgz", 477 - "integrity": "sha512-tFiFF4kT5L5qhVrWJUNxEXWvvX8nK/UX9ZrB7apuTwY3f6+Xy4aFMBPwAVrBYtBd5MOUuyOVHK6HBZCAHkwUlw==", 478 "cpu": [ 479 "x64" 480 ], ··· 488 } 489 }, 490 "node_modules/@esbuild/sunos-x64": { 491 - "version": "0.18.18", 492 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.18.tgz", 493 - "integrity": "sha512-MPogVV8Bzh8os4OM+YDGGsSzCzmNRiyKGtHoJyZLtI4BMmd6EcxmGlcEGK1uM46h1BiOyi7Z7teUtzzQhvkC+w==", 494 "cpu": [ 495 "x64" 496 ], ··· 504 } 505 }, 506 "node_modules/@esbuild/win32-arm64": { 507 - "version": "0.18.18", 508 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.18.tgz", 509 - "integrity": "sha512-YKD6LF/XXY9REu+ZL5RAsusiG48n602qxsMVh/E8FFD9hp4OyTQaL9fpE1ovxwQXqFio+tT0ITUGjDSSSPN13w==", 510 "cpu": [ 511 "arm64" 512 ], ··· 520 } 521 }, 522 "node_modules/@esbuild/win32-ia32": { 523 - "version": "0.18.18", 524 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.18.tgz", 525 - "integrity": "sha512-NjSBmBsyZBTsZB6ga6rA6PfG/RHnwruUz/9YEVXcm4STGauFWvhYhOMhEyw1yU5NVgYYm8CH5AltCm77TS21/Q==", 526 "cpu": [ 527 "ia32" 528 ], ··· 536 } 537 }, 538 "node_modules/@esbuild/win32-x64": { 539 - "version": "0.18.18", 540 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.18.tgz", 541 - "integrity": "sha512-eTSg/gC3p3tdjj4roDhe5xu94l1s2jMazP8u2FsYO8SEKvSpPOO71EucprDn/IuErDPvTFUhV9lTw5z5WJCRKQ==", 542 "cpu": [ 543 "x64" 544 ], ··· 576 } 577 }, 578 "node_modules/@eslint/eslintrc": { 579 - "version": "2.1.1", 580 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", 581 - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", 582 "dev": true, 583 "dependencies": { 584 "ajv": "^6.12.4", ··· 599 } 600 }, 601 "node_modules/@eslint/js": { 602 - "version": "8.46.0", 603 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", 604 - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", 605 "dev": true, 606 "engines": { 607 "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 608 } 609 }, 610 "node_modules/@humanwhocodes/config-array": { 611 - "version": "0.11.10", 612 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", 613 - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", 614 "dev": true, 615 "dependencies": { 616 - "@humanwhocodes/object-schema": "^1.2.1", 617 - "debug": "^4.1.1", 618 "minimatch": "^3.0.5" 619 }, 620 "engines": { ··· 635 } 636 }, 637 "node_modules/@humanwhocodes/object-schema": { 638 - "version": "1.2.1", 639 - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 640 - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 641 "dev": true 642 }, 643 "node_modules/@ipld/dag-cbor": { ··· 1339 "dev": true 1340 }, 1341 "node_modules/@types/json-schema": { 1342 - "version": "7.0.12", 1343 - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", 1344 - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", 1345 "dev": true 1346 }, 1347 "node_modules/@types/keyv": { ··· 1368 } 1369 }, 1370 "node_modules/@types/semver": { 1371 - "version": "7.5.0", 1372 - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", 1373 - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", 1374 "dev": true 1375 }, 1376 "node_modules/@types/tv4": { ··· 1389 } 1390 }, 1391 "node_modules/@typescript-eslint/eslint-plugin": { 1392 - "version": "6.2.1", 1393 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.1.tgz", 1394 - "integrity": "sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==", 1395 "dev": true, 1396 "dependencies": { 1397 "@eslint-community/regexpp": "^4.5.1", 1398 - "@typescript-eslint/scope-manager": "6.2.1", 1399 - "@typescript-eslint/type-utils": "6.2.1", 1400 - "@typescript-eslint/utils": "6.2.1", 1401 - "@typescript-eslint/visitor-keys": "6.2.1", 1402 "debug": "^4.3.4", 1403 "graphemer": "^1.4.0", 1404 "ignore": "^5.2.4", 1405 "natural-compare": "^1.4.0", 1406 - "natural-compare-lite": "^1.4.0", 1407 "semver": "^7.5.4", 1408 "ts-api-utils": "^1.0.1" 1409 }, ··· 1425 } 1426 }, 1427 "node_modules/@typescript-eslint/parser": { 1428 - "version": "6.2.1", 1429 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.1.tgz", 1430 - "integrity": "sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==", 1431 "dev": true, 1432 "dependencies": { 1433 - "@typescript-eslint/scope-manager": "6.2.1", 1434 - "@typescript-eslint/types": "6.2.1", 1435 - "@typescript-eslint/typescript-estree": "6.2.1", 1436 - "@typescript-eslint/visitor-keys": "6.2.1", 1437 "debug": "^4.3.4" 1438 }, 1439 "engines": { ··· 1453 } 1454 }, 1455 "node_modules/@typescript-eslint/scope-manager": { 1456 - "version": "6.2.1", 1457 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.1.tgz", 1458 - "integrity": "sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==", 1459 "dev": true, 1460 "dependencies": { 1461 - "@typescript-eslint/types": "6.2.1", 1462 - "@typescript-eslint/visitor-keys": "6.2.1" 1463 }, 1464 "engines": { 1465 "node": "^16.0.0 || >=18.0.0" ··· 1470 } 1471 }, 1472 "node_modules/@typescript-eslint/type-utils": { 1473 - "version": "6.2.1", 1474 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.1.tgz", 1475 - "integrity": "sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==", 1476 "dev": true, 1477 "dependencies": { 1478 - "@typescript-eslint/typescript-estree": "6.2.1", 1479 - "@typescript-eslint/utils": "6.2.1", 1480 "debug": "^4.3.4", 1481 "ts-api-utils": "^1.0.1" 1482 }, ··· 1497 } 1498 }, 1499 "node_modules/@typescript-eslint/types": { 1500 - "version": "6.2.1", 1501 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.1.tgz", 1502 - "integrity": "sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==", 1503 "dev": true, 1504 "engines": { 1505 "node": "^16.0.0 || >=18.0.0" ··· 1510 } 1511 }, 1512 "node_modules/@typescript-eslint/typescript-estree": { 1513 - "version": "6.2.1", 1514 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.1.tgz", 1515 - "integrity": "sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==", 1516 "dev": true, 1517 "dependencies": { 1518 - "@typescript-eslint/types": "6.2.1", 1519 - "@typescript-eslint/visitor-keys": "6.2.1", 1520 "debug": "^4.3.4", 1521 "globby": "^11.1.0", 1522 "is-glob": "^4.0.3", 1523 "semver": "^7.5.4", 1524 "ts-api-utils": "^1.0.1" 1525 }, ··· 1536 } 1537 } 1538 }, 1539 "node_modules/@typescript-eslint/utils": { 1540 - "version": "6.2.1", 1541 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.1.tgz", 1542 - "integrity": "sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==", 1543 "dev": true, 1544 "dependencies": { 1545 "@eslint-community/eslint-utils": "^4.4.0", 1546 "@types/json-schema": "^7.0.12", 1547 "@types/semver": "^7.5.0", 1548 - "@typescript-eslint/scope-manager": "6.2.1", 1549 - "@typescript-eslint/types": "6.2.1", 1550 - "@typescript-eslint/typescript-estree": "6.2.1", 1551 "semver": "^7.5.4" 1552 }, 1553 "engines": { ··· 1562 } 1563 }, 1564 "node_modules/@typescript-eslint/visitor-keys": { 1565 - "version": "6.2.1", 1566 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.1.tgz", 1567 - "integrity": "sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==", 1568 "dev": true, 1569 "dependencies": { 1570 - "@typescript-eslint/types": "6.2.1", 1571 "eslint-visitor-keys": "^3.4.1" 1572 }, 1573 "engines": { ··· 1577 "type": "opencollective", 1578 "url": "https://opencollective.com/typescript-eslint" 1579 } 1580 }, 1581 "node_modules/@zeit/schemas": { 1582 "version": "2.29.0", ··· 1624 } 1625 }, 1626 "node_modules/acorn": { 1627 - "version": "8.10.0", 1628 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 1629 - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 1630 "dev": true, 1631 "bin": { 1632 "acorn": "bin/acorn" ··· 1776 } 1777 }, 1778 "node_modules/assert": { 1779 - "version": "2.0.0", 1780 - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", 1781 - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", 1782 "dev": true, 1783 "dependencies": { 1784 - "es6-object-assign": "^1.1.0", 1785 - "is-nan": "^1.2.1", 1786 - "object-is": "^1.0.1", 1787 - "util": "^0.12.0" 1788 } 1789 }, 1790 "node_modules/at-least-node": { ··· 1797 } 1798 }, 1799 "node_modules/autoprefixer": { 1800 - "version": "10.4.14", 1801 - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", 1802 - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", 1803 "dev": true, 1804 "funding": [ 1805 { ··· 1809 { 1810 "type": "tidelift", 1811 "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1812 } 1813 ], 1814 "dependencies": { 1815 - "browserslist": "^4.21.5", 1816 - "caniuse-lite": "^1.0.30001464", 1817 - "fraction.js": "^4.2.0", 1818 "normalize-range": "^0.1.2", 1819 "picocolors": "^1.0.0", 1820 "postcss-value-parser": "^4.2.0" ··· 2136 } 2137 }, 2138 "node_modules/browserslist": { 2139 - "version": "4.21.5", 2140 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", 2141 - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", 2142 "dev": true, 2143 "funding": [ 2144 { ··· 2148 { 2149 "type": "tidelift", 2150 "url": "https://tidelift.com/funding/github/npm/browserslist" 2151 } 2152 ], 2153 "dependencies": { 2154 - "caniuse-lite": "^1.0.30001449", 2155 - "electron-to-chromium": "^1.4.284", 2156 - "node-releases": "^2.0.8", 2157 - "update-browserslist-db": "^1.0.10" 2158 }, 2159 "bin": { 2160 "browserslist": "cli.js" ··· 2242 } 2243 }, 2244 "node_modules/call-bind": { 2245 - "version": "1.0.2", 2246 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 2247 - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 2248 "dev": true, 2249 "dependencies": { 2250 - "function-bind": "^1.1.1", 2251 - "get-intrinsic": "^1.0.2" 2252 }, 2253 "funding": { 2254 "url": "https://github.com/sponsors/ljharb" ··· 2440 }, 2441 "funding": { 2442 "url": "https://github.com/sponsors/sindresorhus" 2443 } 2444 }, 2445 "node_modules/clone": { ··· 2781 "node": ">=10" 2782 } 2783 }, 2784 "node_modules/define-properties": { 2785 - "version": "1.2.0", 2786 - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 2787 - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 2788 "dev": true, 2789 "dependencies": { 2790 "has-property-descriptors": "^1.0.0", 2791 "object-keys": "^1.1.1" 2792 }, ··· 2854 "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 2855 }, 2856 "node_modules/electron-to-chromium": { 2857 - "version": "1.4.377", 2858 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.377.tgz", 2859 - "integrity": "sha512-H3BYG6DW5Z+l0xcfXaicJGxrpA4kMlCxnN71+iNX+dBLkRMOdVJqFJiAmbNZZKA1zISpRg17JR03qGifXNsJtw==", 2860 "dev": true 2861 }, 2862 "node_modules/elm": { ··· 2878 "@elm_binaries/win32_x64": "0.19.1-0" 2879 } 2880 }, 2881 "node_modules/elm-review": { 2882 - "version": "2.10.2", 2883 - "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.2.tgz", 2884 - "integrity": "sha512-9cgv3ILetV/Gb/cr42ZHYWHK5hrnl1UsGuxah1DL/NI6EZlu+GrwaSng4DvYsETrccaoNzRJMuhfv7JoPCdK/A==", 2885 "dev": true, 2886 "dependencies": { 2887 "chalk": "^4.0.0", 2888 "chokidar": "^3.5.2", 2889 "cross-spawn": "^7.0.3", 2890 - "elm-tooling": "^1.6.0", 2891 - "fast-levenshtein": "^3.0.0", 2892 "find-up": "^4.1.0", 2893 "folder-hash": "^3.3.0", 2894 "fs-extra": "^9.0.0", ··· 2985 "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" 2986 }, 2987 "node_modules/elm-tooling": { 2988 - "version": "1.14.0", 2989 - "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.14.0.tgz", 2990 - "integrity": "sha512-cIbK3gfYWK086HsqOIGM4reIYcV/FF2R/8jIJ6ZUy1/RSkYFUv2BgPTGYYZo1Io9oymmbwoCWWleNtw7LgGL2w==", 2991 "dev": true, 2992 "bin": { 2993 "elm-tooling": "index.js" ··· 3018 "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 3019 "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 3020 }, 3021 - "node_modules/es6-object-assign": { 3022 - "version": "1.1.0", 3023 - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", 3024 - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", 3025 - "dev": true 3026 }, 3027 "node_modules/esbuild": { 3028 - "version": "0.18.18", 3029 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.18.tgz", 3030 - "integrity": "sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==", 3031 "dev": true, 3032 "hasInstallScript": true, 3033 "bin": { ··· 3037 "node": ">=12" 3038 }, 3039 "optionalDependencies": { 3040 - "@esbuild/android-arm": "0.18.18", 3041 - "@esbuild/android-arm64": "0.18.18", 3042 - "@esbuild/android-x64": "0.18.18", 3043 - "@esbuild/darwin-arm64": "0.18.18", 3044 - "@esbuild/darwin-x64": "0.18.18", 3045 - "@esbuild/freebsd-arm64": "0.18.18", 3046 - "@esbuild/freebsd-x64": "0.18.18", 3047 - "@esbuild/linux-arm": "0.18.18", 3048 - "@esbuild/linux-arm64": "0.18.18", 3049 - "@esbuild/linux-ia32": "0.18.18", 3050 - "@esbuild/linux-loong64": "0.18.18", 3051 - "@esbuild/linux-mips64el": "0.18.18", 3052 - "@esbuild/linux-ppc64": "0.18.18", 3053 - "@esbuild/linux-riscv64": "0.18.18", 3054 - "@esbuild/linux-s390x": "0.18.18", 3055 - "@esbuild/linux-x64": "0.18.18", 3056 - "@esbuild/netbsd-x64": "0.18.18", 3057 - "@esbuild/openbsd-x64": "0.18.18", 3058 - "@esbuild/sunos-x64": "0.18.18", 3059 - "@esbuild/win32-arm64": "0.18.18", 3060 - "@esbuild/win32-ia32": "0.18.18", 3061 - "@esbuild/win32-x64": "0.18.18" 3062 } 3063 }, 3064 "node_modules/escalade": { 3065 - "version": "3.1.1", 3066 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 3067 - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 3068 - "dev": true, 3069 "engines": { 3070 "node": ">=6" 3071 } ··· 3083 } 3084 }, 3085 "node_modules/eslint": { 3086 - "version": "8.46.0", 3087 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", 3088 - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", 3089 "dev": true, 3090 "dependencies": { 3091 "@eslint-community/eslint-utils": "^4.2.0", 3092 "@eslint-community/regexpp": "^4.6.1", 3093 - "@eslint/eslintrc": "^2.1.1", 3094 - "@eslint/js": "^8.46.0", 3095 - "@humanwhocodes/config-array": "^0.11.10", 3096 "@humanwhocodes/module-importer": "^1.0.1", 3097 "@nodelib/fs.walk": "^1.2.8", 3098 "ajv": "^6.12.4", 3099 "chalk": "^4.0.0", 3100 "cross-spawn": "^7.0.2", ··· 3102 "doctrine": "^3.0.0", 3103 "escape-string-regexp": "^4.0.0", 3104 "eslint-scope": "^7.2.2", 3105 - "eslint-visitor-keys": "^3.4.2", 3106 "espree": "^9.6.1", 3107 "esquery": "^1.4.2", 3108 "esutils": "^2.0.2", ··· 3153 } 3154 }, 3155 "node_modules/eslint-visitor-keys": { 3156 - "version": "3.4.2", 3157 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", 3158 - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", 3159 "dev": true, 3160 "engines": { 3161 "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ··· 3384 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 3385 }, 3386 "node_modules/fast-glob": { 3387 - "version": "3.2.12", 3388 - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 3389 - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 3390 "dev": true, 3391 "dependencies": { 3392 "@nodelib/fs.stat": "^2.0.2", ··· 3405 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 3406 "dev": true 3407 }, 3408 - "node_modules/fast-levenshtein": { 3409 - "version": "3.0.0", 3410 - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", 3411 - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", 3412 - "dev": true, 3413 - "dependencies": { 3414 - "fastest-levenshtein": "^1.0.7" 3415 - } 3416 - }, 3417 "node_modules/fast-text-encoding": { 3418 "version": "1.0.6", 3419 "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", ··· 3498 "version": "2.0.5", 3499 "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", 3500 "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" 3501 }, 3502 "node_modules/fill-range": { 3503 "version": "7.0.1", ··· 3662 } 3663 }, 3664 "node_modules/fraction.js": { 3665 - "version": "4.2.0", 3666 - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 3667 - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 3668 "dev": true, 3669 "engines": { 3670 "node": "*" 3671 }, 3672 "funding": { 3673 "type": "patreon", 3674 - "url": "https://www.patreon.com/infusion" 3675 } 3676 }, 3677 "node_modules/fs-extra": { ··· 3709 } 3710 }, 3711 "node_modules/function-bind": { 3712 - "version": "1.1.1", 3713 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 3714 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 3715 - "dev": true 3716 }, 3717 "node_modules/get-intrinsic": { 3718 - "version": "1.2.0", 3719 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 3720 - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 3721 "dev": true, 3722 "dependencies": { 3723 - "function-bind": "^1.1.1", 3724 - "has": "^1.0.3", 3725 - "has-symbols": "^1.0.3" 3726 }, 3727 "funding": { 3728 "url": "https://github.com/sponsors/ljharb" ··· 3776 } 3777 }, 3778 "node_modules/globals": { 3779 - "version": "13.20.0", 3780 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 3781 - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 3782 "dev": true, 3783 "dependencies": { 3784 "type-fest": "^0.20.2" ··· 3901 } 3902 }, 3903 "node_modules/has-property-descriptors": { 3904 - "version": "1.0.0", 3905 - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 3906 - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 3907 "dev": true, 3908 "dependencies": { 3909 - "get-intrinsic": "^1.1.1" 3910 }, 3911 "funding": { 3912 "url": "https://github.com/sponsors/ljharb" ··· 3937 }, 3938 "funding": { 3939 "url": "https://github.com/sponsors/ljharb" 3940 } 3941 }, 3942 "node_modules/http-cache-semantics": { ··· 4667 } 4668 }, 4669 "node_modules/jiti": { 4670 - "version": "1.18.2", 4671 - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", 4672 - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", 4673 "dev": true, 4674 "bin": { 4675 "jiti": "bin/jiti.js" ··· 5040 "node": ">= 0.8" 5041 } 5042 }, 5043 "node_modules/merge-options": { 5044 "version": "3.0.4", 5045 "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", ··· 5196 "npm": ">=7.0.0" 5197 } 5198 }, 5199 - "node_modules/music-metadata-browser": { 5200 - "version": "2.5.10", 5201 - "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-2.5.10.tgz", 5202 - "integrity": "sha512-03UnAmsSJoZZ5kK2BnEnd2zpH8LXRWQ6xlc7akKudhc2d9FT+yAiqapnmOzjW3g4cxxvIsSK5MVBO2Gi+Ymjfw==", 5203 - "dependencies": { 5204 - "buffer": "^6.0.3", 5205 - "debug": "^4.3.4", 5206 - "music-metadata": "^7.13.3", 5207 - "readable-stream": "^4.3.0", 5208 - "readable-web-to-node-stream": "^3.0.2" 5209 - }, 5210 - "funding": { 5211 - "type": "github", 5212 - "url": "https://github.com/sponsors/Borewit" 5213 - } 5214 - }, 5215 - "node_modules/music-metadata-browser/node_modules/file-type": { 5216 - "version": "16.5.4", 5217 - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", 5218 - "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", 5219 - "dependencies": { 5220 - "readable-web-to-node-stream": "^3.0.0", 5221 - "strtok3": "^6.2.4", 5222 - "token-types": "^4.1.1" 5223 - }, 5224 - "engines": { 5225 - "node": ">=10" 5226 - }, 5227 - "funding": { 5228 - "url": "https://github.com/sindresorhus/file-type?sponsor=1" 5229 - } 5230 - }, 5231 - "node_modules/music-metadata-browser/node_modules/music-metadata": { 5232 - "version": "7.13.4", 5233 - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.13.4.tgz", 5234 - "integrity": "sha512-eRRoEMhhYdth2Ws24FmkvIqrtkIBE9sqjHbrRNpkg2Iux3zc37PQKRv2/r/mTtELb7XlB1uWC2UcKKX7BzNMGA==", 5235 "dependencies": { 5236 "@tokenizer/token": "^0.3.0", 5237 "content-type": "^1.0.5", ··· 5249 "url": "https://github.com/sponsors/Borewit" 5250 } 5251 }, 5252 - "node_modules/music-metadata-browser/node_modules/token-types": { 5253 - "version": "4.2.1", 5254 - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", 5255 - "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", 5256 "dependencies": { 5257 - "@tokenizer/token": "^0.3.0", 5258 - "ieee754": "^1.2.1" 5259 - }, 5260 - "engines": { 5261 - "node": ">=10" 5262 }, 5263 "funding": { 5264 "type": "github", ··· 5277 } 5278 }, 5279 "node_modules/nanoid": { 5280 - "version": "3.3.6", 5281 - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 5282 - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 5283 "dev": true, 5284 "funding": [ 5285 { ··· 5311 "version": "1.4.0", 5312 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 5313 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 5314 - "dev": true 5315 - }, 5316 - "node_modules/natural-compare-lite": { 5317 - "version": "1.4.0", 5318 - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", 5319 - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", 5320 "dev": true 5321 }, 5322 "node_modules/negotiator": { ··· 5376 } 5377 }, 5378 "node_modules/node-releases": { 5379 - "version": "2.0.10", 5380 - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", 5381 - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", 5382 "dev": true 5383 }, 5384 "node_modules/normalize-path": { ··· 5465 "node": ">= 0.4" 5466 } 5467 }, 5468 "node_modules/observable-webworkers": { 5469 "version": "2.0.1", 5470 "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", ··· 5786 } 5787 }, 5788 "node_modules/postcss": { 5789 - "version": "8.4.27", 5790 - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", 5791 - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", 5792 "dev": true, 5793 "funding": [ 5794 { ··· 5805 } 5806 ], 5807 "dependencies": { 5808 - "nanoid": "^3.3.6", 5809 "picocolors": "^1.0.0", 5810 "source-map-js": "^1.0.2" 5811 }, ··· 5814 } 5815 }, 5816 "node_modules/postcss-custom-properties": { 5817 - "version": "13.3.0", 5818 - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.0.tgz", 5819 - "integrity": "sha512-q4VgtIKSy5+KcUvQ0WxTjDy9DZjQ5VCXAZ9+tT9+aPMbA0z6s2t1nMw0QHszru1ib5ElkXl9JUpYYU37VVUs7g==", 5820 "dev": true, 5821 "funding": [ 5822 { ··· 5829 } 5830 ], 5831 "dependencies": { 5832 - "@csstools/cascade-layer-name-parser": "^1.0.4", 5833 - "@csstools/css-parser-algorithms": "^2.3.1", 5834 - "@csstools/css-tokenizer": "^2.2.0", 5835 "postcss-value-parser": "^4.2.0" 5836 }, 5837 "engines": { ··· 5842 } 5843 }, 5844 "node_modules/postcss-import": { 5845 - "version": "15.1.0", 5846 - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 5847 - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 5848 "dev": true, 5849 "dependencies": { 5850 "postcss-value-parser": "^4.0.0", ··· 5852 "resolve": "^1.1.7" 5853 }, 5854 "engines": { 5855 - "node": ">=14.0.0" 5856 }, 5857 "peerDependencies": { 5858 "postcss": "^8.0.0" ··· 6101 } 6102 }, 6103 "node_modules/readable-stream": { 6104 - "version": "4.4.2", 6105 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", 6106 - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", 6107 "dependencies": { 6108 "abort-controller": "^3.0.0", 6109 "buffer": "^6.0.3", ··· 6209 "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", 6210 "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==" 6211 }, 6212 "node_modules/require-from-string": { 6213 "version": "2.0.2", 6214 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 6488 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 6489 "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 6490 }, 6491 "node_modules/setimmediate": { 6492 "version": "1.0.5", 6493 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ··· 6758 } 6759 }, 6760 "node_modules/tailwindcss": { 6761 - "version": "3.3.3", 6762 - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", 6763 - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", 6764 "dev": true, 6765 "dependencies": { 6766 "@alloc/quick-lru": "^5.2.0", ··· 6768 "chokidar": "^3.5.3", 6769 "didyoumean": "^1.2.2", 6770 "dlv": "^1.1.3", 6771 - "fast-glob": "^3.2.12", 6772 "glob-parent": "^6.0.2", 6773 "is-glob": "^4.0.3", 6774 - "jiti": "^1.18.2", 6775 "lilconfig": "^2.1.0", 6776 "micromatch": "^4.0.5", 6777 "normalize-path": "^3.0.0", ··· 6825 }, 6826 "engines": { 6827 "node": ">=10.13.0" 6828 } 6829 }, 6830 "node_modules/terminal-link": { ··· 6883 "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", 6884 "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" 6885 }, 6886 "node_modules/to-regex-range": { 6887 "version": "5.0.1", 6888 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", ··· 6899 "version": "2.0.9", 6900 "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", 6901 "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" 6902 }, 6903 "node_modules/tr46": { 6904 "version": "0.0.3", ··· 6987 } 6988 }, 6989 "node_modules/uint8arrays": { 6990 - "version": "4.0.6", 6991 - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.6.tgz", 6992 - "integrity": "sha512-4ZesjQhqOU2Ip6GPReIwN60wRxIupavL8T0Iy36BBHr2qyMrNxsPJvr7vpS4eFt8F8kSguWUPad6ZM9izs/vyw==", 6993 "dependencies": { 6994 "multiformats": "^12.0.1" 6995 } ··· 7024 } 7025 }, 7026 "node_modules/update-browserslist-db": { 7027 - "version": "1.0.11", 7028 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 7029 - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 7030 "dev": true, 7031 "funding": [ 7032 { ··· 7306 "cuint": "^0.2.2" 7307 } 7308 }, 7309 "node_modules/yallist": { 7310 "version": "4.0.0", 7311 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", ··· 7321 "node": ">= 14" 7322 } 7323 }, 7324 "node_modules/yauzl": { 7325 "version": "2.10.0", 7326 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", ··· 7357 "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 7358 "dev": true 7359 }, 7360 "@chainsafe/is-ip": { 7361 "version": "2.0.1", 7362 "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", ··· 7371 } 7372 }, 7373 "@csstools/cascade-layer-name-parser": { 7374 - "version": "1.0.4", 7375 - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.4.tgz", 7376 - "integrity": "sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg==", 7377 "dev": true, 7378 "requires": {} 7379 }, 7380 "@csstools/css-parser-algorithms": { 7381 - "version": "2.3.1", 7382 - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", 7383 - "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", 7384 "dev": true, 7385 "requires": {} 7386 }, 7387 "@csstools/css-tokenizer": { 7388 - "version": "2.2.0", 7389 - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", 7390 - "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", 7391 "dev": true 7392 }, 7393 "@elm_binaries/darwin_arm64": { ··· 7418 "dev": true, 7419 "optional": true 7420 }, 7421 "@esbuild/android-arm": { 7422 - "version": "0.18.18", 7423 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.18.tgz", 7424 - "integrity": "sha512-oBymf7ZwplAawSxmiSlBCf+FMcY0f4bs5QP2jn43JKUf0M9DnrUTjqa5RvFPl1elw+sMfcpfBRPK+rb+E1q7zg==", 7425 "dev": true, 7426 "optional": true 7427 }, 7428 "@esbuild/android-arm64": { 7429 - "version": "0.18.18", 7430 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.18.tgz", 7431 - "integrity": "sha512-dkAPYzRHq3dNXIzOyAknYOzsx8o3KWaNiuu56B2rP9IFPmFWMS58WQcTlUQi6iloku8ZyHHMluCe5sTWhKq/Yw==", 7432 "dev": true, 7433 "optional": true 7434 }, 7435 "@esbuild/android-x64": { 7436 - "version": "0.18.18", 7437 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.18.tgz", 7438 - "integrity": "sha512-r7/pVcrUQMYkjvtE/1/n6BxhWM+/9tvLxDG1ev1ce4z3YsqoxMK9bbOM6bFcj0BowMeGQvOZWcBV182lFFKmrw==", 7439 "dev": true, 7440 "optional": true 7441 }, 7442 "@esbuild/darwin-arm64": { 7443 - "version": "0.18.18", 7444 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.18.tgz", 7445 - "integrity": "sha512-MSe2iV9MAH3wfP0g+vzN9bp36rtPPuCSk+bT5E2vv/d8krvW5uB/Pi/Q5+txUZuxsG3GcO8dhygjnFq0wJU9hQ==", 7446 "dev": true, 7447 "optional": true 7448 }, 7449 "@esbuild/darwin-x64": { 7450 - "version": "0.18.18", 7451 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.18.tgz", 7452 - "integrity": "sha512-ARFYISOWkaifjcr48YtO70gcDNeOf1H2RnmOj6ip3xHIj66f3dAbhcd5Nph5np6oHI7DhHIcr9MWO18RvUL1bw==", 7453 "dev": true, 7454 "optional": true 7455 }, 7456 "@esbuild/freebsd-arm64": { 7457 - "version": "0.18.18", 7458 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.18.tgz", 7459 - "integrity": "sha512-BHnXmexzEWRU2ZySJosU0Ts0NRnJnNrMB6t4EiIaOSel73I8iLsNiTPLH0rJulAh19cYZutsB5XHK6N8fi5eMg==", 7460 "dev": true, 7461 "optional": true 7462 }, 7463 "@esbuild/freebsd-x64": { 7464 - "version": "0.18.18", 7465 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.18.tgz", 7466 - "integrity": "sha512-n823w35wm0ZOobbuE//0sJjuz1Qj619+AwjgOcAJMN2pomZhH9BONCtn+KlfrmM/NWZ+27yB/eGVFzUIWLeh3w==", 7467 "dev": true, 7468 "optional": true 7469 }, 7470 "@esbuild/linux-arm": { 7471 - "version": "0.18.18", 7472 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.18.tgz", 7473 - "integrity": "sha512-Kck3jxPLQU4VeAGwe8Q4NU+IWIx+suULYOFUI9T0C2J1+UQlOHJ08ITN+MaJJ+2youzJOmKmcphH/t3SJxQ1Tw==", 7474 "dev": true, 7475 "optional": true 7476 }, 7477 "@esbuild/linux-arm64": { 7478 - "version": "0.18.18", 7479 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.18.tgz", 7480 - "integrity": "sha512-zANxnwF0sCinDcAqoMohGoWBK9QaFJ65Vgh0ZE+RXtURaMwx+RfmfLElqtnn7X8OYNckMoIXSg7u+tZ3tqTlrA==", 7481 "dev": true, 7482 "optional": true 7483 }, 7484 "@esbuild/linux-ia32": { 7485 - "version": "0.18.18", 7486 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.18.tgz", 7487 - "integrity": "sha512-+VHz2sIRlY5u8IlaLJpdf5TL2kM76yx186pW7bpTB+vLWpzcFQVP04L842ZB2Ty13A1VXUvy3DbU1jV65P2skg==", 7488 "dev": true, 7489 "optional": true 7490 }, 7491 "@esbuild/linux-loong64": { 7492 - "version": "0.18.18", 7493 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.18.tgz", 7494 - "integrity": "sha512-fXPEPdeGBvguo/1+Na8OIWz3667BN1cwbGtTEZWTd0qdyTsk5gGf9jVX8MblElbDb/Cpw6y5JiaQuL96YmvBwQ==", 7495 "dev": true, 7496 "optional": true 7497 }, 7498 "@esbuild/linux-mips64el": { 7499 - "version": "0.18.18", 7500 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.18.tgz", 7501 - "integrity": "sha512-dLvRB87pIBIRnEIC32LIcgwK1JzlIuADIRjLKdUIpxauKwMuS/xMpN+cFl+0nN4RHNYOZ57DmXFFmQAcdlFOmw==", 7502 "dev": true, 7503 "optional": true 7504 }, 7505 "@esbuild/linux-ppc64": { 7506 - "version": "0.18.18", 7507 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.18.tgz", 7508 - "integrity": "sha512-fRChqIJZ7hLkXSKfBLYgsX9Ssb5OGCjk3dzCETF5QSS1qjTgayLv0ALUdJDB9QOh/nbWwp+qfLZU6md4XcjL7w==", 7509 "dev": true, 7510 "optional": true 7511 }, 7512 "@esbuild/linux-riscv64": { 7513 - "version": "0.18.18", 7514 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.18.tgz", 7515 - "integrity": "sha512-ALK/BT3u7Hoa/vHjow6W6+MKF0ohYcVcVA1EpskI4bkBPVuDLrUDqt2YFifg5UcZc8qup0CwQqWmFUd6VMNgaA==", 7516 "dev": true, 7517 "optional": true 7518 }, 7519 "@esbuild/linux-s390x": { 7520 - "version": "0.18.18", 7521 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.18.tgz", 7522 - "integrity": "sha512-crT7jtOXd9iirY65B+mJQ6W0HWdNy8dtkZqKGWNcBnunpLcTCfne5y5bKic9bhyYzKpQEsO+C/VBPD8iF0RhRw==", 7523 "dev": true, 7524 "optional": true 7525 }, 7526 "@esbuild/linux-x64": { 7527 - "version": "0.18.18", 7528 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.18.tgz", 7529 - "integrity": "sha512-/NSgghjBOW9ELqjXDYxOCCIsvQUZpvua1/6NdnA9Vnrp9UzEydyDdFXljUjMMS9p5KxMzbMO9frjHYGVHBfCHg==", 7530 "dev": true, 7531 "optional": true 7532 }, 7533 "@esbuild/netbsd-x64": { 7534 - "version": "0.18.18", 7535 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.18.tgz", 7536 - "integrity": "sha512-8Otf05Vx5sZjLLDulgr5QS5lsWXMplKZEyHMArH9/S4olLlhzmdhQBPhzhJTNwaL2FJNdWcUPNGAcoD5zDTfUA==", 7537 "dev": true, 7538 "optional": true 7539 }, 7540 "@esbuild/openbsd-x64": { 7541 - "version": "0.18.18", 7542 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.18.tgz", 7543 - "integrity": "sha512-tFiFF4kT5L5qhVrWJUNxEXWvvX8nK/UX9ZrB7apuTwY3f6+Xy4aFMBPwAVrBYtBd5MOUuyOVHK6HBZCAHkwUlw==", 7544 "dev": true, 7545 "optional": true 7546 }, 7547 "@esbuild/sunos-x64": { 7548 - "version": "0.18.18", 7549 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.18.tgz", 7550 - "integrity": "sha512-MPogVV8Bzh8os4OM+YDGGsSzCzmNRiyKGtHoJyZLtI4BMmd6EcxmGlcEGK1uM46h1BiOyi7Z7teUtzzQhvkC+w==", 7551 "dev": true, 7552 "optional": true 7553 }, 7554 "@esbuild/win32-arm64": { 7555 - "version": "0.18.18", 7556 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.18.tgz", 7557 - "integrity": "sha512-YKD6LF/XXY9REu+ZL5RAsusiG48n602qxsMVh/E8FFD9hp4OyTQaL9fpE1ovxwQXqFio+tT0ITUGjDSSSPN13w==", 7558 "dev": true, 7559 "optional": true 7560 }, 7561 "@esbuild/win32-ia32": { 7562 - "version": "0.18.18", 7563 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.18.tgz", 7564 - "integrity": "sha512-NjSBmBsyZBTsZB6ga6rA6PfG/RHnwruUz/9YEVXcm4STGauFWvhYhOMhEyw1yU5NVgYYm8CH5AltCm77TS21/Q==", 7565 "dev": true, 7566 "optional": true 7567 }, 7568 "@esbuild/win32-x64": { 7569 - "version": "0.18.18", 7570 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.18.tgz", 7571 - "integrity": "sha512-eTSg/gC3p3tdjj4roDhe5xu94l1s2jMazP8u2FsYO8SEKvSpPOO71EucprDn/IuErDPvTFUhV9lTw5z5WJCRKQ==", 7572 "dev": true, 7573 "optional": true 7574 }, ··· 7588 "dev": true 7589 }, 7590 "@eslint/eslintrc": { 7591 - "version": "2.1.1", 7592 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", 7593 - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", 7594 "dev": true, 7595 "requires": { 7596 "ajv": "^6.12.4", ··· 7605 } 7606 }, 7607 "@eslint/js": { 7608 - "version": "8.46.0", 7609 - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", 7610 - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", 7611 "dev": true 7612 }, 7613 "@humanwhocodes/config-array": { 7614 - "version": "0.11.10", 7615 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", 7616 - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", 7617 "dev": true, 7618 "requires": { 7619 - "@humanwhocodes/object-schema": "^1.2.1", 7620 - "debug": "^4.1.1", 7621 "minimatch": "^3.0.5" 7622 } 7623 }, ··· 7628 "dev": true 7629 }, 7630 "@humanwhocodes/object-schema": { 7631 - "version": "1.2.1", 7632 - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 7633 - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 7634 "dev": true 7635 }, 7636 "@ipld/dag-cbor": { ··· 8166 "dev": true 8167 }, 8168 "@types/json-schema": { 8169 - "version": "7.0.12", 8170 - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", 8171 - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", 8172 "dev": true 8173 }, 8174 "@types/keyv": { ··· 8195 } 8196 }, 8197 "@types/semver": { 8198 - "version": "7.5.0", 8199 - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", 8200 - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", 8201 "dev": true 8202 }, 8203 "@types/tv4": { ··· 8216 } 8217 }, 8218 "@typescript-eslint/eslint-plugin": { 8219 - "version": "6.2.1", 8220 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.1.tgz", 8221 - "integrity": "sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==", 8222 "dev": true, 8223 "requires": { 8224 "@eslint-community/regexpp": "^4.5.1", 8225 - "@typescript-eslint/scope-manager": "6.2.1", 8226 - "@typescript-eslint/type-utils": "6.2.1", 8227 - "@typescript-eslint/utils": "6.2.1", 8228 - "@typescript-eslint/visitor-keys": "6.2.1", 8229 "debug": "^4.3.4", 8230 "graphemer": "^1.4.0", 8231 "ignore": "^5.2.4", 8232 "natural-compare": "^1.4.0", 8233 - "natural-compare-lite": "^1.4.0", 8234 "semver": "^7.5.4", 8235 "ts-api-utils": "^1.0.1" 8236 } 8237 }, 8238 "@typescript-eslint/parser": { 8239 - "version": "6.2.1", 8240 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.1.tgz", 8241 - "integrity": "sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==", 8242 "dev": true, 8243 "requires": { 8244 - "@typescript-eslint/scope-manager": "6.2.1", 8245 - "@typescript-eslint/types": "6.2.1", 8246 - "@typescript-eslint/typescript-estree": "6.2.1", 8247 - "@typescript-eslint/visitor-keys": "6.2.1", 8248 "debug": "^4.3.4" 8249 } 8250 }, 8251 "@typescript-eslint/scope-manager": { 8252 - "version": "6.2.1", 8253 - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.1.tgz", 8254 - "integrity": "sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==", 8255 "dev": true, 8256 "requires": { 8257 - "@typescript-eslint/types": "6.2.1", 8258 - "@typescript-eslint/visitor-keys": "6.2.1" 8259 } 8260 }, 8261 "@typescript-eslint/type-utils": { 8262 - "version": "6.2.1", 8263 - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.1.tgz", 8264 - "integrity": "sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==", 8265 "dev": true, 8266 "requires": { 8267 - "@typescript-eslint/typescript-estree": "6.2.1", 8268 - "@typescript-eslint/utils": "6.2.1", 8269 "debug": "^4.3.4", 8270 "ts-api-utils": "^1.0.1" 8271 } 8272 }, 8273 "@typescript-eslint/types": { 8274 - "version": "6.2.1", 8275 - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.1.tgz", 8276 - "integrity": "sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==", 8277 "dev": true 8278 }, 8279 "@typescript-eslint/typescript-estree": { 8280 - "version": "6.2.1", 8281 - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.1.tgz", 8282 - "integrity": "sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==", 8283 "dev": true, 8284 "requires": { 8285 - "@typescript-eslint/types": "6.2.1", 8286 - "@typescript-eslint/visitor-keys": "6.2.1", 8287 "debug": "^4.3.4", 8288 "globby": "^11.1.0", 8289 "is-glob": "^4.0.3", 8290 "semver": "^7.5.4", 8291 "ts-api-utils": "^1.0.1" 8292 } 8293 }, 8294 "@typescript-eslint/utils": { 8295 - "version": "6.2.1", 8296 - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.1.tgz", 8297 - "integrity": "sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==", 8298 "dev": true, 8299 "requires": { 8300 "@eslint-community/eslint-utils": "^4.4.0", 8301 "@types/json-schema": "^7.0.12", 8302 "@types/semver": "^7.5.0", 8303 - "@typescript-eslint/scope-manager": "6.2.1", 8304 - "@typescript-eslint/types": "6.2.1", 8305 - "@typescript-eslint/typescript-estree": "6.2.1", 8306 "semver": "^7.5.4" 8307 } 8308 }, 8309 "@typescript-eslint/visitor-keys": { 8310 - "version": "6.2.1", 8311 - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.1.tgz", 8312 - "integrity": "sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==", 8313 "dev": true, 8314 "requires": { 8315 - "@typescript-eslint/types": "6.2.1", 8316 "eslint-visitor-keys": "^3.4.1" 8317 } 8318 }, 8319 "@zeit/schemas": { 8320 "version": "2.29.0", ··· 8353 } 8354 }, 8355 "acorn": { 8356 - "version": "8.10.0", 8357 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 8358 - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 8359 "dev": true 8360 }, 8361 "acorn-jsx": { ··· 8454 "dev": true 8455 }, 8456 "assert": { 8457 - "version": "2.0.0", 8458 - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", 8459 - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", 8460 "dev": true, 8461 "requires": { 8462 - "es6-object-assign": "^1.1.0", 8463 - "is-nan": "^1.2.1", 8464 - "object-is": "^1.0.1", 8465 - "util": "^0.12.0" 8466 } 8467 }, 8468 "at-least-node": { ··· 8472 "dev": true 8473 }, 8474 "autoprefixer": { 8475 - "version": "10.4.14", 8476 - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", 8477 - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", 8478 "dev": true, 8479 "requires": { 8480 - "browserslist": "^4.21.5", 8481 - "caniuse-lite": "^1.0.30001464", 8482 - "fraction.js": "^4.2.0", 8483 "normalize-range": "^0.1.2", 8484 "picocolors": "^1.0.0", 8485 "postcss-value-parser": "^4.2.0" ··· 8689 } 8690 }, 8691 "browserslist": { 8692 - "version": "4.21.5", 8693 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", 8694 - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", 8695 "dev": true, 8696 "requires": { 8697 - "caniuse-lite": "^1.0.30001449", 8698 - "electron-to-chromium": "^1.4.284", 8699 - "node-releases": "^2.0.8", 8700 - "update-browserslist-db": "^1.0.10" 8701 } 8702 }, 8703 "buffer": { ··· 8750 } 8751 }, 8752 "call-bind": { 8753 - "version": "1.0.2", 8754 - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 8755 - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 8756 "dev": true, 8757 "requires": { 8758 - "function-bind": "^1.1.1", 8759 - "get-intrinsic": "^1.0.2" 8760 } 8761 }, 8762 "callsites": { ··· 8867 "is-wsl": "^2.2.0" 8868 } 8869 }, 8870 "clone": { 8871 "version": "1.0.4", 8872 "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", ··· 9114 "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 9115 "dev": true 9116 }, 9117 "define-properties": { 9118 - "version": "1.2.0", 9119 - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 9120 - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 9121 "dev": true, 9122 "requires": { 9123 "has-property-descriptors": "^1.0.0", 9124 "object-keys": "^1.1.1" 9125 } ··· 9171 "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 9172 }, 9173 "electron-to-chromium": { 9174 - "version": "1.4.377", 9175 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.377.tgz", 9176 - "integrity": "sha512-H3BYG6DW5Z+l0xcfXaicJGxrpA4kMlCxnN71+iNX+dBLkRMOdVJqFJiAmbNZZKA1zISpRg17JR03qGifXNsJtw==", 9177 "dev": true 9178 }, 9179 "elm": { ··· 9188 "@elm_binaries/win32_x64": "0.19.1-0" 9189 } 9190 }, 9191 "elm-review": { 9192 - "version": "2.10.2", 9193 - "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.2.tgz", 9194 - "integrity": "sha512-9cgv3ILetV/Gb/cr42ZHYWHK5hrnl1UsGuxah1DL/NI6EZlu+GrwaSng4DvYsETrccaoNzRJMuhfv7JoPCdK/A==", 9195 "dev": true, 9196 "requires": { 9197 "chalk": "^4.0.0", 9198 "chokidar": "^3.5.2", 9199 "cross-spawn": "^7.0.3", 9200 - "elm-tooling": "^1.6.0", 9201 - "fast-levenshtein": "^3.0.0", 9202 "find-up": "^4.1.0", 9203 "folder-hash": "^3.3.0", 9204 "fs-extra": "^9.0.0", ··· 9266 "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" 9267 }, 9268 "elm-tooling": { 9269 - "version": "1.14.0", 9270 - "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.14.0.tgz", 9271 - "integrity": "sha512-cIbK3gfYWK086HsqOIGM4reIYcV/FF2R/8jIJ6ZUy1/RSkYFUv2BgPTGYYZo1Io9oymmbwoCWWleNtw7LgGL2w==", 9272 "dev": true 9273 }, 9274 "emitter-component": { ··· 9296 "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 9297 "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 9298 }, 9299 - "es6-object-assign": { 9300 - "version": "1.1.0", 9301 - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", 9302 - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", 9303 "dev": true 9304 }, 9305 "esbuild": { 9306 - "version": "0.18.18", 9307 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.18.tgz", 9308 - "integrity": "sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==", 9309 "dev": true, 9310 "requires": { 9311 - "@esbuild/android-arm": "0.18.18", 9312 - "@esbuild/android-arm64": "0.18.18", 9313 - "@esbuild/android-x64": "0.18.18", 9314 - "@esbuild/darwin-arm64": "0.18.18", 9315 - "@esbuild/darwin-x64": "0.18.18", 9316 - "@esbuild/freebsd-arm64": "0.18.18", 9317 - "@esbuild/freebsd-x64": "0.18.18", 9318 - "@esbuild/linux-arm": "0.18.18", 9319 - "@esbuild/linux-arm64": "0.18.18", 9320 - "@esbuild/linux-ia32": "0.18.18", 9321 - "@esbuild/linux-loong64": "0.18.18", 9322 - "@esbuild/linux-mips64el": "0.18.18", 9323 - "@esbuild/linux-ppc64": "0.18.18", 9324 - "@esbuild/linux-riscv64": "0.18.18", 9325 - "@esbuild/linux-s390x": "0.18.18", 9326 - "@esbuild/linux-x64": "0.18.18", 9327 - "@esbuild/netbsd-x64": "0.18.18", 9328 - "@esbuild/openbsd-x64": "0.18.18", 9329 - "@esbuild/sunos-x64": "0.18.18", 9330 - "@esbuild/win32-arm64": "0.18.18", 9331 - "@esbuild/win32-ia32": "0.18.18", 9332 - "@esbuild/win32-x64": "0.18.18" 9333 } 9334 }, 9335 - "escalade": { 9336 - "version": "3.1.1", 9337 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 9338 - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 9339 "dev": true 9340 }, 9341 "escape-string-regexp": { 9342 "version": "4.0.0", ··· 9345 "dev": true 9346 }, 9347 "eslint": { 9348 - "version": "8.46.0", 9349 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", 9350 - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", 9351 "dev": true, 9352 "requires": { 9353 "@eslint-community/eslint-utils": "^4.2.0", 9354 "@eslint-community/regexpp": "^4.6.1", 9355 - "@eslint/eslintrc": "^2.1.1", 9356 - "@eslint/js": "^8.46.0", 9357 - "@humanwhocodes/config-array": "^0.11.10", 9358 "@humanwhocodes/module-importer": "^1.0.1", 9359 "@nodelib/fs.walk": "^1.2.8", 9360 "ajv": "^6.12.4", 9361 "chalk": "^4.0.0", 9362 "cross-spawn": "^7.0.2", ··· 9364 "doctrine": "^3.0.0", 9365 "escape-string-regexp": "^4.0.0", 9366 "eslint-scope": "^7.2.2", 9367 - "eslint-visitor-keys": "^3.4.2", 9368 "espree": "^9.6.1", 9369 "esquery": "^1.4.2", 9370 "esutils": "^2.0.2", ··· 9448 } 9449 }, 9450 "eslint-visitor-keys": { 9451 - "version": "3.4.2", 9452 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", 9453 - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", 9454 "dev": true 9455 }, 9456 "esm": { ··· 9555 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 9556 }, 9557 "fast-glob": { 9558 - "version": "3.2.12", 9559 - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 9560 - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 9561 "dev": true, 9562 "requires": { 9563 "@nodelib/fs.stat": "^2.0.2", ··· 9573 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 9574 "dev": true 9575 }, 9576 - "fast-levenshtein": { 9577 - "version": "3.0.0", 9578 - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", 9579 - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", 9580 - "dev": true, 9581 - "requires": { 9582 - "fastest-levenshtein": "^1.0.7" 9583 - } 9584 - }, 9585 "fast-text-encoding": { 9586 "version": "1.0.6", 9587 "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", ··· 9649 "version": "2.0.5", 9650 "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", 9651 "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" 9652 }, 9653 "fill-range": { 9654 "version": "7.0.1", ··· 9770 } 9771 }, 9772 "fraction.js": { 9773 - "version": "4.2.0", 9774 - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 9775 - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 9776 "dev": true 9777 }, 9778 "fs-extra": { ··· 9800 "optional": true 9801 }, 9802 "function-bind": { 9803 - "version": "1.1.1", 9804 - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 9805 - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 9806 "dev": true 9807 }, 9808 "get-intrinsic": { 9809 - "version": "1.2.0", 9810 - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 9811 - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 9812 "dev": true, 9813 "requires": { 9814 - "function-bind": "^1.1.1", 9815 - "has": "^1.0.3", 9816 - "has-symbols": "^1.0.3" 9817 } 9818 }, 9819 "get-stream": { ··· 9849 } 9850 }, 9851 "globals": { 9852 - "version": "13.20.0", 9853 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 9854 - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 9855 "dev": true, 9856 "requires": { 9857 "type-fest": "^0.20.2" ··· 9944 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 9945 }, 9946 "has-property-descriptors": { 9947 - "version": "1.0.0", 9948 - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 9949 - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 9950 "dev": true, 9951 "requires": { 9952 - "get-intrinsic": "^1.1.1" 9953 } 9954 }, 9955 "has-symbols": { 9956 "version": "1.0.3", 9957 "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", ··· 9965 "dev": true, 9966 "requires": { 9967 "has-symbols": "^1.0.2" 9968 } 9969 }, 9970 "http-cache-semantics": { ··· 10449 } 10450 }, 10451 "jiti": { 10452 - "version": "1.18.2", 10453 - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", 10454 - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", 10455 "dev": true 10456 }, 10457 "js-yaml": { ··· 10750 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 10751 "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" 10752 }, 10753 "merge-options": { 10754 "version": "3.0.4", 10755 "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", ··· 10855 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", 10856 "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" 10857 }, 10858 "music-metadata-browser": { 10859 "version": "2.5.10", 10860 "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-2.5.10.tgz", ··· 10865 "music-metadata": "^7.13.3", 10866 "readable-stream": "^4.3.0", 10867 "readable-web-to-node-stream": "^3.0.2" 10868 - }, 10869 - "dependencies": { 10870 - "file-type": { 10871 - "version": "16.5.4", 10872 - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", 10873 - "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", 10874 - "requires": { 10875 - "readable-web-to-node-stream": "^3.0.0", 10876 - "strtok3": "^6.2.4", 10877 - "token-types": "^4.1.1" 10878 - } 10879 - }, 10880 - "music-metadata": { 10881 - "version": "7.13.4", 10882 - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.13.4.tgz", 10883 - "integrity": "sha512-eRRoEMhhYdth2Ws24FmkvIqrtkIBE9sqjHbrRNpkg2Iux3zc37PQKRv2/r/mTtELb7XlB1uWC2UcKKX7BzNMGA==", 10884 - "requires": { 10885 - "@tokenizer/token": "^0.3.0", 10886 - "content-type": "^1.0.5", 10887 - "debug": "^4.3.4", 10888 - "file-type": "^16.5.4", 10889 - "media-typer": "^1.1.0", 10890 - "strtok3": "^6.3.0", 10891 - "token-types": "^4.2.1" 10892 - } 10893 - }, 10894 - "token-types": { 10895 - "version": "4.2.1", 10896 - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", 10897 - "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", 10898 - "requires": { 10899 - "@tokenizer/token": "^0.3.0", 10900 - "ieee754": "^1.2.1" 10901 - } 10902 - } 10903 } 10904 }, 10905 "mz": { ··· 10914 } 10915 }, 10916 "nanoid": { 10917 - "version": "3.3.6", 10918 - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 10919 - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 10920 "dev": true 10921 }, 10922 "napi-macros": { ··· 10934 "version": "1.4.0", 10935 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 10936 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 10937 - "dev": true 10938 - }, 10939 - "natural-compare-lite": { 10940 - "version": "1.4.0", 10941 - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", 10942 - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", 10943 "dev": true 10944 }, 10945 "negotiator": { ··· 10967 "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" 10968 }, 10969 "node-releases": { 10970 - "version": "2.0.10", 10971 - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", 10972 - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", 10973 "dev": true 10974 }, 10975 "normalize-path": { ··· 11025 "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 11026 "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 11027 "dev": true 11028 }, 11029 "observable-webworkers": { 11030 "version": "2.0.1", ··· 11255 "dev": true 11256 }, 11257 "postcss": { 11258 - "version": "8.4.27", 11259 - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", 11260 - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", 11261 "dev": true, 11262 "requires": { 11263 - "nanoid": "^3.3.6", 11264 "picocolors": "^1.0.0", 11265 "source-map-js": "^1.0.2" 11266 } 11267 }, 11268 "postcss-custom-properties": { 11269 - "version": "13.3.0", 11270 - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.0.tgz", 11271 - "integrity": "sha512-q4VgtIKSy5+KcUvQ0WxTjDy9DZjQ5VCXAZ9+tT9+aPMbA0z6s2t1nMw0QHszru1ib5ElkXl9JUpYYU37VVUs7g==", 11272 "dev": true, 11273 "requires": { 11274 - "@csstools/cascade-layer-name-parser": "^1.0.4", 11275 - "@csstools/css-parser-algorithms": "^2.3.1", 11276 - "@csstools/css-tokenizer": "^2.2.0", 11277 "postcss-value-parser": "^4.2.0" 11278 } 11279 }, 11280 "postcss-import": { 11281 - "version": "15.1.0", 11282 - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 11283 - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 11284 "dev": true, 11285 "requires": { 11286 "postcss-value-parser": "^4.0.0", ··· 11446 } 11447 }, 11448 "readable-stream": { 11449 - "version": "4.4.2", 11450 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", 11451 - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", 11452 "requires": { 11453 "abort-controller": "^3.0.0", 11454 "buffer": "^6.0.3", ··· 11537 } 11538 } 11539 }, 11540 "require-from-string": { 11541 "version": "2.0.2", 11542 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 11716 } 11717 } 11718 }, 11719 "setimmediate": { 11720 "version": "1.0.5", 11721 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ··· 11908 "dev": true 11909 }, 11910 "tailwindcss": { 11911 - "version": "3.3.3", 11912 - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", 11913 - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", 11914 "dev": true, 11915 "requires": { 11916 "@alloc/quick-lru": "^5.2.0", ··· 11918 "chokidar": "^3.5.3", 11919 "didyoumean": "^1.2.2", 11920 "dlv": "^1.1.3", 11921 - "fast-glob": "^3.2.12", 11922 "glob-parent": "^6.0.2", 11923 "is-glob": "^4.0.3", 11924 - "jiti": "^1.18.2", 11925 "lilconfig": "^2.1.0", 11926 "micromatch": "^4.0.5", 11927 "normalize-path": "^3.0.0", ··· 11945 "requires": { 11946 "is-glob": "^4.0.3" 11947 } 11948 } 11949 } 11950 }, ··· 12010 "version": "1.0.4", 12011 "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", 12012 "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" 12013 }, 12014 "to-regex-range": { 12015 "version": "5.0.1", ··· 12025 "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", 12026 "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" 12027 }, 12028 "tr46": { 12029 "version": "0.0.3", 12030 "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", ··· 12084 } 12085 }, 12086 "uint8arrays": { 12087 - "version": "4.0.6", 12088 - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.6.tgz", 12089 - "integrity": "sha512-4ZesjQhqOU2Ip6GPReIwN60wRxIupavL8T0Iy36BBHr2qyMrNxsPJvr7vpS4eFt8F8kSguWUPad6ZM9izs/vyw==", 12090 "requires": { 12091 "multiformats": "^12.0.1" 12092 }, ··· 12113 "dev": true 12114 }, 12115 "update-browserslist-db": { 12116 - "version": "1.0.11", 12117 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 12118 - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 12119 "dev": true, 12120 "requires": { 12121 "escalade": "^3.1.1", ··· 12316 "cuint": "^0.2.2" 12317 } 12318 }, 12319 "yallist": { 12320 "version": "4.0.0", 12321 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", ··· 12327 "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", 12328 "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", 12329 "dev": true 12330 }, 12331 "yauzl": { 12332 "version": "2.10.0",
··· 18 "load-script2": "^2.0.5", 19 "localforage": "^1.10.0", 20 "lunr": "^2.3.8", 21 + "mediainfo.js": "^0.2.1", 22 "music-metadata-browser": "^2.5.10", 23 + "readable-stream": "^4.5.2", 24 "remotestoragejs": "^2.0.0-beta.6", 25 "serve": "^14.2.1", 26 "throttle-debounce": "^5.0.0", 27 "timer.js": "^1.0.4", 28 "tocca": "^2.0.9", 29 + "uint8arrays": "^4.0.10" 30 }, 31 "devDependencies": { 32 + "@typescript-eslint/eslint-plugin": "^6.21.0", 33 + "@typescript-eslint/parser": "^6.21.0", 34 + "assert": "^2.1.0", 35 + "autoprefixer": "^10.4.17", 36 "buffer": "^6.0.3", 37 "elm": "0.19.1-6", 38 + "elm-format": "^0.8.7", 39 + "elm-review": "^2.10.3", 40 + "esbuild": "^0.20.0", 41 + "esbuild-plugin-wasm": "^1.1.0", 42 + "eslint": "^8.56.0", 43 "events": "^3.3.0", 44 "gren-lang": "^0.3.0", 45 "just-install": "^2.0.1", 46 + "postcss": "^8.4.34", 47 + "postcss-custom-properties": "^13.3.4", 48 + "postcss-import": "^16.0.0", 49 "stream": "^0.0.2", 50 + "tailwindcss": "^3.4.1", 51 "tailwindcss-animations": "^2.0.0", 52 + "tailwindcss-interaction-variants": "^5.0.0", 53 + "tiny-parse-argv": "^2.4.0" 54 } 55 }, 56 "node_modules/@aashutoshrathi/word-wrap": { ··· 74 "url": "https://github.com/sponsors/sindresorhus" 75 } 76 }, 77 + "node_modules/@avh4/elm-format-darwin-arm64": { 78 + "version": "0.8.7-2", 79 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-arm64/-/elm-format-darwin-arm64-0.8.7-2.tgz", 80 + "integrity": "sha512-F5JD44mJ3KX960J5GkXMfh1/dtkXuPcQpX2EToHQKjLTZUfnhZ++ytQQt0gAvrJ0bzoOvhNzjNjUHDA1ruTVbg==", 81 + "cpu": [ 82 + "arm64" 83 + ], 84 + "dev": true, 85 + "optional": true, 86 + "os": [ 87 + "darwin" 88 + ] 89 + }, 90 + "node_modules/@avh4/elm-format-darwin-x64": { 91 + "version": "0.8.7-2", 92 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-x64/-/elm-format-darwin-x64-0.8.7-2.tgz", 93 + "integrity": "sha512-4pfF1cl0KyTion+7Mg4XKM3yi4Yc7vP76Kt/DotLVGJOSag4ISGic1og2mt8RZZ7XArybBmHNyYkiUbe/cEiCw==", 94 + "cpu": [ 95 + "x64" 96 + ], 97 + "dev": true, 98 + "optional": true, 99 + "os": [ 100 + "darwin" 101 + ] 102 + }, 103 + "node_modules/@avh4/elm-format-linux-arm64": { 104 + "version": "0.8.7-2", 105 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-arm64/-/elm-format-linux-arm64-0.8.7-2.tgz", 106 + "integrity": "sha512-WkVmuce2zU6s9dupHhqPc886Vaqpea8dZlxv2fpZ4wSzPUbiiKHoHZzoVndMIMTUL0TZukP3Ps0n/lWO5R5+FA==", 107 + "cpu": [ 108 + "arm64" 109 + ], 110 + "dev": true, 111 + "optional": true, 112 + "os": [ 113 + "linux" 114 + ] 115 + }, 116 + "node_modules/@avh4/elm-format-linux-x64": { 117 + "version": "0.8.7-2", 118 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-x64/-/elm-format-linux-x64-0.8.7-2.tgz", 119 + "integrity": "sha512-kmncfJrTBjVT94JtQvMf4M5Pn2Yl0sZt3wo7AzgFiDnB/CiZ+KjJyXuWM64NeGiv4MQqzPq65tsFXUH1CIJeiQ==", 120 + "cpu": [ 121 + "x64" 122 + ], 123 + "dev": true, 124 + "optional": true, 125 + "os": [ 126 + "linux" 127 + ] 128 + }, 129 + "node_modules/@avh4/elm-format-win32-x64": { 130 + "version": "0.8.7-2", 131 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-win32-x64/-/elm-format-win32-x64-0.8.7-2.tgz", 132 + "integrity": "sha512-sBdMBGq/8mD8Y5C+fIr5vlb3N50yB7S1MfgeAq2QEbvkr/sKrCZI540i43lZDH9gWsfA1w2W8wCe0penFYzsGw==", 133 + "cpu": [ 134 + "x64" 135 + ], 136 + "dev": true, 137 + "optional": true, 138 + "os": [ 139 + "win32" 140 + ] 141 + }, 142 "node_modules/@chainsafe/is-ip": { 143 "version": "2.0.1", 144 "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", ··· 153 } 154 }, 155 "node_modules/@csstools/cascade-layer-name-parser": { 156 + "version": "1.0.7", 157 + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz", 158 + "integrity": "sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==", 159 "dev": true, 160 "funding": [ 161 { ··· 171 "node": "^14 || ^16 || >=18" 172 }, 173 "peerDependencies": { 174 + "@csstools/css-parser-algorithms": "^2.5.0", 175 + "@csstools/css-tokenizer": "^2.2.3" 176 } 177 }, 178 "node_modules/@csstools/css-parser-algorithms": { 179 + "version": "2.5.0", 180 + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", 181 + "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==", 182 "dev": true, 183 "funding": [ 184 { ··· 194 "node": "^14 || ^16 || >=18" 195 }, 196 "peerDependencies": { 197 + "@csstools/css-tokenizer": "^2.2.3" 198 } 199 }, 200 "node_modules/@csstools/css-tokenizer": { 201 + "version": "2.2.3", 202 + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", 203 + "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", 204 "dev": true, 205 "funding": [ 206 { ··· 268 "win32" 269 ] 270 }, 271 + "node_modules/@esbuild/aix-ppc64": { 272 + "version": "0.20.0", 273 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", 274 + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", 275 + "cpu": [ 276 + "ppc64" 277 + ], 278 + "dev": true, 279 + "optional": true, 280 + "os": [ 281 + "aix" 282 + ], 283 + "engines": { 284 + "node": ">=12" 285 + } 286 + }, 287 "node_modules/@esbuild/android-arm": { 288 + "version": "0.20.0", 289 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", 290 + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", 291 "cpu": [ 292 "arm" 293 ], ··· 301 } 302 }, 303 "node_modules/@esbuild/android-arm64": { 304 + "version": "0.20.0", 305 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", 306 + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", 307 "cpu": [ 308 "arm64" 309 ], ··· 317 } 318 }, 319 "node_modules/@esbuild/android-x64": { 320 + "version": "0.20.0", 321 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", 322 + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", 323 "cpu": [ 324 "x64" 325 ], ··· 333 } 334 }, 335 "node_modules/@esbuild/darwin-arm64": { 336 + "version": "0.20.0", 337 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", 338 + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", 339 "cpu": [ 340 "arm64" 341 ], ··· 349 } 350 }, 351 "node_modules/@esbuild/darwin-x64": { 352 + "version": "0.20.0", 353 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", 354 + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", 355 "cpu": [ 356 "x64" 357 ], ··· 365 } 366 }, 367 "node_modules/@esbuild/freebsd-arm64": { 368 + "version": "0.20.0", 369 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", 370 + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", 371 "cpu": [ 372 "arm64" 373 ], ··· 381 } 382 }, 383 "node_modules/@esbuild/freebsd-x64": { 384 + "version": "0.20.0", 385 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", 386 + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", 387 "cpu": [ 388 "x64" 389 ], ··· 397 } 398 }, 399 "node_modules/@esbuild/linux-arm": { 400 + "version": "0.20.0", 401 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", 402 + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", 403 "cpu": [ 404 "arm" 405 ], ··· 413 } 414 }, 415 "node_modules/@esbuild/linux-arm64": { 416 + "version": "0.20.0", 417 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", 418 + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", 419 "cpu": [ 420 "arm64" 421 ], ··· 429 } 430 }, 431 "node_modules/@esbuild/linux-ia32": { 432 + "version": "0.20.0", 433 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", 434 + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", 435 "cpu": [ 436 "ia32" 437 ], ··· 445 } 446 }, 447 "node_modules/@esbuild/linux-loong64": { 448 + "version": "0.20.0", 449 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", 450 + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", 451 "cpu": [ 452 "loong64" 453 ], ··· 461 } 462 }, 463 "node_modules/@esbuild/linux-mips64el": { 464 + "version": "0.20.0", 465 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", 466 + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", 467 "cpu": [ 468 "mips64el" 469 ], ··· 477 } 478 }, 479 "node_modules/@esbuild/linux-ppc64": { 480 + "version": "0.20.0", 481 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", 482 + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", 483 "cpu": [ 484 "ppc64" 485 ], ··· 493 } 494 }, 495 "node_modules/@esbuild/linux-riscv64": { 496 + "version": "0.20.0", 497 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", 498 + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", 499 "cpu": [ 500 "riscv64" 501 ], ··· 509 } 510 }, 511 "node_modules/@esbuild/linux-s390x": { 512 + "version": "0.20.0", 513 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", 514 + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", 515 "cpu": [ 516 "s390x" 517 ], ··· 525 } 526 }, 527 "node_modules/@esbuild/linux-x64": { 528 + "version": "0.20.0", 529 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", 530 + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", 531 "cpu": [ 532 "x64" 533 ], ··· 541 } 542 }, 543 "node_modules/@esbuild/netbsd-x64": { 544 + "version": "0.20.0", 545 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", 546 + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", 547 "cpu": [ 548 "x64" 549 ], ··· 557 } 558 }, 559 "node_modules/@esbuild/openbsd-x64": { 560 + "version": "0.20.0", 561 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", 562 + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", 563 "cpu": [ 564 "x64" 565 ], ··· 573 } 574 }, 575 "node_modules/@esbuild/sunos-x64": { 576 + "version": "0.20.0", 577 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", 578 + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", 579 "cpu": [ 580 "x64" 581 ], ··· 589 } 590 }, 591 "node_modules/@esbuild/win32-arm64": { 592 + "version": "0.20.0", 593 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", 594 + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", 595 "cpu": [ 596 "arm64" 597 ], ··· 605 } 606 }, 607 "node_modules/@esbuild/win32-ia32": { 608 + "version": "0.20.0", 609 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", 610 + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", 611 "cpu": [ 612 "ia32" 613 ], ··· 621 } 622 }, 623 "node_modules/@esbuild/win32-x64": { 624 + "version": "0.20.0", 625 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", 626 + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", 627 "cpu": [ 628 "x64" 629 ], ··· 661 } 662 }, 663 "node_modules/@eslint/eslintrc": { 664 + "version": "2.1.4", 665 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 666 + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 667 "dev": true, 668 "dependencies": { 669 "ajv": "^6.12.4", ··· 684 } 685 }, 686 "node_modules/@eslint/js": { 687 + "version": "8.56.0", 688 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", 689 + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", 690 "dev": true, 691 "engines": { 692 "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 693 } 694 }, 695 "node_modules/@humanwhocodes/config-array": { 696 + "version": "0.11.14", 697 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 698 + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 699 "dev": true, 700 "dependencies": { 701 + "@humanwhocodes/object-schema": "^2.0.2", 702 + "debug": "^4.3.1", 703 "minimatch": "^3.0.5" 704 }, 705 "engines": { ··· 720 } 721 }, 722 "node_modules/@humanwhocodes/object-schema": { 723 + "version": "2.0.2", 724 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 725 + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 726 "dev": true 727 }, 728 "node_modules/@ipld/dag-cbor": { ··· 1424 "dev": true 1425 }, 1426 "node_modules/@types/json-schema": { 1427 + "version": "7.0.15", 1428 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1429 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1430 "dev": true 1431 }, 1432 "node_modules/@types/keyv": { ··· 1453 } 1454 }, 1455 "node_modules/@types/semver": { 1456 + "version": "7.5.6", 1457 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", 1458 + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", 1459 "dev": true 1460 }, 1461 "node_modules/@types/tv4": { ··· 1474 } 1475 }, 1476 "node_modules/@typescript-eslint/eslint-plugin": { 1477 + "version": "6.21.0", 1478 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", 1479 + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", 1480 "dev": true, 1481 "dependencies": { 1482 "@eslint-community/regexpp": "^4.5.1", 1483 + "@typescript-eslint/scope-manager": "6.21.0", 1484 + "@typescript-eslint/type-utils": "6.21.0", 1485 + "@typescript-eslint/utils": "6.21.0", 1486 + "@typescript-eslint/visitor-keys": "6.21.0", 1487 "debug": "^4.3.4", 1488 "graphemer": "^1.4.0", 1489 "ignore": "^5.2.4", 1490 "natural-compare": "^1.4.0", 1491 "semver": "^7.5.4", 1492 "ts-api-utils": "^1.0.1" 1493 }, ··· 1509 } 1510 }, 1511 "node_modules/@typescript-eslint/parser": { 1512 + "version": "6.21.0", 1513 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", 1514 + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", 1515 "dev": true, 1516 "dependencies": { 1517 + "@typescript-eslint/scope-manager": "6.21.0", 1518 + "@typescript-eslint/types": "6.21.0", 1519 + "@typescript-eslint/typescript-estree": "6.21.0", 1520 + "@typescript-eslint/visitor-keys": "6.21.0", 1521 "debug": "^4.3.4" 1522 }, 1523 "engines": { ··· 1537 } 1538 }, 1539 "node_modules/@typescript-eslint/scope-manager": { 1540 + "version": "6.21.0", 1541 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", 1542 + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", 1543 "dev": true, 1544 "dependencies": { 1545 + "@typescript-eslint/types": "6.21.0", 1546 + "@typescript-eslint/visitor-keys": "6.21.0" 1547 }, 1548 "engines": { 1549 "node": "^16.0.0 || >=18.0.0" ··· 1554 } 1555 }, 1556 "node_modules/@typescript-eslint/type-utils": { 1557 + "version": "6.21.0", 1558 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", 1559 + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", 1560 "dev": true, 1561 "dependencies": { 1562 + "@typescript-eslint/typescript-estree": "6.21.0", 1563 + "@typescript-eslint/utils": "6.21.0", 1564 "debug": "^4.3.4", 1565 "ts-api-utils": "^1.0.1" 1566 }, ··· 1581 } 1582 }, 1583 "node_modules/@typescript-eslint/types": { 1584 + "version": "6.21.0", 1585 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", 1586 + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", 1587 "dev": true, 1588 "engines": { 1589 "node": "^16.0.0 || >=18.0.0" ··· 1594 } 1595 }, 1596 "node_modules/@typescript-eslint/typescript-estree": { 1597 + "version": "6.21.0", 1598 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", 1599 + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", 1600 "dev": true, 1601 "dependencies": { 1602 + "@typescript-eslint/types": "6.21.0", 1603 + "@typescript-eslint/visitor-keys": "6.21.0", 1604 "debug": "^4.3.4", 1605 "globby": "^11.1.0", 1606 "is-glob": "^4.0.3", 1607 + "minimatch": "9.0.3", 1608 "semver": "^7.5.4", 1609 "ts-api-utils": "^1.0.1" 1610 }, ··· 1621 } 1622 } 1623 }, 1624 + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 1625 + "version": "2.0.1", 1626 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1627 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1628 + "dev": true, 1629 + "dependencies": { 1630 + "balanced-match": "^1.0.0" 1631 + } 1632 + }, 1633 + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 1634 + "version": "9.0.3", 1635 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 1636 + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 1637 + "dev": true, 1638 + "dependencies": { 1639 + "brace-expansion": "^2.0.1" 1640 + }, 1641 + "engines": { 1642 + "node": ">=16 || 14 >=14.17" 1643 + }, 1644 + "funding": { 1645 + "url": "https://github.com/sponsors/isaacs" 1646 + } 1647 + }, 1648 "node_modules/@typescript-eslint/utils": { 1649 + "version": "6.21.0", 1650 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", 1651 + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", 1652 "dev": true, 1653 "dependencies": { 1654 "@eslint-community/eslint-utils": "^4.4.0", 1655 "@types/json-schema": "^7.0.12", 1656 "@types/semver": "^7.5.0", 1657 + "@typescript-eslint/scope-manager": "6.21.0", 1658 + "@typescript-eslint/types": "6.21.0", 1659 + "@typescript-eslint/typescript-estree": "6.21.0", 1660 "semver": "^7.5.4" 1661 }, 1662 "engines": { ··· 1671 } 1672 }, 1673 "node_modules/@typescript-eslint/visitor-keys": { 1674 + "version": "6.21.0", 1675 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", 1676 + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", 1677 "dev": true, 1678 "dependencies": { 1679 + "@typescript-eslint/types": "6.21.0", 1680 "eslint-visitor-keys": "^3.4.1" 1681 }, 1682 "engines": { ··· 1686 "type": "opencollective", 1687 "url": "https://opencollective.com/typescript-eslint" 1688 } 1689 + }, 1690 + "node_modules/@ungap/structured-clone": { 1691 + "version": "1.2.0", 1692 + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 1693 + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 1694 + "dev": true 1695 }, 1696 "node_modules/@zeit/schemas": { 1697 "version": "2.29.0", ··· 1739 } 1740 }, 1741 "node_modules/acorn": { 1742 + "version": "8.11.3", 1743 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 1744 + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 1745 "dev": true, 1746 "bin": { 1747 "acorn": "bin/acorn" ··· 1891 } 1892 }, 1893 "node_modules/assert": { 1894 + "version": "2.1.0", 1895 + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", 1896 + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", 1897 "dev": true, 1898 "dependencies": { 1899 + "call-bind": "^1.0.2", 1900 + "is-nan": "^1.3.2", 1901 + "object-is": "^1.1.5", 1902 + "object.assign": "^4.1.4", 1903 + "util": "^0.12.5" 1904 } 1905 }, 1906 "node_modules/at-least-node": { ··· 1913 } 1914 }, 1915 "node_modules/autoprefixer": { 1916 + "version": "10.4.17", 1917 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", 1918 + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", 1919 "dev": true, 1920 "funding": [ 1921 { ··· 1925 { 1926 "type": "tidelift", 1927 "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1928 + }, 1929 + { 1930 + "type": "github", 1931 + "url": "https://github.com/sponsors/ai" 1932 } 1933 ], 1934 "dependencies": { 1935 + "browserslist": "^4.22.2", 1936 + "caniuse-lite": "^1.0.30001578", 1937 + "fraction.js": "^4.3.7", 1938 "normalize-range": "^0.1.2", 1939 "picocolors": "^1.0.0", 1940 "postcss-value-parser": "^4.2.0" ··· 2256 } 2257 }, 2258 "node_modules/browserslist": { 2259 + "version": "4.22.3", 2260 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", 2261 + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", 2262 "dev": true, 2263 "funding": [ 2264 { ··· 2268 { 2269 "type": "tidelift", 2270 "url": "https://tidelift.com/funding/github/npm/browserslist" 2271 + }, 2272 + { 2273 + "type": "github", 2274 + "url": "https://github.com/sponsors/ai" 2275 } 2276 ], 2277 "dependencies": { 2278 + "caniuse-lite": "^1.0.30001580", 2279 + "electron-to-chromium": "^1.4.648", 2280 + "node-releases": "^2.0.14", 2281 + "update-browserslist-db": "^1.0.13" 2282 }, 2283 "bin": { 2284 "browserslist": "cli.js" ··· 2366 } 2367 }, 2368 "node_modules/call-bind": { 2369 + "version": "1.0.6", 2370 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", 2371 + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", 2372 "dev": true, 2373 "dependencies": { 2374 + "es-errors": "^1.3.0", 2375 + "function-bind": "^1.1.2", 2376 + "get-intrinsic": "^1.2.3", 2377 + "set-function-length": "^1.2.0" 2378 + }, 2379 + "engines": { 2380 + "node": ">= 0.4" 2381 }, 2382 "funding": { 2383 "url": "https://github.com/sponsors/ljharb" ··· 2569 }, 2570 "funding": { 2571 "url": "https://github.com/sponsors/sindresorhus" 2572 + } 2573 + }, 2574 + "node_modules/cliui": { 2575 + "version": "8.0.1", 2576 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 2577 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 2578 + "dependencies": { 2579 + "string-width": "^4.2.0", 2580 + "strip-ansi": "^6.0.1", 2581 + "wrap-ansi": "^7.0.0" 2582 + }, 2583 + "engines": { 2584 + "node": ">=12" 2585 + } 2586 + }, 2587 + "node_modules/cliui/node_modules/wrap-ansi": { 2588 + "version": "7.0.0", 2589 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2590 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2591 + "dependencies": { 2592 + "ansi-styles": "^4.0.0", 2593 + "string-width": "^4.1.0", 2594 + "strip-ansi": "^6.0.0" 2595 + }, 2596 + "engines": { 2597 + "node": ">=10" 2598 + }, 2599 + "funding": { 2600 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2601 } 2602 }, 2603 "node_modules/clone": { ··· 2939 "node": ">=10" 2940 } 2941 }, 2942 + "node_modules/define-data-property": { 2943 + "version": "1.1.2", 2944 + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", 2945 + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", 2946 + "dev": true, 2947 + "dependencies": { 2948 + "es-errors": "^1.3.0", 2949 + "get-intrinsic": "^1.2.2", 2950 + "gopd": "^1.0.1", 2951 + "has-property-descriptors": "^1.0.1" 2952 + }, 2953 + "engines": { 2954 + "node": ">= 0.4" 2955 + } 2956 + }, 2957 "node_modules/define-properties": { 2958 + "version": "1.2.1", 2959 + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 2960 + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 2961 "dev": true, 2962 "dependencies": { 2963 + "define-data-property": "^1.0.1", 2964 "has-property-descriptors": "^1.0.0", 2965 "object-keys": "^1.1.1" 2966 }, ··· 3028 "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 3029 }, 3030 "node_modules/electron-to-chromium": { 3031 + "version": "1.4.657", 3032 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.657.tgz", 3033 + "integrity": "sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w==", 3034 "dev": true 3035 }, 3036 "node_modules/elm": { ··· 3052 "@elm_binaries/win32_x64": "0.19.1-0" 3053 } 3054 }, 3055 + "node_modules/elm-format": { 3056 + "version": "0.8.7", 3057 + "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.7.tgz", 3058 + "integrity": "sha512-sVzFXfWnb+6rzXK+q3e3Ccgr6/uS5mFbFk1VSmigC+x2XZ28QycAa7lS8owl009ALPhRQk+pZ95Eq5ANjpEZsQ==", 3059 + "dev": true, 3060 + "hasInstallScript": true, 3061 + "bin": { 3062 + "elm-format": "bin/elm-format" 3063 + }, 3064 + "optionalDependencies": { 3065 + "@avh4/elm-format-darwin-arm64": "0.8.7-2", 3066 + "@avh4/elm-format-darwin-x64": "0.8.7-2", 3067 + "@avh4/elm-format-linux-arm64": "0.8.7-2", 3068 + "@avh4/elm-format-linux-x64": "0.8.7-2", 3069 + "@avh4/elm-format-win32-x64": "0.8.7-2" 3070 + } 3071 + }, 3072 "node_modules/elm-review": { 3073 + "version": "2.10.3", 3074 + "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.3.tgz", 3075 + "integrity": "sha512-9gBqLc5Xm3v9Ncpf8y2haEaBZZyMX25vmwQkrNqSIaNYQ2vdGOIx1eyqRtt1xwX5O8pZdqU8IWC/ENyTrOTKbw==", 3076 "dev": true, 3077 "dependencies": { 3078 "chalk": "^4.0.0", 3079 "chokidar": "^3.5.2", 3080 "cross-spawn": "^7.0.3", 3081 + "elm-tooling": "^1.14.1", 3082 + "fastest-levenshtein": "^1.0.16", 3083 "find-up": "^4.1.0", 3084 "folder-hash": "^3.3.0", 3085 "fs-extra": "^9.0.0", ··· 3176 "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" 3177 }, 3178 "node_modules/elm-tooling": { 3179 + "version": "1.15.0", 3180 + "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.0.tgz", 3181 + "integrity": "sha512-quRE5LGJyrkPBoJ3MvFQ5RGgf80J0L0d3NkduStvXh4TmZuMXNC3Z/l2ZRoq2UTUaNWeYfO1Zx5wns1AvsTrnw==", 3182 "dev": true, 3183 "bin": { 3184 "elm-tooling": "index.js" ··· 3209 "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 3210 "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 3211 }, 3212 + "node_modules/es-errors": { 3213 + "version": "1.3.0", 3214 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 3215 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 3216 + "dev": true, 3217 + "engines": { 3218 + "node": ">= 0.4" 3219 + } 3220 }, 3221 "node_modules/esbuild": { 3222 + "version": "0.20.0", 3223 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", 3224 + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", 3225 "dev": true, 3226 "hasInstallScript": true, 3227 "bin": { ··· 3231 "node": ">=12" 3232 }, 3233 "optionalDependencies": { 3234 + "@esbuild/aix-ppc64": "0.20.0", 3235 + "@esbuild/android-arm": "0.20.0", 3236 + "@esbuild/android-arm64": "0.20.0", 3237 + "@esbuild/android-x64": "0.20.0", 3238 + "@esbuild/darwin-arm64": "0.20.0", 3239 + "@esbuild/darwin-x64": "0.20.0", 3240 + "@esbuild/freebsd-arm64": "0.20.0", 3241 + "@esbuild/freebsd-x64": "0.20.0", 3242 + "@esbuild/linux-arm": "0.20.0", 3243 + "@esbuild/linux-arm64": "0.20.0", 3244 + "@esbuild/linux-ia32": "0.20.0", 3245 + "@esbuild/linux-loong64": "0.20.0", 3246 + "@esbuild/linux-mips64el": "0.20.0", 3247 + "@esbuild/linux-ppc64": "0.20.0", 3248 + "@esbuild/linux-riscv64": "0.20.0", 3249 + "@esbuild/linux-s390x": "0.20.0", 3250 + "@esbuild/linux-x64": "0.20.0", 3251 + "@esbuild/netbsd-x64": "0.20.0", 3252 + "@esbuild/openbsd-x64": "0.20.0", 3253 + "@esbuild/sunos-x64": "0.20.0", 3254 + "@esbuild/win32-arm64": "0.20.0", 3255 + "@esbuild/win32-ia32": "0.20.0", 3256 + "@esbuild/win32-x64": "0.20.0" 3257 + } 3258 + }, 3259 + "node_modules/esbuild-plugin-wasm": { 3260 + "version": "1.1.0", 3261 + "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", 3262 + "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", 3263 + "dev": true, 3264 + "engines": { 3265 + "node": ">=0.10.0" 3266 + }, 3267 + "funding": { 3268 + "type": "individual", 3269 + "url": "https://ko-fi.com/tschrock" 3270 } 3271 }, 3272 "node_modules/escalade": { 3273 + "version": "3.1.2", 3274 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 3275 + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 3276 "engines": { 3277 "node": ">=6" 3278 } ··· 3290 } 3291 }, 3292 "node_modules/eslint": { 3293 + "version": "8.56.0", 3294 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", 3295 + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", 3296 "dev": true, 3297 "dependencies": { 3298 "@eslint-community/eslint-utils": "^4.2.0", 3299 "@eslint-community/regexpp": "^4.6.1", 3300 + "@eslint/eslintrc": "^2.1.4", 3301 + "@eslint/js": "8.56.0", 3302 + "@humanwhocodes/config-array": "^0.11.13", 3303 "@humanwhocodes/module-importer": "^1.0.1", 3304 "@nodelib/fs.walk": "^1.2.8", 3305 + "@ungap/structured-clone": "^1.2.0", 3306 "ajv": "^6.12.4", 3307 "chalk": "^4.0.0", 3308 "cross-spawn": "^7.0.2", ··· 3310 "doctrine": "^3.0.0", 3311 "escape-string-regexp": "^4.0.0", 3312 "eslint-scope": "^7.2.2", 3313 + "eslint-visitor-keys": "^3.4.3", 3314 "espree": "^9.6.1", 3315 "esquery": "^1.4.2", 3316 "esutils": "^2.0.2", ··· 3361 } 3362 }, 3363 "node_modules/eslint-visitor-keys": { 3364 + "version": "3.4.3", 3365 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 3366 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 3367 "dev": true, 3368 "engines": { 3369 "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ··· 3592 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 3593 }, 3594 "node_modules/fast-glob": { 3595 + "version": "3.3.2", 3596 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 3597 + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 3598 "dev": true, 3599 "dependencies": { 3600 "@nodelib/fs.stat": "^2.0.2", ··· 3613 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 3614 "dev": true 3615 }, 3616 "node_modules/fast-text-encoding": { 3617 "version": "1.0.6", 3618 "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", ··· 3697 "version": "2.0.5", 3698 "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", 3699 "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" 3700 + }, 3701 + "node_modules/file-type": { 3702 + "version": "16.5.4", 3703 + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", 3704 + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", 3705 + "dependencies": { 3706 + "readable-web-to-node-stream": "^3.0.0", 3707 + "strtok3": "^6.2.4", 3708 + "token-types": "^4.1.1" 3709 + }, 3710 + "engines": { 3711 + "node": ">=10" 3712 + }, 3713 + "funding": { 3714 + "url": "https://github.com/sindresorhus/file-type?sponsor=1" 3715 + } 3716 }, 3717 "node_modules/fill-range": { 3718 "version": "7.0.1", ··· 3877 } 3878 }, 3879 "node_modules/fraction.js": { 3880 + "version": "4.3.7", 3881 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 3882 + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 3883 "dev": true, 3884 "engines": { 3885 "node": "*" 3886 }, 3887 "funding": { 3888 "type": "patreon", 3889 + "url": "https://github.com/sponsors/rawify" 3890 } 3891 }, 3892 "node_modules/fs-extra": { ··· 3924 } 3925 }, 3926 "node_modules/function-bind": { 3927 + "version": "1.1.2", 3928 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 3929 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 3930 + "dev": true, 3931 + "funding": { 3932 + "url": "https://github.com/sponsors/ljharb" 3933 + } 3934 + }, 3935 + "node_modules/get-caller-file": { 3936 + "version": "2.0.5", 3937 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 3938 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 3939 + "engines": { 3940 + "node": "6.* || 8.* || >= 10.*" 3941 + } 3942 }, 3943 "node_modules/get-intrinsic": { 3944 + "version": "1.2.4", 3945 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 3946 + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 3947 "dev": true, 3948 "dependencies": { 3949 + "es-errors": "^1.3.0", 3950 + "function-bind": "^1.1.2", 3951 + "has-proto": "^1.0.1", 3952 + "has-symbols": "^1.0.3", 3953 + "hasown": "^2.0.0" 3954 + }, 3955 + "engines": { 3956 + "node": ">= 0.4" 3957 }, 3958 "funding": { 3959 "url": "https://github.com/sponsors/ljharb" ··· 4007 } 4008 }, 4009 "node_modules/globals": { 4010 + "version": "13.24.0", 4011 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 4012 + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 4013 "dev": true, 4014 "dependencies": { 4015 "type-fest": "^0.20.2" ··· 4132 } 4133 }, 4134 "node_modules/has-property-descriptors": { 4135 + "version": "1.0.1", 4136 + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 4137 + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 4138 "dev": true, 4139 "dependencies": { 4140 + "get-intrinsic": "^1.2.2" 4141 + }, 4142 + "funding": { 4143 + "url": "https://github.com/sponsors/ljharb" 4144 + } 4145 + }, 4146 + "node_modules/has-proto": { 4147 + "version": "1.0.1", 4148 + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 4149 + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 4150 + "dev": true, 4151 + "engines": { 4152 + "node": ">= 0.4" 4153 }, 4154 "funding": { 4155 "url": "https://github.com/sponsors/ljharb" ··· 4180 }, 4181 "funding": { 4182 "url": "https://github.com/sponsors/ljharb" 4183 + } 4184 + }, 4185 + "node_modules/hasown": { 4186 + "version": "2.0.0", 4187 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 4188 + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 4189 + "dev": true, 4190 + "dependencies": { 4191 + "function-bind": "^1.1.2" 4192 + }, 4193 + "engines": { 4194 + "node": ">= 0.4" 4195 } 4196 }, 4197 "node_modules/http-cache-semantics": { ··· 4922 } 4923 }, 4924 "node_modules/jiti": { 4925 + "version": "1.21.0", 4926 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", 4927 + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", 4928 "dev": true, 4929 "bin": { 4930 "jiti": "bin/jiti.js" ··· 5295 "node": ">= 0.8" 5296 } 5297 }, 5298 + "node_modules/mediainfo.js": { 5299 + "version": "0.2.1", 5300 + "resolved": "https://registry.npmjs.org/mediainfo.js/-/mediainfo.js-0.2.1.tgz", 5301 + "integrity": "sha512-xbTstvy34gDmxNLVytixbY8Uw4DGKKsQIMvX7q1K8FwIk/gwAVLd30EVvPh/g+QHVscATRuqrNtbTb7XUjDeyw==", 5302 + "dependencies": { 5303 + "yargs": "^17.7.2" 5304 + }, 5305 + "bin": { 5306 + "mediainfo.js": "dist/esm/cli.js" 5307 + }, 5308 + "engines": { 5309 + "node": ">=14.16" 5310 + } 5311 + }, 5312 "node_modules/merge-options": { 5313 "version": "3.0.4", 5314 "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", ··· 5465 "npm": ">=7.0.0" 5466 } 5467 }, 5468 + "node_modules/music-metadata": { 5469 + "version": "7.14.0", 5470 + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.14.0.tgz", 5471 + "integrity": "sha512-xrm3w7SV0Wk+OythZcSbaI8mcr/KHd0knJieu8bVpaPfMv/Agz5EooCAPz3OR5hbYMiUG6dgAPKZKnMzV+3amA==", 5472 "dependencies": { 5473 "@tokenizer/token": "^0.3.0", 5474 "content-type": "^1.0.5", ··· 5486 "url": "https://github.com/sponsors/Borewit" 5487 } 5488 }, 5489 + "node_modules/music-metadata-browser": { 5490 + "version": "2.5.10", 5491 + "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-2.5.10.tgz", 5492 + "integrity": "sha512-03UnAmsSJoZZ5kK2BnEnd2zpH8LXRWQ6xlc7akKudhc2d9FT+yAiqapnmOzjW3g4cxxvIsSK5MVBO2Gi+Ymjfw==", 5493 "dependencies": { 5494 + "buffer": "^6.0.3", 5495 + "debug": "^4.3.4", 5496 + "music-metadata": "^7.13.3", 5497 + "readable-stream": "^4.3.0", 5498 + "readable-web-to-node-stream": "^3.0.2" 5499 }, 5500 "funding": { 5501 "type": "github", ··· 5514 } 5515 }, 5516 "node_modules/nanoid": { 5517 + "version": "3.3.7", 5518 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 5519 + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 5520 "dev": true, 5521 "funding": [ 5522 { ··· 5548 "version": "1.4.0", 5549 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 5550 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 5551 "dev": true 5552 }, 5553 "node_modules/negotiator": { ··· 5607 } 5608 }, 5609 "node_modules/node-releases": { 5610 + "version": "2.0.14", 5611 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 5612 + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 5613 "dev": true 5614 }, 5615 "node_modules/normalize-path": { ··· 5696 "node": ">= 0.4" 5697 } 5698 }, 5699 + "node_modules/object.assign": { 5700 + "version": "4.1.5", 5701 + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", 5702 + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", 5703 + "dev": true, 5704 + "dependencies": { 5705 + "call-bind": "^1.0.5", 5706 + "define-properties": "^1.2.1", 5707 + "has-symbols": "^1.0.3", 5708 + "object-keys": "^1.1.1" 5709 + }, 5710 + "engines": { 5711 + "node": ">= 0.4" 5712 + }, 5713 + "funding": { 5714 + "url": "https://github.com/sponsors/ljharb" 5715 + } 5716 + }, 5717 "node_modules/observable-webworkers": { 5718 "version": "2.0.1", 5719 "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", ··· 6035 } 6036 }, 6037 "node_modules/postcss": { 6038 + "version": "8.4.34", 6039 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", 6040 + "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", 6041 "dev": true, 6042 "funding": [ 6043 { ··· 6054 } 6055 ], 6056 "dependencies": { 6057 + "nanoid": "^3.3.7", 6058 "picocolors": "^1.0.0", 6059 "source-map-js": "^1.0.2" 6060 }, ··· 6063 } 6064 }, 6065 "node_modules/postcss-custom-properties": { 6066 + "version": "13.3.4", 6067 + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz", 6068 + "integrity": "sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==", 6069 "dev": true, 6070 "funding": [ 6071 { ··· 6078 } 6079 ], 6080 "dependencies": { 6081 + "@csstools/cascade-layer-name-parser": "^1.0.7", 6082 + "@csstools/css-parser-algorithms": "^2.5.0", 6083 + "@csstools/css-tokenizer": "^2.2.3", 6084 "postcss-value-parser": "^4.2.0" 6085 }, 6086 "engines": { ··· 6091 } 6092 }, 6093 "node_modules/postcss-import": { 6094 + "version": "16.0.0", 6095 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.0.0.tgz", 6096 + "integrity": "sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q==", 6097 "dev": true, 6098 "dependencies": { 6099 "postcss-value-parser": "^4.0.0", ··· 6101 "resolve": "^1.1.7" 6102 }, 6103 "engines": { 6104 + "node": ">=18.0.0" 6105 }, 6106 "peerDependencies": { 6107 "postcss": "^8.0.0" ··· 6350 } 6351 }, 6352 "node_modules/readable-stream": { 6353 + "version": "4.5.2", 6354 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", 6355 + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", 6356 "dependencies": { 6357 "abort-controller": "^3.0.0", 6358 "buffer": "^6.0.3", ··· 6458 "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", 6459 "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==" 6460 }, 6461 + "node_modules/require-directory": { 6462 + "version": "2.1.1", 6463 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 6464 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 6465 + "engines": { 6466 + "node": ">=0.10.0" 6467 + } 6468 + }, 6469 "node_modules/require-from-string": { 6470 "version": "2.0.2", 6471 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 6745 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 6746 "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 6747 }, 6748 + "node_modules/set-function-length": { 6749 + "version": "1.2.1", 6750 + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", 6751 + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", 6752 + "dev": true, 6753 + "dependencies": { 6754 + "define-data-property": "^1.1.2", 6755 + "es-errors": "^1.3.0", 6756 + "function-bind": "^1.1.2", 6757 + "get-intrinsic": "^1.2.3", 6758 + "gopd": "^1.0.1", 6759 + "has-property-descriptors": "^1.0.1" 6760 + }, 6761 + "engines": { 6762 + "node": ">= 0.4" 6763 + } 6764 + }, 6765 "node_modules/setimmediate": { 6766 "version": "1.0.5", 6767 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ··· 7032 } 7033 }, 7034 "node_modules/tailwindcss": { 7035 + "version": "3.4.1", 7036 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", 7037 + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", 7038 "dev": true, 7039 "dependencies": { 7040 "@alloc/quick-lru": "^5.2.0", ··· 7042 "chokidar": "^3.5.3", 7043 "didyoumean": "^1.2.2", 7044 "dlv": "^1.1.3", 7045 + "fast-glob": "^3.3.0", 7046 "glob-parent": "^6.0.2", 7047 "is-glob": "^4.0.3", 7048 + "jiti": "^1.19.1", 7049 "lilconfig": "^2.1.0", 7050 "micromatch": "^4.0.5", 7051 "normalize-path": "^3.0.0", ··· 7099 }, 7100 "engines": { 7101 "node": ">=10.13.0" 7102 + } 7103 + }, 7104 + "node_modules/tailwindcss/node_modules/postcss-import": { 7105 + "version": "15.1.0", 7106 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 7107 + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 7108 + "dev": true, 7109 + "dependencies": { 7110 + "postcss-value-parser": "^4.0.0", 7111 + "read-cache": "^1.0.0", 7112 + "resolve": "^1.1.7" 7113 + }, 7114 + "engines": { 7115 + "node": ">=14.0.0" 7116 + }, 7117 + "peerDependencies": { 7118 + "postcss": "^8.0.0" 7119 } 7120 }, 7121 "node_modules/terminal-link": { ··· 7174 "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", 7175 "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" 7176 }, 7177 + "node_modules/tiny-parse-argv": { 7178 + "version": "2.4.0", 7179 + "resolved": "https://registry.npmjs.org/tiny-parse-argv/-/tiny-parse-argv-2.4.0.tgz", 7180 + "integrity": "sha512-WTEsnmeHNr99hLQIDA+gnsS+fDsCDITlqgI+zEhx9M6ErPt0heoNZ1PGvql6wcf95sIx40J0MLYXaPveGwtpoA==", 7181 + "dev": true 7182 + }, 7183 "node_modules/to-regex-range": { 7184 "version": "5.0.1", 7185 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", ··· 7196 "version": "2.0.9", 7197 "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", 7198 "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" 7199 + }, 7200 + "node_modules/token-types": { 7201 + "version": "4.2.1", 7202 + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", 7203 + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", 7204 + "dependencies": { 7205 + "@tokenizer/token": "^0.3.0", 7206 + "ieee754": "^1.2.1" 7207 + }, 7208 + "engines": { 7209 + "node": ">=10" 7210 + }, 7211 + "funding": { 7212 + "type": "github", 7213 + "url": "https://github.com/sponsors/Borewit" 7214 + } 7215 }, 7216 "node_modules/tr46": { 7217 "version": "0.0.3", ··· 7300 } 7301 }, 7302 "node_modules/uint8arrays": { 7303 + "version": "4.0.10", 7304 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", 7305 + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", 7306 "dependencies": { 7307 "multiformats": "^12.0.1" 7308 } ··· 7337 } 7338 }, 7339 "node_modules/update-browserslist-db": { 7340 + "version": "1.0.13", 7341 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 7342 + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 7343 "dev": true, 7344 "funding": [ 7345 { ··· 7619 "cuint": "^0.2.2" 7620 } 7621 }, 7622 + "node_modules/y18n": { 7623 + "version": "5.0.8", 7624 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 7625 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 7626 + "engines": { 7627 + "node": ">=10" 7628 + } 7629 + }, 7630 "node_modules/yallist": { 7631 "version": "4.0.0", 7632 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", ··· 7642 "node": ">= 14" 7643 } 7644 }, 7645 + "node_modules/yargs": { 7646 + "version": "17.7.2", 7647 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 7648 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 7649 + "dependencies": { 7650 + "cliui": "^8.0.1", 7651 + "escalade": "^3.1.1", 7652 + "get-caller-file": "^2.0.5", 7653 + "require-directory": "^2.1.1", 7654 + "string-width": "^4.2.3", 7655 + "y18n": "^5.0.5", 7656 + "yargs-parser": "^21.1.1" 7657 + }, 7658 + "engines": { 7659 + "node": ">=12" 7660 + } 7661 + }, 7662 + "node_modules/yargs-parser": { 7663 + "version": "21.1.1", 7664 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 7665 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 7666 + "engines": { 7667 + "node": ">=12" 7668 + } 7669 + }, 7670 "node_modules/yauzl": { 7671 "version": "2.10.0", 7672 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", ··· 7703 "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 7704 "dev": true 7705 }, 7706 + "@avh4/elm-format-darwin-arm64": { 7707 + "version": "0.8.7-2", 7708 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-arm64/-/elm-format-darwin-arm64-0.8.7-2.tgz", 7709 + "integrity": "sha512-F5JD44mJ3KX960J5GkXMfh1/dtkXuPcQpX2EToHQKjLTZUfnhZ++ytQQt0gAvrJ0bzoOvhNzjNjUHDA1ruTVbg==", 7710 + "dev": true, 7711 + "optional": true 7712 + }, 7713 + "@avh4/elm-format-darwin-x64": { 7714 + "version": "0.8.7-2", 7715 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-x64/-/elm-format-darwin-x64-0.8.7-2.tgz", 7716 + "integrity": "sha512-4pfF1cl0KyTion+7Mg4XKM3yi4Yc7vP76Kt/DotLVGJOSag4ISGic1og2mt8RZZ7XArybBmHNyYkiUbe/cEiCw==", 7717 + "dev": true, 7718 + "optional": true 7719 + }, 7720 + "@avh4/elm-format-linux-arm64": { 7721 + "version": "0.8.7-2", 7722 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-arm64/-/elm-format-linux-arm64-0.8.7-2.tgz", 7723 + "integrity": "sha512-WkVmuce2zU6s9dupHhqPc886Vaqpea8dZlxv2fpZ4wSzPUbiiKHoHZzoVndMIMTUL0TZukP3Ps0n/lWO5R5+FA==", 7724 + "dev": true, 7725 + "optional": true 7726 + }, 7727 + "@avh4/elm-format-linux-x64": { 7728 + "version": "0.8.7-2", 7729 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-x64/-/elm-format-linux-x64-0.8.7-2.tgz", 7730 + "integrity": "sha512-kmncfJrTBjVT94JtQvMf4M5Pn2Yl0sZt3wo7AzgFiDnB/CiZ+KjJyXuWM64NeGiv4MQqzPq65tsFXUH1CIJeiQ==", 7731 + "dev": true, 7732 + "optional": true 7733 + }, 7734 + "@avh4/elm-format-win32-x64": { 7735 + "version": "0.8.7-2", 7736 + "resolved": "https://registry.npmjs.org/@avh4/elm-format-win32-x64/-/elm-format-win32-x64-0.8.7-2.tgz", 7737 + "integrity": "sha512-sBdMBGq/8mD8Y5C+fIr5vlb3N50yB7S1MfgeAq2QEbvkr/sKrCZI540i43lZDH9gWsfA1w2W8wCe0penFYzsGw==", 7738 + "dev": true, 7739 + "optional": true 7740 + }, 7741 "@chainsafe/is-ip": { 7742 "version": "2.0.1", 7743 "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", ··· 7752 } 7753 }, 7754 "@csstools/cascade-layer-name-parser": { 7755 + "version": "1.0.7", 7756 + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz", 7757 + "integrity": "sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==", 7758 "dev": true, 7759 "requires": {} 7760 }, 7761 "@csstools/css-parser-algorithms": { 7762 + "version": "2.5.0", 7763 + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", 7764 + "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==", 7765 "dev": true, 7766 "requires": {} 7767 }, 7768 "@csstools/css-tokenizer": { 7769 + "version": "2.2.3", 7770 + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", 7771 + "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", 7772 "dev": true 7773 }, 7774 "@elm_binaries/darwin_arm64": { ··· 7799 "dev": true, 7800 "optional": true 7801 }, 7802 + "@esbuild/aix-ppc64": { 7803 + "version": "0.20.0", 7804 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", 7805 + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", 7806 + "dev": true, 7807 + "optional": true 7808 + }, 7809 "@esbuild/android-arm": { 7810 + "version": "0.20.0", 7811 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", 7812 + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", 7813 "dev": true, 7814 "optional": true 7815 }, 7816 "@esbuild/android-arm64": { 7817 + "version": "0.20.0", 7818 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", 7819 + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", 7820 "dev": true, 7821 "optional": true 7822 }, 7823 "@esbuild/android-x64": { 7824 + "version": "0.20.0", 7825 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", 7826 + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", 7827 "dev": true, 7828 "optional": true 7829 }, 7830 "@esbuild/darwin-arm64": { 7831 + "version": "0.20.0", 7832 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", 7833 + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", 7834 "dev": true, 7835 "optional": true 7836 }, 7837 "@esbuild/darwin-x64": { 7838 + "version": "0.20.0", 7839 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", 7840 + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", 7841 "dev": true, 7842 "optional": true 7843 }, 7844 "@esbuild/freebsd-arm64": { 7845 + "version": "0.20.0", 7846 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", 7847 + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", 7848 "dev": true, 7849 "optional": true 7850 }, 7851 "@esbuild/freebsd-x64": { 7852 + "version": "0.20.0", 7853 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", 7854 + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", 7855 "dev": true, 7856 "optional": true 7857 }, 7858 "@esbuild/linux-arm": { 7859 + "version": "0.20.0", 7860 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", 7861 + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", 7862 "dev": true, 7863 "optional": true 7864 }, 7865 "@esbuild/linux-arm64": { 7866 + "version": "0.20.0", 7867 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", 7868 + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", 7869 "dev": true, 7870 "optional": true 7871 }, 7872 "@esbuild/linux-ia32": { 7873 + "version": "0.20.0", 7874 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", 7875 + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", 7876 "dev": true, 7877 "optional": true 7878 }, 7879 "@esbuild/linux-loong64": { 7880 + "version": "0.20.0", 7881 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", 7882 + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", 7883 "dev": true, 7884 "optional": true 7885 }, 7886 "@esbuild/linux-mips64el": { 7887 + "version": "0.20.0", 7888 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", 7889 + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", 7890 "dev": true, 7891 "optional": true 7892 }, 7893 "@esbuild/linux-ppc64": { 7894 + "version": "0.20.0", 7895 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", 7896 + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", 7897 "dev": true, 7898 "optional": true 7899 }, 7900 "@esbuild/linux-riscv64": { 7901 + "version": "0.20.0", 7902 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", 7903 + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", 7904 "dev": true, 7905 "optional": true 7906 }, 7907 "@esbuild/linux-s390x": { 7908 + "version": "0.20.0", 7909 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", 7910 + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", 7911 "dev": true, 7912 "optional": true 7913 }, 7914 "@esbuild/linux-x64": { 7915 + "version": "0.20.0", 7916 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", 7917 + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", 7918 "dev": true, 7919 "optional": true 7920 }, 7921 "@esbuild/netbsd-x64": { 7922 + "version": "0.20.0", 7923 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", 7924 + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", 7925 "dev": true, 7926 "optional": true 7927 }, 7928 "@esbuild/openbsd-x64": { 7929 + "version": "0.20.0", 7930 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", 7931 + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", 7932 "dev": true, 7933 "optional": true 7934 }, 7935 "@esbuild/sunos-x64": { 7936 + "version": "0.20.0", 7937 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", 7938 + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", 7939 "dev": true, 7940 "optional": true 7941 }, 7942 "@esbuild/win32-arm64": { 7943 + "version": "0.20.0", 7944 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", 7945 + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", 7946 "dev": true, 7947 "optional": true 7948 }, 7949 "@esbuild/win32-ia32": { 7950 + "version": "0.20.0", 7951 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", 7952 + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", 7953 "dev": true, 7954 "optional": true 7955 }, 7956 "@esbuild/win32-x64": { 7957 + "version": "0.20.0", 7958 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", 7959 + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", 7960 "dev": true, 7961 "optional": true 7962 }, ··· 7976 "dev": true 7977 }, 7978 "@eslint/eslintrc": { 7979 + "version": "2.1.4", 7980 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 7981 + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 7982 "dev": true, 7983 "requires": { 7984 "ajv": "^6.12.4", ··· 7993 } 7994 }, 7995 "@eslint/js": { 7996 + "version": "8.56.0", 7997 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", 7998 + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", 7999 "dev": true 8000 }, 8001 "@humanwhocodes/config-array": { 8002 + "version": "0.11.14", 8003 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 8004 + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 8005 "dev": true, 8006 "requires": { 8007 + "@humanwhocodes/object-schema": "^2.0.2", 8008 + "debug": "^4.3.1", 8009 "minimatch": "^3.0.5" 8010 } 8011 }, ··· 8016 "dev": true 8017 }, 8018 "@humanwhocodes/object-schema": { 8019 + "version": "2.0.2", 8020 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 8021 + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 8022 "dev": true 8023 }, 8024 "@ipld/dag-cbor": { ··· 8554 "dev": true 8555 }, 8556 "@types/json-schema": { 8557 + "version": "7.0.15", 8558 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 8559 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 8560 "dev": true 8561 }, 8562 "@types/keyv": { ··· 8583 } 8584 }, 8585 "@types/semver": { 8586 + "version": "7.5.6", 8587 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", 8588 + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", 8589 "dev": true 8590 }, 8591 "@types/tv4": { ··· 8604 } 8605 }, 8606 "@typescript-eslint/eslint-plugin": { 8607 + "version": "6.21.0", 8608 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", 8609 + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", 8610 "dev": true, 8611 "requires": { 8612 "@eslint-community/regexpp": "^4.5.1", 8613 + "@typescript-eslint/scope-manager": "6.21.0", 8614 + "@typescript-eslint/type-utils": "6.21.0", 8615 + "@typescript-eslint/utils": "6.21.0", 8616 + "@typescript-eslint/visitor-keys": "6.21.0", 8617 "debug": "^4.3.4", 8618 "graphemer": "^1.4.0", 8619 "ignore": "^5.2.4", 8620 "natural-compare": "^1.4.0", 8621 "semver": "^7.5.4", 8622 "ts-api-utils": "^1.0.1" 8623 } 8624 }, 8625 "@typescript-eslint/parser": { 8626 + "version": "6.21.0", 8627 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", 8628 + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", 8629 "dev": true, 8630 "requires": { 8631 + "@typescript-eslint/scope-manager": "6.21.0", 8632 + "@typescript-eslint/types": "6.21.0", 8633 + "@typescript-eslint/typescript-estree": "6.21.0", 8634 + "@typescript-eslint/visitor-keys": "6.21.0", 8635 "debug": "^4.3.4" 8636 } 8637 }, 8638 "@typescript-eslint/scope-manager": { 8639 + "version": "6.21.0", 8640 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", 8641 + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", 8642 "dev": true, 8643 "requires": { 8644 + "@typescript-eslint/types": "6.21.0", 8645 + "@typescript-eslint/visitor-keys": "6.21.0" 8646 } 8647 }, 8648 "@typescript-eslint/type-utils": { 8649 + "version": "6.21.0", 8650 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", 8651 + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", 8652 "dev": true, 8653 "requires": { 8654 + "@typescript-eslint/typescript-estree": "6.21.0", 8655 + "@typescript-eslint/utils": "6.21.0", 8656 "debug": "^4.3.4", 8657 "ts-api-utils": "^1.0.1" 8658 } 8659 }, 8660 "@typescript-eslint/types": { 8661 + "version": "6.21.0", 8662 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", 8663 + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", 8664 "dev": true 8665 }, 8666 "@typescript-eslint/typescript-estree": { 8667 + "version": "6.21.0", 8668 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", 8669 + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", 8670 "dev": true, 8671 "requires": { 8672 + "@typescript-eslint/types": "6.21.0", 8673 + "@typescript-eslint/visitor-keys": "6.21.0", 8674 "debug": "^4.3.4", 8675 "globby": "^11.1.0", 8676 "is-glob": "^4.0.3", 8677 + "minimatch": "9.0.3", 8678 "semver": "^7.5.4", 8679 "ts-api-utils": "^1.0.1" 8680 + }, 8681 + "dependencies": { 8682 + "brace-expansion": { 8683 + "version": "2.0.1", 8684 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 8685 + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 8686 + "dev": true, 8687 + "requires": { 8688 + "balanced-match": "^1.0.0" 8689 + } 8690 + }, 8691 + "minimatch": { 8692 + "version": "9.0.3", 8693 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 8694 + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 8695 + "dev": true, 8696 + "requires": { 8697 + "brace-expansion": "^2.0.1" 8698 + } 8699 + } 8700 } 8701 }, 8702 "@typescript-eslint/utils": { 8703 + "version": "6.21.0", 8704 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", 8705 + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", 8706 "dev": true, 8707 "requires": { 8708 "@eslint-community/eslint-utils": "^4.4.0", 8709 "@types/json-schema": "^7.0.12", 8710 "@types/semver": "^7.5.0", 8711 + "@typescript-eslint/scope-manager": "6.21.0", 8712 + "@typescript-eslint/types": "6.21.0", 8713 + "@typescript-eslint/typescript-estree": "6.21.0", 8714 "semver": "^7.5.4" 8715 } 8716 }, 8717 "@typescript-eslint/visitor-keys": { 8718 + "version": "6.21.0", 8719 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", 8720 + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", 8721 "dev": true, 8722 "requires": { 8723 + "@typescript-eslint/types": "6.21.0", 8724 "eslint-visitor-keys": "^3.4.1" 8725 } 8726 + }, 8727 + "@ungap/structured-clone": { 8728 + "version": "1.2.0", 8729 + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 8730 + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 8731 + "dev": true 8732 }, 8733 "@zeit/schemas": { 8734 "version": "2.29.0", ··· 8767 } 8768 }, 8769 "acorn": { 8770 + "version": "8.11.3", 8771 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 8772 + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 8773 "dev": true 8774 }, 8775 "acorn-jsx": { ··· 8868 "dev": true 8869 }, 8870 "assert": { 8871 + "version": "2.1.0", 8872 + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", 8873 + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", 8874 "dev": true, 8875 "requires": { 8876 + "call-bind": "^1.0.2", 8877 + "is-nan": "^1.3.2", 8878 + "object-is": "^1.1.5", 8879 + "object.assign": "^4.1.4", 8880 + "util": "^0.12.5" 8881 } 8882 }, 8883 "at-least-node": { ··· 8887 "dev": true 8888 }, 8889 "autoprefixer": { 8890 + "version": "10.4.17", 8891 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", 8892 + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", 8893 "dev": true, 8894 "requires": { 8895 + "browserslist": "^4.22.2", 8896 + "caniuse-lite": "^1.0.30001578", 8897 + "fraction.js": "^4.3.7", 8898 "normalize-range": "^0.1.2", 8899 "picocolors": "^1.0.0", 8900 "postcss-value-parser": "^4.2.0" ··· 9104 } 9105 }, 9106 "browserslist": { 9107 + "version": "4.22.3", 9108 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", 9109 + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", 9110 "dev": true, 9111 "requires": { 9112 + "caniuse-lite": "^1.0.30001580", 9113 + "electron-to-chromium": "^1.4.648", 9114 + "node-releases": "^2.0.14", 9115 + "update-browserslist-db": "^1.0.13" 9116 } 9117 }, 9118 "buffer": { ··· 9165 } 9166 }, 9167 "call-bind": { 9168 + "version": "1.0.6", 9169 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", 9170 + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", 9171 "dev": true, 9172 "requires": { 9173 + "es-errors": "^1.3.0", 9174 + "function-bind": "^1.1.2", 9175 + "get-intrinsic": "^1.2.3", 9176 + "set-function-length": "^1.2.0" 9177 } 9178 }, 9179 "callsites": { ··· 9284 "is-wsl": "^2.2.0" 9285 } 9286 }, 9287 + "cliui": { 9288 + "version": "8.0.1", 9289 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 9290 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 9291 + "requires": { 9292 + "string-width": "^4.2.0", 9293 + "strip-ansi": "^6.0.1", 9294 + "wrap-ansi": "^7.0.0" 9295 + }, 9296 + "dependencies": { 9297 + "wrap-ansi": { 9298 + "version": "7.0.0", 9299 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 9300 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 9301 + "requires": { 9302 + "ansi-styles": "^4.0.0", 9303 + "string-width": "^4.1.0", 9304 + "strip-ansi": "^6.0.0" 9305 + } 9306 + } 9307 + } 9308 + }, 9309 "clone": { 9310 "version": "1.0.4", 9311 "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", ··· 9553 "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 9554 "dev": true 9555 }, 9556 + "define-data-property": { 9557 + "version": "1.1.2", 9558 + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", 9559 + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", 9560 + "dev": true, 9561 + "requires": { 9562 + "es-errors": "^1.3.0", 9563 + "get-intrinsic": "^1.2.2", 9564 + "gopd": "^1.0.1", 9565 + "has-property-descriptors": "^1.0.1" 9566 + } 9567 + }, 9568 "define-properties": { 9569 + "version": "1.2.1", 9570 + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 9571 + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 9572 "dev": true, 9573 "requires": { 9574 + "define-data-property": "^1.0.1", 9575 "has-property-descriptors": "^1.0.0", 9576 "object-keys": "^1.1.1" 9577 } ··· 9623 "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 9624 }, 9625 "electron-to-chromium": { 9626 + "version": "1.4.657", 9627 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.657.tgz", 9628 + "integrity": "sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w==", 9629 "dev": true 9630 }, 9631 "elm": { ··· 9640 "@elm_binaries/win32_x64": "0.19.1-0" 9641 } 9642 }, 9643 + "elm-format": { 9644 + "version": "0.8.7", 9645 + "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.7.tgz", 9646 + "integrity": "sha512-sVzFXfWnb+6rzXK+q3e3Ccgr6/uS5mFbFk1VSmigC+x2XZ28QycAa7lS8owl009ALPhRQk+pZ95Eq5ANjpEZsQ==", 9647 + "dev": true, 9648 + "requires": { 9649 + "@avh4/elm-format-darwin-arm64": "0.8.7-2", 9650 + "@avh4/elm-format-darwin-x64": "0.8.7-2", 9651 + "@avh4/elm-format-linux-arm64": "0.8.7-2", 9652 + "@avh4/elm-format-linux-x64": "0.8.7-2", 9653 + "@avh4/elm-format-win32-x64": "0.8.7-2" 9654 + } 9655 + }, 9656 "elm-review": { 9657 + "version": "2.10.3", 9658 + "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.3.tgz", 9659 + "integrity": "sha512-9gBqLc5Xm3v9Ncpf8y2haEaBZZyMX25vmwQkrNqSIaNYQ2vdGOIx1eyqRtt1xwX5O8pZdqU8IWC/ENyTrOTKbw==", 9660 "dev": true, 9661 "requires": { 9662 "chalk": "^4.0.0", 9663 "chokidar": "^3.5.2", 9664 "cross-spawn": "^7.0.3", 9665 + "elm-tooling": "^1.14.1", 9666 + "fastest-levenshtein": "^1.0.16", 9667 "find-up": "^4.1.0", 9668 "folder-hash": "^3.3.0", 9669 "fs-extra": "^9.0.0", ··· 9731 "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" 9732 }, 9733 "elm-tooling": { 9734 + "version": "1.15.0", 9735 + "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.0.tgz", 9736 + "integrity": "sha512-quRE5LGJyrkPBoJ3MvFQ5RGgf80J0L0d3NkduStvXh4TmZuMXNC3Z/l2ZRoq2UTUaNWeYfO1Zx5wns1AvsTrnw==", 9737 "dev": true 9738 }, 9739 "emitter-component": { ··· 9761 "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 9762 "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 9763 }, 9764 + "es-errors": { 9765 + "version": "1.3.0", 9766 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 9767 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 9768 "dev": true 9769 }, 9770 "esbuild": { 9771 + "version": "0.20.0", 9772 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", 9773 + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", 9774 "dev": true, 9775 "requires": { 9776 + "@esbuild/aix-ppc64": "0.20.0", 9777 + "@esbuild/android-arm": "0.20.0", 9778 + "@esbuild/android-arm64": "0.20.0", 9779 + "@esbuild/android-x64": "0.20.0", 9780 + "@esbuild/darwin-arm64": "0.20.0", 9781 + "@esbuild/darwin-x64": "0.20.0", 9782 + "@esbuild/freebsd-arm64": "0.20.0", 9783 + "@esbuild/freebsd-x64": "0.20.0", 9784 + "@esbuild/linux-arm": "0.20.0", 9785 + "@esbuild/linux-arm64": "0.20.0", 9786 + "@esbuild/linux-ia32": "0.20.0", 9787 + "@esbuild/linux-loong64": "0.20.0", 9788 + "@esbuild/linux-mips64el": "0.20.0", 9789 + "@esbuild/linux-ppc64": "0.20.0", 9790 + "@esbuild/linux-riscv64": "0.20.0", 9791 + "@esbuild/linux-s390x": "0.20.0", 9792 + "@esbuild/linux-x64": "0.20.0", 9793 + "@esbuild/netbsd-x64": "0.20.0", 9794 + "@esbuild/openbsd-x64": "0.20.0", 9795 + "@esbuild/sunos-x64": "0.20.0", 9796 + "@esbuild/win32-arm64": "0.20.0", 9797 + "@esbuild/win32-ia32": "0.20.0", 9798 + "@esbuild/win32-x64": "0.20.0" 9799 } 9800 }, 9801 + "esbuild-plugin-wasm": { 9802 + "version": "1.1.0", 9803 + "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", 9804 + "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", 9805 "dev": true 9806 + }, 9807 + "escalade": { 9808 + "version": "3.1.2", 9809 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 9810 + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" 9811 }, 9812 "escape-string-regexp": { 9813 "version": "4.0.0", ··· 9816 "dev": true 9817 }, 9818 "eslint": { 9819 + "version": "8.56.0", 9820 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", 9821 + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", 9822 "dev": true, 9823 "requires": { 9824 "@eslint-community/eslint-utils": "^4.2.0", 9825 "@eslint-community/regexpp": "^4.6.1", 9826 + "@eslint/eslintrc": "^2.1.4", 9827 + "@eslint/js": "8.56.0", 9828 + "@humanwhocodes/config-array": "^0.11.13", 9829 "@humanwhocodes/module-importer": "^1.0.1", 9830 "@nodelib/fs.walk": "^1.2.8", 9831 + "@ungap/structured-clone": "^1.2.0", 9832 "ajv": "^6.12.4", 9833 "chalk": "^4.0.0", 9834 "cross-spawn": "^7.0.2", ··· 9836 "doctrine": "^3.0.0", 9837 "escape-string-regexp": "^4.0.0", 9838 "eslint-scope": "^7.2.2", 9839 + "eslint-visitor-keys": "^3.4.3", 9840 "espree": "^9.6.1", 9841 "esquery": "^1.4.2", 9842 "esutils": "^2.0.2", ··· 9920 } 9921 }, 9922 "eslint-visitor-keys": { 9923 + "version": "3.4.3", 9924 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 9925 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 9926 "dev": true 9927 }, 9928 "esm": { ··· 10027 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 10028 }, 10029 "fast-glob": { 10030 + "version": "3.3.2", 10031 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 10032 + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 10033 "dev": true, 10034 "requires": { 10035 "@nodelib/fs.stat": "^2.0.2", ··· 10045 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 10046 "dev": true 10047 }, 10048 "fast-text-encoding": { 10049 "version": "1.0.6", 10050 "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", ··· 10112 "version": "2.0.5", 10113 "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", 10114 "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" 10115 + }, 10116 + "file-type": { 10117 + "version": "16.5.4", 10118 + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", 10119 + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", 10120 + "requires": { 10121 + "readable-web-to-node-stream": "^3.0.0", 10122 + "strtok3": "^6.2.4", 10123 + "token-types": "^4.1.1" 10124 + } 10125 }, 10126 "fill-range": { 10127 "version": "7.0.1", ··· 10243 } 10244 }, 10245 "fraction.js": { 10246 + "version": "4.3.7", 10247 + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 10248 + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 10249 "dev": true 10250 }, 10251 "fs-extra": { ··· 10273 "optional": true 10274 }, 10275 "function-bind": { 10276 + "version": "1.1.2", 10277 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 10278 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 10279 "dev": true 10280 }, 10281 + "get-caller-file": { 10282 + "version": "2.0.5", 10283 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 10284 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 10285 + }, 10286 "get-intrinsic": { 10287 + "version": "1.2.4", 10288 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 10289 + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 10290 "dev": true, 10291 "requires": { 10292 + "es-errors": "^1.3.0", 10293 + "function-bind": "^1.1.2", 10294 + "has-proto": "^1.0.1", 10295 + "has-symbols": "^1.0.3", 10296 + "hasown": "^2.0.0" 10297 } 10298 }, 10299 "get-stream": { ··· 10329 } 10330 }, 10331 "globals": { 10332 + "version": "13.24.0", 10333 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 10334 + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 10335 "dev": true, 10336 "requires": { 10337 "type-fest": "^0.20.2" ··· 10424 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 10425 }, 10426 "has-property-descriptors": { 10427 + "version": "1.0.1", 10428 + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 10429 + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 10430 "dev": true, 10431 "requires": { 10432 + "get-intrinsic": "^1.2.2" 10433 } 10434 }, 10435 + "has-proto": { 10436 + "version": "1.0.1", 10437 + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 10438 + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 10439 + "dev": true 10440 + }, 10441 "has-symbols": { 10442 "version": "1.0.3", 10443 "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", ··· 10451 "dev": true, 10452 "requires": { 10453 "has-symbols": "^1.0.2" 10454 + } 10455 + }, 10456 + "hasown": { 10457 + "version": "2.0.0", 10458 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 10459 + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 10460 + "dev": true, 10461 + "requires": { 10462 + "function-bind": "^1.1.2" 10463 } 10464 }, 10465 "http-cache-semantics": { ··· 10944 } 10945 }, 10946 "jiti": { 10947 + "version": "1.21.0", 10948 + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", 10949 + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", 10950 "dev": true 10951 }, 10952 "js-yaml": { ··· 11245 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 11246 "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" 11247 }, 11248 + "mediainfo.js": { 11249 + "version": "0.2.1", 11250 + "resolved": "https://registry.npmjs.org/mediainfo.js/-/mediainfo.js-0.2.1.tgz", 11251 + "integrity": "sha512-xbTstvy34gDmxNLVytixbY8Uw4DGKKsQIMvX7q1K8FwIk/gwAVLd30EVvPh/g+QHVscATRuqrNtbTb7XUjDeyw==", 11252 + "requires": { 11253 + "yargs": "^17.7.2" 11254 + } 11255 + }, 11256 "merge-options": { 11257 "version": "3.0.4", 11258 "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", ··· 11358 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", 11359 "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" 11360 }, 11361 + "music-metadata": { 11362 + "version": "7.14.0", 11363 + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-7.14.0.tgz", 11364 + "integrity": "sha512-xrm3w7SV0Wk+OythZcSbaI8mcr/KHd0knJieu8bVpaPfMv/Agz5EooCAPz3OR5hbYMiUG6dgAPKZKnMzV+3amA==", 11365 + "requires": { 11366 + "@tokenizer/token": "^0.3.0", 11367 + "content-type": "^1.0.5", 11368 + "debug": "^4.3.4", 11369 + "file-type": "^16.5.4", 11370 + "media-typer": "^1.1.0", 11371 + "strtok3": "^6.3.0", 11372 + "token-types": "^4.2.1" 11373 + } 11374 + }, 11375 "music-metadata-browser": { 11376 "version": "2.5.10", 11377 "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-2.5.10.tgz", ··· 11382 "music-metadata": "^7.13.3", 11383 "readable-stream": "^4.3.0", 11384 "readable-web-to-node-stream": "^3.0.2" 11385 } 11386 }, 11387 "mz": { ··· 11396 } 11397 }, 11398 "nanoid": { 11399 + "version": "3.3.7", 11400 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 11401 + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 11402 "dev": true 11403 }, 11404 "napi-macros": { ··· 11416 "version": "1.4.0", 11417 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 11418 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 11419 "dev": true 11420 }, 11421 "negotiator": { ··· 11443 "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" 11444 }, 11445 "node-releases": { 11446 + "version": "2.0.14", 11447 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 11448 + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 11449 "dev": true 11450 }, 11451 "normalize-path": { ··· 11501 "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 11502 "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 11503 "dev": true 11504 + }, 11505 + "object.assign": { 11506 + "version": "4.1.5", 11507 + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", 11508 + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", 11509 + "dev": true, 11510 + "requires": { 11511 + "call-bind": "^1.0.5", 11512 + "define-properties": "^1.2.1", 11513 + "has-symbols": "^1.0.3", 11514 + "object-keys": "^1.1.1" 11515 + } 11516 }, 11517 "observable-webworkers": { 11518 "version": "2.0.1", ··· 11743 "dev": true 11744 }, 11745 "postcss": { 11746 + "version": "8.4.34", 11747 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", 11748 + "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", 11749 "dev": true, 11750 "requires": { 11751 + "nanoid": "^3.3.7", 11752 "picocolors": "^1.0.0", 11753 "source-map-js": "^1.0.2" 11754 } 11755 }, 11756 "postcss-custom-properties": { 11757 + "version": "13.3.4", 11758 + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz", 11759 + "integrity": "sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==", 11760 "dev": true, 11761 "requires": { 11762 + "@csstools/cascade-layer-name-parser": "^1.0.7", 11763 + "@csstools/css-parser-algorithms": "^2.5.0", 11764 + "@csstools/css-tokenizer": "^2.2.3", 11765 "postcss-value-parser": "^4.2.0" 11766 } 11767 }, 11768 "postcss-import": { 11769 + "version": "16.0.0", 11770 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.0.0.tgz", 11771 + "integrity": "sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q==", 11772 "dev": true, 11773 "requires": { 11774 "postcss-value-parser": "^4.0.0", ··· 11934 } 11935 }, 11936 "readable-stream": { 11937 + "version": "4.5.2", 11938 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", 11939 + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", 11940 "requires": { 11941 "abort-controller": "^3.0.0", 11942 "buffer": "^6.0.3", ··· 12025 } 12026 } 12027 }, 12028 + "require-directory": { 12029 + "version": "2.1.1", 12030 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 12031 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 12032 + }, 12033 "require-from-string": { 12034 "version": "2.0.2", 12035 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 12209 } 12210 } 12211 }, 12212 + "set-function-length": { 12213 + "version": "1.2.1", 12214 + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", 12215 + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", 12216 + "dev": true, 12217 + "requires": { 12218 + "define-data-property": "^1.1.2", 12219 + "es-errors": "^1.3.0", 12220 + "function-bind": "^1.1.2", 12221 + "get-intrinsic": "^1.2.3", 12222 + "gopd": "^1.0.1", 12223 + "has-property-descriptors": "^1.0.1" 12224 + } 12225 + }, 12226 "setimmediate": { 12227 "version": "1.0.5", 12228 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ··· 12415 "dev": true 12416 }, 12417 "tailwindcss": { 12418 + "version": "3.4.1", 12419 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", 12420 + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", 12421 "dev": true, 12422 "requires": { 12423 "@alloc/quick-lru": "^5.2.0", ··· 12425 "chokidar": "^3.5.3", 12426 "didyoumean": "^1.2.2", 12427 "dlv": "^1.1.3", 12428 + "fast-glob": "^3.3.0", 12429 "glob-parent": "^6.0.2", 12430 "is-glob": "^4.0.3", 12431 + "jiti": "^1.19.1", 12432 "lilconfig": "^2.1.0", 12433 "micromatch": "^4.0.5", 12434 "normalize-path": "^3.0.0", ··· 12452 "requires": { 12453 "is-glob": "^4.0.3" 12454 } 12455 + }, 12456 + "postcss-import": { 12457 + "version": "15.1.0", 12458 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 12459 + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 12460 + "dev": true, 12461 + "requires": { 12462 + "postcss-value-parser": "^4.0.0", 12463 + "read-cache": "^1.0.0", 12464 + "resolve": "^1.1.7" 12465 + } 12466 } 12467 } 12468 }, ··· 12528 "version": "1.0.4", 12529 "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", 12530 "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" 12531 + }, 12532 + "tiny-parse-argv": { 12533 + "version": "2.4.0", 12534 + "resolved": "https://registry.npmjs.org/tiny-parse-argv/-/tiny-parse-argv-2.4.0.tgz", 12535 + "integrity": "sha512-WTEsnmeHNr99hLQIDA+gnsS+fDsCDITlqgI+zEhx9M6ErPt0heoNZ1PGvql6wcf95sIx40J0MLYXaPveGwtpoA==", 12536 + "dev": true 12537 }, 12538 "to-regex-range": { 12539 "version": "5.0.1", ··· 12549 "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", 12550 "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" 12551 }, 12552 + "token-types": { 12553 + "version": "4.2.1", 12554 + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", 12555 + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", 12556 + "requires": { 12557 + "@tokenizer/token": "^0.3.0", 12558 + "ieee754": "^1.2.1" 12559 + } 12560 + }, 12561 "tr46": { 12562 "version": "0.0.3", 12563 "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", ··· 12617 } 12618 }, 12619 "uint8arrays": { 12620 + "version": "4.0.10", 12621 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", 12622 + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", 12623 "requires": { 12624 "multiformats": "^12.0.1" 12625 }, ··· 12646 "dev": true 12647 }, 12648 "update-browserslist-db": { 12649 + "version": "1.0.13", 12650 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 12651 + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 12652 "dev": true, 12653 "requires": { 12654 "escalade": "^3.1.1", ··· 12849 "cuint": "^0.2.2" 12850 } 12851 }, 12852 + "y18n": { 12853 + "version": "5.0.8", 12854 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 12855 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 12856 + }, 12857 "yallist": { 12858 "version": "4.0.0", 12859 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", ··· 12865 "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", 12866 "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", 12867 "dev": true 12868 + }, 12869 + "yargs": { 12870 + "version": "17.7.2", 12871 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 12872 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 12873 + "requires": { 12874 + "cliui": "^8.0.1", 12875 + "escalade": "^3.1.1", 12876 + "get-caller-file": "^2.0.5", 12877 + "require-directory": "^2.1.1", 12878 + "string-width": "^4.2.3", 12879 + "y18n": "^5.0.5", 12880 + "yargs-parser": "^21.1.1" 12881 + } 12882 + }, 12883 + "yargs-parser": { 12884 + "version": "21.1.1", 12885 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 12886 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" 12887 }, 12888 "yauzl": { 12889 "version": "2.10.0",
+18 -14
package.json
··· 7 "repository": "github:icidasset/diffuse", 8 "license": "SEE LICENSE IN LICENSE", 9 "devDependencies": { 10 - "@typescript-eslint/eslint-plugin": "^6.2.1", 11 - "@typescript-eslint/parser": "^6.2.1", 12 - "assert": "^2.0.0", 13 - "autoprefixer": "^10.4.14", 14 "buffer": "^6.0.3", 15 "elm": "0.19.1-6", 16 - "elm-review": "^2.10.2", 17 - "esbuild": "^0.18.18", 18 - "eslint": "^8.46.0", 19 "events": "^3.3.0", 20 "gren-lang": "^0.3.0", 21 "just-install": "^2.0.1", 22 - "postcss": "^8.4.27", 23 - "postcss-custom-properties": "^13.3.0", 24 - "postcss-import": "^15.1.0", 25 "stream": "^0.0.2", 26 - "tailwindcss": "^3.3.3", 27 "tailwindcss-animations": "^2.0.0", 28 - "tailwindcss-interaction-variants": "^5.0.0" 29 }, 30 "dependencies": { 31 "@oddjs/odd": "^0.37.2", ··· 37 "load-script2": "^2.0.5", 38 "localforage": "^1.10.0", 39 "lunr": "^2.3.8", 40 "music-metadata-browser": "^2.5.10", 41 - "readable-stream": "^4.4.2", 42 "remotestoragejs": "^2.0.0-beta.6", 43 "serve": "^14.2.1", 44 "throttle-debounce": "^5.0.0", 45 "timer.js": "^1.0.4", 46 "tocca": "^2.0.9", 47 - "uint8arrays": "^4.0.6" 48 } 49 }
··· 7 "repository": "github:icidasset/diffuse", 8 "license": "SEE LICENSE IN LICENSE", 9 "devDependencies": { 10 + "@typescript-eslint/eslint-plugin": "^6.21.0", 11 + "@typescript-eslint/parser": "^6.21.0", 12 + "assert": "^2.1.0", 13 + "autoprefixer": "^10.4.17", 14 "buffer": "^6.0.3", 15 "elm": "0.19.1-6", 16 + "elm-format": "^0.8.7", 17 + "elm-review": "^2.10.3", 18 + "esbuild": "^0.20.0", 19 + "esbuild-plugin-wasm": "^1.1.0", 20 + "eslint": "^8.56.0", 21 "events": "^3.3.0", 22 "gren-lang": "^0.3.0", 23 "just-install": "^2.0.1", 24 + "postcss": "^8.4.34", 25 + "postcss-custom-properties": "^13.3.4", 26 + "postcss-import": "^16.0.0", 27 "stream": "^0.0.2", 28 + "tailwindcss": "^3.4.1", 29 "tailwindcss-animations": "^2.0.0", 30 + "tailwindcss-interaction-variants": "^5.0.0", 31 + "tiny-parse-argv": "^2.4.0" 32 }, 33 "dependencies": { 34 "@oddjs/odd": "^0.37.2", ··· 40 "load-script2": "^2.0.5", 41 "localforage": "^1.10.0", 42 "lunr": "^2.3.8", 43 + "mediainfo.js": "^0.2.1", 44 "music-metadata-browser": "^2.5.10", 45 + "readable-stream": "^4.5.2", 46 "remotestoragejs": "^2.0.0-beta.6", 47 "serve": "^14.2.1", 48 "throttle-debounce": "^5.0.0", 49 "timer.js": "^1.0.4", 50 "tocca": "^2.0.9", 51 + "uint8arrays": "^4.0.10" 52 } 53 }
+2 -1
src/Applications/Brain/Tracks/State.elm
··· 62 |> String.padLeft 2 '0' 63 , " - " 64 , track.tags.artist 65 - , " - " 66 , track.tags.title 67 ] 68 |> String.concat
··· 62 |> String.padLeft 2 '0' 63 , " - " 64 , track.tags.artist 65 + |> Maybe.map (\a -> a ++ " - ") 66 + |> Maybe.withDefault "" 67 , track.tags.title 68 ] 69 |> String.concat
+7 -1
src/Applications/UI/Console.elm
··· 60 , title "Scroll to track" 61 ] 62 [ "cursor-pointer" ] 63 - [ text (tags.artist ++ " - " ++ tags.title) ] 64 65 Nothing -> 66 text "Diffuse"
··· 60 , title "Scroll to track" 61 ] 62 [ "cursor-pointer" ] 63 + [ case tags.artist of 64 + Just artist -> 65 + text (artist ++ " - " ++ tags.title) 66 + 67 + Nothing -> 68 + text tags.title 69 + ] 70 71 Nothing -> 72 text "Diffuse"
+15 -15
src/Applications/UI/Demo.elm
··· 29 30 favourites : List Favourite 31 favourites = 32 - [ { artist = "James Blake" 33 , title = "Essential Mix (09-17-2011)" 34 } 35 ] ··· 76 , nr = 1 77 78 -- 79 - , album = "Soulection White Label: 013" 80 - , artist = "oriJanus" 81 , title = "Bonita" 82 83 -- ··· 95 , nr = 2 96 97 -- 98 - , album = "Soulection White Label: 013" 99 - , artist = "oriJanus" 100 , title = "6" 101 102 -- ··· 114 , nr = 3 115 116 -- 117 - , album = "Soulection White Label: 013" 118 - , artist = "oriJanus" 119 , title = "Hot Remix ft. Tek.Lun & Zikomo" 120 121 -- ··· 133 , nr = 9 134 135 -- 136 - , album = "Adult Swim Singles Project 2012" 137 - , artist = "Com Truise" 138 , title = "Chemical Legs" 139 140 -- ··· 152 , nr = 4 153 154 -- 155 - , album = "The Miyazaki Tour EP" 156 - , artist = "Manuele Atzeni" 157 , title = "Little Star" 158 159 -- ··· 171 , nr = 2 172 173 -- 174 - , album = "The Last Thing" 175 - , artist = "Patrick Lee" 176 , title = "Quittin' Time" 177 178 -- ··· 190 , nr = 1 191 192 -- 193 - , album = "Essential Mix-SAT-09-17" 194 - , artist = "James Blake" 195 , title = "Essential Mix (09-17-2011)" 196 197 --
··· 29 30 favourites : List Favourite 31 favourites = 32 + [ { artist = Just "James Blake" 33 , title = "Essential Mix (09-17-2011)" 34 } 35 ] ··· 76 , nr = 1 77 78 -- 79 + , album = Just "Soulection White Label: 013" 80 + , artist = Just "oriJanus" 81 , title = "Bonita" 82 83 -- ··· 95 , nr = 2 96 97 -- 98 + , album = Just "Soulection White Label: 013" 99 + , artist = Just "oriJanus" 100 , title = "6" 101 102 -- ··· 114 , nr = 3 115 116 -- 117 + , album = Just "Soulection White Label: 013" 118 + , artist = Just "oriJanus" 119 , title = "Hot Remix ft. Tek.Lun & Zikomo" 120 121 -- ··· 133 , nr = 9 134 135 -- 136 + , album = Just "Adult Swim Singles Project 2012" 137 + , artist = Just "Com Truise" 138 , title = "Chemical Legs" 139 140 -- ··· 152 , nr = 4 153 154 -- 155 + , album = Just "The Miyazaki Tour EP" 156 + , artist = Just "Manuele Atzeni" 157 , title = "Little Star" 158 159 -- ··· 171 , nr = 2 172 173 -- 174 + , album = Just "The Last Thing" 175 + , artist = Just "Patrick Lee" 176 , title = "Quittin' Time" 177 178 -- ··· 190 , nr = 1 191 192 -- 193 + , album = Just "Essential Mix-SAT-09-17" 194 + , artist = Just "James Blake" 195 , title = "Essential Mix (09-17-2011)" 196 197 --
+12 -2
src/Applications/UI/Queue/View.elm
··· 165 , "text-xs" 166 ] 167 [ text (String.fromInt <| idx + 1), text "." ] 168 - , text (track.tags.artist ++ " - " ++ track.tags.title) 169 ] 170 , actions = 171 [ -- Remove ··· 285 [ inline 286 [ "inline-block", "text-xs", "mr-2" ] 287 [ text (String.fromInt <| idx + 1), text "." ] 288 - , text (track.tags.artist ++ " - " ++ track.tags.title) 289 ] 290 , actions = 291 [ { icon = Icons.more_vert
··· 165 , "text-xs" 166 ] 167 [ text (String.fromInt <| idx + 1), text "." ] 168 + , case track.tags.artist of 169 + Just artist -> 170 + text (artist ++ " - " ++ track.tags.title) 171 + 172 + Nothing -> 173 + text track.tags.title 174 ] 175 , actions = 176 [ -- Remove ··· 290 [ inline 291 [ "inline-block", "text-xs", "mr-2" ] 292 [ text (String.fromInt <| idx + 1), text "." ] 293 + , case track.tags.artist of 294 + Just artist -> 295 + text (artist ++ " - " ++ track.tags.title) 296 + 297 + Nothing -> 298 + text track.tags.title 299 ] 300 , actions = 301 [ { icon = Icons.more_vert
+8 -9
src/Applications/UI/Tracks/Covers.elm
··· 25 makeCover sortBy 26 in 27 tracks.arranged 28 - |> List.indexedFoldr 29 - (\_ identifiedTrack { covers, gathering } -> 30 let 31 group = 32 groupFn identifiedTrack ··· 173 groupFn = 174 coverGroup sortBy 175 176 - ( _, groups, tracksPerGroup ) = 177 List.foldr 178 - (\identifiedTrack ( previousGroup, acc, dict ) -> 179 let 180 group = 181 groupFn identifiedTrack 182 in 183 - ( group 184 - -- 185 - , if group /= previousGroup then 186 group :: acc 187 188 else ··· 193 dict 194 ) 195 ) 196 - ( "", [], Dict.empty ) 197 tracks.harvested 198 in 199 covers.arranged ··· 284 group = 285 gathering.previousGroup 286 287 identifiedTrack = 288 gathering.largestAlbumFavsSequence 289 |> Maybe.orElse gathering.largestAlbumSequence ··· 306 isVariousArtists = 307 False 308 || (amountOfTracks > 4 && largestArtistSequence < 3) 309 - || (String.toLower track.tags.artist == "va") 310 in 311 { key = Base64.encode (coverKey isVariousArtists track) 312 , identifiedTrackCover = identifiedTrack
··· 25 makeCover sortBy 26 in 27 tracks.arranged 28 + |> List.foldr 29 + (\identifiedTrack { covers, gathering } -> 30 let 31 group = 32 groupFn identifiedTrack ··· 173 groupFn = 174 coverGroup sortBy 175 176 + ( groups, tracksPerGroup ) = 177 List.foldr 178 + (\identifiedTrack ( acc, dict ) -> 179 let 180 group = 181 groupFn identifiedTrack 182 in 183 + ( if Dict.member group dict == False then 184 group :: acc 185 186 else ··· 191 dict 192 ) 193 ) 194 + ( [], Dict.empty ) 195 tracks.harvested 196 in 197 covers.arranged ··· 282 group = 283 gathering.previousGroup 284 285 + identifiedTrack : IdentifiedTrack 286 identifiedTrack = 287 gathering.largestAlbumFavsSequence 288 |> Maybe.orElse gathering.largestAlbumSequence ··· 305 isVariousArtists = 306 False 307 || (amountOfTracks > 4 && largestArtistSequence < 3) 308 + || (Maybe.map String.toLower track.tags.artist == Just "va") 309 in 310 { key = Base64.encode (coverKey isVariousArtists track) 311 , identifiedTrackCover = identifiedTrack
+34 -16
src/Applications/UI/Tracks/Scene/Covers.elm
··· 673 |> .album 674 675 missingTracks = 676 - album == Tracks.missingAlbumPlaceholder 677 678 maybeBlobUrlFromCache = 679 cachedCovers ··· 800 identifiedTrackCover 801 802 missingTracks = 803 - track.tags.album == Tracks.missingAlbumPlaceholder 804 in 805 brick 806 (if clickable then ··· 827 , "pt-px" 828 , "truncate" 829 ] 830 - [ case sortBy of 831 - Album -> 832 - text track.tags.album 833 834 - Artist -> 835 - text track.tags.artist 836 837 - _ -> 838 - nothing 839 ] 840 841 -- ··· 848 ] 849 [ case sortBy of 850 Album -> 851 - if missingTracks then 852 - text "Missing tracks" 853 - 854 - else if cover.variousArtists then 855 text "Various Artists" 856 857 else 858 - text track.tags.artist 859 860 Artist -> 861 case List.length cover.trackIds of 862 1 -> 863 - Html.text "1 track" 864 865 n -> 866 - Html.text (String.fromInt n ++ " tracks") 867 868 _ -> 869 nothing
··· 673 |> .album 674 675 missingTracks = 676 + List.any 677 + (Tuple.first >> .isMissing) 678 + cover.tracks 679 680 maybeBlobUrlFromCache = 681 cachedCovers ··· 802 identifiedTrackCover 803 804 missingTracks = 805 + List.any 806 + (Tuple.first >> .isMissing) 807 + cover.tracks 808 in 809 brick 810 (if clickable then ··· 831 , "pt-px" 832 , "truncate" 833 ] 834 + [ 835 + case sortBy of 836 + Album -> 837 + if missingTracks then 838 + text "Missing tracks" 839 + 840 + else 841 + text (Maybe.withDefault "Unknown album" track.tags.album) 842 843 + Artist -> 844 + if missingTracks then 845 + text "Missing tracks" 846 847 + else 848 + text (Maybe.withDefault "Unknown artist" track.tags.artist) 849 + 850 + _ -> 851 + nothing 852 ] 853 854 -- ··· 861 ] 862 [ case sortBy of 863 Album -> 864 + if cover.variousArtists then 865 text "Various Artists" 866 867 + else if not missingTracks && Maybe.isJust track.tags.artist then 868 + text (Maybe.withDefault "" track.tags.artist) 869 else 870 + case List.length cover.trackIds of 871 + 1 -> 872 + text "1 track" 873 + 874 + n -> 875 + text (String.fromInt n ++ " tracks") 876 + 877 878 Artist -> 879 case List.length cover.trackIds of 880 1 -> 881 + text "1 track" 882 883 n -> 884 + text (String.fromInt n ++ " tracks") 885 886 _ -> 887 nothing
+7 -7
src/Applications/UI/Tracks/Scene/List.elm
··· 461 else if not showArtist && showAlbum then 462 [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors 463 , otherColumn "51.25%" False track.tags.title 464 - , otherColumn "43%" False track.tags.album 465 ] 466 467 else if showArtist && not showAlbum then 468 [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors 469 , otherColumn "51.25%" False track.tags.title 470 - , otherColumn "43%" False track.tags.artist 471 ] 472 473 else 474 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 475 , otherColumn "37.5%" False track.tags.title 476 - , otherColumn "29.0%" False track.tags.artist 477 - , otherColumn "29.0%" True track.tags.album 478 ] 479 ) 480 ] ··· 567 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 568 , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) 569 , otherColumn "36.0%" False track.tags.title 570 - , otherColumn "27.5%" False track.tags.artist 571 - , otherColumn "27.5%" True track.tags.album 572 ] 573 574 else 575 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 576 , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) 577 , otherColumn "49.75%" False track.tags.title 578 - , otherColumn "41.25%" False track.tags.artist 579 ] 580 ) 581
··· 461 else if not showArtist && showAlbum then 462 [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors 463 , otherColumn "51.25%" False track.tags.title 464 + , otherColumn "43%" False (Maybe.withDefault fallbackAlbum track.tags.album) 465 ] 466 467 else if showArtist && not showAlbum then 468 [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors 469 , otherColumn "51.25%" False track.tags.title 470 + , otherColumn "43%" False (Maybe.withDefault fallbackArtist track.tags.artist) 471 ] 472 473 else 474 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 475 , otherColumn "37.5%" False track.tags.title 476 + , otherColumn "29.0%" False (Maybe.withDefault fallbackArtist track.tags.artist) 477 + , otherColumn "29.0%" True (Maybe.withDefault fallbackAlbum track.tags.album) 478 ] 479 ) 480 ] ··· 567 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 568 , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) 569 , otherColumn "36.0%" False track.tags.title 570 + , otherColumn "27.5%" False (Maybe.withDefault fallbackArtist track.tags.artist) 571 + , otherColumn "27.5%" True (Maybe.withDefault fallbackAlbum track.tags.album) 572 ] 573 574 else 575 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 576 , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) 577 , otherColumn "49.75%" False track.tags.title 578 + , otherColumn "41.25%" False (Maybe.withDefault fallbackArtist track.tags.artist) 579 ] 580 ) 581
+26 -2
src/Javascript/Brain/artwork.ts
··· 2 // Album Covers 3 // (◕‿◕✿) 4 5 6 import { transformUrl } from "../urls" 7 import * as processing from "../processing" ··· 28 // 1. TAGS 29 30 31 - function findUsingTags(prep, app) { 32 return Promise.all( 33 [ 34 transformUrl(prep.trackHeadUrl, app), ··· 39 headUrl, 40 getUrl, 41 prep.trackFilename, 42 - { skipCovers: false } 43 44 )).then(tags => { 45 return tags?.picture ··· 65 return fetch(`https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`) 66 .then(r => r.json()) 67 .then(r => musicBrainzCover(r.releases)) 68 } 69 70 ··· 96 return fetch(`https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json`) 97 .then(r => r.json()) 98 .then(r => lastFmCover(r.results.albummatches.album)) 99 } 100 101 ··· 109 .catch(_ => lastFmCover(remainingMatches.slice(1))) 110 : album && lastFmCover(remainingMatches.slice(1)) 111 }
··· 2 // Album Covers 3 // (◕‿◕✿) 4 5 + import MediaInfoFactory, { MediaInfo } from "mediainfo.js" 6 7 import { transformUrl } from "../urls" 8 import * as processing from "../processing" ··· 29 // 1. TAGS 30 31 32 + async function findUsingTags(prep, app) { 33 + const mediainfo = await mediaInfoClient() 34 + 35 return Promise.all( 36 [ 37 transformUrl(prep.trackHeadUrl, app), ··· 42 headUrl, 43 getUrl, 44 prep.trackFilename, 45 + mediainfo 46 47 )).then(tags => { 48 return tags?.picture ··· 68 return fetch(`https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`) 69 .then(r => r.json()) 70 .then(r => musicBrainzCover(r.releases)) 71 + .catch(_ => REJECT()) 72 } 73 74 ··· 100 return fetch(`https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json`) 101 .then(r => r.json()) 102 .then(r => lastFmCover(r.results.albummatches.album)) 103 + .catch(_ => REJECT()) 104 } 105 106 ··· 114 .catch(_ => lastFmCover(remainingMatches.slice(1))) 115 : album && lastFmCover(remainingMatches.slice(1)) 116 } 117 + 118 + 119 + 120 + // 🛠️ 121 + 122 + 123 + let client: MediaInfo<"object"> | null 124 + 125 + 126 + async function mediaInfoClient() { 127 + if (client) return client 128 + client = await MediaInfoFactory({ 129 + coverData: true, 130 + locateFile: () => { 131 + return "../../wasm/media-info.wasm" 132 + }, 133 + }) 134 + return client 135 + }
+1 -1
src/Javascript/index.ts
··· 267 // 🎵 268 if (item) { 269 const coverPrep = { 270 - cacheKey: btoa(unescape(encodeURIComponent(item.trackTags.artist + " --- " + item.trackTags.album))), 271 trackFilename: item.trackPath.split("/").reverse()[0], 272 trackPath: item.trackPath, 273 trackSourceId: item.sourceId,
··· 267 // 🎵 268 if (item) { 269 const coverPrep = { 270 + cacheKey: btoa(unescape(encodeURIComponent((item.trackTags.artist || "?") + " --- " + (item.trackTags.album || "?")))), 271 trackFilename: item.trackPath.split("/").reverse()[0], 272 trackPath: item.trackPath, 273 trackSourceId: item.sourceId,
+178 -88
src/Javascript/processing.ts
··· 4 // 5 // Audio processing, getting metadata, etc. 6 7 8 - import * as musicMetadata from "music-metadata-browser" 9 - import { makeTokenizer } from "@tokenizer/http" 10 11 - import { mimeType } from "./common" 12 - import { transformUrl } from "./urls" 13 - 14 15 // Contexts 16 // -------- 17 18 - export function processContext(context, app) { 19 - const initialPromise = Promise.resolve([]) 20 21 - return context.urlsForTags.reduce((accumulator, urls, idx) => { 22 - return accumulator.then(col => { 23 - const filename = context 24 - .receivedFilePaths[idx] 25 - .split("/") 26 - .reverse()[0] 27 28 - return Promise.all([ 29 - transformUrl(urls.headUrl, app), 30 - transformUrl(urls.getUrl, app) 31 32 - ]).then(([headUrl, getUrl]) => { 33 - return getTags(headUrl, getUrl, filename, { skipCovers: true }) 34 35 - }).then(r => { 36 - return col.concat(r) 37 38 - }).catch(e => { 39 - console.warn(e) 40 - return col.concat(null) 41 42 - }) 43 - }) 44 45 - }, initialPromise).then(col => { 46 - context.receivedTags = col 47 - return context 48 49 - }) 50 } 51 52 53 54 - // Tags 55 - // ---- 56 57 58 - const parserConfiguration = Object.assign( 59 - {}, 60 - { duration: false, skipPostHeaders: true } 61 - ) 62 63 64 - export function getTags(headUrl, getUrl, filename, options) { 65 - const fileExtMatch = filename.match(/\.(\w+)$/) 66 - const fileExt = fileExtMatch && fileExtMatch[1] 67 68 - const overrideContentType = ( 69 - getUrl.includes("googleapis.com") || 70 - getUrl.includes("googleusercontent.com") 71 - ) 72 73 - return makeTokenizer(headUrl) 74 - .then(tokenizer => { 75 - const fileMime = overrideContentType 76 - ? mimeType(fileExt) 77 - : tokenizer.fileInfo.mimeType 78 79 - tokenizer.fileInfo.mimeType = fileMime 80 - tokenizer.fileInfo.url = getUrl 81 82 - if (tokenizer.rangeRequestClient) { 83 - tokenizer.rangeRequestClient.url = getUrl 84 - tokenizer.rangeRequestClient.resolvedUrl = undefined 85 - } 86 87 - return musicMetadata.parseFromTokenizer( 88 - tokenizer, 89 - Object.assign({}, parserConfiguration, options || {}) 90 - ) 91 - }) 92 - .then(result => { 93 - return pickTags(filename, result) 94 - }) 95 - .catch(err => { 96 - console.error(err) 97 - return fallbackTags(filename) 98 - }) 99 } 100 101 102 - function pickTags(filename, result) { 103 - const tags = result && result.common 104 - if (!tags) return null 105 106 - const artist = tags.artist && tags.artist.length ? tags.artist : null 107 - const title = tags.title && tags.title.length ? tags.title : null 108 109 return { 110 disc: tags.disk.no || 1, 111 nr: tags.track.no || 1, 112 - album: tags.album && tags.album.length ? tags.album : "Unknown", 113 - artist: artist || "Unknown", 114 - title: title ? title : (artist ? "Unknown" : filename.replace(/\.\w+$/, "")), 115 genre: (tags.genre && tags.genre[0]) || null, 116 year: tags.year || null, 117 - picture: tags.picture ? tags.picture[0] : null 118 - } 119 } 120 121 122 - function fallbackTags(filename) { 123 - const filenameWithoutExt = filename.replace(/\.\w+$/, "") 124 - 125 - return { 126 - disc: 1, 127 - nr: 1, 128 - album: "Unknown", 129 - artist: "Unknown", 130 - title: filenameWithoutExt, 131 - genre: null, 132 - year: null, 133 - picture: null 134 - } 135 }
··· 4 // 5 // Audio processing, getting metadata, etc. 6 7 + import type { IAudioMetadata } from "music-metadata"; 8 + import type { MediaInfo, MediaInfoType } from "mediainfo.js"; 9 10 + import MediaInfoFactory from "mediainfo.js"; 11 + import * as Uint8arrays from "uint8arrays"; 12 13 + import { transformUrl } from "./urls"; 14 15 // Contexts 16 // -------- 17 18 + export async function processContext(context, app) { 19 + const mediainfo = await mediaInfoClient(); 20 + const initialPromise = Promise.resolve([]); 21 + 22 + return context.urlsForTags 23 + .reduce((accumulator, urls, idx) => { 24 + return accumulator.then((col) => { 25 + const filename = context.receivedFilePaths[idx].split("/").reverse()[0]; 26 + 27 + return Promise.all([transformUrl(urls.headUrl, app), transformUrl(urls.getUrl, app)]) 28 + .then(([headUrl, getUrl]) => { 29 + return getTags(headUrl, getUrl, filename, mediainfo); 30 + }) 31 + .then((r) => { 32 + return col.concat(r); 33 + }) 34 + .catch((e) => { 35 + console.warn(e); 36 + return col.concat(null); 37 + }); 38 + }); 39 + }, initialPromise) 40 + .then((col) => { 41 + context.receivedTags = col; 42 + return context; 43 + }); 44 + } 45 46 + // Tags - General 47 + // -------------- 48 49 + type Tags = { 50 + disc: number; 51 + nr: number; 52 + album: string | null; 53 + artist: string | null; 54 + title: string; 55 + genre: string | null; 56 + year: number | null; 57 + picture: { data: Uint8Array; format: string } | null; 58 + }; 59 60 + export async function getTags( 61 + headUrl: string, 62 + getUrl: string, 63 + filename: string, 64 + mediainfo: MediaInfo<"object">, 65 + ) { 66 + const miResult = await mediainfo 67 + .analyzeData(getSize(headUrl), readChunk(getUrl)) 68 + .catch((_) => null); 69 + const miTags = miResult && pickTagsFromMediaInfo(filename, miResult); 70 + if (miTags) return miTags; 71 72 + const musicMetadata = await import("music-metadata-browser").then((a) => a.default); 73 + const httpTokenizer = await import("@tokenizer/http").then((a) => a.default); 74 75 + const tokenizer = await httpTokenizer.makeTokenizer(headUrl); 76 + tokenizer.fileInfo.url = getUrl; 77 78 + // @ts-ignore 79 + if (tokenizer.rangeRequestClient) { 80 + // @ts-ignore 81 + tokenizer.rangeRequestClient.url = getUrl; 82 + // @ts-ignore 83 + tokenizer.rangeRequestClient.resolvedUrl = undefined; 84 + } 85 86 + const mmResult = await musicMetadata.parseFromTokenizer(tokenizer); 87 + const mmTags = pickTagsFromMusicMetadata(filename, mmResult); 88 + if (mmTags) return mmTags; 89 90 + return fallbackTags(filename); 91 } 92 93 + function fallbackTags(filename: string): Tags { 94 + const filenameWithoutExt = filename.replace(/\.\w+$/, ""); 95 96 + return { 97 + disc: 1, 98 + nr: 1, 99 + album: null, 100 + artist: null, 101 + title: filenameWithoutExt, 102 + genre: null, 103 + year: null, 104 + picture: null, 105 + }; 106 + } 107 108 + // Tags - Media Info 109 + // ----------------- 110 111 + const getSize = (headUrl: string) => async (): Promise<number> => { 112 + const response = await fetch(headUrl, { method: "HEAD" }); 113 114 + if (!response.ok) { 115 + throw new Error(`HTTP error status=${response.status}: ${response.statusText}`); 116 + } 117 118 + const l = response.headers.get("Content-Length"); 119 120 + if (l) { 121 + return parseInt(l, 10); 122 + } else { 123 + throw new Error("HTTP response doesn't have a Content-Length"); 124 + } 125 + }; 126 127 + const readChunk = 128 + (getUrl: string) => 129 + async (chunkSize: number, offset: number): Promise<Uint8Array> => { 130 + if (chunkSize === 0) return new Uint8Array(); 131 + 132 + const from = offset; 133 + const to = offset + chunkSize; 134 + 135 + const start = to < from ? to : from; 136 + const end = to < from ? from : to; 137 + 138 + const response = await fetch(getUrl, { 139 + method: "GET", 140 + headers: { 141 + Range: `bytes=${start}-${end}`, 142 + }, 143 + }); 144 + 145 + if (!response.ok) { 146 + throw new Error(`HTTP error status=${response.status}: ${response.statusText}`); 147 + } 148 + 149 + return new Uint8Array(await response.arrayBuffer()); 150 + }; 151 + 152 + function pickTagsFromMediaInfo(filename: string, result: MediaInfoType): Tags | null { 153 + const tags = result?.media?.track?.filter((t) => t["@type"] === "General")[0]; 154 + if (!tags) return null; 155 + 156 + let artist = tags.Performer?.length ? tags.Performer : null; 157 + const title = tags.Title?.length ? tags.Title : null; 158 159 + if (!artist && !title) return null; 160 161 + if (artist && artist.includes(" / ")) { 162 + artist = artist 163 + .split(" / ") 164 + .filter((a) => a.trim() !== "") 165 + .join(", "); 166 + } 167 168 + const year = tags.Recorded_Date ? new Date(Date.parse(tags.Recorded_Date)).getFullYear() : null; 169 170 + return { 171 + disc: tags.Part_Position || 1, 172 + nr: tags.Track_Position || 1, 173 + album: tags.Album && tags.Album.length ? tags.Album : null, 174 + artist: artist, 175 + title: title || filename.replace(/\.\w+$/, ""), 176 + genre: tags.Genre || null, 177 + year: year !== null && isNaN(year) ? null : year, 178 + picture: tags.Cover_Data 179 + ? { 180 + data: Uint8arrays.fromString(tags.Cover_Data, "base64"), 181 + format: tags.Cover_Mime || "image/jpeg", 182 + } 183 + : null, 184 + }; 185 } 186 187 + // Tags - Music Metadata 188 + // --------------------- 189 190 + function pickTagsFromMusicMetadata(filename: string, result: IAudioMetadata): Tags | null { 191 + const tags = result && result.common; 192 + if (!tags) return null; 193 194 + const artist = tags.artist && tags.artist.length ? tags.artist : null; 195 + const title = tags.title && tags.title.length ? tags.title : null; 196 + 197 + if (!artist && !title) return null; 198 199 return { 200 disc: tags.disk.no || 1, 201 nr: tags.track.no || 1, 202 + album: tags.album && tags.album.length ? tags.album : null, 203 + artist: artist, 204 + title: title || filename.replace(/\.\w+$/, ""), 205 genre: (tags.genre && tags.genre[0]) || null, 206 year: tags.year || null, 207 + picture: 208 + tags.picture && tags.picture[0] 209 + ? { data: tags.picture[0].data, format: tags.picture[0].format } 210 + : null, 211 + }; 212 } 213 214 + // 🛠️ 215 + // -- 216 217 + async function mediaInfoClient() { 218 + return await MediaInfoFactory({ 219 + coverData: false, 220 + full: true, 221 + locateFile: () => { 222 + return "../../wasm/media-info.wasm"; 223 + }, 224 + }); 225 }
+10
src/Library/Json/Encode/Ext.elm
···
··· 1 + module Json.Encode.Ext exposing (..) 2 + 3 + import Json.Encode as Encode 4 + 5 + 6 + encodeMaybe : Maybe a -> (a -> Encode.Value) -> Encode.Value 7 + encodeMaybe maybe encoder = 8 + maybe 9 + |> Maybe.map encoder 10 + |> Maybe.withDefault Encode.null
+39 -21
src/Library/LastFm.elm
··· 96 { url = 97 apiUrl 98 , body = 99 - authenticatedBody 100 - [ ( "album", track.tags.album ) 101 - , ( "artist", track.tags.artist ) 102 - , ( "duration", String.fromInt duration ) 103 - , ( "track", track.tags.title ) 104 - , ( "trackNumber", String.fromInt track.tags.nr ) 105 106 - -- 107 - , ( "method", "track.updateNowPlaying" ) 108 - , ( "sk", sessionKey ) 109 - ] 110 , expect = 111 Http.expectWhatever (always msg) 112 } ··· 123 { url = 124 apiUrl 125 , body = 126 - authenticatedBody 127 - [ ( "album", track.tags.album ) 128 - , ( "artist", track.tags.artist ) 129 - , ( "duration", String.fromInt duration ) 130 - , ( "track", track.tags.title ) 131 - , ( "trackNumber", String.fromInt track.tags.nr ) 132 133 - -- 134 - , ( "method", "track.scrobble" ) 135 - , ( "sk", sessionKey ) 136 - , ( "timestamp", String.fromInt timestamp ) 137 - ] 138 , expect = 139 Http.expectWhatever (always msg) 140 } 141 142 Nothing -> 143 Cmd.none 144 145 146
··· 96 { url = 97 apiUrl 98 , body = 99 + [ ( "duration", String.fromInt duration ) 100 + , ( "track", track.tags.title ) 101 + , ( "trackNumber", String.fromInt track.tags.nr ) 102 103 + -- 104 + , ( "method", "track.updateNowPlaying" ) 105 + , ( "sk", sessionKey ) 106 + ] 107 + |> addAlbum track 108 + |> addArtist track 109 + |> authenticatedBody 110 , expect = 111 Http.expectWhatever (always msg) 112 } ··· 123 { url = 124 apiUrl 125 , body = 126 + [ ( "duration", String.fromInt duration ) 127 + , ( "track", track.tags.title ) 128 + , ( "trackNumber", String.fromInt track.tags.nr ) 129 130 + -- 131 + , ( "method", "track.scrobble" ) 132 + , ( "sk", sessionKey ) 133 + , ( "timestamp", String.fromInt timestamp ) 134 + ] 135 + |> addAlbum track 136 + |> addArtist track 137 + |> authenticatedBody 138 , expect = 139 Http.expectWhatever (always msg) 140 } 141 142 Nothing -> 143 Cmd.none 144 + 145 + 146 + addAlbum track list = 147 + case track.tags.album of 148 + Just album -> 149 + ( "album", album ) :: list 150 + 151 + Nothing -> 152 + list 153 + 154 + 155 + addArtist track list = 156 + case track.tags.artist of 157 + Just artist -> 158 + ( "artist", artist ) :: list 159 + 160 + Nothing -> 161 + list 162 163 164
+2 -2
src/Library/Playlists.elm
··· 12 13 14 type alias PlaylistTrack = 15 - { album : String 16 - , artist : String 17 , title : String 18 } 19
··· 12 13 14 type alias PlaylistTrack = 15 + { album : Maybe String 16 + , artist : Maybe String 17 , title : String 18 } 19
+5 -4
src/Library/Playlists/Encoding.elm
··· 3 import Json.Decode as Decode 4 import Json.Decode.Ext as Decode 5 import Json.Encode as Encode 6 import Playlists exposing (..) 7 8 ··· 23 encodePlaylistTrack : PlaylistTrack -> Encode.Value 24 encodePlaylistTrack playlistTrack = 25 Encode.object 26 - [ ( "album", Encode.string playlistTrack.album ) 27 - , ( "artist", Encode.string playlistTrack.artist ) 28 , ( "title", Encode.string playlistTrack.title ) 29 ] 30 ··· 45 playlistTrackDecoder : Decode.Decoder PlaylistTrack 46 playlistTrackDecoder = 47 Decode.map3 PlaylistTrack 48 - (Decode.field "album" Decode.string) 49 - (Decode.field "artist" Decode.string) 50 (Decode.field "title" Decode.string)
··· 3 import Json.Decode as Decode 4 import Json.Decode.Ext as Decode 5 import Json.Encode as Encode 6 + import Json.Encode.Ext exposing (..) 7 import Playlists exposing (..) 8 9 ··· 24 encodePlaylistTrack : PlaylistTrack -> Encode.Value 25 encodePlaylistTrack playlistTrack = 26 Encode.object 27 + [ ( "album", encodeMaybe playlistTrack.album Encode.string ) 28 + , ( "artist", encodeMaybe playlistTrack.artist Encode.string ) 29 , ( "title", Encode.string playlistTrack.title ) 30 ] 31 ··· 46 playlistTrackDecoder : Decode.Decoder PlaylistTrack 47 playlistTrackDecoder = 48 Decode.map3 PlaylistTrack 49 + (Decode.maybe <| Decode.field "album" Decode.string) 50 + (Decode.maybe <| Decode.field "artist" Decode.string) 51 (Decode.field "title" Decode.string)
+40 -18
src/Library/Tracks.elm
··· 6 import String.Ext as String 7 import Time 8 import Time.Ext as Time 9 10 11 ··· 30 , nr : Int 31 32 -- Main 33 - , album : String 34 - , artist : String 35 , title : String 36 37 -- Extra ··· 58 59 60 type alias Favourite = 61 - { artist : String 62 , title : String 63 } 64 ··· 177 emptyTags = 178 { disc = 1 179 , nr = 0 180 - , album = "Empty" 181 - , artist = "Empty" 182 , title = "Empty" 183 , genre = Nothing 184 , picture = Nothing ··· 219 , scrollContext = "" 220 } 221 222 223 224 -- MORE STUFF ··· 226 227 coverGroup : SortBy -> IdentifiedTrack -> String 228 coverGroup sort ( identifiers, { tags } as track ) = 229 (case sort of 230 Artist -> 231 - tags.artist 232 233 Album -> 234 -- There is the possibility of albums with the same name, 235 -- such as "Greatests Hits". 236 -- To make sure we treat those as different albums, 237 -- we prefix the album by its parent directory. 238 - identifiers.parentDirectory ++ tags.album 239 240 PlaylistIndex -> 241 "" ··· 243 Title -> 244 tags.title 245 ) 246 - |> String.trim 247 - |> String.toLower 248 249 250 coverKey : Bool -> Track -> String 251 coverKey isVariousArtists { tags } = 252 - if isVariousArtists then 253 - tags.album 254 255 - else 256 - tags.artist ++ " --- " ++ tags.album 257 258 259 isNowPlaying : IdentifiedTrack -> IdentifiedTrack -> Bool ··· 281 |> List.head 282 |> (==) (Just playlist.name) 283 |> (&&) playlist.autoGenerated 284 - 285 - 286 - missingAlbumPlaceholder : String 287 - missingAlbumPlaceholder = 288 - "⌁" 289 290 291 missingId : String
··· 6 import String.Ext as String 7 import Time 8 import Time.Ext as Time 9 + import Maybe.Extra as Maybe 10 11 12 ··· 31 , nr : Int 32 33 -- Main 34 + , album : Maybe String 35 + , artist : Maybe String 36 , title : String 37 38 -- Extra ··· 59 60 61 type alias Favourite = 62 + { artist : Maybe String 63 , title : String 64 } 65 ··· 178 emptyTags = 179 { disc = 1 180 , nr = 0 181 + , album = Nothing 182 + , artist = Nothing 183 , title = "Empty" 184 , genre = Nothing 185 , picture = Nothing ··· 220 , scrollContext = "" 221 } 222 223 + {-| If a track doesn't fit into a group, where does it go? 224 + -} 225 + fallbackCoverGroup : String 226 + fallbackCoverGroup = 227 + "MISSING_TRACK_INFO" 228 + 229 + {-| This value is used as a fallback in the UI if the album is missing. 230 + -} 231 + fallbackAlbum : String 232 + fallbackAlbum = 233 + "" 234 + 235 + {-| This value is used as a fallback in the UI if the artist is missing. 236 + -} 237 + fallbackArtist : String 238 + fallbackArtist = 239 + "" 240 241 242 -- MORE STUFF ··· 244 245 coverGroup : SortBy -> IdentifiedTrack -> String 246 coverGroup sort ( identifiers, { tags } as track ) = 247 + if identifiers.isMissing then 248 + "MISSING_TRACKS" 249 + else 250 (case sort of 251 Artist -> 252 + Maybe.unwrap fallbackCoverGroup (String.trim >> String.toLower) tags.artist 253 254 Album -> 255 -- There is the possibility of albums with the same name, 256 -- such as "Greatests Hits". 257 -- To make sure we treat those as different albums, 258 -- we prefix the album by its parent directory. 259 + 260 + case tags.album of 261 + Just album -> 262 + (identifiers.parentDirectory ++ album) 263 + |> String.trim 264 + |> String.toLower 265 + Nothing -> 266 + fallbackCoverGroup 267 268 PlaylistIndex -> 269 "" ··· 271 Title -> 272 tags.title 273 ) 274 + 275 276 277 coverKey : Bool -> Track -> String 278 coverKey isVariousArtists { tags } = 279 + if isVariousArtists then 280 + Maybe.withDefault "?" tags.album 281 282 + else 283 + Maybe.withDefault "?" tags.artist ++ " --- " ++ Maybe.withDefault "?" tags.album 284 285 286 isNowPlaying : IdentifiedTrack -> IdentifiedTrack -> Bool ··· 308 |> List.head 309 |> (==) (Just playlist.name) 310 |> (&&) playlist.autoGenerated 311 312 313 missingId : String
+2 -2
src/Library/Tracks/Collection/Internal/Arrange.elm
··· 181 tag = 182 case deps.sortBy of 183 Artist -> 184 - t.tags.artist 185 186 Album -> 187 - t.tags.album 188 189 PlaylistIndex -> 190 ""
··· 181 tag = 182 case deps.sortBy of 183 Artist -> 184 + Maybe.withDefault fallbackArtist t.tags.artist 185 186 Album -> 187 + Maybe.withDefault fallbackAlbum t.tags.album 188 189 PlaylistIndex -> 190 ""
+7 -1
src/Library/Tracks/Collection/Internal/Harvest.elm
··· 78 |> List.foldl 79 (\( i, t ) ( dict, ( idx, prevIdentifiers ), acc ) -> 80 let 81 s = 82 - String.toLower (t.tags.artist ++ t.tags.title) 83 in 84 if theFilter ( i, t ) == False then 85 ( dict, ( idx, prevIdentifiers ), acc )
··· 78 |> List.foldl 79 (\( i, t ) ( dict, ( idx, prevIdentifiers ), acc ) -> 80 let 81 + -- Identifier used to distinguish duplicates 82 s = 83 + case t.tags.artist of 84 + Just artist -> 85 + String.toLower (artist ++ t.tags.title) 86 + 87 + Nothing -> 88 + String.toLower t.tags.title 89 in 90 if theFilter ( i, t ) == False then 91 ( dict, ( idx, prevIdentifiers ), acc )
+17 -3
src/Library/Tracks/Collection/Internal/Identify.elm
··· 2 3 import Dict 4 import List.Extra as List 5 import Time.Ext as Time 6 import Tracks exposing (..) 7 import Tracks.Favourites as Favourites ··· 19 (\fav ( dict, acc ) -> 20 let 21 simpl = 22 - Favourites.simplified fav 23 in 24 ( Dict.insert simpl fav dict 25 , simpl :: acc ··· 130 131 isFavourite : Track -> String -> Bool 132 isFavourite track = 133 - (==) (String.toLower track.tags.artist ++ String.toLower track.tags.title) 134 135 136 makeMissingFavouriteTrack : Favourite -> IdentifiedTrack ··· 141 , nr = 0 142 , artist = fav.artist 143 , title = fav.title 144 - , album = Tracks.missingAlbumPlaceholder 145 , genre = Nothing 146 , picture = Nothing 147 , year = Nothing
··· 2 3 import Dict 4 import List.Extra as List 5 + import Maybe.Extra as Maybe 6 import Time.Ext as Time 7 import Tracks exposing (..) 8 import Tracks.Favourites as Favourites ··· 20 (\fav ( dict, acc ) -> 21 let 22 simpl = 23 + case fav.artist of 24 + Just artist -> 25 + String.toLower artist ++ String.toLower fav.title 26 + 27 + Nothing -> 28 + String.toLower fav.title 29 in 30 ( Dict.insert simpl fav dict 31 , simpl :: acc ··· 136 137 isFavourite : Track -> String -> Bool 138 isFavourite track = 139 + -- This needs to match the `simplifiedFavourites` format from above 140 + (==) 141 + (case track.tags.artist of 142 + Just artist -> 143 + String.toLower artist ++ String.toLower track.tags.title 144 + 145 + Nothing -> 146 + String.toLower track.tags.title 147 + ) 148 149 150 makeMissingFavouriteTrack : Favourite -> IdentifiedTrack ··· 155 , nr = 0 156 , artist = fav.artist 157 , title = fav.title 158 + , album = Nothing 159 , genre = Nothing 160 , picture = Nothing 161 , year = Nothing
+7 -13
src/Library/Tracks/Encoding.elm
··· 3 import Json.Decode as Decode 4 import Json.Decode.Pipeline exposing (optional, required) 5 import Json.Encode as Encode 6 import Time.Ext as Time 7 import Tracks exposing (..) 8 ··· 14 encodeFavourite : Favourite -> Encode.Value 15 encodeFavourite fav = 16 Encode.object 17 - [ ( "artist", Encode.string fav.artist ) 18 , ( "title", Encode.string fav.title ) 19 ] 20 ··· 89 , ( "nr", Encode.int tags.nr ) 90 91 -- 92 - , ( "album", Encode.string tags.album ) 93 - , ( "artist", Encode.string tags.artist ) 94 , ( "title", Encode.string tags.title ) 95 96 -- ··· 100 ] 101 102 103 - encodeMaybe : Maybe a -> (a -> Encode.Value) -> Encode.Value 104 - encodeMaybe maybe encoder = 105 - maybe 106 - |> Maybe.map encoder 107 - |> Maybe.withDefault Encode.null 108 - 109 - 110 111 -- DECODE 112 ··· 126 favouriteDecoder : Decode.Decoder Favourite 127 favouriteDecoder = 128 Decode.map2 Favourite 129 - (Decode.field "artist" Decode.string) 130 (Decode.field "title" Decode.string) 131 132 ··· 215 Decode.map8 Tags 216 (Decode.field "disc" Decode.int) 217 (Decode.field "nr" Decode.int) 218 - (Decode.field "album" Decode.string) 219 - (Decode.field "artist" Decode.string) 220 (Decode.field "title" Decode.string) 221 (Decode.maybe <| Decode.field "genre" Decode.string) 222 (Decode.maybe <| Decode.field "picture" Decode.string)
··· 3 import Json.Decode as Decode 4 import Json.Decode.Pipeline exposing (optional, required) 5 import Json.Encode as Encode 6 + import Json.Encode.Ext exposing (..) 7 import Time.Ext as Time 8 import Tracks exposing (..) 9 ··· 15 encodeFavourite : Favourite -> Encode.Value 16 encodeFavourite fav = 17 Encode.object 18 + [ ( "artist", encodeMaybe fav.artist Encode.string ) 19 , ( "title", Encode.string fav.title ) 20 ] 21 ··· 90 , ( "nr", Encode.int tags.nr ) 91 92 -- 93 + , ( "album", encodeMaybe tags.album Encode.string ) 94 + , ( "artist", encodeMaybe tags.artist Encode.string ) 95 , ( "title", Encode.string tags.title ) 96 97 -- ··· 101 ] 102 103 104 105 -- DECODE 106 ··· 120 favouriteDecoder : Decode.Decoder Favourite 121 favouriteDecoder = 122 Decode.map2 Favourite 123 + (Decode.maybe <| Decode.field "artist" Decode.string) 124 (Decode.field "title" Decode.string) 125 126 ··· 209 Decode.map8 Tags 210 (Decode.field "disc" Decode.int) 211 (Decode.field "nr" Decode.int) 212 + (Decode.maybe <| Decode.field "album" Decode.string) 213 + (Decode.maybe <| Decode.field "artist" Decode.string) 214 (Decode.field "title" Decode.string) 215 (Decode.maybe <| Decode.field "genre" Decode.string) 216 (Decode.maybe <| Decode.field "picture" Decode.string)
+7 -9
src/Library/Tracks/Favourites.elm
··· 1 - module Tracks.Favourites exposing (completeFavouritesList, completeTracksList, match, removeFromFavouritesList, removeFromTracksList, simplified, toggleInFavouritesList, toggleInTracksList) 2 3 import List.Extra as List 4 import Tracks exposing (Favourite, IdentifiedTrack, Track) 5 6 7 ··· 65 match a b = 66 let 67 ( aa, at ) = 68 - ( String.toLower a.artist 69 , String.toLower a.title 70 ) 71 72 ( ba, bt ) = 73 - ( String.toLower b.artist 74 , String.toLower b.title 75 ) 76 in ··· 127 tracks 128 129 130 - simplified : Favourite -> String 131 - simplified fav = 132 - String.toLower fav.artist ++ String.toLower fav.title 133 - 134 - 135 toggleInTracksList : Track -> List IdentifiedTrack -> List IdentifiedTrack 136 toggleInTracksList track = 137 let ··· 178 179 lowercaseArtist : Track -> String 180 lowercaseArtist = 181 - .tags >> .artist >> String.toLower 182 183 184 lowercaseTitle : Track -> String
··· 1 + module Tracks.Favourites exposing (completeFavouritesList, completeTracksList, match, removeFromFavouritesList, removeFromTracksList, toggleInFavouritesList, toggleInTracksList) 2 3 import List.Extra as List 4 + import Maybe.Extra as Maybe 5 import Tracks exposing (Favourite, IdentifiedTrack, Track) 6 + import Tracks exposing (fallbackArtist) 7 8 9 ··· 67 match a b = 68 let 69 ( aa, at ) = 70 + ( Maybe.unwrap "" String.toLower a.artist 71 , String.toLower a.title 72 ) 73 74 ( ba, bt ) = 75 + ( Maybe.unwrap "" String.toLower b.artist 76 , String.toLower b.title 77 ) 78 in ··· 129 tracks 130 131 132 toggleInTracksList : Track -> List IdentifiedTrack -> List IdentifiedTrack 133 toggleInTracksList track = 134 let ··· 175 176 lowercaseArtist : Track -> String 177 lowercaseArtist = 178 + -- NOTE: Not entirely sure this fallback is correct 179 + .tags >> .artist >> Maybe.unwrap fallbackArtist String.toLower 180 181 182 lowercaseTitle : Track -> String
+27 -2
src/Library/Tracks/Sorting.elm
··· 1 module Tracks.Sorting exposing (sort) 2 3 import Tracks exposing (..) 4 5 ··· 43 sortByAlbum : IdentifiedTrack -> IdentifiedTrack -> Order 44 sortByAlbum ( x, a ) ( y, b ) = 45 EQ 46 |> andThenCompare album a b 47 |> andThenCompare parentDir x y 48 |> andThenCompare disc a b ··· 54 sortByArtist : IdentifiedTrack -> IdentifiedTrack -> Order 55 sortByArtist ( x, a ) ( y, b ) = 56 EQ 57 |> andThenCompare artist a b 58 |> andThenCompare album a b 59 |> andThenCompare parentDir x y ··· 81 82 album : Track -> String 83 album = 84 - .tags >> .album >> low 85 86 87 artist : Track -> String 88 artist = 89 - .tags >> .artist >> low 90 91 92 title : Track -> String ··· 103 nr = 104 .tags >> .nr 105 106 107 parentDir : Identifiers -> String 108 parentDir = ··· 117 andThenCompare fn a b order = 118 if order == EQ then 119 compare (fn a) (fn b) 120 121 else 122 order
··· 1 module Tracks.Sorting exposing (sort) 2 3 + import Maybe.Extra as Maybe 4 import Tracks exposing (..) 5 6 ··· 44 sortByAlbum : IdentifiedTrack -> IdentifiedTrack -> Order 45 sortByAlbum ( x, a ) ( y, b ) = 46 EQ 47 + |> andThenCompareBools isMissing x y 48 |> andThenCompare album a b 49 |> andThenCompare parentDir x y 50 |> andThenCompare disc a b ··· 56 sortByArtist : IdentifiedTrack -> IdentifiedTrack -> Order 57 sortByArtist ( x, a ) ( y, b ) = 58 EQ 59 + |> andThenCompareBools isMissing x y 60 |> andThenCompare artist a b 61 |> andThenCompare album a b 62 |> andThenCompare parentDir x y ··· 84 85 album : Track -> String 86 album = 87 + .tags >> .album >> Maybe.unwrap fallbackAlbum low 88 89 90 artist : Track -> String 91 artist = 92 + .tags >> .artist >> Maybe.unwrap fallbackArtist low 93 94 95 title : Track -> String ··· 106 nr = 107 .tags >> .nr 108 109 + isMissing : Identifiers -> Bool 110 + isMissing = 111 + .isMissing 112 + 113 114 parentDir : Identifiers -> String 115 parentDir = ··· 124 andThenCompare fn a b order = 125 if order == EQ then 126 compare (fn a) (fn b) 127 + 128 + else 129 + order 130 + 131 + andThenCompareBools : (ctx -> Bool) -> ctx -> ctx -> Order -> Order 132 + andThenCompareBools fn a b order = 133 + if order == EQ then 134 + let 135 + af = fn a 136 + bf = fn b 137 + in 138 + if af == bf then 139 + EQ 140 + else if af == False then 141 + GT 142 + else 143 + LT 144 + 145 146 else 147 order
+47
system/Js/esbuild.mjs
···
··· 1 + import esbuild from "esbuild" 2 + import { wasmLoader } from "esbuild-plugin-wasm" 3 + 4 + import parseArgv from "tiny-parse-argv" 5 + 6 + const args = parseArgv(process.argv.slice(2), { 7 + string: ["alias", "define", "inject"], 8 + }) 9 + 10 + esbuild.build({ 11 + alias: {...obj("alias") }, 12 + bundle: true, 13 + define: obj("define"), 14 + entryPoints: [args._[0]], 15 + format: "esm", 16 + inject: arr("inject"), 17 + minify: args.minify || false, 18 + outdir: args.outdir || undefined, 19 + outfile: args.outfile || undefined, 20 + plugins: [wasmLoader()], 21 + splitting: args.splitting || false, 22 + target: "esnext", 23 + }) 24 + 25 + function arr(name) { 26 + return Object.entries(args) 27 + .filter(([k, v]) => { 28 + if (!k.includes(":")) return false 29 + return k.split(":")[0] == name 30 + }) 31 + .map(([k, v]) => { 32 + return k.split(":").slice(1).join(":") + v 33 + }) 34 + } 35 + 36 + function obj(name) { 37 + const entries = Object.entries(args) 38 + .filter(([k, v]) => { 39 + if (!k.includes(":")) return false 40 + return k.split(":")[0] == name 41 + }) 42 + .map(([k, v]) => { 43 + return [k.split(":").slice(1).join(":"), v.toString()] 44 + }) 45 + 46 + return Object.fromEntries(entries) 47 + }