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 1 .DS_Store 2 2 .gren 3 + .zed 3 4 app 4 5 fission.yaml* 5 6 elm-stuff
+3
CHANGELOG.md
··· 2 2 3 3 ## 3.4.0 4 4 5 + - **Improved audio metadata parsing**. Now uses [mediainfo.js](https://github.com/buzz/mediainfo.js). 5 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. 6 7 - Adjusted search behaviour, now searches while typing (with a small delay). 7 8 - Allows you to make playlists public when using Fission/ODD SDK. 8 9 - Fixes issue with Safari where reloading after a search caused the loader to be shown indefinitely. 10 + - Fixes some issues with cover grouping. 9 11 - Fixes syncing issues with Fission/ODD SDK (was called Webnative before) 10 12 - Made the project easier to build. 13 + - Reduced unnecessary error messages. 11 14 - Removes support for older browsers. 12 15 13 16
+11 -5
Justfile
··· 6 6 SRC_DIR := "./src" 7 7 SYSTEM_DIR := "./system" 8 8 9 - ESBUILD := NPM_DIR + "/.bin/esbuild --target=esnext --format=esm --bundle" 9 + ESBUILD := "node system/Js/esbuild.mjs" 10 10 11 11 12 12 default: dev ··· 15 15 # Tasks 16 16 # ===== 17 17 18 - @build: clean css elm js system license 18 + @build: clean css elm copy-wasm js system license 19 19 echo "> Build completed ⚡" 20 20 21 21 22 - @build-prod: quality clean (css "minify") elm-prod js-prod system license 22 + @build-prod: quality clean (css "minify") elm-prod copy-wasm js-prod system license 23 23 echo "> Production build completed 🛳" 24 24 25 25 ··· 41 41 echo "> Cleaning build directory" 42 42 rm -rf {{BUILD_DIR}} || true 43 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 44 50 45 51 46 52 @css minify="false": ··· 174 180 175 181 176 182 @elm-housekeeping: 183 + echo "> Running elm-format" 184 + {{NPM_DIR}}/.bin/elm-format {{SRC_DIR}} --yes 177 185 echo "> Running elm-review" 178 186 {{NPM_DIR}}/.bin/elm-review {{SRC_DIR}} --config system/Review --fix-all 179 - echo "> Running elm-format" 180 - elm-format {{SRC_DIR}} --yes 181 187 182 188 183 189 @quality: check-versions
+1250 -693
package-lock.json
··· 18 18 "load-script2": "^2.0.5", 19 19 "localforage": "^1.10.0", 20 20 "lunr": "^2.3.8", 21 + "mediainfo.js": "^0.2.1", 21 22 "music-metadata-browser": "^2.5.10", 22 - "readable-stream": "^4.4.2", 23 + "readable-stream": "^4.5.2", 23 24 "remotestoragejs": "^2.0.0-beta.6", 24 25 "serve": "^14.2.1", 25 26 "throttle-debounce": "^5.0.0", 26 27 "timer.js": "^1.0.4", 27 28 "tocca": "^2.0.9", 28 - "uint8arrays": "^4.0.6" 29 + "uint8arrays": "^4.0.10" 29 30 }, 30 31 "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", 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", 35 36 "buffer": "^6.0.3", 36 37 "elm": "0.19.1-6", 37 - "elm-review": "^2.10.2", 38 - "esbuild": "^0.18.18", 39 - "eslint": "^8.46.0", 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", 40 43 "events": "^3.3.0", 41 44 "gren-lang": "^0.3.0", 42 45 "just-install": "^2.0.1", 43 - "postcss": "^8.4.27", 44 - "postcss-custom-properties": "^13.3.0", 45 - "postcss-import": "^15.1.0", 46 + "postcss": "^8.4.34", 47 + "postcss-custom-properties": "^13.3.4", 48 + "postcss-import": "^16.0.0", 46 49 "stream": "^0.0.2", 47 - "tailwindcss": "^3.3.3", 50 + "tailwindcss": "^3.4.1", 48 51 "tailwindcss-animations": "^2.0.0", 49 - "tailwindcss-interaction-variants": "^5.0.0" 52 + "tailwindcss-interaction-variants": "^5.0.0", 53 + "tiny-parse-argv": "^2.4.0" 50 54 } 51 55 }, 52 56 "node_modules/@aashutoshrathi/word-wrap": { ··· 70 74 "url": "https://github.com/sponsors/sindresorhus" 71 75 } 72 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 + }, 73 142 "node_modules/@chainsafe/is-ip": { 74 143 "version": "2.0.1", 75 144 "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", ··· 84 153 } 85 154 }, 86 155 "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==", 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==", 90 159 "dev": true, 91 160 "funding": [ 92 161 { ··· 102 171 "node": "^14 || ^16 || >=18" 103 172 }, 104 173 "peerDependencies": { 105 - "@csstools/css-parser-algorithms": "^2.3.1", 106 - "@csstools/css-tokenizer": "^2.2.0" 174 + "@csstools/css-parser-algorithms": "^2.5.0", 175 + "@csstools/css-tokenizer": "^2.2.3" 107 176 } 108 177 }, 109 178 "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==", 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==", 113 182 "dev": true, 114 183 "funding": [ 115 184 { ··· 125 194 "node": "^14 || ^16 || >=18" 126 195 }, 127 196 "peerDependencies": { 128 - "@csstools/css-tokenizer": "^2.2.0" 197 + "@csstools/css-tokenizer": "^2.2.3" 129 198 } 130 199 }, 131 200 "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==", 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==", 135 204 "dev": true, 136 205 "funding": [ 137 206 { ··· 199 268 "win32" 200 269 ] 201 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 + }, 202 287 "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==", 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==", 206 291 "cpu": [ 207 292 "arm" 208 293 ], ··· 216 301 } 217 302 }, 218 303 "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==", 304 + "version": "0.20.0", 305 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", 306 + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", 222 307 "cpu": [ 223 308 "arm64" 224 309 ], ··· 232 317 } 233 318 }, 234 319 "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==", 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==", 238 323 "cpu": [ 239 324 "x64" 240 325 ], ··· 248 333 } 249 334 }, 250 335 "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==", 336 + "version": "0.20.0", 337 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", 338 + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", 254 339 "cpu": [ 255 340 "arm64" 256 341 ], ··· 264 349 } 265 350 }, 266 351 "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==", 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==", 270 355 "cpu": [ 271 356 "x64" 272 357 ], ··· 280 365 } 281 366 }, 282 367 "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==", 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==", 286 371 "cpu": [ 287 372 "arm64" 288 373 ], ··· 296 381 } 297 382 }, 298 383 "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==", 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==", 302 387 "cpu": [ 303 388 "x64" 304 389 ], ··· 312 397 } 313 398 }, 314 399 "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==", 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==", 318 403 "cpu": [ 319 404 "arm" 320 405 ], ··· 328 413 } 329 414 }, 330 415 "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==", 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==", 334 419 "cpu": [ 335 420 "arm64" 336 421 ], ··· 344 429 } 345 430 }, 346 431 "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==", 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==", 350 435 "cpu": [ 351 436 "ia32" 352 437 ], ··· 360 445 } 361 446 }, 362 447 "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==", 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==", 366 451 "cpu": [ 367 452 "loong64" 368 453 ], ··· 376 461 } 377 462 }, 378 463 "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==", 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==", 382 467 "cpu": [ 383 468 "mips64el" 384 469 ], ··· 392 477 } 393 478 }, 394 479 "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==", 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==", 398 483 "cpu": [ 399 484 "ppc64" 400 485 ], ··· 408 493 } 409 494 }, 410 495 "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==", 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==", 414 499 "cpu": [ 415 500 "riscv64" 416 501 ], ··· 424 509 } 425 510 }, 426 511 "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==", 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==", 430 515 "cpu": [ 431 516 "s390x" 432 517 ], ··· 440 525 } 441 526 }, 442 527 "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==", 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==", 446 531 "cpu": [ 447 532 "x64" 448 533 ], ··· 456 541 } 457 542 }, 458 543 "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==", 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==", 462 547 "cpu": [ 463 548 "x64" 464 549 ], ··· 472 557 } 473 558 }, 474 559 "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==", 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==", 478 563 "cpu": [ 479 564 "x64" 480 565 ], ··· 488 573 } 489 574 }, 490 575 "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==", 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==", 494 579 "cpu": [ 495 580 "x64" 496 581 ], ··· 504 589 } 505 590 }, 506 591 "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==", 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==", 510 595 "cpu": [ 511 596 "arm64" 512 597 ], ··· 520 605 } 521 606 }, 522 607 "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==", 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==", 526 611 "cpu": [ 527 612 "ia32" 528 613 ], ··· 536 621 } 537 622 }, 538 623 "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==", 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==", 542 627 "cpu": [ 543 628 "x64" 544 629 ], ··· 576 661 } 577 662 }, 578 663 "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==", 664 + "version": "2.1.4", 665 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 666 + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 582 667 "dev": true, 583 668 "dependencies": { 584 669 "ajv": "^6.12.4", ··· 599 684 } 600 685 }, 601 686 "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==", 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==", 605 690 "dev": true, 606 691 "engines": { 607 692 "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 608 693 } 609 694 }, 610 695 "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==", 696 + "version": "0.11.14", 697 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 698 + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 614 699 "dev": true, 615 700 "dependencies": { 616 - "@humanwhocodes/object-schema": "^1.2.1", 617 - "debug": "^4.1.1", 701 + "@humanwhocodes/object-schema": "^2.0.2", 702 + "debug": "^4.3.1", 618 703 "minimatch": "^3.0.5" 619 704 }, 620 705 "engines": { ··· 635 720 } 636 721 }, 637 722 "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==", 723 + "version": "2.0.2", 724 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 725 + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 641 726 "dev": true 642 727 }, 643 728 "node_modules/@ipld/dag-cbor": { ··· 1339 1424 "dev": true 1340 1425 }, 1341 1426 "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==", 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==", 1345 1430 "dev": true 1346 1431 }, 1347 1432 "node_modules/@types/keyv": { ··· 1368 1453 } 1369 1454 }, 1370 1455 "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==", 1456 + "version": "7.5.6", 1457 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", 1458 + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", 1374 1459 "dev": true 1375 1460 }, 1376 1461 "node_modules/@types/tv4": { ··· 1389 1474 } 1390 1475 }, 1391 1476 "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==", 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==", 1395 1480 "dev": true, 1396 1481 "dependencies": { 1397 1482 "@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", 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", 1402 1487 "debug": "^4.3.4", 1403 1488 "graphemer": "^1.4.0", 1404 1489 "ignore": "^5.2.4", 1405 1490 "natural-compare": "^1.4.0", 1406 - "natural-compare-lite": "^1.4.0", 1407 1491 "semver": "^7.5.4", 1408 1492 "ts-api-utils": "^1.0.1" 1409 1493 }, ··· 1425 1509 } 1426 1510 }, 1427 1511 "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==", 1512 + "version": "6.21.0", 1513 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", 1514 + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", 1431 1515 "dev": true, 1432 1516 "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", 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", 1437 1521 "debug": "^4.3.4" 1438 1522 }, 1439 1523 "engines": { ··· 1453 1537 } 1454 1538 }, 1455 1539 "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==", 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==", 1459 1543 "dev": true, 1460 1544 "dependencies": { 1461 - "@typescript-eslint/types": "6.2.1", 1462 - "@typescript-eslint/visitor-keys": "6.2.1" 1545 + "@typescript-eslint/types": "6.21.0", 1546 + "@typescript-eslint/visitor-keys": "6.21.0" 1463 1547 }, 1464 1548 "engines": { 1465 1549 "node": "^16.0.0 || >=18.0.0" ··· 1470 1554 } 1471 1555 }, 1472 1556 "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==", 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==", 1476 1560 "dev": true, 1477 1561 "dependencies": { 1478 - "@typescript-eslint/typescript-estree": "6.2.1", 1479 - "@typescript-eslint/utils": "6.2.1", 1562 + "@typescript-eslint/typescript-estree": "6.21.0", 1563 + "@typescript-eslint/utils": "6.21.0", 1480 1564 "debug": "^4.3.4", 1481 1565 "ts-api-utils": "^1.0.1" 1482 1566 }, ··· 1497 1581 } 1498 1582 }, 1499 1583 "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==", 1584 + "version": "6.21.0", 1585 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", 1586 + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", 1503 1587 "dev": true, 1504 1588 "engines": { 1505 1589 "node": "^16.0.0 || >=18.0.0" ··· 1510 1594 } 1511 1595 }, 1512 1596 "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==", 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==", 1516 1600 "dev": true, 1517 1601 "dependencies": { 1518 - "@typescript-eslint/types": "6.2.1", 1519 - "@typescript-eslint/visitor-keys": "6.2.1", 1602 + "@typescript-eslint/types": "6.21.0", 1603 + "@typescript-eslint/visitor-keys": "6.21.0", 1520 1604 "debug": "^4.3.4", 1521 1605 "globby": "^11.1.0", 1522 1606 "is-glob": "^4.0.3", 1607 + "minimatch": "9.0.3", 1523 1608 "semver": "^7.5.4", 1524 1609 "ts-api-utils": "^1.0.1" 1525 1610 }, ··· 1536 1621 } 1537 1622 } 1538 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 + }, 1539 1648 "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==", 1649 + "version": "6.21.0", 1650 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", 1651 + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", 1543 1652 "dev": true, 1544 1653 "dependencies": { 1545 1654 "@eslint-community/eslint-utils": "^4.4.0", 1546 1655 "@types/json-schema": "^7.0.12", 1547 1656 "@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", 1657 + "@typescript-eslint/scope-manager": "6.21.0", 1658 + "@typescript-eslint/types": "6.21.0", 1659 + "@typescript-eslint/typescript-estree": "6.21.0", 1551 1660 "semver": "^7.5.4" 1552 1661 }, 1553 1662 "engines": { ··· 1562 1671 } 1563 1672 }, 1564 1673 "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==", 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==", 1568 1677 "dev": true, 1569 1678 "dependencies": { 1570 - "@typescript-eslint/types": "6.2.1", 1679 + "@typescript-eslint/types": "6.21.0", 1571 1680 "eslint-visitor-keys": "^3.4.1" 1572 1681 }, 1573 1682 "engines": { ··· 1577 1686 "type": "opencollective", 1578 1687 "url": "https://opencollective.com/typescript-eslint" 1579 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 1580 1695 }, 1581 1696 "node_modules/@zeit/schemas": { 1582 1697 "version": "2.29.0", ··· 1624 1739 } 1625 1740 }, 1626 1741 "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==", 1742 + "version": "8.11.3", 1743 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 1744 + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 1630 1745 "dev": true, 1631 1746 "bin": { 1632 1747 "acorn": "bin/acorn" ··· 1776 1891 } 1777 1892 }, 1778 1893 "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==", 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==", 1782 1897 "dev": true, 1783 1898 "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" 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" 1788 1904 } 1789 1905 }, 1790 1906 "node_modules/at-least-node": { ··· 1797 1913 } 1798 1914 }, 1799 1915 "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==", 1916 + "version": "10.4.17", 1917 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", 1918 + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", 1803 1919 "dev": true, 1804 1920 "funding": [ 1805 1921 { ··· 1809 1925 { 1810 1926 "type": "tidelift", 1811 1927 "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1928 + }, 1929 + { 1930 + "type": "github", 1931 + "url": "https://github.com/sponsors/ai" 1812 1932 } 1813 1933 ], 1814 1934 "dependencies": { 1815 - "browserslist": "^4.21.5", 1816 - "caniuse-lite": "^1.0.30001464", 1817 - "fraction.js": "^4.2.0", 1935 + "browserslist": "^4.22.2", 1936 + "caniuse-lite": "^1.0.30001578", 1937 + "fraction.js": "^4.3.7", 1818 1938 "normalize-range": "^0.1.2", 1819 1939 "picocolors": "^1.0.0", 1820 1940 "postcss-value-parser": "^4.2.0" ··· 2136 2256 } 2137 2257 }, 2138 2258 "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==", 2259 + "version": "4.22.3", 2260 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", 2261 + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", 2142 2262 "dev": true, 2143 2263 "funding": [ 2144 2264 { ··· 2148 2268 { 2149 2269 "type": "tidelift", 2150 2270 "url": "https://tidelift.com/funding/github/npm/browserslist" 2271 + }, 2272 + { 2273 + "type": "github", 2274 + "url": "https://github.com/sponsors/ai" 2151 2275 } 2152 2276 ], 2153 2277 "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" 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" 2158 2282 }, 2159 2283 "bin": { 2160 2284 "browserslist": "cli.js" ··· 2242 2366 } 2243 2367 }, 2244 2368 "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==", 2369 + "version": "1.0.6", 2370 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", 2371 + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", 2248 2372 "dev": true, 2249 2373 "dependencies": { 2250 - "function-bind": "^1.1.1", 2251 - "get-intrinsic": "^1.0.2" 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" 2252 2381 }, 2253 2382 "funding": { 2254 2383 "url": "https://github.com/sponsors/ljharb" ··· 2440 2569 }, 2441 2570 "funding": { 2442 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" 2443 2601 } 2444 2602 }, 2445 2603 "node_modules/clone": { ··· 2781 2939 "node": ">=10" 2782 2940 } 2783 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 + }, 2784 2957 "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==", 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==", 2788 2961 "dev": true, 2789 2962 "dependencies": { 2963 + "define-data-property": "^1.0.1", 2790 2964 "has-property-descriptors": "^1.0.0", 2791 2965 "object-keys": "^1.1.1" 2792 2966 }, ··· 2854 3028 "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 2855 3029 }, 2856 3030 "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==", 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==", 2860 3034 "dev": true 2861 3035 }, 2862 3036 "node_modules/elm": { ··· 2878 3052 "@elm_binaries/win32_x64": "0.19.1-0" 2879 3053 } 2880 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 + }, 2881 3072 "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==", 3073 + "version": "2.10.3", 3074 + "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.3.tgz", 3075 + "integrity": "sha512-9gBqLc5Xm3v9Ncpf8y2haEaBZZyMX25vmwQkrNqSIaNYQ2vdGOIx1eyqRtt1xwX5O8pZdqU8IWC/ENyTrOTKbw==", 2885 3076 "dev": true, 2886 3077 "dependencies": { 2887 3078 "chalk": "^4.0.0", 2888 3079 "chokidar": "^3.5.2", 2889 3080 "cross-spawn": "^7.0.3", 2890 - "elm-tooling": "^1.6.0", 2891 - "fast-levenshtein": "^3.0.0", 3081 + "elm-tooling": "^1.14.1", 3082 + "fastest-levenshtein": "^1.0.16", 2892 3083 "find-up": "^4.1.0", 2893 3084 "folder-hash": "^3.3.0", 2894 3085 "fs-extra": "^9.0.0", ··· 2985 3176 "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" 2986 3177 }, 2987 3178 "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==", 3179 + "version": "1.15.0", 3180 + "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.0.tgz", 3181 + "integrity": "sha512-quRE5LGJyrkPBoJ3MvFQ5RGgf80J0L0d3NkduStvXh4TmZuMXNC3Z/l2ZRoq2UTUaNWeYfO1Zx5wns1AvsTrnw==", 2991 3182 "dev": true, 2992 3183 "bin": { 2993 3184 "elm-tooling": "index.js" ··· 3018 3209 "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 3019 3210 "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 3020 3211 }, 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 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 + } 3026 3220 }, 3027 3221 "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==", 3222 + "version": "0.20.0", 3223 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", 3224 + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", 3031 3225 "dev": true, 3032 3226 "hasInstallScript": true, 3033 3227 "bin": { ··· 3037 3231 "node": ">=12" 3038 3232 }, 3039 3233 "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" 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" 3062 3270 } 3063 3271 }, 3064 3272 "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, 3273 + "version": "3.1.2", 3274 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 3275 + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 3069 3276 "engines": { 3070 3277 "node": ">=6" 3071 3278 } ··· 3083 3290 } 3084 3291 }, 3085 3292 "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==", 3293 + "version": "8.56.0", 3294 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", 3295 + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", 3089 3296 "dev": true, 3090 3297 "dependencies": { 3091 3298 "@eslint-community/eslint-utils": "^4.2.0", 3092 3299 "@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", 3300 + "@eslint/eslintrc": "^2.1.4", 3301 + "@eslint/js": "8.56.0", 3302 + "@humanwhocodes/config-array": "^0.11.13", 3096 3303 "@humanwhocodes/module-importer": "^1.0.1", 3097 3304 "@nodelib/fs.walk": "^1.2.8", 3305 + "@ungap/structured-clone": "^1.2.0", 3098 3306 "ajv": "^6.12.4", 3099 3307 "chalk": "^4.0.0", 3100 3308 "cross-spawn": "^7.0.2", ··· 3102 3310 "doctrine": "^3.0.0", 3103 3311 "escape-string-regexp": "^4.0.0", 3104 3312 "eslint-scope": "^7.2.2", 3105 - "eslint-visitor-keys": "^3.4.2", 3313 + "eslint-visitor-keys": "^3.4.3", 3106 3314 "espree": "^9.6.1", 3107 3315 "esquery": "^1.4.2", 3108 3316 "esutils": "^2.0.2", ··· 3153 3361 } 3154 3362 }, 3155 3363 "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==", 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==", 3159 3367 "dev": true, 3160 3368 "engines": { 3161 3369 "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ··· 3384 3592 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 3385 3593 }, 3386 3594 "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==", 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==", 3390 3598 "dev": true, 3391 3599 "dependencies": { 3392 3600 "@nodelib/fs.stat": "^2.0.2", ··· 3405 3613 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 3406 3614 "dev": true 3407 3615 }, 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 3616 "node_modules/fast-text-encoding": { 3418 3617 "version": "1.0.6", 3419 3618 "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", ··· 3498 3697 "version": "2.0.5", 3499 3698 "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", 3500 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 + } 3501 3716 }, 3502 3717 "node_modules/fill-range": { 3503 3718 "version": "7.0.1", ··· 3662 3877 } 3663 3878 }, 3664 3879 "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==", 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==", 3668 3883 "dev": true, 3669 3884 "engines": { 3670 3885 "node": "*" 3671 3886 }, 3672 3887 "funding": { 3673 3888 "type": "patreon", 3674 - "url": "https://www.patreon.com/infusion" 3889 + "url": "https://github.com/sponsors/rawify" 3675 3890 } 3676 3891 }, 3677 3892 "node_modules/fs-extra": { ··· 3709 3924 } 3710 3925 }, 3711 3926 "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 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 + } 3716 3942 }, 3717 3943 "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==", 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==", 3721 3947 "dev": true, 3722 3948 "dependencies": { 3723 - "function-bind": "^1.1.1", 3724 - "has": "^1.0.3", 3725 - "has-symbols": "^1.0.3" 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" 3726 3957 }, 3727 3958 "funding": { 3728 3959 "url": "https://github.com/sponsors/ljharb" ··· 3776 4007 } 3777 4008 }, 3778 4009 "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==", 4010 + "version": "13.24.0", 4011 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 4012 + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 3782 4013 "dev": true, 3783 4014 "dependencies": { 3784 4015 "type-fest": "^0.20.2" ··· 3901 4132 } 3902 4133 }, 3903 4134 "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==", 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==", 3907 4138 "dev": true, 3908 4139 "dependencies": { 3909 - "get-intrinsic": "^1.1.1" 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" 3910 4153 }, 3911 4154 "funding": { 3912 4155 "url": "https://github.com/sponsors/ljharb" ··· 3937 4180 }, 3938 4181 "funding": { 3939 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" 3940 4195 } 3941 4196 }, 3942 4197 "node_modules/http-cache-semantics": { ··· 4667 4922 } 4668 4923 }, 4669 4924 "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==", 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==", 4673 4928 "dev": true, 4674 4929 "bin": { 4675 4930 "jiti": "bin/jiti.js" ··· 5040 5295 "node": ">= 0.8" 5041 5296 } 5042 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 + }, 5043 5312 "node_modules/merge-options": { 5044 5313 "version": "3.0.4", 5045 5314 "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", ··· 5196 5465 "npm": ">=7.0.0" 5197 5466 } 5198 5467 }, 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==", 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==", 5235 5472 "dependencies": { 5236 5473 "@tokenizer/token": "^0.3.0", 5237 5474 "content-type": "^1.0.5", ··· 5249 5486 "url": "https://github.com/sponsors/Borewit" 5250 5487 } 5251 5488 }, 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==", 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==", 5256 5493 "dependencies": { 5257 - "@tokenizer/token": "^0.3.0", 5258 - "ieee754": "^1.2.1" 5259 - }, 5260 - "engines": { 5261 - "node": ">=10" 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" 5262 5499 }, 5263 5500 "funding": { 5264 5501 "type": "github", ··· 5277 5514 } 5278 5515 }, 5279 5516 "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==", 5517 + "version": "3.3.7", 5518 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 5519 + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 5283 5520 "dev": true, 5284 5521 "funding": [ 5285 5522 { ··· 5311 5548 "version": "1.4.0", 5312 5549 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 5313 5550 "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 5551 "dev": true 5321 5552 }, 5322 5553 "node_modules/negotiator": { ··· 5376 5607 } 5377 5608 }, 5378 5609 "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==", 5610 + "version": "2.0.14", 5611 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 5612 + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 5382 5613 "dev": true 5383 5614 }, 5384 5615 "node_modules/normalize-path": { ··· 5465 5696 "node": ">= 0.4" 5466 5697 } 5467 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 + }, 5468 5717 "node_modules/observable-webworkers": { 5469 5718 "version": "2.0.1", 5470 5719 "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", ··· 5786 6035 } 5787 6036 }, 5788 6037 "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==", 6038 + "version": "8.4.34", 6039 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", 6040 + "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", 5792 6041 "dev": true, 5793 6042 "funding": [ 5794 6043 { ··· 5805 6054 } 5806 6055 ], 5807 6056 "dependencies": { 5808 - "nanoid": "^3.3.6", 6057 + "nanoid": "^3.3.7", 5809 6058 "picocolors": "^1.0.0", 5810 6059 "source-map-js": "^1.0.2" 5811 6060 }, ··· 5814 6063 } 5815 6064 }, 5816 6065 "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==", 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==", 5820 6069 "dev": true, 5821 6070 "funding": [ 5822 6071 { ··· 5829 6078 } 5830 6079 ], 5831 6080 "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", 6081 + "@csstools/cascade-layer-name-parser": "^1.0.7", 6082 + "@csstools/css-parser-algorithms": "^2.5.0", 6083 + "@csstools/css-tokenizer": "^2.2.3", 5835 6084 "postcss-value-parser": "^4.2.0" 5836 6085 }, 5837 6086 "engines": { ··· 5842 6091 } 5843 6092 }, 5844 6093 "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==", 6094 + "version": "16.0.0", 6095 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.0.0.tgz", 6096 + "integrity": "sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q==", 5848 6097 "dev": true, 5849 6098 "dependencies": { 5850 6099 "postcss-value-parser": "^4.0.0", ··· 5852 6101 "resolve": "^1.1.7" 5853 6102 }, 5854 6103 "engines": { 5855 - "node": ">=14.0.0" 6104 + "node": ">=18.0.0" 5856 6105 }, 5857 6106 "peerDependencies": { 5858 6107 "postcss": "^8.0.0" ··· 6101 6350 } 6102 6351 }, 6103 6352 "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==", 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==", 6107 6356 "dependencies": { 6108 6357 "abort-controller": "^3.0.0", 6109 6358 "buffer": "^6.0.3", ··· 6209 6458 "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", 6210 6459 "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==" 6211 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 + }, 6212 6469 "node_modules/require-from-string": { 6213 6470 "version": "2.0.2", 6214 6471 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 6488 6745 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 6489 6746 "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 6490 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 + }, 6491 6765 "node_modules/setimmediate": { 6492 6766 "version": "1.0.5", 6493 6767 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ··· 6758 7032 } 6759 7033 }, 6760 7034 "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==", 7035 + "version": "3.4.1", 7036 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", 7037 + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", 6764 7038 "dev": true, 6765 7039 "dependencies": { 6766 7040 "@alloc/quick-lru": "^5.2.0", ··· 6768 7042 "chokidar": "^3.5.3", 6769 7043 "didyoumean": "^1.2.2", 6770 7044 "dlv": "^1.1.3", 6771 - "fast-glob": "^3.2.12", 7045 + "fast-glob": "^3.3.0", 6772 7046 "glob-parent": "^6.0.2", 6773 7047 "is-glob": "^4.0.3", 6774 - "jiti": "^1.18.2", 7048 + "jiti": "^1.19.1", 6775 7049 "lilconfig": "^2.1.0", 6776 7050 "micromatch": "^4.0.5", 6777 7051 "normalize-path": "^3.0.0", ··· 6825 7099 }, 6826 7100 "engines": { 6827 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" 6828 7119 } 6829 7120 }, 6830 7121 "node_modules/terminal-link": { ··· 6883 7174 "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", 6884 7175 "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" 6885 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 + }, 6886 7183 "node_modules/to-regex-range": { 6887 7184 "version": "5.0.1", 6888 7185 "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", ··· 6899 7196 "version": "2.0.9", 6900 7197 "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", 6901 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 + } 6902 7215 }, 6903 7216 "node_modules/tr46": { 6904 7217 "version": "0.0.3", ··· 6987 7300 } 6988 7301 }, 6989 7302 "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==", 7303 + "version": "4.0.10", 7304 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", 7305 + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", 6993 7306 "dependencies": { 6994 7307 "multiformats": "^12.0.1" 6995 7308 } ··· 7024 7337 } 7025 7338 }, 7026 7339 "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==", 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==", 7030 7343 "dev": true, 7031 7344 "funding": [ 7032 7345 { ··· 7306 7619 "cuint": "^0.2.2" 7307 7620 } 7308 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 + }, 7309 7630 "node_modules/yallist": { 7310 7631 "version": "4.0.0", 7311 7632 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", ··· 7321 7642 "node": ">= 14" 7322 7643 } 7323 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 + }, 7324 7670 "node_modules/yauzl": { 7325 7671 "version": "2.10.0", 7326 7672 "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", ··· 7357 7703 "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 7358 7704 "dev": true 7359 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 + }, 7360 7741 "@chainsafe/is-ip": { 7361 7742 "version": "2.0.1", 7362 7743 "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", ··· 7371 7752 } 7372 7753 }, 7373 7754 "@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==", 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==", 7377 7758 "dev": true, 7378 7759 "requires": {} 7379 7760 }, 7380 7761 "@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==", 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==", 7384 7765 "dev": true, 7385 7766 "requires": {} 7386 7767 }, 7387 7768 "@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==", 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==", 7391 7772 "dev": true 7392 7773 }, 7393 7774 "@elm_binaries/darwin_arm64": { ··· 7418 7799 "dev": true, 7419 7800 "optional": true 7420 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 + }, 7421 7809 "@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==", 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==", 7425 7813 "dev": true, 7426 7814 "optional": true 7427 7815 }, 7428 7816 "@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==", 7817 + "version": "0.20.0", 7818 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", 7819 + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", 7432 7820 "dev": true, 7433 7821 "optional": true 7434 7822 }, 7435 7823 "@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==", 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==", 7439 7827 "dev": true, 7440 7828 "optional": true 7441 7829 }, 7442 7830 "@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==", 7831 + "version": "0.20.0", 7832 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", 7833 + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", 7446 7834 "dev": true, 7447 7835 "optional": true 7448 7836 }, 7449 7837 "@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==", 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==", 7453 7841 "dev": true, 7454 7842 "optional": true 7455 7843 }, 7456 7844 "@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==", 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==", 7460 7848 "dev": true, 7461 7849 "optional": true 7462 7850 }, 7463 7851 "@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==", 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==", 7467 7855 "dev": true, 7468 7856 "optional": true 7469 7857 }, 7470 7858 "@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==", 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==", 7474 7862 "dev": true, 7475 7863 "optional": true 7476 7864 }, 7477 7865 "@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==", 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==", 7481 7869 "dev": true, 7482 7870 "optional": true 7483 7871 }, 7484 7872 "@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==", 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==", 7488 7876 "dev": true, 7489 7877 "optional": true 7490 7878 }, 7491 7879 "@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==", 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==", 7495 7883 "dev": true, 7496 7884 "optional": true 7497 7885 }, 7498 7886 "@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==", 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==", 7502 7890 "dev": true, 7503 7891 "optional": true 7504 7892 }, 7505 7893 "@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==", 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==", 7509 7897 "dev": true, 7510 7898 "optional": true 7511 7899 }, 7512 7900 "@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==", 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==", 7516 7904 "dev": true, 7517 7905 "optional": true 7518 7906 }, 7519 7907 "@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==", 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==", 7523 7911 "dev": true, 7524 7912 "optional": true 7525 7913 }, 7526 7914 "@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==", 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==", 7530 7918 "dev": true, 7531 7919 "optional": true 7532 7920 }, 7533 7921 "@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==", 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==", 7537 7925 "dev": true, 7538 7926 "optional": true 7539 7927 }, 7540 7928 "@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==", 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==", 7544 7932 "dev": true, 7545 7933 "optional": true 7546 7934 }, 7547 7935 "@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==", 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==", 7551 7939 "dev": true, 7552 7940 "optional": true 7553 7941 }, 7554 7942 "@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==", 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==", 7558 7946 "dev": true, 7559 7947 "optional": true 7560 7948 }, 7561 7949 "@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==", 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==", 7565 7953 "dev": true, 7566 7954 "optional": true 7567 7955 }, 7568 7956 "@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==", 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==", 7572 7960 "dev": true, 7573 7961 "optional": true 7574 7962 }, ··· 7588 7976 "dev": true 7589 7977 }, 7590 7978 "@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==", 7979 + "version": "2.1.4", 7980 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 7981 + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 7594 7982 "dev": true, 7595 7983 "requires": { 7596 7984 "ajv": "^6.12.4", ··· 7605 7993 } 7606 7994 }, 7607 7995 "@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==", 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==", 7611 7999 "dev": true 7612 8000 }, 7613 8001 "@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==", 8002 + "version": "0.11.14", 8003 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 8004 + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 7617 8005 "dev": true, 7618 8006 "requires": { 7619 - "@humanwhocodes/object-schema": "^1.2.1", 7620 - "debug": "^4.1.1", 8007 + "@humanwhocodes/object-schema": "^2.0.2", 8008 + "debug": "^4.3.1", 7621 8009 "minimatch": "^3.0.5" 7622 8010 } 7623 8011 }, ··· 7628 8016 "dev": true 7629 8017 }, 7630 8018 "@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==", 8019 + "version": "2.0.2", 8020 + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 8021 + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 7634 8022 "dev": true 7635 8023 }, 7636 8024 "@ipld/dag-cbor": { ··· 8166 8554 "dev": true 8167 8555 }, 8168 8556 "@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==", 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==", 8172 8560 "dev": true 8173 8561 }, 8174 8562 "@types/keyv": { ··· 8195 8583 } 8196 8584 }, 8197 8585 "@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==", 8586 + "version": "7.5.6", 8587 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", 8588 + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", 8201 8589 "dev": true 8202 8590 }, 8203 8591 "@types/tv4": { ··· 8216 8604 } 8217 8605 }, 8218 8606 "@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==", 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==", 8222 8610 "dev": true, 8223 8611 "requires": { 8224 8612 "@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", 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", 8229 8617 "debug": "^4.3.4", 8230 8618 "graphemer": "^1.4.0", 8231 8619 "ignore": "^5.2.4", 8232 8620 "natural-compare": "^1.4.0", 8233 - "natural-compare-lite": "^1.4.0", 8234 8621 "semver": "^7.5.4", 8235 8622 "ts-api-utils": "^1.0.1" 8236 8623 } 8237 8624 }, 8238 8625 "@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==", 8626 + "version": "6.21.0", 8627 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", 8628 + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", 8242 8629 "dev": true, 8243 8630 "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", 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", 8248 8635 "debug": "^4.3.4" 8249 8636 } 8250 8637 }, 8251 8638 "@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==", 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==", 8255 8642 "dev": true, 8256 8643 "requires": { 8257 - "@typescript-eslint/types": "6.2.1", 8258 - "@typescript-eslint/visitor-keys": "6.2.1" 8644 + "@typescript-eslint/types": "6.21.0", 8645 + "@typescript-eslint/visitor-keys": "6.21.0" 8259 8646 } 8260 8647 }, 8261 8648 "@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==", 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==", 8265 8652 "dev": true, 8266 8653 "requires": { 8267 - "@typescript-eslint/typescript-estree": "6.2.1", 8268 - "@typescript-eslint/utils": "6.2.1", 8654 + "@typescript-eslint/typescript-estree": "6.21.0", 8655 + "@typescript-eslint/utils": "6.21.0", 8269 8656 "debug": "^4.3.4", 8270 8657 "ts-api-utils": "^1.0.1" 8271 8658 } 8272 8659 }, 8273 8660 "@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==", 8661 + "version": "6.21.0", 8662 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", 8663 + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", 8277 8664 "dev": true 8278 8665 }, 8279 8666 "@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==", 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==", 8283 8670 "dev": true, 8284 8671 "requires": { 8285 - "@typescript-eslint/types": "6.2.1", 8286 - "@typescript-eslint/visitor-keys": "6.2.1", 8672 + "@typescript-eslint/types": "6.21.0", 8673 + "@typescript-eslint/visitor-keys": "6.21.0", 8287 8674 "debug": "^4.3.4", 8288 8675 "globby": "^11.1.0", 8289 8676 "is-glob": "^4.0.3", 8677 + "minimatch": "9.0.3", 8290 8678 "semver": "^7.5.4", 8291 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 + } 8292 8700 } 8293 8701 }, 8294 8702 "@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==", 8703 + "version": "6.21.0", 8704 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", 8705 + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", 8298 8706 "dev": true, 8299 8707 "requires": { 8300 8708 "@eslint-community/eslint-utils": "^4.4.0", 8301 8709 "@types/json-schema": "^7.0.12", 8302 8710 "@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", 8711 + "@typescript-eslint/scope-manager": "6.21.0", 8712 + "@typescript-eslint/types": "6.21.0", 8713 + "@typescript-eslint/typescript-estree": "6.21.0", 8306 8714 "semver": "^7.5.4" 8307 8715 } 8308 8716 }, 8309 8717 "@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==", 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==", 8313 8721 "dev": true, 8314 8722 "requires": { 8315 - "@typescript-eslint/types": "6.2.1", 8723 + "@typescript-eslint/types": "6.21.0", 8316 8724 "eslint-visitor-keys": "^3.4.1" 8317 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 8318 8732 }, 8319 8733 "@zeit/schemas": { 8320 8734 "version": "2.29.0", ··· 8353 8767 } 8354 8768 }, 8355 8769 "acorn": { 8356 - "version": "8.10.0", 8357 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 8358 - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 8770 + "version": "8.11.3", 8771 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 8772 + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 8359 8773 "dev": true 8360 8774 }, 8361 8775 "acorn-jsx": { ··· 8454 8868 "dev": true 8455 8869 }, 8456 8870 "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==", 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==", 8460 8874 "dev": true, 8461 8875 "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" 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" 8466 8881 } 8467 8882 }, 8468 8883 "at-least-node": { ··· 8472 8887 "dev": true 8473 8888 }, 8474 8889 "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==", 8890 + "version": "10.4.17", 8891 + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", 8892 + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", 8478 8893 "dev": true, 8479 8894 "requires": { 8480 - "browserslist": "^4.21.5", 8481 - "caniuse-lite": "^1.0.30001464", 8482 - "fraction.js": "^4.2.0", 8895 + "browserslist": "^4.22.2", 8896 + "caniuse-lite": "^1.0.30001578", 8897 + "fraction.js": "^4.3.7", 8483 8898 "normalize-range": "^0.1.2", 8484 8899 "picocolors": "^1.0.0", 8485 8900 "postcss-value-parser": "^4.2.0" ··· 8689 9104 } 8690 9105 }, 8691 9106 "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==", 9107 + "version": "4.22.3", 9108 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", 9109 + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", 8695 9110 "dev": true, 8696 9111 "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" 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" 8701 9116 } 8702 9117 }, 8703 9118 "buffer": { ··· 8750 9165 } 8751 9166 }, 8752 9167 "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==", 9168 + "version": "1.0.6", 9169 + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", 9170 + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", 8756 9171 "dev": true, 8757 9172 "requires": { 8758 - "function-bind": "^1.1.1", 8759 - "get-intrinsic": "^1.0.2" 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" 8760 9177 } 8761 9178 }, 8762 9179 "callsites": { ··· 8867 9284 "is-wsl": "^2.2.0" 8868 9285 } 8869 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 + }, 8870 9309 "clone": { 8871 9310 "version": "1.0.4", 8872 9311 "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", ··· 9114 9553 "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 9115 9554 "dev": true 9116 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 + }, 9117 9568 "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==", 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==", 9121 9572 "dev": true, 9122 9573 "requires": { 9574 + "define-data-property": "^1.0.1", 9123 9575 "has-property-descriptors": "^1.0.0", 9124 9576 "object-keys": "^1.1.1" 9125 9577 } ··· 9171 9623 "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 9172 9624 }, 9173 9625 "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==", 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==", 9177 9629 "dev": true 9178 9630 }, 9179 9631 "elm": { ··· 9188 9640 "@elm_binaries/win32_x64": "0.19.1-0" 9189 9641 } 9190 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 + }, 9191 9656 "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==", 9657 + "version": "2.10.3", 9658 + "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.3.tgz", 9659 + "integrity": "sha512-9gBqLc5Xm3v9Ncpf8y2haEaBZZyMX25vmwQkrNqSIaNYQ2vdGOIx1eyqRtt1xwX5O8pZdqU8IWC/ENyTrOTKbw==", 9195 9660 "dev": true, 9196 9661 "requires": { 9197 9662 "chalk": "^4.0.0", 9198 9663 "chokidar": "^3.5.2", 9199 9664 "cross-spawn": "^7.0.3", 9200 - "elm-tooling": "^1.6.0", 9201 - "fast-levenshtein": "^3.0.0", 9665 + "elm-tooling": "^1.14.1", 9666 + "fastest-levenshtein": "^1.0.16", 9202 9667 "find-up": "^4.1.0", 9203 9668 "folder-hash": "^3.3.0", 9204 9669 "fs-extra": "^9.0.0", ··· 9266 9731 "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" 9267 9732 }, 9268 9733 "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==", 9734 + "version": "1.15.0", 9735 + "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.0.tgz", 9736 + "integrity": "sha512-quRE5LGJyrkPBoJ3MvFQ5RGgf80J0L0d3NkduStvXh4TmZuMXNC3Z/l2ZRoq2UTUaNWeYfO1Zx5wns1AvsTrnw==", 9272 9737 "dev": true 9273 9738 }, 9274 9739 "emitter-component": { ··· 9296 9761 "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", 9297 9762 "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" 9298 9763 }, 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==", 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==", 9303 9768 "dev": true 9304 9769 }, 9305 9770 "esbuild": { 9306 - "version": "0.18.18", 9307 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.18.tgz", 9308 - "integrity": "sha512-UckDPWvdVJLNT0npk5AMTpVwGRQhS76rWFLmHwEtgNvWlR9sgVV1eyc/oeBtM86q9s8ABBLMmm0CwNxhVemOiw==", 9771 + "version": "0.20.0", 9772 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", 9773 + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", 9309 9774 "dev": true, 9310 9775 "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" 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" 9333 9799 } 9334 9800 }, 9335 - "escalade": { 9336 - "version": "3.1.1", 9337 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 9338 - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 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==", 9339 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==" 9340 9811 }, 9341 9812 "escape-string-regexp": { 9342 9813 "version": "4.0.0", ··· 9345 9816 "dev": true 9346 9817 }, 9347 9818 "eslint": { 9348 - "version": "8.46.0", 9349 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", 9350 - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", 9819 + "version": "8.56.0", 9820 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", 9821 + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", 9351 9822 "dev": true, 9352 9823 "requires": { 9353 9824 "@eslint-community/eslint-utils": "^4.2.0", 9354 9825 "@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", 9826 + "@eslint/eslintrc": "^2.1.4", 9827 + "@eslint/js": "8.56.0", 9828 + "@humanwhocodes/config-array": "^0.11.13", 9358 9829 "@humanwhocodes/module-importer": "^1.0.1", 9359 9830 "@nodelib/fs.walk": "^1.2.8", 9831 + "@ungap/structured-clone": "^1.2.0", 9360 9832 "ajv": "^6.12.4", 9361 9833 "chalk": "^4.0.0", 9362 9834 "cross-spawn": "^7.0.2", ··· 9364 9836 "doctrine": "^3.0.0", 9365 9837 "escape-string-regexp": "^4.0.0", 9366 9838 "eslint-scope": "^7.2.2", 9367 - "eslint-visitor-keys": "^3.4.2", 9839 + "eslint-visitor-keys": "^3.4.3", 9368 9840 "espree": "^9.6.1", 9369 9841 "esquery": "^1.4.2", 9370 9842 "esutils": "^2.0.2", ··· 9448 9920 } 9449 9921 }, 9450 9922 "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==", 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==", 9454 9926 "dev": true 9455 9927 }, 9456 9928 "esm": { ··· 9555 10027 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 9556 10028 }, 9557 10029 "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==", 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==", 9561 10033 "dev": true, 9562 10034 "requires": { 9563 10035 "@nodelib/fs.stat": "^2.0.2", ··· 9573 10045 "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 9574 10046 "dev": true 9575 10047 }, 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 10048 "fast-text-encoding": { 9586 10049 "version": "1.0.6", 9587 10050 "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", ··· 9649 10112 "version": "2.0.5", 9650 10113 "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", 9651 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 + } 9652 10125 }, 9653 10126 "fill-range": { 9654 10127 "version": "7.0.1", ··· 9770 10243 } 9771 10244 }, 9772 10245 "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==", 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==", 9776 10249 "dev": true 9777 10250 }, 9778 10251 "fs-extra": { ··· 9800 10273 "optional": true 9801 10274 }, 9802 10275 "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==", 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==", 9806 10279 "dev": true 9807 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 + }, 9808 10286 "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==", 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==", 9812 10290 "dev": true, 9813 10291 "requires": { 9814 - "function-bind": "^1.1.1", 9815 - "has": "^1.0.3", 9816 - "has-symbols": "^1.0.3" 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" 9817 10297 } 9818 10298 }, 9819 10299 "get-stream": { ··· 9849 10329 } 9850 10330 }, 9851 10331 "globals": { 9852 - "version": "13.20.0", 9853 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", 9854 - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", 10332 + "version": "13.24.0", 10333 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 10334 + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 9855 10335 "dev": true, 9856 10336 "requires": { 9857 10337 "type-fest": "^0.20.2" ··· 9944 10424 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 9945 10425 }, 9946 10426 "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==", 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==", 9950 10430 "dev": true, 9951 10431 "requires": { 9952 - "get-intrinsic": "^1.1.1" 10432 + "get-intrinsic": "^1.2.2" 9953 10433 } 9954 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 + }, 9955 10441 "has-symbols": { 9956 10442 "version": "1.0.3", 9957 10443 "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", ··· 9965 10451 "dev": true, 9966 10452 "requires": { 9967 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" 9968 10463 } 9969 10464 }, 9970 10465 "http-cache-semantics": { ··· 10449 10944 } 10450 10945 }, 10451 10946 "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==", 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==", 10455 10950 "dev": true 10456 10951 }, 10457 10952 "js-yaml": { ··· 10750 11245 "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 10751 11246 "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" 10752 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 + }, 10753 11256 "merge-options": { 10754 11257 "version": "3.0.4", 10755 11258 "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", ··· 10855 11358 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", 10856 11359 "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" 10857 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 + }, 10858 11375 "music-metadata-browser": { 10859 11376 "version": "2.5.10", 10860 11377 "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-2.5.10.tgz", ··· 10865 11382 "music-metadata": "^7.13.3", 10866 11383 "readable-stream": "^4.3.0", 10867 11384 "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 11385 } 10904 11386 }, 10905 11387 "mz": { ··· 10914 11396 } 10915 11397 }, 10916 11398 "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==", 11399 + "version": "3.3.7", 11400 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 11401 + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 10920 11402 "dev": true 10921 11403 }, 10922 11404 "napi-macros": { ··· 10934 11416 "version": "1.4.0", 10935 11417 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 10936 11418 "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 11419 "dev": true 10944 11420 }, 10945 11421 "negotiator": { ··· 10967 11443 "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" 10968 11444 }, 10969 11445 "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==", 11446 + "version": "2.0.14", 11447 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 11448 + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 10973 11449 "dev": true 10974 11450 }, 10975 11451 "normalize-path": { ··· 11025 11501 "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 11026 11502 "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 11027 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 + } 11028 11516 }, 11029 11517 "observable-webworkers": { 11030 11518 "version": "2.0.1", ··· 11255 11743 "dev": true 11256 11744 }, 11257 11745 "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==", 11746 + "version": "8.4.34", 11747 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", 11748 + "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", 11261 11749 "dev": true, 11262 11750 "requires": { 11263 - "nanoid": "^3.3.6", 11751 + "nanoid": "^3.3.7", 11264 11752 "picocolors": "^1.0.0", 11265 11753 "source-map-js": "^1.0.2" 11266 11754 } 11267 11755 }, 11268 11756 "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==", 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==", 11272 11760 "dev": true, 11273 11761 "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", 11762 + "@csstools/cascade-layer-name-parser": "^1.0.7", 11763 + "@csstools/css-parser-algorithms": "^2.5.0", 11764 + "@csstools/css-tokenizer": "^2.2.3", 11277 11765 "postcss-value-parser": "^4.2.0" 11278 11766 } 11279 11767 }, 11280 11768 "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==", 11769 + "version": "16.0.0", 11770 + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.0.0.tgz", 11771 + "integrity": "sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q==", 11284 11772 "dev": true, 11285 11773 "requires": { 11286 11774 "postcss-value-parser": "^4.0.0", ··· 11446 11934 } 11447 11935 }, 11448 11936 "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==", 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==", 11452 11940 "requires": { 11453 11941 "abort-controller": "^3.0.0", 11454 11942 "buffer": "^6.0.3", ··· 11537 12025 } 11538 12026 } 11539 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 + }, 11540 12033 "require-from-string": { 11541 12034 "version": "2.0.2", 11542 12035 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 11716 12209 } 11717 12210 } 11718 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 + }, 11719 12226 "setimmediate": { 11720 12227 "version": "1.0.5", 11721 12228 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", ··· 11908 12415 "dev": true 11909 12416 }, 11910 12417 "tailwindcss": { 11911 - "version": "3.3.3", 11912 - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", 11913 - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", 12418 + "version": "3.4.1", 12419 + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", 12420 + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", 11914 12421 "dev": true, 11915 12422 "requires": { 11916 12423 "@alloc/quick-lru": "^5.2.0", ··· 11918 12425 "chokidar": "^3.5.3", 11919 12426 "didyoumean": "^1.2.2", 11920 12427 "dlv": "^1.1.3", 11921 - "fast-glob": "^3.2.12", 12428 + "fast-glob": "^3.3.0", 11922 12429 "glob-parent": "^6.0.2", 11923 12430 "is-glob": "^4.0.3", 11924 - "jiti": "^1.18.2", 12431 + "jiti": "^1.19.1", 11925 12432 "lilconfig": "^2.1.0", 11926 12433 "micromatch": "^4.0.5", 11927 12434 "normalize-path": "^3.0.0", ··· 11945 12452 "requires": { 11946 12453 "is-glob": "^4.0.3" 11947 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 + } 11948 12466 } 11949 12467 } 11950 12468 }, ··· 12010 12528 "version": "1.0.4", 12011 12529 "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", 12012 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 12013 12537 }, 12014 12538 "to-regex-range": { 12015 12539 "version": "5.0.1", ··· 12025 12549 "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", 12026 12550 "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" 12027 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 + }, 12028 12561 "tr46": { 12029 12562 "version": "0.0.3", 12030 12563 "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", ··· 12084 12617 } 12085 12618 }, 12086 12619 "uint8arrays": { 12087 - "version": "4.0.6", 12088 - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.6.tgz", 12089 - "integrity": "sha512-4ZesjQhqOU2Ip6GPReIwN60wRxIupavL8T0Iy36BBHr2qyMrNxsPJvr7vpS4eFt8F8kSguWUPad6ZM9izs/vyw==", 12620 + "version": "4.0.10", 12621 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", 12622 + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", 12090 12623 "requires": { 12091 12624 "multiformats": "^12.0.1" 12092 12625 }, ··· 12113 12646 "dev": true 12114 12647 }, 12115 12648 "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==", 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==", 12119 12652 "dev": true, 12120 12653 "requires": { 12121 12654 "escalade": "^3.1.1", ··· 12316 12849 "cuint": "^0.2.2" 12317 12850 } 12318 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 + }, 12319 12857 "yallist": { 12320 12858 "version": "4.0.0", 12321 12859 "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", ··· 12327 12865 "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", 12328 12866 "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", 12329 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==" 12330 12887 }, 12331 12888 "yauzl": { 12332 12889 "version": "2.10.0",
+18 -14
package.json
··· 7 7 "repository": "github:icidasset/diffuse", 8 8 "license": "SEE LICENSE IN LICENSE", 9 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", 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 14 "buffer": "^6.0.3", 15 15 "elm": "0.19.1-6", 16 - "elm-review": "^2.10.2", 17 - "esbuild": "^0.18.18", 18 - "eslint": "^8.46.0", 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", 19 21 "events": "^3.3.0", 20 22 "gren-lang": "^0.3.0", 21 23 "just-install": "^2.0.1", 22 - "postcss": "^8.4.27", 23 - "postcss-custom-properties": "^13.3.0", 24 - "postcss-import": "^15.1.0", 24 + "postcss": "^8.4.34", 25 + "postcss-custom-properties": "^13.3.4", 26 + "postcss-import": "^16.0.0", 25 27 "stream": "^0.0.2", 26 - "tailwindcss": "^3.3.3", 28 + "tailwindcss": "^3.4.1", 27 29 "tailwindcss-animations": "^2.0.0", 28 - "tailwindcss-interaction-variants": "^5.0.0" 30 + "tailwindcss-interaction-variants": "^5.0.0", 31 + "tiny-parse-argv": "^2.4.0" 29 32 }, 30 33 "dependencies": { 31 34 "@oddjs/odd": "^0.37.2", ··· 37 40 "load-script2": "^2.0.5", 38 41 "localforage": "^1.10.0", 39 42 "lunr": "^2.3.8", 43 + "mediainfo.js": "^0.2.1", 40 44 "music-metadata-browser": "^2.5.10", 41 - "readable-stream": "^4.4.2", 45 + "readable-stream": "^4.5.2", 42 46 "remotestoragejs": "^2.0.0-beta.6", 43 47 "serve": "^14.2.1", 44 48 "throttle-debounce": "^5.0.0", 45 49 "timer.js": "^1.0.4", 46 50 "tocca": "^2.0.9", 47 - "uint8arrays": "^4.0.6" 51 + "uint8arrays": "^4.0.10" 48 52 } 49 53 }
+2 -1
src/Applications/Brain/Tracks/State.elm
··· 62 62 |> String.padLeft 2 '0' 63 63 , " - " 64 64 , track.tags.artist 65 - , " - " 65 + |> Maybe.map (\a -> a ++ " - ") 66 + |> Maybe.withDefault "" 66 67 , track.tags.title 67 68 ] 68 69 |> String.concat
+7 -1
src/Applications/UI/Console.elm
··· 60 60 , title "Scroll to track" 61 61 ] 62 62 [ "cursor-pointer" ] 63 - [ text (tags.artist ++ " - " ++ tags.title) ] 63 + [ case tags.artist of 64 + Just artist -> 65 + text (artist ++ " - " ++ tags.title) 66 + 67 + Nothing -> 68 + text tags.title 69 + ] 64 70 65 71 Nothing -> 66 72 text "Diffuse"
+15 -15
src/Applications/UI/Demo.elm
··· 29 29 30 30 favourites : List Favourite 31 31 favourites = 32 - [ { artist = "James Blake" 32 + [ { artist = Just "James Blake" 33 33 , title = "Essential Mix (09-17-2011)" 34 34 } 35 35 ] ··· 76 76 , nr = 1 77 77 78 78 -- 79 - , album = "Soulection White Label: 013" 80 - , artist = "oriJanus" 79 + , album = Just "Soulection White Label: 013" 80 + , artist = Just "oriJanus" 81 81 , title = "Bonita" 82 82 83 83 -- ··· 95 95 , nr = 2 96 96 97 97 -- 98 - , album = "Soulection White Label: 013" 99 - , artist = "oriJanus" 98 + , album = Just "Soulection White Label: 013" 99 + , artist = Just "oriJanus" 100 100 , title = "6" 101 101 102 102 -- ··· 114 114 , nr = 3 115 115 116 116 -- 117 - , album = "Soulection White Label: 013" 118 - , artist = "oriJanus" 117 + , album = Just "Soulection White Label: 013" 118 + , artist = Just "oriJanus" 119 119 , title = "Hot Remix ft. Tek.Lun & Zikomo" 120 120 121 121 -- ··· 133 133 , nr = 9 134 134 135 135 -- 136 - , album = "Adult Swim Singles Project 2012" 137 - , artist = "Com Truise" 136 + , album = Just "Adult Swim Singles Project 2012" 137 + , artist = Just "Com Truise" 138 138 , title = "Chemical Legs" 139 139 140 140 -- ··· 152 152 , nr = 4 153 153 154 154 -- 155 - , album = "The Miyazaki Tour EP" 156 - , artist = "Manuele Atzeni" 155 + , album = Just "The Miyazaki Tour EP" 156 + , artist = Just "Manuele Atzeni" 157 157 , title = "Little Star" 158 158 159 159 -- ··· 171 171 , nr = 2 172 172 173 173 -- 174 - , album = "The Last Thing" 175 - , artist = "Patrick Lee" 174 + , album = Just "The Last Thing" 175 + , artist = Just "Patrick Lee" 176 176 , title = "Quittin' Time" 177 177 178 178 -- ··· 190 190 , nr = 1 191 191 192 192 -- 193 - , album = "Essential Mix-SAT-09-17" 194 - , artist = "James Blake" 193 + , album = Just "Essential Mix-SAT-09-17" 194 + , artist = Just "James Blake" 195 195 , title = "Essential Mix (09-17-2011)" 196 196 197 197 --
+12 -2
src/Applications/UI/Queue/View.elm
··· 165 165 , "text-xs" 166 166 ] 167 167 [ text (String.fromInt <| idx + 1), text "." ] 168 - , text (track.tags.artist ++ " - " ++ track.tags.title) 168 + , case track.tags.artist of 169 + Just artist -> 170 + text (artist ++ " - " ++ track.tags.title) 171 + 172 + Nothing -> 173 + text track.tags.title 169 174 ] 170 175 , actions = 171 176 [ -- Remove ··· 285 290 [ inline 286 291 [ "inline-block", "text-xs", "mr-2" ] 287 292 [ text (String.fromInt <| idx + 1), text "." ] 288 - , text (track.tags.artist ++ " - " ++ track.tags.title) 293 + , case track.tags.artist of 294 + Just artist -> 295 + text (artist ++ " - " ++ track.tags.title) 296 + 297 + Nothing -> 298 + text track.tags.title 289 299 ] 290 300 , actions = 291 301 [ { icon = Icons.more_vert
+8 -9
src/Applications/UI/Tracks/Covers.elm
··· 25 25 makeCover sortBy 26 26 in 27 27 tracks.arranged 28 - |> List.indexedFoldr 29 - (\_ identifiedTrack { covers, gathering } -> 28 + |> List.foldr 29 + (\identifiedTrack { covers, gathering } -> 30 30 let 31 31 group = 32 32 groupFn identifiedTrack ··· 173 173 groupFn = 174 174 coverGroup sortBy 175 175 176 - ( _, groups, tracksPerGroup ) = 176 + ( groups, tracksPerGroup ) = 177 177 List.foldr 178 - (\identifiedTrack ( previousGroup, acc, dict ) -> 178 + (\identifiedTrack ( acc, dict ) -> 179 179 let 180 180 group = 181 181 groupFn identifiedTrack 182 182 in 183 - ( group 184 - -- 185 - , if group /= previousGroup then 183 + ( if Dict.member group dict == False then 186 184 group :: acc 187 185 188 186 else ··· 193 191 dict 194 192 ) 195 193 ) 196 - ( "", [], Dict.empty ) 194 + ( [], Dict.empty ) 197 195 tracks.harvested 198 196 in 199 197 covers.arranged ··· 284 282 group = 285 283 gathering.previousGroup 286 284 285 + identifiedTrack : IdentifiedTrack 287 286 identifiedTrack = 288 287 gathering.largestAlbumFavsSequence 289 288 |> Maybe.orElse gathering.largestAlbumSequence ··· 306 305 isVariousArtists = 307 306 False 308 307 || (amountOfTracks > 4 && largestArtistSequence < 3) 309 - || (String.toLower track.tags.artist == "va") 308 + || (Maybe.map String.toLower track.tags.artist == Just "va") 310 309 in 311 310 { key = Base64.encode (coverKey isVariousArtists track) 312 311 , identifiedTrackCover = identifiedTrack
+34 -16
src/Applications/UI/Tracks/Scene/Covers.elm
··· 673 673 |> .album 674 674 675 675 missingTracks = 676 - album == Tracks.missingAlbumPlaceholder 676 + List.any 677 + (Tuple.first >> .isMissing) 678 + cover.tracks 677 679 678 680 maybeBlobUrlFromCache = 679 681 cachedCovers ··· 800 802 identifiedTrackCover 801 803 802 804 missingTracks = 803 - track.tags.album == Tracks.missingAlbumPlaceholder 805 + List.any 806 + (Tuple.first >> .isMissing) 807 + cover.tracks 804 808 in 805 809 brick 806 810 (if clickable then ··· 827 831 , "pt-px" 828 832 , "truncate" 829 833 ] 830 - [ case sortBy of 831 - Album -> 832 - text track.tags.album 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) 833 842 834 - Artist -> 835 - text track.tags.artist 843 + Artist -> 844 + if missingTracks then 845 + text "Missing tracks" 836 846 837 - _ -> 838 - nothing 847 + else 848 + text (Maybe.withDefault "Unknown artist" track.tags.artist) 849 + 850 + _ -> 851 + nothing 839 852 ] 840 853 841 854 -- ··· 848 861 ] 849 862 [ case sortBy of 850 863 Album -> 851 - if missingTracks then 852 - text "Missing tracks" 853 - 854 - else if cover.variousArtists then 864 + if cover.variousArtists then 855 865 text "Various Artists" 856 866 867 + else if not missingTracks && Maybe.isJust track.tags.artist then 868 + text (Maybe.withDefault "" track.tags.artist) 857 869 else 858 - text track.tags.artist 870 + case List.length cover.trackIds of 871 + 1 -> 872 + text "1 track" 873 + 874 + n -> 875 + text (String.fromInt n ++ " tracks") 876 + 859 877 860 878 Artist -> 861 879 case List.length cover.trackIds of 862 880 1 -> 863 - Html.text "1 track" 881 + text "1 track" 864 882 865 883 n -> 866 - Html.text (String.fromInt n ++ " tracks") 884 + text (String.fromInt n ++ " tracks") 867 885 868 886 _ -> 869 887 nothing
+7 -7
src/Applications/UI/Tracks/Scene/List.elm
··· 461 461 else if not showArtist && showAlbum then 462 462 [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors 463 463 , otherColumn "51.25%" False track.tags.title 464 - , otherColumn "43%" False track.tags.album 464 + , otherColumn "43%" False (Maybe.withDefault fallbackAlbum track.tags.album) 465 465 ] 466 466 467 467 else if showArtist && not showAlbum then 468 468 [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors 469 469 , otherColumn "51.25%" False track.tags.title 470 - , otherColumn "43%" False track.tags.artist 470 + , otherColumn "43%" False (Maybe.withDefault fallbackArtist track.tags.artist) 471 471 ] 472 472 473 473 else 474 474 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 475 475 , otherColumn "37.5%" False track.tags.title 476 - , otherColumn "29.0%" False track.tags.artist 477 - , otherColumn "29.0%" True track.tags.album 476 + , otherColumn "29.0%" False (Maybe.withDefault fallbackArtist track.tags.artist) 477 + , otherColumn "29.0%" True (Maybe.withDefault fallbackAlbum track.tags.album) 478 478 ] 479 479 ) 480 480 ] ··· 567 567 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 568 568 , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) 569 569 , otherColumn "36.0%" False track.tags.title 570 - , otherColumn "27.5%" False track.tags.artist 571 - , otherColumn "27.5%" True track.tags.album 570 + , otherColumn "27.5%" False (Maybe.withDefault fallbackArtist track.tags.artist) 571 + , otherColumn "27.5%" True (Maybe.withDefault fallbackAlbum track.tags.album) 572 572 ] 573 573 574 574 else 575 575 [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors 576 576 , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) 577 577 , otherColumn "49.75%" False track.tags.title 578 - , otherColumn "41.25%" False track.tags.artist 578 + , otherColumn "41.25%" False (Maybe.withDefault fallbackArtist track.tags.artist) 579 579 ] 580 580 ) 581 581
+26 -2
src/Javascript/Brain/artwork.ts
··· 2 2 // Album Covers 3 3 // (◕‿◕✿) 4 4 5 + import MediaInfoFactory, { MediaInfo } from "mediainfo.js" 5 6 6 7 import { transformUrl } from "../urls" 7 8 import * as processing from "../processing" ··· 28 29 // 1. TAGS 29 30 30 31 31 - function findUsingTags(prep, app) { 32 + async function findUsingTags(prep, app) { 33 + const mediainfo = await mediaInfoClient() 34 + 32 35 return Promise.all( 33 36 [ 34 37 transformUrl(prep.trackHeadUrl, app), ··· 39 42 headUrl, 40 43 getUrl, 41 44 prep.trackFilename, 42 - { skipCovers: false } 45 + mediainfo 43 46 44 47 )).then(tags => { 45 48 return tags?.picture ··· 65 68 return fetch(`https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`) 66 69 .then(r => r.json()) 67 70 .then(r => musicBrainzCover(r.releases)) 71 + .catch(_ => REJECT()) 68 72 } 69 73 70 74 ··· 96 100 return fetch(`https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json`) 97 101 .then(r => r.json()) 98 102 .then(r => lastFmCover(r.results.albummatches.album)) 103 + .catch(_ => REJECT()) 99 104 } 100 105 101 106 ··· 109 114 .catch(_ => lastFmCover(remainingMatches.slice(1))) 110 115 : album && lastFmCover(remainingMatches.slice(1)) 111 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 267 // 🎵 268 268 if (item) { 269 269 const coverPrep = { 270 - cacheKey: btoa(unescape(encodeURIComponent(item.trackTags.artist + " --- " + item.trackTags.album))), 270 + cacheKey: btoa(unescape(encodeURIComponent((item.trackTags.artist || "?") + " --- " + (item.trackTags.album || "?")))), 271 271 trackFilename: item.trackPath.split("/").reverse()[0], 272 272 trackPath: item.trackPath, 273 273 trackSourceId: item.sourceId,
+178 -88
src/Javascript/processing.ts
··· 4 4 // 5 5 // Audio processing, getting metadata, etc. 6 6 7 + import type { IAudioMetadata } from "music-metadata"; 8 + import type { MediaInfo, MediaInfoType } from "mediainfo.js"; 7 9 8 - import * as musicMetadata from "music-metadata-browser" 9 - import { makeTokenizer } from "@tokenizer/http" 10 + import MediaInfoFactory from "mediainfo.js"; 11 + import * as Uint8arrays from "uint8arrays"; 10 12 11 - import { mimeType } from "./common" 12 - import { transformUrl } from "./urls" 13 - 13 + import { transformUrl } from "./urls"; 14 14 15 15 // Contexts 16 16 // -------- 17 17 18 - export function processContext(context, app) { 19 - const initialPromise = Promise.resolve([]) 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 + } 20 45 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] 46 + // Tags - General 47 + // -------------- 27 48 28 - return Promise.all([ 29 - transformUrl(urls.headUrl, app), 30 - transformUrl(urls.getUrl, app) 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 + }; 31 59 32 - ]).then(([headUrl, getUrl]) => { 33 - return getTags(headUrl, getUrl, filename, { skipCovers: true }) 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; 34 71 35 - }).then(r => { 36 - return col.concat(r) 72 + const musicMetadata = await import("music-metadata-browser").then((a) => a.default); 73 + const httpTokenizer = await import("@tokenizer/http").then((a) => a.default); 37 74 38 - }).catch(e => { 39 - console.warn(e) 40 - return col.concat(null) 75 + const tokenizer = await httpTokenizer.makeTokenizer(headUrl); 76 + tokenizer.fileInfo.url = getUrl; 41 77 42 - }) 43 - }) 78 + // @ts-ignore 79 + if (tokenizer.rangeRequestClient) { 80 + // @ts-ignore 81 + tokenizer.rangeRequestClient.url = getUrl; 82 + // @ts-ignore 83 + tokenizer.rangeRequestClient.resolvedUrl = undefined; 84 + } 44 85 45 - }, initialPromise).then(col => { 46 - context.receivedTags = col 47 - return context 86 + const mmResult = await musicMetadata.parseFromTokenizer(tokenizer); 87 + const mmTags = pickTagsFromMusicMetadata(filename, mmResult); 88 + if (mmTags) return mmTags; 48 89 49 - }) 90 + return fallbackTags(filename); 50 91 } 51 92 93 + function fallbackTags(filename: string): Tags { 94 + const filenameWithoutExt = filename.replace(/\.\w+$/, ""); 52 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 + } 53 107 54 - // Tags 55 - // ---- 108 + // Tags - Media Info 109 + // ----------------- 56 110 111 + const getSize = (headUrl: string) => async (): Promise<number> => { 112 + const response = await fetch(headUrl, { method: "HEAD" }); 57 113 58 - const parserConfiguration = Object.assign( 59 - {}, 60 - { duration: false, skipPostHeaders: true } 61 - ) 114 + if (!response.ok) { 115 + throw new Error(`HTTP error status=${response.status}: ${response.statusText}`); 116 + } 62 117 118 + const l = response.headers.get("Content-Length"); 63 119 64 - export function getTags(headUrl, getUrl, filename, options) { 65 - const fileExtMatch = filename.match(/\.(\w+)$/) 66 - const fileExt = fileExtMatch && fileExtMatch[1] 120 + if (l) { 121 + return parseInt(l, 10); 122 + } else { 123 + throw new Error("HTTP response doesn't have a Content-Length"); 124 + } 125 + }; 67 126 68 - const overrideContentType = ( 69 - getUrl.includes("googleapis.com") || 70 - getUrl.includes("googleusercontent.com") 71 - ) 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; 72 158 73 - return makeTokenizer(headUrl) 74 - .then(tokenizer => { 75 - const fileMime = overrideContentType 76 - ? mimeType(fileExt) 77 - : tokenizer.fileInfo.mimeType 159 + if (!artist && !title) return null; 78 160 79 - tokenizer.fileInfo.mimeType = fileMime 80 - tokenizer.fileInfo.url = getUrl 161 + if (artist && artist.includes(" / ")) { 162 + artist = artist 163 + .split(" / ") 164 + .filter((a) => a.trim() !== "") 165 + .join(", "); 166 + } 81 167 82 - if (tokenizer.rangeRequestClient) { 83 - tokenizer.rangeRequestClient.url = getUrl 84 - tokenizer.rangeRequestClient.resolvedUrl = undefined 85 - } 168 + const year = tags.Recorded_Date ? new Date(Date.parse(tags.Recorded_Date)).getFullYear() : null; 86 169 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 - }) 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 + }; 99 185 } 100 186 187 + // Tags - Music Metadata 188 + // --------------------- 101 189 102 - function pickTags(filename, result) { 103 - const tags = result && result.common 104 - if (!tags) return null 190 + function pickTagsFromMusicMetadata(filename: string, result: IAudioMetadata): Tags | null { 191 + const tags = result && result.common; 192 + if (!tags) return null; 105 193 106 - const artist = tags.artist && tags.artist.length ? tags.artist : null 107 - const title = tags.title && tags.title.length ? tags.title : null 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; 108 198 109 199 return { 110 200 disc: tags.disk.no || 1, 111 201 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+$/, "")), 202 + album: tags.album && tags.album.length ? tags.album : null, 203 + artist: artist, 204 + title: title || filename.replace(/\.\w+$/, ""), 115 205 genre: (tags.genre && tags.genre[0]) || null, 116 206 year: tags.year || null, 117 - picture: tags.picture ? tags.picture[0] : null 118 - } 207 + picture: 208 + tags.picture && tags.picture[0] 209 + ? { data: tags.picture[0].data, format: tags.picture[0].format } 210 + : null, 211 + }; 119 212 } 120 213 214 + // 🛠️ 215 + // -- 121 216 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 - } 217 + async function mediaInfoClient() { 218 + return await MediaInfoFactory({ 219 + coverData: false, 220 + full: true, 221 + locateFile: () => { 222 + return "../../wasm/media-info.wasm"; 223 + }, 224 + }); 135 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 96 { url = 97 97 apiUrl 98 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 ) 99 + [ ( "duration", String.fromInt duration ) 100 + , ( "track", track.tags.title ) 101 + , ( "trackNumber", String.fromInt track.tags.nr ) 105 102 106 - -- 107 - , ( "method", "track.updateNowPlaying" ) 108 - , ( "sk", sessionKey ) 109 - ] 103 + -- 104 + , ( "method", "track.updateNowPlaying" ) 105 + , ( "sk", sessionKey ) 106 + ] 107 + |> addAlbum track 108 + |> addArtist track 109 + |> authenticatedBody 110 110 , expect = 111 111 Http.expectWhatever (always msg) 112 112 } ··· 123 123 { url = 124 124 apiUrl 125 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 ) 126 + [ ( "duration", String.fromInt duration ) 127 + , ( "track", track.tags.title ) 128 + , ( "trackNumber", String.fromInt track.tags.nr ) 132 129 133 - -- 134 - , ( "method", "track.scrobble" ) 135 - , ( "sk", sessionKey ) 136 - , ( "timestamp", String.fromInt timestamp ) 137 - ] 130 + -- 131 + , ( "method", "track.scrobble" ) 132 + , ( "sk", sessionKey ) 133 + , ( "timestamp", String.fromInt timestamp ) 134 + ] 135 + |> addAlbum track 136 + |> addArtist track 137 + |> authenticatedBody 138 138 , expect = 139 139 Http.expectWhatever (always msg) 140 140 } 141 141 142 142 Nothing -> 143 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 144 162 145 163 146 164
+2 -2
src/Library/Playlists.elm
··· 12 12 13 13 14 14 type alias PlaylistTrack = 15 - { album : String 16 - , artist : String 15 + { album : Maybe String 16 + , artist : Maybe String 17 17 , title : String 18 18 } 19 19
+5 -4
src/Library/Playlists/Encoding.elm
··· 3 3 import Json.Decode as Decode 4 4 import Json.Decode.Ext as Decode 5 5 import Json.Encode as Encode 6 + import Json.Encode.Ext exposing (..) 6 7 import Playlists exposing (..) 7 8 8 9 ··· 23 24 encodePlaylistTrack : PlaylistTrack -> Encode.Value 24 25 encodePlaylistTrack playlistTrack = 25 26 Encode.object 26 - [ ( "album", Encode.string playlistTrack.album ) 27 - , ( "artist", Encode.string playlistTrack.artist ) 27 + [ ( "album", encodeMaybe playlistTrack.album Encode.string ) 28 + , ( "artist", encodeMaybe playlistTrack.artist Encode.string ) 28 29 , ( "title", Encode.string playlistTrack.title ) 29 30 ] 30 31 ··· 45 46 playlistTrackDecoder : Decode.Decoder PlaylistTrack 46 47 playlistTrackDecoder = 47 48 Decode.map3 PlaylistTrack 48 - (Decode.field "album" Decode.string) 49 - (Decode.field "artist" Decode.string) 49 + (Decode.maybe <| Decode.field "album" Decode.string) 50 + (Decode.maybe <| Decode.field "artist" Decode.string) 50 51 (Decode.field "title" Decode.string)
+40 -18
src/Library/Tracks.elm
··· 6 6 import String.Ext as String 7 7 import Time 8 8 import Time.Ext as Time 9 + import Maybe.Extra as Maybe 9 10 10 11 11 12 ··· 30 31 , nr : Int 31 32 32 33 -- Main 33 - , album : String 34 - , artist : String 34 + , album : Maybe String 35 + , artist : Maybe String 35 36 , title : String 36 37 37 38 -- Extra ··· 58 59 59 60 60 61 type alias Favourite = 61 - { artist : String 62 + { artist : Maybe String 62 63 , title : String 63 64 } 64 65 ··· 177 178 emptyTags = 178 179 { disc = 1 179 180 , nr = 0 180 - , album = "Empty" 181 - , artist = "Empty" 181 + , album = Nothing 182 + , artist = Nothing 182 183 , title = "Empty" 183 184 , genre = Nothing 184 185 , picture = Nothing ··· 219 220 , scrollContext = "" 220 221 } 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 + "" 222 240 223 241 224 242 -- MORE STUFF ··· 226 244 227 245 coverGroup : SortBy -> IdentifiedTrack -> String 228 246 coverGroup sort ( identifiers, { tags } as track ) = 247 + if identifiers.isMissing then 248 + "MISSING_TRACKS" 249 + else 229 250 (case sort of 230 251 Artist -> 231 - tags.artist 252 + Maybe.unwrap fallbackCoverGroup (String.trim >> String.toLower) tags.artist 232 253 233 254 Album -> 234 255 -- There is the possibility of albums with the same name, 235 256 -- such as "Greatests Hits". 236 257 -- To make sure we treat those as different albums, 237 258 -- we prefix the album by its parent directory. 238 - identifiers.parentDirectory ++ tags.album 259 + 260 + case tags.album of 261 + Just album -> 262 + (identifiers.parentDirectory ++ album) 263 + |> String.trim 264 + |> String.toLower 265 + Nothing -> 266 + fallbackCoverGroup 239 267 240 268 PlaylistIndex -> 241 269 "" ··· 243 271 Title -> 244 272 tags.title 245 273 ) 246 - |> String.trim 247 - |> String.toLower 274 + 248 275 249 276 250 277 coverKey : Bool -> Track -> String 251 278 coverKey isVariousArtists { tags } = 252 - if isVariousArtists then 253 - tags.album 279 + if isVariousArtists then 280 + Maybe.withDefault "?" tags.album 254 281 255 - else 256 - tags.artist ++ " --- " ++ tags.album 282 + else 283 + Maybe.withDefault "?" tags.artist ++ " --- " ++ Maybe.withDefault "?" tags.album 257 284 258 285 259 286 isNowPlaying : IdentifiedTrack -> IdentifiedTrack -> Bool ··· 281 308 |> List.head 282 309 |> (==) (Just playlist.name) 283 310 |> (&&) playlist.autoGenerated 284 - 285 - 286 - missingAlbumPlaceholder : String 287 - missingAlbumPlaceholder = 288 - "⌁" 289 311 290 312 291 313 missingId : String
+2 -2
src/Library/Tracks/Collection/Internal/Arrange.elm
··· 181 181 tag = 182 182 case deps.sortBy of 183 183 Artist -> 184 - t.tags.artist 184 + Maybe.withDefault fallbackArtist t.tags.artist 185 185 186 186 Album -> 187 - t.tags.album 187 + Maybe.withDefault fallbackAlbum t.tags.album 188 188 189 189 PlaylistIndex -> 190 190 ""
+7 -1
src/Library/Tracks/Collection/Internal/Harvest.elm
··· 78 78 |> List.foldl 79 79 (\( i, t ) ( dict, ( idx, prevIdentifiers ), acc ) -> 80 80 let 81 + -- Identifier used to distinguish duplicates 81 82 s = 82 - String.toLower (t.tags.artist ++ t.tags.title) 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 83 89 in 84 90 if theFilter ( i, t ) == False then 85 91 ( dict, ( idx, prevIdentifiers ), acc )
+17 -3
src/Library/Tracks/Collection/Internal/Identify.elm
··· 2 2 3 3 import Dict 4 4 import List.Extra as List 5 + import Maybe.Extra as Maybe 5 6 import Time.Ext as Time 6 7 import Tracks exposing (..) 7 8 import Tracks.Favourites as Favourites ··· 19 20 (\fav ( dict, acc ) -> 20 21 let 21 22 simpl = 22 - Favourites.simplified fav 23 + case fav.artist of 24 + Just artist -> 25 + String.toLower artist ++ String.toLower fav.title 26 + 27 + Nothing -> 28 + String.toLower fav.title 23 29 in 24 30 ( Dict.insert simpl fav dict 25 31 , simpl :: acc ··· 130 136 131 137 isFavourite : Track -> String -> Bool 132 138 isFavourite track = 133 - (==) (String.toLower track.tags.artist ++ String.toLower track.tags.title) 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 + ) 134 148 135 149 136 150 makeMissingFavouriteTrack : Favourite -> IdentifiedTrack ··· 141 155 , nr = 0 142 156 , artist = fav.artist 143 157 , title = fav.title 144 - , album = Tracks.missingAlbumPlaceholder 158 + , album = Nothing 145 159 , genre = Nothing 146 160 , picture = Nothing 147 161 , year = Nothing
+7 -13
src/Library/Tracks/Encoding.elm
··· 3 3 import Json.Decode as Decode 4 4 import Json.Decode.Pipeline exposing (optional, required) 5 5 import Json.Encode as Encode 6 + import Json.Encode.Ext exposing (..) 6 7 import Time.Ext as Time 7 8 import Tracks exposing (..) 8 9 ··· 14 15 encodeFavourite : Favourite -> Encode.Value 15 16 encodeFavourite fav = 16 17 Encode.object 17 - [ ( "artist", Encode.string fav.artist ) 18 + [ ( "artist", encodeMaybe fav.artist Encode.string ) 18 19 , ( "title", Encode.string fav.title ) 19 20 ] 20 21 ··· 89 90 , ( "nr", Encode.int tags.nr ) 90 91 91 92 -- 92 - , ( "album", Encode.string tags.album ) 93 - , ( "artist", Encode.string tags.artist ) 93 + , ( "album", encodeMaybe tags.album Encode.string ) 94 + , ( "artist", encodeMaybe tags.artist Encode.string ) 94 95 , ( "title", Encode.string tags.title ) 95 96 96 97 -- ··· 100 101 ] 101 102 102 103 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 104 111 105 -- DECODE 112 106 ··· 126 120 favouriteDecoder : Decode.Decoder Favourite 127 121 favouriteDecoder = 128 122 Decode.map2 Favourite 129 - (Decode.field "artist" Decode.string) 123 + (Decode.maybe <| Decode.field "artist" Decode.string) 130 124 (Decode.field "title" Decode.string) 131 125 132 126 ··· 215 209 Decode.map8 Tags 216 210 (Decode.field "disc" Decode.int) 217 211 (Decode.field "nr" Decode.int) 218 - (Decode.field "album" Decode.string) 219 - (Decode.field "artist" Decode.string) 212 + (Decode.maybe <| Decode.field "album" Decode.string) 213 + (Decode.maybe <| Decode.field "artist" Decode.string) 220 214 (Decode.field "title" Decode.string) 221 215 (Decode.maybe <| Decode.field "genre" Decode.string) 222 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) 1 + module Tracks.Favourites exposing (completeFavouritesList, completeTracksList, match, removeFromFavouritesList, removeFromTracksList, toggleInFavouritesList, toggleInTracksList) 2 2 3 3 import List.Extra as List 4 + import Maybe.Extra as Maybe 4 5 import Tracks exposing (Favourite, IdentifiedTrack, Track) 6 + import Tracks exposing (fallbackArtist) 5 7 6 8 7 9 ··· 65 67 match a b = 66 68 let 67 69 ( aa, at ) = 68 - ( String.toLower a.artist 70 + ( Maybe.unwrap "" String.toLower a.artist 69 71 , String.toLower a.title 70 72 ) 71 73 72 74 ( ba, bt ) = 73 - ( String.toLower b.artist 75 + ( Maybe.unwrap "" String.toLower b.artist 74 76 , String.toLower b.title 75 77 ) 76 78 in ··· 127 129 tracks 128 130 129 131 130 - simplified : Favourite -> String 131 - simplified fav = 132 - String.toLower fav.artist ++ String.toLower fav.title 133 - 134 - 135 132 toggleInTracksList : Track -> List IdentifiedTrack -> List IdentifiedTrack 136 133 toggleInTracksList track = 137 134 let ··· 178 175 179 176 lowercaseArtist : Track -> String 180 177 lowercaseArtist = 181 - .tags >> .artist >> String.toLower 178 + -- NOTE: Not entirely sure this fallback is correct 179 + .tags >> .artist >> Maybe.unwrap fallbackArtist String.toLower 182 180 183 181 184 182 lowercaseTitle : Track -> String
+27 -2
src/Library/Tracks/Sorting.elm
··· 1 1 module Tracks.Sorting exposing (sort) 2 2 3 + import Maybe.Extra as Maybe 3 4 import Tracks exposing (..) 4 5 5 6 ··· 43 44 sortByAlbum : IdentifiedTrack -> IdentifiedTrack -> Order 44 45 sortByAlbum ( x, a ) ( y, b ) = 45 46 EQ 47 + |> andThenCompareBools isMissing x y 46 48 |> andThenCompare album a b 47 49 |> andThenCompare parentDir x y 48 50 |> andThenCompare disc a b ··· 54 56 sortByArtist : IdentifiedTrack -> IdentifiedTrack -> Order 55 57 sortByArtist ( x, a ) ( y, b ) = 56 58 EQ 59 + |> andThenCompareBools isMissing x y 57 60 |> andThenCompare artist a b 58 61 |> andThenCompare album a b 59 62 |> andThenCompare parentDir x y ··· 81 84 82 85 album : Track -> String 83 86 album = 84 - .tags >> .album >> low 87 + .tags >> .album >> Maybe.unwrap fallbackAlbum low 85 88 86 89 87 90 artist : Track -> String 88 91 artist = 89 - .tags >> .artist >> low 92 + .tags >> .artist >> Maybe.unwrap fallbackArtist low 90 93 91 94 92 95 title : Track -> String ··· 103 106 nr = 104 107 .tags >> .nr 105 108 109 + isMissing : Identifiers -> Bool 110 + isMissing = 111 + .isMissing 112 + 106 113 107 114 parentDir : Identifiers -> String 108 115 parentDir = ··· 117 124 andThenCompare fn a b order = 118 125 if order == EQ then 119 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 + 120 145 121 146 else 122 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 + }