From c1aa0863ed7156d3c9bc1146e8541e8d6445c09c Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 10 Aug 2025 22:34:18 +0200 Subject: [PATCH 001/244] feat: transfer experimental v4 --- .astro/content-assets.mjs | 1 + .astro/content-modules.mjs | 1 + .astro/content.d.ts | 207 + .astro/data-store.json | 1 + .astro/settings.json | 5 + .astro/types.d.ts | 2 + .eslintrc.yaml | 44 - .github/workflows/build.yml | 134 - .gitignore | 6 - .npmrc | 1 + CHANGELOG.md | 5 + Justfile | 237 - README.md | 71 +- astro.config.js | 41 + deno.json | 16 + deno.lock | 63 + elm.json | 64 - gren.json | 19 - netlify.toml | 3 + package-lock.json | 27717 +++++++++++----- package.json | 99 +- .../favicons}/android-chrome-192x192.png | Bin .../favicons}/android-chrome-512x512.png | Bin .../favicons}/apple-touch-icon.png | Bin .../favicons}/browserconfig.xml | 0 .../favicons}/favicon-16x16.png | Bin .../favicons}/favicon-32x32.png | Bin .../Favicons => public/favicons}/favicon.ico | Bin .../favicons}/mstile-150x150.png | Bin .../favicons}/safari-pinned-tab.svg | 0 public/fonts/InterVariable-Italic.woff2 | Bin 0 -> 387976 bytes public/fonts/InterVariable.woff2 | Bin 0 -> 352240 bytes .../images/background}/1.jpg | Bin .../images/background}/10.jpg | Bin .../images/background}/11.jpg | Bin .../images/background}/12.jpg | Bin .../images/background}/13.jpg | Bin .../images/background}/14.jpg | Bin .../images/background}/15.jpg | Bin .../images/background}/16.jpg | Bin .../images/background}/17.jpg | Bin .../images/background}/18.jpg | Bin .../images/background}/19.jpg | Bin .../images/background}/2.jpg | Bin .../images/background}/20.jpg | Bin .../images/background}/21.jpg | Bin .../images/background}/22.jpg | Bin .../images/background}/23.jpg | Bin .../images/background}/24.jpg | Bin .../images/background}/25.jpg | Bin .../images/background}/26.jpg | Bin .../images/background}/27.jpg | Bin .../images/background}/28.jpg | Bin .../images/background}/29.jpg | Bin .../images/background}/3.jpg | Bin .../images/background}/30.jpg | Bin .../images/background}/4.jpg | Bin .../images/background}/5.jpg | Bin .../images/background}/6.jpg | Bin .../images/background}/7.jpg | Bin .../images/background}/8.jpg | Bin .../images/background}/9.jpg | Bin .../images/background/thumbnails}/1.jpg | Bin .../images/background/thumbnails}/10.jpg | Bin .../images/background/thumbnails}/11.jpg | Bin .../images/background/thumbnails}/12.jpg | Bin .../images/background/thumbnails}/13.jpg | Bin .../images/background/thumbnails}/14.jpg | Bin .../images/background/thumbnails}/15.jpg | Bin .../images/background/thumbnails}/16.jpg | Bin .../images/background/thumbnails}/17.jpg | Bin .../images/background/thumbnails}/18.jpg | Bin .../images/background/thumbnails}/19.jpg | Bin .../images/background/thumbnails}/2.jpg | Bin .../images/background/thumbnails}/20.jpg | Bin .../images/background/thumbnails}/21.jpg | Bin .../images/background/thumbnails}/22.jpg | Bin .../images/background/thumbnails}/23.jpg | Bin .../images/background/thumbnails}/24.jpg | Bin .../images/background/thumbnails}/25.jpg | Bin .../images/background/thumbnails}/26.jpg | Bin .../images/background/thumbnails}/27.jpg | Bin .../images/background/thumbnails}/28.jpg | Bin .../images/background/thumbnails}/29.jpg | Bin .../images/background/thumbnails}/3.jpg | Bin .../images/background/thumbnails}/30.jpg | Bin .../images/background/thumbnails}/4.jpg | Bin .../images/background/thumbnails}/5.jpg | Bin .../images/background/thumbnails}/6.jpg | Bin .../images/background/thumbnails}/7.jpg | Bin .../images/background/thumbnails}/8.jpg | Bin .../images/background/thumbnails}/9.jpg | Bin public/images/diffuse-current.svg | 4 + .../Images => public/images}/diffuse-dark.svg | 0 .../Images => public/images}/diffuse-grey.svg | 0 .../images}/diffuse-light.svg | 0 .../images}/diffuse__icon-dark.svg | 0 .../images}/diffuse__icon-grey.svg | 0 .../images}/diffuse__icon-light.svg | 0 .../images}/icon-square-ws.png | Bin .../Images => public/images}/icon-square.png | Bin {src-tauri/icons => public/images}/icon.png | Bin .../icons/windows_98/cd_audio_cd_a-4.png | Bin 0 -> 641 bytes .../windows_98/directory_open_cool-0.png | Bin 0 -> 481 bytes .../directory_open_file_mydocs_2k-2.png | Bin 0 -> 596 bytes src-tauri/.gitignore | 4 - src-tauri/Cargo.lock | 5549 ---- src-tauri/Cargo.toml | 29 - src-tauri/build.rs | 3 - src-tauri/capabilities/main.json | 24 - src-tauri/gen/schemas/acl-manifests.json | 1 - src-tauri/gen/schemas/capabilities.json | 1 - src-tauri/gen/schemas/desktop-schema.json | 5181 --- src-tauri/gen/schemas/macOS-schema.json | 5181 --- src-tauri/gen/schemas/plugin-manifests.json | 1 - src-tauri/icons/icon.icns | Bin 785363 -> 0 bytes src-tauri/icons/icon.ico | Bin 49906 -> 0 bytes src-tauri/src/main.rs | 112 - src-tauri/tauri.conf.json | 29 - src/Core/Brain.elm | 273 - src/Core/Brain/Common/State.elm | 110 - src/Core/Brain/Other/State.elm | 79 - src/Core/Brain/Ports.elm | 83 - src/Core/Brain/Sources/Processing/Common.elm | 86 - src/Core/Brain/Sources/Processing/State.elm | 236 - src/Core/Brain/Sources/Processing/Steps.elm | 327 - src/Core/Brain/Sources/Processing/Types.elm | 22 - src/Core/Brain/Task/Ports.elm | 79 - src/Core/Brain/Tracks/State.elm | 347 - src/Core/Brain/Types.elm | 76 - src/Core/Brain/User/Hypaethral.elm | 128 - src/Core/Brain/User/State.elm | 749 - src/Core/Brain/User/Types.elm | 52 - src/Core/Themes/Sunrise/Alfred/View.elm | 281 - src/Core/Themes/Sunrise/Console.elm | 312 - src/Core/Themes/Sunrise/ContextMenu.elm | 131 - src/Core/Themes/Sunrise/Kit.elm | 704 - src/Core/Themes/Sunrise/List.elm | 174 - src/Core/Themes/Sunrise/Navigation.elm | 246 - src/Core/Themes/Sunrise/Notifications.elm | 133 - src/Core/Themes/Sunrise/Playlists/View.elm | 473 - src/Core/Themes/Sunrise/Queue/View.elm | 309 - src/Core/Themes/Sunrise/Settings.elm | 450 - src/Core/Themes/Sunrise/Settings/Common.elm | 20 - src/Core/Themes/Sunrise/Settings/Data.elm | 89 - src/Core/Themes/Sunrise/Settings/Sync.elm | 190 - src/Core/Themes/Sunrise/Sources/Form.elm | 536 - src/Core/Themes/Sunrise/Sources/View.elm | 292 - src/Core/Themes/Sunrise/Syncing/View.elm | 187 - src/Core/Themes/Sunrise/Theme.elm | 292 - src/Core/Themes/Sunrise/Tracks/Scene.elm | 75 - .../Themes/Sunrise/Tracks/Scene/Covers.elm | 881 - src/Core/Themes/Sunrise/Tracks/Scene/List.elm | 851 - src/Core/Themes/Sunrise/Tracks/View.elm | 582 - src/Core/UI.elm | 741 - src/Core/UI/Adjunct.elm | 185 - src/Core/UI/Alfred/State.elm | 162 - src/Core/UI/Audio/State.elm | 374 - src/Core/UI/Audio/Types.elm | 69 - src/Core/UI/Backdrop.elm | 251 - src/Core/UI/Commands/Alfred.elm | 492 - src/Core/UI/Commands/State.elm | 16 - src/Core/UI/Common/State.elm | 149 - src/Core/UI/Common/Types.elm | 12 - src/Core/UI/Demo.elm | 203 - src/Core/UI/DnD.elm | 245 - src/Core/UI/Equalizer/State.elm | 61 - src/Core/UI/Interface/State.elm | 261 - src/Core/UI/Navigation.elm | 30 - src/Core/UI/Notifications.elm | 66 - src/Core/UI/Other/State.elm | 96 - src/Core/UI/Page.elm | 245 - src/Core/UI/Playlists/Alfred.elm | 144 - src/Core/UI/Playlists/ContextMenu.elm | 201 - src/Core/UI/Playlists/Directory.elm | 99 - src/Core/UI/Playlists/Page.elm | 10 - src/Core/UI/Playlists/State.elm | 539 - src/Core/UI/Ports.elm | 181 - src/Core/UI/Queue/ContextMenu.elm | 155 - src/Core/UI/Queue/Fill.elm | 251 - src/Core/UI/Queue/Page.elm | 8 - src/Core/UI/Queue/State.elm | 584 - src/Core/UI/Queue/Types.elm | 34 - src/Core/UI/Routing/State.elm | 161 - src/Core/UI/Services/State.elm | 75 - src/Core/UI/Settings/Page.elm | 9 - src/Core/UI/Sources/ContextMenu.elm | 84 - src/Core/UI/Sources/Form.elm | 31 - src/Core/UI/Sources/Page.elm | 16 - src/Core/UI/Sources/Query.elm | 68 - src/Core/UI/Sources/State.elm | 581 - src/Core/UI/Sources/Types.elm | 61 - src/Core/UI/Svg/Elements.elm | 118 - src/Core/UI/Syncing/Common.elm | 69 - src/Core/UI/Syncing/ContextMenu.elm | 37 - src/Core/UI/Syncing/State.elm | 642 - src/Core/UI/Syncing/Types.elm | 74 - src/Core/UI/Theme.elm | 113 - src/Core/UI/Tracks/ContextMenu.elm | 377 - src/Core/UI/Tracks/Covers.elm | 344 - src/Core/UI/Tracks/State.elm | 1122 - src/Core/UI/Tracks/Types.elm | 74 - src/Core/UI/Types.elm | 332 - src/Core/UI/User/State/Export.elm | 136 - src/Core/UI/User/State/Import.elm | 232 - src/Core/UI/View.elm | 16 - src/Css/About.css | 146 - src/Css/Application.css | 257 - src/Css/Fonts.css | 222 - src/Css/Logo.css | 15 - src/Css/Notifications.css | 29 - src/Javascript/Brain/application.ts | 24 - src/Javascript/Brain/artwork.ts | 218 - src/Javascript/Brain/common.ts | 117 - src/Javascript/Brain/elm/types.ts | 10 - src/Javascript/Brain/index.d.ts | 14 - src/Javascript/Brain/index.ts | 39 - src/Javascript/Brain/processing.ts | 303 - src/Javascript/Brain/search.ts | 54 - src/Javascript/Brain/task-ports.ts | 13 - src/Javascript/Brain/tracks.ts | 81 - src/Javascript/Brain/ui.ts | 21 - src/Javascript/Brain/user.ts | 185 - src/Javascript/UI/application.ts | 106 - src/Javascript/UI/artwork.ts | 111 - src/Javascript/UI/audio.ts | 533 - src/Javascript/UI/backdrop.ts | 46 - src/Javascript/UI/brain.ts | 39 - src/Javascript/UI/broadcast.ts | 11 - src/Javascript/UI/elm/types.ts | 11 - src/Javascript/UI/errors.ts | 20 - src/Javascript/UI/index.d.ts | 10 - src/Javascript/UI/index.ts | 59 - src/Javascript/UI/misc.ts | 61 - src/Javascript/UI/pointer-events.ts | 116 - src/Javascript/UI/service-worker.ts | 112 - src/Javascript/UI/tracks.ts | 50 - src/Javascript/Workers/search.ts | 157 - src/Javascript/Workers/service.ts | 182 - src/Javascript/common.ts | 67 - src/Javascript/crypto.ts | 83 - src/Javascript/urls.ts | 118 - src/Library/Alfred.elm | 110 - src/Library/Alien.elm | 200 - src/Library/Chunky.elm | 97 - src/Library/Common.elm | 97 - src/Library/Conditional.elm | 12 - src/Library/ContextMenu.elm | 54 - src/Library/Coordinates.elm | 29 - src/Library/Cryptography/Hmac.elm | 139 - src/Library/Dict/Ext.elm | 24 - src/Library/Equalizer.elm | 68 - src/Library/Html/Ext.elm | 50 - src/Library/Http/Ext.elm | 27 - src/Library/Icons.elm | 25 - src/Library/Json/Decode/Ext.elm | 28 - src/Library/Json/Encode/Ext.elm | 10 - src/Library/LastFm.elm | 200 - src/Library/Lens/Ext.elm | 17 - src/Library/List/Ext.elm | 75 - src/Library/Management.elm | 43 - src/Library/Maybe/Ext.elm | 13 - src/Library/MediaSession.elm | 8 - src/Library/Notifications.elm | 186 - src/Library/Playlists.elm | 41 - src/Library/Playlists/Encoding.elm | 66 - src/Library/Playlists/Matching.elm | 53 - src/Library/Queue.elm | 78 - src/Library/Return/Ext.elm | 19 - src/Library/Settings.elm | 63 - src/Library/Sources.elm | 120 - src/Library/Sources/Encoding.elm | 74 - src/Library/Sources/Pick.elm | 30 - src/Library/Sources/Processing.elm | 97 - src/Library/Sources/Processing/Encoding.elm | 19 - src/Library/Sources/Refresh/AccessToken.elm | 39 - src/Library/Sources/Services.elm | 328 - src/Library/Sources/Services/AmazonS3.elm | 190 - .../Sources/Services/AmazonS3/Parser.elm | 66 - .../Sources/Services/AmazonS3/Presign.elm | 208 - .../Sources/Services/Azure/Authorization.elm | 225 - .../Sources/Services/Azure/BlobParser.elm | 64 - .../Sources/Services/Azure/FileMarker.elm | 154 - .../Sources/Services/Azure/FileParser.elm | 98 - src/Library/Sources/Services/AzureBlob.elm | 168 - src/Library/Sources/Services/AzureFile.elm | 172 - src/Library/Sources/Services/Common.elm | 49 - src/Library/Sources/Services/Dropbox.elm | 230 - .../Sources/Services/Dropbox/Parser.elm | 43 - src/Library/Sources/Services/Google.elm | 323 - .../Sources/Services/Google/Marker.elm | 164 - .../Sources/Services/Google/Parser.elm | 185 - src/Library/Sources/Services/Ipfs.elm | 318 - src/Library/Sources/Services/Ipfs/Marker.elm | 93 - src/Library/Sources/Services/Ipfs/Parser.elm | 146 - src/Library/Sources/Services/WebDav.elm | 214 - .../Sources/Services/WebDav/Marker.elm | 32 - .../Sources/Services/WebDav/Parser.elm | 135 - src/Library/String/Ext.elm | 46 - src/Library/String/Path.elm | 48 - src/Library/Syncing.elm | 198 - .../Syncing/Services/Dropbox/Token.elm | 18 - src/Library/Task/Extra.elm | 28 - src/Library/TaskPort/Extra.elm | 18 - src/Library/Theme.elm | 28 - src/Library/Time/Ext.elm | 104 - src/Library/Tracks.elm | 469 - src/Library/Tracks/Collection.elm | 92 - src/Library/Tracks/Collection/Internal.elm | 29 - .../Tracks/Collection/Internal/Arrange.elm | 305 - .../Tracks/Collection/Internal/Harvest.elm | 148 - .../Tracks/Collection/Internal/Identify.elm | 178 - src/Library/Tracks/Encoding.elm | 227 - src/Library/Tracks/Favourites.elm | 183 - src/Library/Tracks/Sorting.elm | 158 - src/Library/Tuple/Ext.elm | 8 - src/Library/Url/Ext.elm | 46 - src/Library/User/Layer.elm | 527 - src/Library/User/Layer/Methods/Dropbox.elm | 114 - .../User/Layer/Methods/RemoteStorage.elm | 113 - src/README.md | 24 - src/Static/About/CORS.md | 121 - src/Static/About/Dev.md | 111 - src/Static/About/Index.md | 141 - src/Static/About/Layout.gren | 135 - src/Static/Fonts/Hack/bold-subset.woff2 | Bin 23512 -> 0 bytes src/Static/Fonts/Hack/bold.woff2 | Bin 108008 -> 0 bytes src/Static/Fonts/Hack/regular-subset.woff2 | Bin 23244 -> 0 bytes src/Static/Fonts/Hack/regular.woff2 | Bin 106236 -> 0 bytes src/Static/Fonts/Montserrat/Old/bold.woff2 | Bin 85436 -> 0 bytes .../Fonts/Montserrat/Old/extrabold.woff2 | Bin 85420 -> 0 bytes src/Static/Fonts/Montserrat/Old/light.woff2 | Bin 84456 -> 0 bytes src/Static/Fonts/Montserrat/Old/medium.woff2 | Bin 85448 -> 0 bytes src/Static/Fonts/Montserrat/Old/regular.woff2 | Bin 85240 -> 0 bytes .../Fonts/Montserrat/Old/semibold.woff2 | Bin 84968 -> 0 bytes .../Fonts/Montserrat/Variable/variable.woff2 | Bin 122820 -> 0 bytes src/Static/Fonts/Playfair Display/bold.woff2 | Bin 11424 -> 0 bytes .../Fonts/Source Sans Pro/Old/black.woff2 | Bin 125248 -> 0 bytes .../Source Sans Pro/Old/bold-italic.woff2 | Bin 102608 -> 0 bytes .../Fonts/Source Sans Pro/Old/bold.woff2 | Bin 126840 -> 0 bytes .../Fonts/Source Sans Pro/Old/italic.woff2 | Bin 101572 -> 0 bytes .../Source Sans Pro/Old/light-italic.woff2 | Bin 98860 -> 0 bytes .../Fonts/Source Sans Pro/Old/light.woff2 | Bin 124148 -> 0 bytes .../Fonts/Source Sans Pro/Old/regular.woff2 | Bin 127280 -> 0 bytes .../Source Sans Pro/Old/semibold-italic.woff2 | Bin 101984 -> 0 bytes .../Fonts/Source Sans Pro/Old/semibold.woff2 | Bin 128584 -> 0 bytes .../Source Sans Pro/Variable/italic.woff2 | Bin 113556 -> 0 bytes .../Source Sans Pro/Variable/roman.woff2 | Bin 137664 -> 0 bytes src/Static/Hosting/CORS | 1 - src/Static/Hosting/_headers | 2 - src/Static/Hosting/_redirects | 1 - src/Static/Hosting/privacy.txt | 20 - src/Static/Html/301.html | 2 - src/Static/Html/Application.html | 81 - src/Static/Images/ep_naturalblack_pattern.jpg | Bin 48330 -> 0 bytes src/Static/Images/ep_naturalblack_pattern.png | Bin 111057 -> 0 bytes src/Static/Images/icon.png | Bin 410630 -> 0 bytes src/Static/Images/ocean.jpg | Bin 132807 -> 0 bytes src/Static/Images/zwartevilt.png | Bin 53523 -> 0 bytes src/Static/Manifests/manifest.json | 35 - src/components/Applet.astro | 15 + src/components/List.astro | 17 + src/content.config.ts | 8 + src/env.d.ts | 2 + src/layouts/applet-pico-ui.astro | 24 + src/layouts/applet.astro | 17 + src/layouts/page.astro | 21 + src/pages/[...manifest].json.ts | 19 + src/pages/configurator/input/_applet.astro | 92 + src/pages/configurator/input/_manifest.json | 49 + src/pages/configurator/input/index.astro | 9 + src/pages/configurator/output/_applet.astro | 86 + src/pages/configurator/output/_manifest.json | 18 + src/pages/configurator/output/index.astro | 9 + .../blur/artwork-controller/_applet.astro | 795 + .../blur/artwork-controller/_manifest.json | 21 + .../blur/artwork-controller/index.astro | 9 + src/pages/core/types.d.ts | 72 + src/pages/demo/s3-tracks/index.astro | 59 + src/pages/engine/audio/_applet.astro | 360 + src/pages/engine/audio/_manifest.json | 131 + src/pages/engine/audio/index.astro | 9 + src/pages/engine/audio/types.d.ts | 31 + src/pages/engine/queue/_applet.astro | 59 + src/pages/engine/queue/_manifest.json | 47 + src/pages/engine/queue/index.astro | 9 + src/pages/engine/queue/types.d.ts | 1 + src/pages/index.astro | 244 + src/pages/input/native-fs/_applet.astro | 82 + src/pages/input/native-fs/_manifest.json | 56 + src/pages/input/native-fs/index.astro | 9 + src/pages/input/opensubsonic/_applet.astro | 80 + src/pages/input/opensubsonic/_manifest.json | 63 + src/pages/input/opensubsonic/index.astro | 9 + src/pages/input/opensubsonic/types.d.ts | 1 + src/pages/input/s3/_applet.astro | 109 + src/pages/input/s3/_manifest.json | 63 + src/pages/input/s3/index.astro | 9 + .../orchestrator/process-tracks/_applet.astro | 118 + .../process-tracks/_manifest.json | 6 + .../orchestrator/process-tracks/index.astro | 9 + .../orchestrator/queue-audio/_applet.astro | 97 + .../orchestrator/queue-audio/_manifest.json | 6 + .../orchestrator/queue-audio/index.astro | 9 + .../orchestrator/queue-tracks/_applet.astro | 79 + .../orchestrator/queue-tracks/_manifest.json | 6 + .../orchestrator/queue-tracks/index.astro | 9 + src/pages/output/indexed-db/_applet.astro | 49 + src/pages/output/indexed-db/_manifest.json | 26 + src/pages/output/indexed-db/index.astro | 9 + src/pages/output/native-fs/_applet.astro | 75 + src/pages/output/native-fs/_manifest.json | 26 + src/pages/output/native-fs/index.astro | 9 + .../output/storacha-automerge/_applet.astro | 124 + .../output/storacha-automerge/_manifest.json | 26 + .../output/storacha-automerge/index.astro | 9 + src/pages/processor/artwork/_applet.astro | 35 + src/pages/processor/artwork/_manifest.json | 38 + src/pages/processor/artwork/index.astro | 9 + src/pages/processor/artwork/types.d.ts | 1 + src/pages/processor/metadata/_applet.astro | 34 + src/pages/processor/metadata/_manifest.json | 34 + src/pages/processor/metadata/index.astro | 9 + src/pages/processor/metadata/types.d.ts | 1 + src/pages/processor/search/_applet.astro | 34 + src/pages/processor/search/_manifest.json | 6 + src/pages/processor/search/index.astro | 9 + src/pages/theme/blur/index.astro | 10 + src/pages/theme/pilot/audio/_applet.astro | 147 + src/pages/theme/pilot/audio/_manifest.json | 21 + src/pages/theme/pilot/audio/index.astro | 9 + src/pages/theme/pilot/audio/types.d.ts | 4 + src/pages/theme/pilot/index.astro | 11 + src/pages/theme/webamp/index.astro | 30 + src/scripts/applet/common.ts | 488 + src/scripts/common.ts | 274 + src/scripts/configurator/input/worker.ts | 140 + .../configurator/output/connections.ts | 25 + src/scripts/configurator/output/constants.ts | 11 + src/scripts/configurator/output/context.ts | 4 + src/scripts/configurator/output/events.ts | 6 + src/scripts/configurator/output/signals.ts | 9 + src/scripts/configurator/output/types.d.ts | 5 + src/scripts/configurator/output/ui.ts | 252 + src/scripts/engine/queue/types.d.ts | 11 + src/scripts/engine/queue/worker.ts | 147 + src/scripts/input/common.ts | 3 + src/scripts/input/native-fs/common.ts | 86 + src/scripts/input/native-fs/constants.ts | 5 + src/scripts/input/native-fs/mounting.ts | 33 + src/scripts/input/native-fs/types.d.ts | 1 + src/scripts/input/native-fs/ui.ts | 52 + src/scripts/input/native-fs/worker.ts | 157 + src/scripts/input/opensubsonic/common.ts | 157 + src/scripts/input/opensubsonic/constants.ts | 5 + src/scripts/input/opensubsonic/types.d.ts | 8 + src/scripts/input/opensubsonic/ui.ts | 110 + src/scripts/input/opensubsonic/worker.ts | 169 + src/scripts/input/s3/common.ts | 123 + src/scripts/input/s3/constants.ts | 24 + src/scripts/input/s3/types.d.ts | 8 + src/scripts/input/s3/ui.ts | 118 + src/scripts/input/s3/worker.ts | 131 + src/scripts/output/common.ts | 77 + src/scripts/output/indexed-db/constants.ts | 1 + src/scripts/output/indexed-db/worker.ts | 41 + src/scripts/output/native-fs/constants.ts | 2 + src/scripts/output/native-fs/worker.ts | 56 + src/scripts/processor/artwork/constants.ts | 2 + src/scripts/processor/artwork/types.d.ts | 21 + src/scripts/processor/artwork/worker.ts | 214 + src/scripts/processor/metadata/common.ts | 70 + src/scripts/processor/metadata/types.d.ts | 5 + src/scripts/processor/metadata/worker.ts | 39 + src/scripts/processor/search/constants.ts | 17 + src/scripts/processor/search/types.d.ts | 3 + src/scripts/processor/search/worker.ts | 107 + src/scripts/signal.ts | 65 + src/scripts/theme/blur/index.ts | 37 + src/scripts/theme/pilot/index.ts | 90 + src/scripts/theme/webamp/index.ts | 117 + src/styles/animations.css | 54 + src/styles/applet/common.css | 5 + src/styles/diffuse/colors.css | 17 + src/styles/diffuse/fonts.css | 13 + src/styles/fonts.css | 15 + src/styles/icons/iconoir.css | 1 + src/styles/icons/phosphor.css | 1 + src/styles/page/index.css | 76 + src/styles/pico.scss | 6 + src/styles/reset.css | 119 + src/styles/theme/blur/index.css | 78 + src/styles/theme/blur/variables.css | 26 + src/styles/theme/pilot/index.css | 78 + src/styles/theme/pilot/variables.css | 26 + src/styles/theme/webamp/index.css | 70 + src/styles/variables.css | 82 + system/Build/Build.gren | 223 - system/Css/PostCSS.js | 9 - system/Css/Tailwind.js | 262 - system/Js/esbuild.mjs | 47 - system/Js/node-shims.js | 10 - system/Review/ReviewConfig.elm | 45 - system/Review/elm.json | 41 - tasks/copy-types.ts | 12 + tsconfig.json | 33 + 506 files changed, 28301 insertions(+), 58984 deletions(-) create mode 100644 .astro/content-assets.mjs create mode 100644 .astro/content-modules.mjs create mode 100644 .astro/content.d.ts create mode 100644 .astro/data-store.json create mode 100644 .astro/settings.json create mode 100644 .astro/types.d.ts delete mode 100644 .eslintrc.yaml delete mode 100644 .github/workflows/build.yml create mode 100644 .npmrc delete mode 100644 Justfile create mode 100644 astro.config.js create mode 100644 deno.json create mode 100644 deno.lock delete mode 100644 elm.json delete mode 100644 gren.json create mode 100644 netlify.toml rename {src/Static/Favicons => public/favicons}/android-chrome-192x192.png (100%) rename {src/Static/Favicons => public/favicons}/android-chrome-512x512.png (100%) rename {src/Static/Favicons => public/favicons}/apple-touch-icon.png (100%) rename {src/Static/Favicons => public/favicons}/browserconfig.xml (100%) rename {src/Static/Favicons => public/favicons}/favicon-16x16.png (100%) rename {src/Static/Favicons => public/favicons}/favicon-32x32.png (100%) rename {src/Static/Favicons => public/favicons}/favicon.ico (100%) rename {src/Static/Favicons => public/favicons}/mstile-150x150.png (100%) rename {src/Static/Favicons => public/favicons}/safari-pinned-tab.svg (100%) create mode 100644 public/fonts/InterVariable-Italic.woff2 create mode 100644 public/fonts/InterVariable.woff2 rename {src/Static/Images/Background => public/images/background}/1.jpg (100%) rename {src/Static/Images/Background => public/images/background}/10.jpg (100%) rename {src/Static/Images/Background => public/images/background}/11.jpg (100%) rename {src/Static/Images/Background => public/images/background}/12.jpg (100%) rename {src/Static/Images/Background => public/images/background}/13.jpg (100%) rename {src/Static/Images/Background => public/images/background}/14.jpg (100%) rename {src/Static/Images/Background => public/images/background}/15.jpg (100%) rename {src/Static/Images/Background => public/images/background}/16.jpg (100%) rename {src/Static/Images/Background => public/images/background}/17.jpg (100%) rename {src/Static/Images/Background => public/images/background}/18.jpg (100%) rename {src/Static/Images/Background => public/images/background}/19.jpg (100%) rename {src/Static/Images/Background => public/images/background}/2.jpg (100%) rename {src/Static/Images/Background => public/images/background}/20.jpg (100%) rename {src/Static/Images/Background => public/images/background}/21.jpg (100%) rename {src/Static/Images/Background => public/images/background}/22.jpg (100%) rename {src/Static/Images/Background => public/images/background}/23.jpg (100%) rename {src/Static/Images/Background => public/images/background}/24.jpg (100%) rename {src/Static/Images/Background => public/images/background}/25.jpg (100%) rename {src/Static/Images/Background => public/images/background}/26.jpg (100%) rename {src/Static/Images/Background => public/images/background}/27.jpg (100%) rename {src/Static/Images/Background => public/images/background}/28.jpg (100%) rename {src/Static/Images/Background => public/images/background}/29.jpg (100%) rename {src/Static/Images/Background => public/images/background}/3.jpg (100%) rename {src/Static/Images/Background => public/images/background}/30.jpg (100%) rename {src/Static/Images/Background => public/images/background}/4.jpg (100%) rename {src/Static/Images/Background => public/images/background}/5.jpg (100%) rename {src/Static/Images/Background => public/images/background}/6.jpg (100%) rename {src/Static/Images/Background => public/images/background}/7.jpg (100%) rename {src/Static/Images/Background => public/images/background}/8.jpg (100%) rename {src/Static/Images/Background => public/images/background}/9.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/1.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/10.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/11.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/12.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/13.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/14.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/15.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/16.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/17.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/18.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/19.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/2.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/20.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/21.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/22.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/23.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/24.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/25.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/26.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/27.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/28.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/29.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/3.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/30.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/4.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/5.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/6.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/7.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/8.jpg (100%) rename {src/Static/Images/Background/Thumbnails => public/images/background/thumbnails}/9.jpg (100%) create mode 100644 public/images/diffuse-current.svg rename {src/Static/Images => public/images}/diffuse-dark.svg (100%) rename {src/Static/Images => public/images}/diffuse-grey.svg (100%) rename {src/Static/Images => public/images}/diffuse-light.svg (100%) rename {src/Static/Images => public/images}/diffuse__icon-dark.svg (100%) rename {src/Static/Images => public/images}/diffuse__icon-grey.svg (100%) rename {src/Static/Images => public/images}/diffuse__icon-light.svg (100%) rename {src/Static/Images => public/images}/icon-square-ws.png (100%) rename {src/Static/Images => public/images}/icon-square.png (100%) rename {src-tauri/icons => public/images}/icon.png (100%) create mode 100644 public/images/icons/windows_98/cd_audio_cd_a-4.png create mode 100644 public/images/icons/windows_98/directory_open_cool-0.png create mode 100644 public/images/icons/windows_98/directory_open_file_mydocs_2k-2.png delete mode 100644 src-tauri/.gitignore delete mode 100644 src-tauri/Cargo.lock delete mode 100644 src-tauri/Cargo.toml delete mode 100644 src-tauri/build.rs delete mode 100644 src-tauri/capabilities/main.json delete mode 100644 src-tauri/gen/schemas/acl-manifests.json delete mode 100644 src-tauri/gen/schemas/capabilities.json delete mode 100644 src-tauri/gen/schemas/desktop-schema.json delete mode 100644 src-tauri/gen/schemas/macOS-schema.json delete mode 100644 src-tauri/gen/schemas/plugin-manifests.json delete mode 100644 src-tauri/icons/icon.icns delete mode 100644 src-tauri/icons/icon.ico delete mode 100644 src-tauri/src/main.rs delete mode 100644 src-tauri/tauri.conf.json delete mode 100644 src/Core/Brain.elm delete mode 100644 src/Core/Brain/Common/State.elm delete mode 100644 src/Core/Brain/Other/State.elm delete mode 100644 src/Core/Brain/Ports.elm delete mode 100644 src/Core/Brain/Sources/Processing/Common.elm delete mode 100644 src/Core/Brain/Sources/Processing/State.elm delete mode 100644 src/Core/Brain/Sources/Processing/Steps.elm delete mode 100644 src/Core/Brain/Sources/Processing/Types.elm delete mode 100644 src/Core/Brain/Task/Ports.elm delete mode 100644 src/Core/Brain/Tracks/State.elm delete mode 100644 src/Core/Brain/Types.elm delete mode 100644 src/Core/Brain/User/Hypaethral.elm delete mode 100644 src/Core/Brain/User/State.elm delete mode 100644 src/Core/Brain/User/Types.elm delete mode 100644 src/Core/Themes/Sunrise/Alfred/View.elm delete mode 100644 src/Core/Themes/Sunrise/Console.elm delete mode 100644 src/Core/Themes/Sunrise/ContextMenu.elm delete mode 100644 src/Core/Themes/Sunrise/Kit.elm delete mode 100644 src/Core/Themes/Sunrise/List.elm delete mode 100644 src/Core/Themes/Sunrise/Navigation.elm delete mode 100644 src/Core/Themes/Sunrise/Notifications.elm delete mode 100644 src/Core/Themes/Sunrise/Playlists/View.elm delete mode 100644 src/Core/Themes/Sunrise/Queue/View.elm delete mode 100644 src/Core/Themes/Sunrise/Settings.elm delete mode 100644 src/Core/Themes/Sunrise/Settings/Common.elm delete mode 100644 src/Core/Themes/Sunrise/Settings/Data.elm delete mode 100644 src/Core/Themes/Sunrise/Settings/Sync.elm delete mode 100644 src/Core/Themes/Sunrise/Sources/Form.elm delete mode 100644 src/Core/Themes/Sunrise/Sources/View.elm delete mode 100644 src/Core/Themes/Sunrise/Syncing/View.elm delete mode 100644 src/Core/Themes/Sunrise/Theme.elm delete mode 100644 src/Core/Themes/Sunrise/Tracks/Scene.elm delete mode 100644 src/Core/Themes/Sunrise/Tracks/Scene/Covers.elm delete mode 100644 src/Core/Themes/Sunrise/Tracks/Scene/List.elm delete mode 100644 src/Core/Themes/Sunrise/Tracks/View.elm delete mode 100644 src/Core/UI.elm delete mode 100644 src/Core/UI/Adjunct.elm delete mode 100644 src/Core/UI/Alfred/State.elm delete mode 100644 src/Core/UI/Audio/State.elm delete mode 100644 src/Core/UI/Audio/Types.elm delete mode 100644 src/Core/UI/Backdrop.elm delete mode 100644 src/Core/UI/Commands/Alfred.elm delete mode 100644 src/Core/UI/Commands/State.elm delete mode 100644 src/Core/UI/Common/State.elm delete mode 100644 src/Core/UI/Common/Types.elm delete mode 100644 src/Core/UI/Demo.elm delete mode 100644 src/Core/UI/DnD.elm delete mode 100644 src/Core/UI/Equalizer/State.elm delete mode 100644 src/Core/UI/Interface/State.elm delete mode 100644 src/Core/UI/Navigation.elm delete mode 100644 src/Core/UI/Notifications.elm delete mode 100644 src/Core/UI/Other/State.elm delete mode 100644 src/Core/UI/Page.elm delete mode 100644 src/Core/UI/Playlists/Alfred.elm delete mode 100644 src/Core/UI/Playlists/ContextMenu.elm delete mode 100644 src/Core/UI/Playlists/Directory.elm delete mode 100644 src/Core/UI/Playlists/Page.elm delete mode 100644 src/Core/UI/Playlists/State.elm delete mode 100644 src/Core/UI/Ports.elm delete mode 100644 src/Core/UI/Queue/ContextMenu.elm delete mode 100644 src/Core/UI/Queue/Fill.elm delete mode 100644 src/Core/UI/Queue/Page.elm delete mode 100644 src/Core/UI/Queue/State.elm delete mode 100644 src/Core/UI/Queue/Types.elm delete mode 100644 src/Core/UI/Routing/State.elm delete mode 100644 src/Core/UI/Services/State.elm delete mode 100644 src/Core/UI/Settings/Page.elm delete mode 100644 src/Core/UI/Sources/ContextMenu.elm delete mode 100644 src/Core/UI/Sources/Form.elm delete mode 100644 src/Core/UI/Sources/Page.elm delete mode 100644 src/Core/UI/Sources/Query.elm delete mode 100644 src/Core/UI/Sources/State.elm delete mode 100644 src/Core/UI/Sources/Types.elm delete mode 100644 src/Core/UI/Svg/Elements.elm delete mode 100644 src/Core/UI/Syncing/Common.elm delete mode 100644 src/Core/UI/Syncing/ContextMenu.elm delete mode 100644 src/Core/UI/Syncing/State.elm delete mode 100644 src/Core/UI/Syncing/Types.elm delete mode 100644 src/Core/UI/Theme.elm delete mode 100644 src/Core/UI/Tracks/ContextMenu.elm delete mode 100644 src/Core/UI/Tracks/Covers.elm delete mode 100644 src/Core/UI/Tracks/State.elm delete mode 100644 src/Core/UI/Tracks/Types.elm delete mode 100644 src/Core/UI/Types.elm delete mode 100644 src/Core/UI/User/State/Export.elm delete mode 100644 src/Core/UI/User/State/Import.elm delete mode 100644 src/Core/UI/View.elm delete mode 100644 src/Css/About.css delete mode 100644 src/Css/Application.css delete mode 100644 src/Css/Fonts.css delete mode 100644 src/Css/Logo.css delete mode 100644 src/Css/Notifications.css delete mode 100644 src/Javascript/Brain/application.ts delete mode 100644 src/Javascript/Brain/artwork.ts delete mode 100644 src/Javascript/Brain/common.ts delete mode 100644 src/Javascript/Brain/elm/types.ts delete mode 100644 src/Javascript/Brain/index.d.ts delete mode 100644 src/Javascript/Brain/index.ts delete mode 100644 src/Javascript/Brain/processing.ts delete mode 100644 src/Javascript/Brain/search.ts delete mode 100644 src/Javascript/Brain/task-ports.ts delete mode 100644 src/Javascript/Brain/tracks.ts delete mode 100644 src/Javascript/Brain/ui.ts delete mode 100644 src/Javascript/Brain/user.ts delete mode 100644 src/Javascript/UI/application.ts delete mode 100644 src/Javascript/UI/artwork.ts delete mode 100644 src/Javascript/UI/audio.ts delete mode 100644 src/Javascript/UI/backdrop.ts delete mode 100644 src/Javascript/UI/brain.ts delete mode 100644 src/Javascript/UI/broadcast.ts delete mode 100644 src/Javascript/UI/elm/types.ts delete mode 100644 src/Javascript/UI/errors.ts delete mode 100644 src/Javascript/UI/index.d.ts delete mode 100644 src/Javascript/UI/index.ts delete mode 100644 src/Javascript/UI/misc.ts delete mode 100644 src/Javascript/UI/pointer-events.ts delete mode 100644 src/Javascript/UI/service-worker.ts delete mode 100644 src/Javascript/UI/tracks.ts delete mode 100644 src/Javascript/Workers/search.ts delete mode 100644 src/Javascript/Workers/service.ts delete mode 100644 src/Javascript/common.ts delete mode 100644 src/Javascript/crypto.ts delete mode 100644 src/Javascript/urls.ts delete mode 100644 src/Library/Alfred.elm delete mode 100644 src/Library/Alien.elm delete mode 100644 src/Library/Chunky.elm delete mode 100644 src/Library/Common.elm delete mode 100644 src/Library/Conditional.elm delete mode 100644 src/Library/ContextMenu.elm delete mode 100644 src/Library/Coordinates.elm delete mode 100644 src/Library/Cryptography/Hmac.elm delete mode 100644 src/Library/Dict/Ext.elm delete mode 100644 src/Library/Equalizer.elm delete mode 100644 src/Library/Html/Ext.elm delete mode 100644 src/Library/Http/Ext.elm delete mode 100644 src/Library/Icons.elm delete mode 100644 src/Library/Json/Decode/Ext.elm delete mode 100644 src/Library/Json/Encode/Ext.elm delete mode 100644 src/Library/LastFm.elm delete mode 100644 src/Library/Lens/Ext.elm delete mode 100644 src/Library/List/Ext.elm delete mode 100644 src/Library/Management.elm delete mode 100644 src/Library/Maybe/Ext.elm delete mode 100644 src/Library/MediaSession.elm delete mode 100644 src/Library/Notifications.elm delete mode 100644 src/Library/Playlists.elm delete mode 100644 src/Library/Playlists/Encoding.elm delete mode 100644 src/Library/Playlists/Matching.elm delete mode 100644 src/Library/Queue.elm delete mode 100644 src/Library/Return/Ext.elm delete mode 100644 src/Library/Settings.elm delete mode 100644 src/Library/Sources.elm delete mode 100644 src/Library/Sources/Encoding.elm delete mode 100644 src/Library/Sources/Pick.elm delete mode 100644 src/Library/Sources/Processing.elm delete mode 100644 src/Library/Sources/Processing/Encoding.elm delete mode 100644 src/Library/Sources/Refresh/AccessToken.elm delete mode 100644 src/Library/Sources/Services.elm delete mode 100644 src/Library/Sources/Services/AmazonS3.elm delete mode 100644 src/Library/Sources/Services/AmazonS3/Parser.elm delete mode 100644 src/Library/Sources/Services/AmazonS3/Presign.elm delete mode 100755 src/Library/Sources/Services/Azure/Authorization.elm delete mode 100755 src/Library/Sources/Services/Azure/BlobParser.elm delete mode 100755 src/Library/Sources/Services/Azure/FileMarker.elm delete mode 100755 src/Library/Sources/Services/Azure/FileParser.elm delete mode 100644 src/Library/Sources/Services/AzureBlob.elm delete mode 100644 src/Library/Sources/Services/AzureFile.elm delete mode 100644 src/Library/Sources/Services/Common.elm delete mode 100644 src/Library/Sources/Services/Dropbox.elm delete mode 100755 src/Library/Sources/Services/Dropbox/Parser.elm delete mode 100644 src/Library/Sources/Services/Google.elm delete mode 100644 src/Library/Sources/Services/Google/Marker.elm delete mode 100755 src/Library/Sources/Services/Google/Parser.elm delete mode 100644 src/Library/Sources/Services/Ipfs.elm delete mode 100755 src/Library/Sources/Services/Ipfs/Marker.elm delete mode 100755 src/Library/Sources/Services/Ipfs/Parser.elm delete mode 100644 src/Library/Sources/Services/WebDav.elm delete mode 100644 src/Library/Sources/Services/WebDav/Marker.elm delete mode 100644 src/Library/Sources/Services/WebDav/Parser.elm delete mode 100644 src/Library/String/Ext.elm delete mode 100644 src/Library/String/Path.elm delete mode 100644 src/Library/Syncing.elm delete mode 100644 src/Library/Syncing/Services/Dropbox/Token.elm delete mode 100644 src/Library/Task/Extra.elm delete mode 100644 src/Library/TaskPort/Extra.elm delete mode 100644 src/Library/Theme.elm delete mode 100644 src/Library/Time/Ext.elm delete mode 100644 src/Library/Tracks.elm delete mode 100644 src/Library/Tracks/Collection.elm delete mode 100644 src/Library/Tracks/Collection/Internal.elm delete mode 100644 src/Library/Tracks/Collection/Internal/Arrange.elm delete mode 100644 src/Library/Tracks/Collection/Internal/Harvest.elm delete mode 100644 src/Library/Tracks/Collection/Internal/Identify.elm delete mode 100644 src/Library/Tracks/Encoding.elm delete mode 100644 src/Library/Tracks/Favourites.elm delete mode 100644 src/Library/Tracks/Sorting.elm delete mode 100644 src/Library/Tuple/Ext.elm delete mode 100644 src/Library/Url/Ext.elm delete mode 100644 src/Library/User/Layer.elm delete mode 100644 src/Library/User/Layer/Methods/Dropbox.elm delete mode 100644 src/Library/User/Layer/Methods/RemoteStorage.elm delete mode 100644 src/README.md delete mode 100644 src/Static/About/CORS.md delete mode 100644 src/Static/About/Dev.md delete mode 100644 src/Static/About/Index.md delete mode 100644 src/Static/About/Layout.gren delete mode 100644 src/Static/Fonts/Hack/bold-subset.woff2 delete mode 100644 src/Static/Fonts/Hack/bold.woff2 delete mode 100644 src/Static/Fonts/Hack/regular-subset.woff2 delete mode 100644 src/Static/Fonts/Hack/regular.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Old/bold.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Old/extrabold.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Old/light.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Old/medium.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Old/regular.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Old/semibold.woff2 delete mode 100644 src/Static/Fonts/Montserrat/Variable/variable.woff2 delete mode 100644 src/Static/Fonts/Playfair Display/bold.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/black.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/bold-italic.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/bold.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/italic.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/light-italic.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/light.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/regular.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/semibold-italic.woff2 delete mode 100755 src/Static/Fonts/Source Sans Pro/Old/semibold.woff2 delete mode 100644 src/Static/Fonts/Source Sans Pro/Variable/italic.woff2 delete mode 100644 src/Static/Fonts/Source Sans Pro/Variable/roman.woff2 delete mode 100644 src/Static/Hosting/CORS delete mode 100644 src/Static/Hosting/_headers delete mode 100644 src/Static/Hosting/_redirects delete mode 100644 src/Static/Hosting/privacy.txt delete mode 100644 src/Static/Html/301.html delete mode 100644 src/Static/Html/Application.html delete mode 100644 src/Static/Images/ep_naturalblack_pattern.jpg delete mode 100644 src/Static/Images/ep_naturalblack_pattern.png delete mode 100644 src/Static/Images/icon.png delete mode 100644 src/Static/Images/ocean.jpg delete mode 100644 src/Static/Images/zwartevilt.png delete mode 100644 src/Static/Manifests/manifest.json create mode 100644 src/components/Applet.astro create mode 100644 src/components/List.astro create mode 100644 src/content.config.ts create mode 100644 src/env.d.ts create mode 100644 src/layouts/applet-pico-ui.astro create mode 100644 src/layouts/applet.astro create mode 100644 src/layouts/page.astro create mode 100644 src/pages/[...manifest].json.ts create mode 100644 src/pages/configurator/input/_applet.astro create mode 100644 src/pages/configurator/input/_manifest.json create mode 100644 src/pages/configurator/input/index.astro create mode 100644 src/pages/configurator/output/_applet.astro create mode 100644 src/pages/configurator/output/_manifest.json create mode 100644 src/pages/configurator/output/index.astro create mode 100644 src/pages/constituent/blur/artwork-controller/_applet.astro create mode 100644 src/pages/constituent/blur/artwork-controller/_manifest.json create mode 100644 src/pages/constituent/blur/artwork-controller/index.astro create mode 100644 src/pages/core/types.d.ts create mode 100644 src/pages/demo/s3-tracks/index.astro create mode 100644 src/pages/engine/audio/_applet.astro create mode 100644 src/pages/engine/audio/_manifest.json create mode 100644 src/pages/engine/audio/index.astro create mode 100644 src/pages/engine/audio/types.d.ts create mode 100644 src/pages/engine/queue/_applet.astro create mode 100644 src/pages/engine/queue/_manifest.json create mode 100644 src/pages/engine/queue/index.astro create mode 100644 src/pages/engine/queue/types.d.ts create mode 100644 src/pages/index.astro create mode 100644 src/pages/input/native-fs/_applet.astro create mode 100644 src/pages/input/native-fs/_manifest.json create mode 100644 src/pages/input/native-fs/index.astro create mode 100644 src/pages/input/opensubsonic/_applet.astro create mode 100644 src/pages/input/opensubsonic/_manifest.json create mode 100644 src/pages/input/opensubsonic/index.astro create mode 100644 src/pages/input/opensubsonic/types.d.ts create mode 100644 src/pages/input/s3/_applet.astro create mode 100644 src/pages/input/s3/_manifest.json create mode 100644 src/pages/input/s3/index.astro create mode 100644 src/pages/orchestrator/process-tracks/_applet.astro create mode 100644 src/pages/orchestrator/process-tracks/_manifest.json create mode 100644 src/pages/orchestrator/process-tracks/index.astro create mode 100644 src/pages/orchestrator/queue-audio/_applet.astro create mode 100644 src/pages/orchestrator/queue-audio/_manifest.json create mode 100644 src/pages/orchestrator/queue-audio/index.astro create mode 100644 src/pages/orchestrator/queue-tracks/_applet.astro create mode 100644 src/pages/orchestrator/queue-tracks/_manifest.json create mode 100644 src/pages/orchestrator/queue-tracks/index.astro create mode 100644 src/pages/output/indexed-db/_applet.astro create mode 100644 src/pages/output/indexed-db/_manifest.json create mode 100644 src/pages/output/indexed-db/index.astro create mode 100644 src/pages/output/native-fs/_applet.astro create mode 100644 src/pages/output/native-fs/_manifest.json create mode 100644 src/pages/output/native-fs/index.astro create mode 100644 src/pages/output/storacha-automerge/_applet.astro create mode 100644 src/pages/output/storacha-automerge/_manifest.json create mode 100644 src/pages/output/storacha-automerge/index.astro create mode 100644 src/pages/processor/artwork/_applet.astro create mode 100644 src/pages/processor/artwork/_manifest.json create mode 100644 src/pages/processor/artwork/index.astro create mode 100644 src/pages/processor/artwork/types.d.ts create mode 100644 src/pages/processor/metadata/_applet.astro create mode 100644 src/pages/processor/metadata/_manifest.json create mode 100644 src/pages/processor/metadata/index.astro create mode 100644 src/pages/processor/metadata/types.d.ts create mode 100644 src/pages/processor/search/_applet.astro create mode 100644 src/pages/processor/search/_manifest.json create mode 100644 src/pages/processor/search/index.astro create mode 100644 src/pages/theme/blur/index.astro create mode 100644 src/pages/theme/pilot/audio/_applet.astro create mode 100644 src/pages/theme/pilot/audio/_manifest.json create mode 100644 src/pages/theme/pilot/audio/index.astro create mode 100644 src/pages/theme/pilot/audio/types.d.ts create mode 100644 src/pages/theme/pilot/index.astro create mode 100644 src/pages/theme/webamp/index.astro create mode 100644 src/scripts/applet/common.ts create mode 100644 src/scripts/common.ts create mode 100644 src/scripts/configurator/input/worker.ts create mode 100644 src/scripts/configurator/output/connections.ts create mode 100644 src/scripts/configurator/output/constants.ts create mode 100644 src/scripts/configurator/output/context.ts create mode 100644 src/scripts/configurator/output/events.ts create mode 100644 src/scripts/configurator/output/signals.ts create mode 100644 src/scripts/configurator/output/types.d.ts create mode 100644 src/scripts/configurator/output/ui.ts create mode 100644 src/scripts/engine/queue/types.d.ts create mode 100644 src/scripts/engine/queue/worker.ts create mode 100644 src/scripts/input/common.ts create mode 100644 src/scripts/input/native-fs/common.ts create mode 100644 src/scripts/input/native-fs/constants.ts create mode 100644 src/scripts/input/native-fs/mounting.ts create mode 100644 src/scripts/input/native-fs/types.d.ts create mode 100644 src/scripts/input/native-fs/ui.ts create mode 100644 src/scripts/input/native-fs/worker.ts create mode 100644 src/scripts/input/opensubsonic/common.ts create mode 100644 src/scripts/input/opensubsonic/constants.ts create mode 100644 src/scripts/input/opensubsonic/types.d.ts create mode 100644 src/scripts/input/opensubsonic/ui.ts create mode 100644 src/scripts/input/opensubsonic/worker.ts create mode 100644 src/scripts/input/s3/common.ts create mode 100644 src/scripts/input/s3/constants.ts create mode 100644 src/scripts/input/s3/types.d.ts create mode 100644 src/scripts/input/s3/ui.ts create mode 100644 src/scripts/input/s3/worker.ts create mode 100644 src/scripts/output/common.ts create mode 100644 src/scripts/output/indexed-db/constants.ts create mode 100644 src/scripts/output/indexed-db/worker.ts create mode 100644 src/scripts/output/native-fs/constants.ts create mode 100644 src/scripts/output/native-fs/worker.ts create mode 100644 src/scripts/processor/artwork/constants.ts create mode 100644 src/scripts/processor/artwork/types.d.ts create mode 100644 src/scripts/processor/artwork/worker.ts create mode 100644 src/scripts/processor/metadata/common.ts create mode 100644 src/scripts/processor/metadata/types.d.ts create mode 100644 src/scripts/processor/metadata/worker.ts create mode 100644 src/scripts/processor/search/constants.ts create mode 100644 src/scripts/processor/search/types.d.ts create mode 100644 src/scripts/processor/search/worker.ts create mode 100644 src/scripts/signal.ts create mode 100644 src/scripts/theme/blur/index.ts create mode 100644 src/scripts/theme/pilot/index.ts create mode 100644 src/scripts/theme/webamp/index.ts create mode 100644 src/styles/animations.css create mode 100644 src/styles/applet/common.css create mode 100644 src/styles/diffuse/colors.css create mode 100644 src/styles/diffuse/fonts.css create mode 100644 src/styles/fonts.css create mode 100644 src/styles/icons/iconoir.css create mode 100644 src/styles/icons/phosphor.css create mode 100644 src/styles/page/index.css create mode 100644 src/styles/pico.scss create mode 100644 src/styles/reset.css create mode 100644 src/styles/theme/blur/index.css create mode 100644 src/styles/theme/blur/variables.css create mode 100644 src/styles/theme/pilot/index.css create mode 100644 src/styles/theme/pilot/variables.css create mode 100644 src/styles/theme/webamp/index.css create mode 100644 src/styles/variables.css delete mode 100644 system/Build/Build.gren delete mode 100644 system/Css/PostCSS.js delete mode 100644 system/Css/Tailwind.js delete mode 100644 system/Js/esbuild.mjs delete mode 100644 system/Js/node-shims.js delete mode 100644 system/Review/ReviewConfig.elm delete mode 100644 system/Review/elm.json create mode 100644 tasks/copy-types.ts create mode 100644 tsconfig.json diff --git a/.astro/content-assets.mjs b/.astro/content-assets.mjs new file mode 100644 index 000000000..2b8b8234b --- /dev/null +++ b/.astro/content-assets.mjs @@ -0,0 +1 @@ +export default new Map(); \ No newline at end of file diff --git a/.astro/content-modules.mjs b/.astro/content-modules.mjs new file mode 100644 index 000000000..2b8b8234b --- /dev/null +++ b/.astro/content-modules.mjs @@ -0,0 +1 @@ +export default new Map(); \ No newline at end of file diff --git a/.astro/content.d.ts b/.astro/content.d.ts new file mode 100644 index 000000000..6afefd083 --- /dev/null +++ b/.astro/content.d.ts @@ -0,0 +1,207 @@ +declare module 'astro:content' { + export interface RenderResult { + Content: import('astro/runtime/server/index.js').AstroComponentFactory; + headings: import('astro').MarkdownHeading[]; + remarkPluginFrontmatter: Record; + } + interface Render { + '.md': Promise; + } + + export interface RenderedContent { + html: string; + metadata?: { + imagePaths: Array; + [key: string]: unknown; + }; + } +} + +declare module 'astro:content' { + type Flatten = T extends { [K: string]: infer U } ? U : never; + + export type CollectionKey = keyof AnyEntryMap; + export type CollectionEntry = Flatten; + + export type ContentCollectionKey = keyof ContentEntryMap; + export type DataCollectionKey = keyof DataEntryMap; + + type AllValuesOf = T extends any ? T[keyof T] : never; + type ValidContentEntrySlug = AllValuesOf< + ContentEntryMap[C] + >['slug']; + + export type ReferenceDataEntry< + C extends CollectionKey, + E extends keyof DataEntryMap[C] = string, + > = { + collection: C; + id: E; + }; + export type ReferenceContentEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}) = string, + > = { + collection: C; + slug: E; + }; + export type ReferenceLiveEntry = { + collection: C; + id: string; + }; + + /** @deprecated Use `getEntry` instead. */ + export function getEntryBySlug< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + // Note that this has to accept a regular string too, for SSR + entrySlug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + + /** @deprecated Use `getEntry` instead. */ + export function getDataEntryById( + collection: C, + entryId: E, + ): Promise>; + + export function getCollection>( + collection: C, + filter?: (entry: CollectionEntry) => entry is E, + ): Promise; + export function getCollection( + collection: C, + filter?: (entry: CollectionEntry) => unknown, + ): Promise[]>; + + export function getLiveCollection( + collection: C, + filter?: LiveLoaderCollectionFilterType, + ): Promise< + import('astro').LiveDataCollectionResult, LiveLoaderErrorType> + >; + + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + entry: ReferenceContentEntry, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + entry: ReferenceDataEntry, + ): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + slug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + collection: C, + id: E, + ): E extends keyof DataEntryMap[C] + ? string extends keyof DataEntryMap[C] + ? Promise | undefined + : Promise + : Promise | undefined>; + export function getLiveEntry( + collection: C, + filter: string | LiveLoaderEntryFilterType, + ): Promise, LiveLoaderErrorType>>; + + /** Resolve an array of entry references from the same collection */ + export function getEntries( + entries: ReferenceContentEntry>[], + ): Promise[]>; + export function getEntries( + entries: ReferenceDataEntry[], + ): Promise[]>; + + export function render( + entry: AnyEntryMap[C][string], + ): Promise; + + export function reference( + collection: C, + ): import('astro/zod').ZodEffects< + import('astro/zod').ZodString, + C extends keyof ContentEntryMap + ? ReferenceContentEntry> + : ReferenceDataEntry + >; + // Allow generic `string` to avoid excessive type errors in the config + // if `dev` is not running to update as you edit. + // Invalid collection names will be caught at build time. + export function reference( + collection: C, + ): import('astro/zod').ZodEffects; + + type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; + type InferEntrySchema = import('astro/zod').infer< + ReturnTypeOrOriginal['schema']> + >; + + type ContentEntryMap = { + + }; + + type DataEntryMap = { + "manifests": Record; + + }; + + type AnyEntryMap = ContentEntryMap & DataEntryMap; + + type ExtractLoaderTypes = T extends import('astro/loaders').LiveLoader< + infer TData, + infer TEntryFilter, + infer TCollectionFilter, + infer TError + > + ? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError } + : { data: never; entryFilter: never; collectionFilter: never; error: never }; + type ExtractDataType = ExtractLoaderTypes['data']; + type ExtractEntryFilterType = ExtractLoaderTypes['entryFilter']; + type ExtractCollectionFilterType = ExtractLoaderTypes['collectionFilter']; + type ExtractErrorType = ExtractLoaderTypes['error']; + + type LiveLoaderDataType = + LiveContentConfig['collections'][C]['schema'] extends undefined + ? ExtractDataType + : import('astro/zod').infer< + Exclude + >; + type LiveLoaderEntryFilterType = + ExtractEntryFilterType; + type LiveLoaderCollectionFilterType = + ExtractCollectionFilterType; + type LiveLoaderErrorType = ExtractErrorType< + LiveContentConfig['collections'][C]['loader'] + >; + + export type ContentConfig = typeof import("../src/content.config.js"); + export type LiveContentConfig = never; +} diff --git a/.astro/data-store.json b/.astro/data-store.json new file mode 100644 index 000000000..546f7fce4 --- /dev/null +++ b/.astro/data-store.json @@ -0,0 +1 @@ +[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.10.1","content-config-digest","436d74edbfb2fef7","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"never\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}","manifests",["Map",11,12,28,29,65,66,148,149,180,181,214,215,241,242,268,269,276,277,284,285,292,293,305,306,318,319,331,332,355,356,379,380,387,388,403,404],"configurator/output/_manifest",{"id":11,"data":13,"filePath":26,"digest":27},{"name":14,"title":15,"entrypoint":16,"actions":17},"diffuse/configurator/output","Diffuse Configurator | Output","index.html",{"tracks":18},{"title":19,"description":20,"params_schema":21},"Tracks","Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.",{"type":22,"description":23,"items":24},"array","List of tracks",{"type":25},"object","src/pages/configurator/output/_manifest.json","4659e937f3f7ce97","configurator/input/_manifest",{"id":28,"data":30,"filePath":63,"digest":64},{"name":31,"title":32,"entrypoint":16,"actions":33},"diffuse/configurator/input","Diffuse Configurator | Input",{"consult":34,"contextualize":39,"list":45,"resolve":51},{"title":35,"params_schema":36},"Consult",{"type":37,"description":38},"string","The uri to check the availability of.",{"title":40,"description":41,"params_schema":42},"Contextualize","Provide context to all inputs.",{"type":22,"description":43,"items":44},"Array of tracks",{"type":25},{"title":46,"description":47,"params_schema":48},"List","List tracks from all inputs.",{"type":22,"description":49,"items":50},"A list of (cached) tracks",{"type":25},{"title":52,"description":53,"params_schema":54},"Resolve","Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.",{"type":25,"properties":55,"required":60},{"method":56,"uri":58},{"type":37,"description":57},"The HTTP method that is going to be used on the resolved URI.",{"type":37,"description":59},"The URI to resolve.",[61,62],"method","uri","src/pages/configurator/input/_manifest.json","deab08f592f33c5d","engine/audio/_manifest",{"id":65,"data":67,"filePath":146,"digest":147},{"name":68,"title":69,"entrypoint":16,"actions":70},"diffuse/engine/audio","Diffuse Audio",{"pause":71,"play":79,"render":89,"reload":117,"seek":127,"volume":136},{"title":72,"description":73,"params_schema":74},"Pause","Pause audio",{"type":25,"properties":75,"required":77},{"audioId":76},{"type":37},[78],"audioId",{"title":80,"description":81,"params_schema":82},"Play","Play audio",{"type":25,"properties":83,"required":88},{"audioId":84,"volume":85},{"type":37},{"type":86,"default":87},"number",0.5,[78],{"title":90,"description":91,"params_schema":92},"Render","Determine the active set of audio elements.",{"type":25,"properties":93,"required":115},{"audio":94,"play":107},{"type":22,"description":95,"items":96},"The audio items we want to render. These represent the audio elements that are in the DOM.",{"type":25,"properties":97,"required":104},{"id":98,"isPreload":99,"mimeType":101,"progress":102,"url":103},{"type":37},{"type":100},"boolean",{"type":37},{"type":86},{"type":37},[105,106],"id","url",{"type":25,"description":108,"properties":109,"required":114},"Pass in this object to immediately start playing one of the rendered audio items.",{"audioId":110,"volume":112},{"type":37,"description":111},"The id of the rendered audio item we want to play.",{"type":86,"default":87,"description":113},"A number equal to, or between, 0 and 1, that determines how loud the audio should play.",[78],[116],"audio",{"title":118,"description":119,"params_schema":120},"Reload","Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.",{"type":25,"properties":121,"required":125},{"audioId":122,"play":123,"progress":124},{"type":37},{"type":100},{"type":86},[78,126],"percentage",{"title":128,"description":129,"params_schema":130},"Seek","Seek audio to a given position",{"type":25,"properties":131,"required":135},{"audioId":132,"percentage":133},{"type":37},{"type":86,"description":134},"A number between 0 and 1 that determines the new current position in the audio",[78,126],{"title":137,"description":138,"params_schema":139},"Volume","Set the volume of all audio and the default value, or a specific audio node.",{"type":25,"properties":140,"required":144},{"audioId":141,"volume":142},{"type":37},{"type":86,"description":143},"A number between 0 and 1 that determines the new volume of all audio elements",[145],"volume","src/pages/engine/audio/_manifest.json","fad9de8481968df7","engine/queue/_manifest",{"id":148,"data":150,"filePath":178,"digest":179},{"name":151,"title":152,"entrypoint":16,"actions":153},"diffuse/engine/queue","Diffuse Queue",{"add":154,"pool":163,"shift":172,"unshift":175},{"title":155,"description":156,"params_schema":157},"Add","Add tracks to the queue.",{"type":22,"description":43,"items":158},{"type":25,"properties":159,"required":162},{"id":160,"uri":161},{"type":37},{"type":37},[105,62],{"title":164,"description":165,"params_schema":166},"Pool","Set the queue pool.",{"type":22,"description":43,"items":167},{"type":25,"properties":168,"required":171},{"id":169,"uri":170},{"type":37},{"type":37},[105,62],{"title":173,"description":174},"Shift","Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list.",{"title":176,"description":177},"Unshift","Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list.","src/pages/engine/queue/_manifest.json","bdd435b3e8277673","input/native-fs/_manifest",{"id":180,"data":182,"filePath":212,"digest":213},{"name":183,"title":184,"entrypoint":16,"input_properties":185,"actions":187},"diffuse/input/native-fs","Diffuse Input | Native File System",{"scheme":186},"file+local",{"consult":188,"list":192,"resolve":197,"mount":204,"unmount":207},{"title":35,"description":189,"params_schema":190},"Check if a handle is available to be used by passing in a file uri that uses that handle as the host.",{"type":37,"description":191},"The uri with the handle to check the availability of.",{"title":46,"description":193,"params_schema":194},"List tracks.",{"type":22,"description":195,"items":196},"A list of (cached) tracks with an uri matching the scheme",{"type":25},{"title":52,"description":198,"params_schema":199},"Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.",{"type":25,"properties":200,"required":203},{"method":201,"uri":202},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},"Mount","Prepare for usage.",{"title":208,"description":209,"params_schema":210},"Unmount","Callback after usage.",{"type":37,"description":211},"The handle id to unmount","src/pages/input/native-fs/_manifest.json","bbfb366cb25470ac","input/s3/_manifest",{"id":214,"data":216,"filePath":239,"digest":240},{"name":217,"title":218,"entrypoint":16,"input_properties":219,"actions":221},"diffuse/input/s3","Diffuse Input | S3",{"scheme":220},"s3",{"consult":222,"contextualize":224,"list":227,"resolve":230,"mount":236,"unmount":237},{"title":35,"params_schema":223},{"type":37,"description":38},{"title":40,"params_schema":225},{"type":22,"description":43,"items":226},{"type":25},{"title":46,"description":193,"params_schema":228},{"type":22,"description":195,"items":229},{"type":25},{"title":52,"description":198,"params_schema":231},{"type":25,"properties":232,"required":235},{"method":233,"uri":234},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":238},{"type":37,"description":211},"src/pages/input/s3/_manifest.json","458b0c64643bf8a8","input/opensubsonic/_manifest",{"id":241,"data":243,"filePath":266,"digest":267},{"name":244,"title":245,"entrypoint":16,"input_properties":246,"actions":248},"diffuse/input/opensubsonic","Diffuse Input | OpenSubsonic API",{"scheme":247},"opensubsonic",{"consult":249,"contextualize":251,"list":254,"resolve":257,"mount":263,"unmount":264},{"title":35,"params_schema":250},{"type":37,"description":38},{"title":40,"params_schema":252},{"type":22,"description":43,"items":253},{"type":25},{"title":46,"description":193,"params_schema":255},{"type":22,"description":195,"items":256},{"type":25},{"title":52,"description":198,"params_schema":258},{"type":25,"properties":259,"required":262},{"method":260,"uri":261},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":265},{"type":37,"description":211},"src/pages/input/opensubsonic/_manifest.json","463ff2f82f27fed9","orchestrator/process-tracks/_manifest",{"id":268,"data":270,"filePath":274,"digest":275},{"name":271,"title":272,"entrypoint":16,"actions":273},"diffuse/orchestrator/process-tracks","Diffuse Orchestrator | Process Tracks",{},"src/pages/orchestrator/process-tracks/_manifest.json","4d30ef9c892a16b8","orchestrator/queue-audio/_manifest",{"id":276,"data":278,"filePath":282,"digest":283},{"name":279,"title":280,"entrypoint":16,"actions":281},"diffuse/orchestrator/queue-audio","Diffuse Orchestrator | Queue Audio",{},"src/pages/orchestrator/queue-audio/_manifest.json","5c66731fcc2fae2d","orchestrator/queue-tracks/_manifest",{"id":284,"data":286,"filePath":290,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":289},"diffuse/orchestrator/queue-tracks","Diffuse Orchestrator | Queue Tracks",{},"src/pages/orchestrator/queue-tracks/_manifest.json","56a0c769ecdc8cbb","output/indexed-db/_manifest",{"id":292,"data":294,"filePath":303,"digest":304},{"name":295,"title":296,"entrypoint":16,"actions":297},"diffuse/output/indexed-db","Diffuse Output | IndexedDB",{"tracks":298,"mount":301,"unmount":302},{"title":19,"description":20,"params_schema":299},{"type":22,"description":23,"items":300},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/indexed-db/_manifest.json","c75e5169818995c0","output/native-fs/_manifest",{"id":305,"data":307,"filePath":316,"digest":317},{"name":308,"title":309,"entrypoint":16,"actions":310},"diffuse/output/native-fs","Diffuse Output | Native File System",{"tracks":311,"mount":314,"unmount":315},{"title":19,"description":20,"params_schema":312},{"type":22,"description":23,"items":313},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/native-fs/_manifest.json","9f36293a08c3d233","output/storacha-automerge/_manifest",{"id":318,"data":320,"filePath":329,"digest":330},{"name":321,"title":322,"entrypoint":16,"actions":323},"diffuse/output/storacha-automerge","Diffuse Output | Storacha Storage + Automerge CRDT",{"tracks":324,"mount":327,"unmount":328},{"title":19,"description":20,"params_schema":325},{"type":22,"description":23,"items":326},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/storacha-automerge/_manifest.json","607193e5156e1220","processor/metadata/_manifest",{"id":331,"data":333,"filePath":353,"digest":354},{"name":334,"title":335,"entrypoint":16,"actions":336},"diffuse/processor/metadata","Diffuse Processor | Metadata fetcher",{"supply":337},{"title":338,"description":339,"params_schema":340},"Supply","Get the metadata for a given URL or stream.",{"type":25,"properties":341},{"includeArtwork":342,"mimeType":344,"stream":345,"urls":346},{"type":100,"description":343},"Include artwork in the output.",{"type":37},{"type":25},{"type":25,"properties":347,"required":350},{"get":348,"head":349},{"type":37},{"type":37},[351,352],"get","head","src/pages/processor/metadata/_manifest.json","0f144e608574be9b","processor/artwork/_manifest",{"id":355,"data":357,"filePath":377,"digest":378},{"name":358,"title":359,"description":360,"entrypoint":16,"actions":361},"diffuse/processor/artwork","Diffuse Processor | Artwork fetcher","Tries to get artwork for a given URL or stream.",{"supply":362},{"title":338,"description":363,"params_schema":364},"Get the artwork for a given URL.",{"type":22,"items":365},{"type":25,"properties":366,"required":375},{"cacheId":367,"mimeType":368,"stream":369,"urls":370},{"type":37},{"type":37},{"type":25},{"type":25,"properties":371,"required":374},{"get":372,"head":373},{"type":37},{"type":37},[351,352],[376],"cacheId","src/pages/processor/artwork/_manifest.json","9401bdfa33e2f0db","processor/search/_manifest",{"id":379,"data":381,"filePath":385,"digest":386},{"name":382,"title":383,"entrypoint":16,"actions":384},"diffuse/processor/search","Diffuse Processor | Search",{},"src/pages/processor/search/_manifest.json","ec562d1125821f8a","theme/pilot/audio/_manifest",{"id":387,"data":389,"filePath":401,"digest":402},{"name":390,"title":391,"entrypoint":16,"actions":392},"diffuse/constituent/pilot/audio","",{"modifyIsPlaying":393,"modifyProgress":397},{"title":394,"description":395,"params_schema":396},"Set is-playing state","Indicate if audio is playing or not.",{"type":100},{"title":398,"description":399,"params_schema":400},"Set progress","Indicate how far the audio has progressed.",{"type":86},"src/pages/theme/pilot/audio/_manifest.json","7c3a0b25e8d14fd2","constituent/blur/artwork-controller/_manifest",{"id":403,"data":405,"filePath":413,"digest":414},{"name":406,"title":407,"entrypoint":16,"actions":408},"diffuse/constituent/blur/artwork-controller","Diffuse Blur Theme | Artwork Controller",{"modifyIsPlaying":409,"modifyProgress":411},{"title":394,"description":395,"params_schema":410},{"type":100},{"title":398,"description":399,"params_schema":412},{"type":86},"src/pages/constituent/blur/artwork-controller/_manifest.json","1b705295c5fa221a"] \ No newline at end of file diff --git a/.astro/settings.json b/.astro/settings.json new file mode 100644 index 000000000..52243c043 --- /dev/null +++ b/.astro/settings.json @@ -0,0 +1,5 @@ +{ + "_variables": { + "lastUpdateCheck": 1754857737323 + } +} \ No newline at end of file diff --git a/.astro/types.d.ts b/.astro/types.d.ts new file mode 100644 index 000000000..03d7cc43f --- /dev/null +++ b/.astro/types.d.ts @@ -0,0 +1,2 @@ +/// +/// \ No newline at end of file diff --git a/.eslintrc.yaml b/.eslintrc.yaml deleted file mode 100644 index 21b3b9a9e..000000000 --- a/.eslintrc.yaml +++ /dev/null @@ -1,44 +0,0 @@ -env: - browser: true - es6: true - worker: true - -extends: - - eslint:recommended - - plugin:@typescript-eslint/recommended - -parser: - "@typescript-eslint/parser" - -parserOptions: - ecmaVersion: 2020 - sourceType: module - -plugins: - - "@typescript-eslint" - -root: - true - -globals: - Elm: readonly - MediaMetadata: readonly - RemoteStorage: readonly - tocca: readonly - -rules: - "@typescript-eslint/ban-ts-comment": - 0 - - no-cond-assign: - 0 - - no-unexpected-multiline: - 0 - - "@typescript-eslint/no-explicit-any": - 0 - - "@typescript-eslint/no-unused-vars": - - error - - argsIgnorePattern: "^_" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 05aef6e72..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,134 +0,0 @@ -name: Build & create release - -on: - workflow_dispatch: - inputs: - -jobs: - ######### - # BUILD # - ######### - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - - # Tasks - - run: npm install - - run: npx just build-prod - - # Upload artifacts - - uses: actions/upload-artifact@v4 - with: - name: dist - path: dist/ - - ################## - # CREATE RELEASE # - ################## - create-release: - needs: build - runs-on: ubuntu-latest - - outputs: - RELEASE_UPLOAD_ID: ${{ steps.create_release.outputs.id }} - TAG_NAME: ${{ steps.package-version.outputs.current-version }} - - steps: - - uses: actions/checkout@v4 - - run: mkdir compressed - - # Download artifacts - - uses: actions/download-artifact@v4 - with: - name: dist - path: dist/ - - # Create zip - - uses: montudor/action-zip@v1 - with: - args: zip -qq -r ./compressed/diffuse-web.zip ./dist - - # Create tar.gz - - uses: master-atul/tar-action@v1.1.0 - with: - command: c - cwd: . - files: ./dist - outPath: compressed/diffuse-web.tar.gz - - # Get Diffuse's version number - - id: package-version - uses: martinbeentjes/npm-get-version-action@v1.3.1 - - # Create release - - uses: softprops/action-gh-release@v1 - id: create_release - with: - token: ${{ secrets.GITHUB_TOKEN }} - - tag_name: "${{ steps.package-version.outputs.current-version }}" - name: "v${{ steps.package-version.outputs.current-version }}" - body: "See the assets to download this version and install." - draft: true - - files: | - compressed/diffuse-web.zip - compressed/diffuse-web.tar.gz - - ######### - # TAURI # - ######### - tauri: - needs: create-release - - strategy: - fail-fast: false - matrix: - os: [macos-15, macos-13, ubuntu-latest, windows-latest] - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - - # Install dependencies - - run: npm install - - # OS - - name: install linux dependencies - if: matrix.os == 'ubuntu-latest' - run: | - sudo apt-get update - sudo apt-get install -y libgtk-4-1 libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev libsoup-3.0 - - # Rust - - uses: moonrepo/setup-rust@v1 - - # Download artifacts - - uses: actions/download-artifact@v4 - with: - name: dist - path: dist/ - - # Make a build - - run: npx tauri build - - # Upload artifacts - - uses: softprops/action-gh-release@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - tag_name: "${{ needs.create-release.outputs.TAG_NAME }}" - draft: true - - files: | - src-tauri/target/release/bundle/appimage/*.AppImage - src-tauri/target/release/bundle/deb/*.deb - src-tauri/target/release/bundle/dmg/*.dmg - src-tauri/target/release/bundle/msi/*.msi - src-tauri/target/release/bundle/nsis/*.exe - src-tauri/target/release/bundle/rpm/*.rpm diff --git a/.gitignore b/.gitignore index 7fc92681c..28020e1fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,4 @@ .DS_Store -.gren .zed -app -fission.yaml* -elm-stuff node_modules -/.deploy* /dist -/src/Library/Css/Classes.elm diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..41583e36c --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@jsr:registry=https://npm.jsr.io diff --git a/CHANGELOG.md b/CHANGELOG.md index 87fe35c6c..b28332e36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 4.0.0 + +**Rewrite from scratch.** + + ## 3.5.0 - **Improve audio playback, processing and error handling**. diff --git a/Justfile b/Justfile deleted file mode 100644 index 86bb684f0..000000000 --- a/Justfile +++ /dev/null @@ -1,237 +0,0 @@ -export NODE_NO_WARNINGS := "1" - - -BUILD_DIR := "./dist" -NPM_DIR := "./node_modules" -SRC_DIR := "./src" -SYSTEM_DIR := "./system" - -ESBUILD := "node system/Js/esbuild.mjs" -ELM_REVIEW := NPM_DIR + "/.bin/elm-review " + SRC_DIR + " --config system/Review --compiler " + NPM_DIR + "/.bin/elm --elm-format-path " + NPM_DIR + "/.bin/elm-format" - - -default: dev - - -# Tasks -# ===== - -@build: clean css elm copy-wasm js system license - echo "> Build completed ⚡" - - -@build-prod: quality clean (css "minify") elm-prod copy-wasm js-prod system license - echo "> Production build completed 🛳" - - -check-versions: - #!/usr/bin/env node - console.log("> Checking version numbers 🧮") - const pwd = "{{invocation_directory()}}" - - const package = require(`${pwd}/package.json`) - const manifest = require(`${pwd}/src/Static/Manifests/manifest.json`) - - if (package.version !== manifest.version) { - console.error(`The version from package.json doesn't match the one from the app manifest. The package version is '${package.version}' and the manifest version is '${manifest.version}'.`) - process.exit(1) - } - - -@clean: - echo "> Cleaning build directory" - rm -rf {{BUILD_DIR}} || true - mkdir -p {{BUILD_DIR}} - - -@copy-wasm: - echo "> Copying WASM files" - mkdir -p {{BUILD_DIR}}/wasm - cp {{NPM_DIR}}/mediainfo.js/dist/MediaInfoModule.wasm {{BUILD_DIR}}/wasm/media-info.wasm - - -@css minify="false": - echo "{{ if minify == "minify" { "> Compiling CSS (optimised)" } else { "> Compiling CSS" } }}" - - {{NPM_DIR}}/.bin/tailwind \ - --input {{SRC_DIR}}/Css/About.css \ - --output {{BUILD_DIR}}/about.css \ - --content {{SRC_DIR}}/Static/About/**/*.* \ - --config {{SYSTEM_DIR}}/Css/Tailwind.js \ - --postcss {{SYSTEM_DIR}}/Css/PostCSS.js \ - --jit \ - {{ if minify == "minify" { "--minify" } else { "" } }} - - {{NPM_DIR}}/.bin/tailwind \ - --input {{SRC_DIR}}/Css/Application.css \ - --output {{BUILD_DIR}}/application.css \ - --content "{{SRC_DIR}}/Static/Html/**/*.*,{{SRC_DIR}}/Core/Themes/**/*.elm,{{SRC_DIR}}/Core/UI/**/*.elm,{{SRC_DIR}}/Core/UI.elm,{{SRC_DIR}}/Library/**/*.elm,{{SRC_DIR}}/Javascript/**/*.ts" \ - --config {{SYSTEM_DIR}}/Css/Tailwind.js \ - --postcss {{SYSTEM_DIR}}/Css/PostCSS.js \ - --jit \ - {{ if minify == "minify" { "--minify" } else { "" } }} - - -@elm: - echo "> Compiling Elm application" - {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/Brain.elm --output {{BUILD_DIR}}/js/brain.elm.js - {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/UI.elm --output {{BUILD_DIR}}/js/ui.elm.js - - -@elm-prod: - echo "> Compiling Elm application (optimised)" - {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/Brain.elm --output {{BUILD_DIR}}/js/brain.elm.js --optimize - {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/UI.elm --output {{BUILD_DIR}}/js/ui.elm.js --optimize - - {{NPM_DIR}}/.bin/esbuild {{BUILD_DIR}}/js/brain.elm.js \ - --minify --outfile={{BUILD_DIR}}/js/brain.elm.tmp.js - - {{NPM_DIR}}/.bin/esbuild {{BUILD_DIR}}/js/ui.elm.js \ - --minify --outfile={{BUILD_DIR}}/js/ui.elm.tmp.js - - rm {{BUILD_DIR}}/js/brain.elm.js - mv {{BUILD_DIR}}/js/brain.elm.tmp.js {{BUILD_DIR}}/js/brain.elm.js - rm {{BUILD_DIR}}/js/ui.elm.js - mv {{BUILD_DIR}}/js/ui.elm.tmp.js {{BUILD_DIR}}/js/ui.elm.js - - -js: - #!/usr/bin/env bash - build_timestamp="`date '+%s'`" - echo "> Compiling Javascript code" - - # Workers - {{ESBUILD}} ./src/Javascript/Workers/search.ts \ - --outfile={{BUILD_DIR}}/search.js - - {{ESBUILD}} ./src/Javascript/Workers/service.ts \ - --outfile={{BUILD_DIR}}/service-worker.js \ - --define:BUILD_TIMESTAMP=$build_timestamp - - {{ESBUILD}} ./src/Javascript/Brain/index.ts \ - --outdir={{BUILD_DIR}}/js/brain/ \ - --splitting \ - --alias:brain.elm.js={{BUILD_DIR}}/js/brain.elm.js \ - --inject:./system/Js/node-shims.js \ - --alias:node:buffer=buffer/ \ - --alias:node:stream=stream - - # Main - {{ESBUILD}} ./src/Javascript/UI/index.ts \ - --outdir={{BUILD_DIR}}/js/ui/ \ - --define:BUILD_TIMESTAMP=$build_timestamp \ - --splitting \ - --alias:node:buffer=buffer/ \ - --alias:node:stream=stream - - -js-prod: - #!/usr/bin/env bash - build_timestamp="`date '+%s'`" - echo "> Compiling Javascript code (optimised)" - - # Workers - {{ESBUILD}} ./src/Javascript/Workers/search.ts \ - --minify \ - --outfile={{BUILD_DIR}}/search.js - - {{ESBUILD}} ./src/Javascript/Workers/service.ts \ - --minify \ - --outfile={{BUILD_DIR}}/service-worker.js \ - --define:BUILD_TIMESTAMP=$build_timestamp - - {{ESBUILD}} ./src/Javascript/Brain/index.ts \ - --outdir={{BUILD_DIR}}/js/brain/ \ - --splitting \ - --minify \ - --alias:brain.elm.js={{BUILD_DIR}}/js/brain.elm.js \ - --inject:./system/Js/node-shims.js \ - --alias:node:buffer=buffer/ \ - --alias:node:stream=stream - - # Main - {{ESBUILD}} ./src/Javascript/UI/index.ts \ - --outdir={{BUILD_DIR}}/js/ui/ \ - --define:BUILD_TIMESTAMP=$build_timestamp \ - --splitting \ - --minify \ - --alias:node:buffer=buffer/ \ - --alias:node:stream=stream - - -@license: - echo "> Copying license file" - cp LICENSE {{BUILD_DIR}}/LICENSE - - -@system: - echo "> Compiling system" - {{NPM_DIR}}/.bin/gren make system/Build/Build.gren - node app - rm app - - - -# -# Dev tasks -# - -@dev: build - just watch & just server - - -@doc-tests: - echo "> Running documentation tests" - ( cd src && \ - find . -name "*.elm" -print0 | \ - xargs -0 -n 1 -I % sh -c 'elm-proofread -- % || exit 255; echo "\n\n"' \ - ) - - -@elm-format: - echo "> Running elm-format" - {{NPM_DIR}}/.bin/elm-format {{SRC_DIR}} --yes - - -@elm-housekeeping: elm-format elm-review - - -@elm-review: - echo "> Running elm-review" - {{ELM_REVIEW}} --fix-all - - -@quality: check-versions - echo "> Running es-lint" - {{NPM_DIR}}/.bin/eslint src/Javascript/**/* - echo "> Running elm-review" - {{ELM_REVIEW}} - - -@server: - echo "> Booting up web server on port 8000" - {{NPM_DIR}}/.bin/serve {{BUILD_DIR}} -p 8000 --no-request-logging - - -@test: doc-tests - - -@watch: - echo "> Watching" - just watch-css & just watch-elm & just watch-js & just watch-system - - -@watch-css: - watchexec -p -w {{SRC_DIR}}/Css -w {{SYSTEM_DIR}}/Css -- just css js - - -@watch-elm: - watchexec -p -w {{SRC_DIR}} -e elm -- just elm js css - - -@watch-js: - watchexec -p -w {{SRC_DIR}} -e js,ts -- just js - - -@watch-system: - watchexec -p --ignore *.elm --ignore *.js --ignore *.ts --ignore *.css --ignore src-tauri/** -- just system js diff --git a/README.md b/README.md index 3871550cd..79d387ad4 100644 --- a/README.md +++ b/README.md @@ -3,77 +3,10 @@ _A music player that connects to your cloud/distributed storage, in the form of a static, serverless, web application._ -📍 Available at [diffuse.sh](https://diffuse.sh/) and for [download](https://github.com/icidasset/diffuse/releases). -
- - - - -### Integrations - -Music layer for music storage. -User layer for user-data storage. - -#### Music layer - -- [Amazon S3](https://aws.amazon.com/s3/) -- [Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/) -- [Azure File Storage](https://azure.microsoft.com/en-us/services/storage/files/) -- [Dropbox](https://dropbox.com/) -- [IPFS](https://ipfs.io/) -- [WebDAV](https://en.wikipedia.org/wiki/WebDAV) - -#### User layer - -- [Dropbox](https://www.dropbox.com/) -- [IPFS](https://ipfs.io/) (using MFS) -- [RemoteStorage](https://remotestorage.io/) - - - ---- - - - -### Hosting on your own server - -Diffuse is a static web application, which means it's just HTML, CSS, and Javascript. No REST API, database, or anything backend-related involved. The app uses a hash (aka. fragment-based) routing system, so you don't need any special server rules for routing. You can download a pre-build web-only version of Diffuse on the [releases](https://github.com/icidasset/diffuse/releases) page. Diffuse uses service workers, so you may need HTTPS for it to work smoothly in certain browsers. - -I should also note that some source services use OAuth, so you'll need to use your own application credentials (eg. Dropbox). That said, if you're working locally, you can use `http://localhost:8000` or `http://127.0.0.1:44999` to use the default ones, that's what the old Electron app was using. - -In short: -- Diffuse is a static, serverless web application -- Routing is done using hashes/fragments (eg. `diffuse.sh/#/sources`) -- Download a web build on the [releases](https://github.com/icidasset/diffuse/releases) page -- Uses service workers (use HTTPS if possible) -- May need own OAuth application credentials for some source services - - - ---- - - - -### Building it yourself - -This project can be built with [Node.js](https://nodejs.org/). +## Build it yourself ```shell -# 🍱 - -# 1. Install dependencies npm install - -# 2. Build -npx just build - -# 3. Start static-file server -npx just server - -# 4. Watch for changes (requires [watchexec](https://github.com/watchexec/watchexec/) to be installed) -npx just watch - -# Alternatively, to build, serve & watch: -npx just +deno run dev ``` diff --git a/astro.config.js b/astro.config.js new file mode 100644 index 000000000..61c8ede6a --- /dev/null +++ b/astro.config.js @@ -0,0 +1,41 @@ +import { defineConfig } from "astro/config"; +import { fileURLToPath } from "node:url"; +import scope from "astro-scope"; +import path from "node:path"; +import tsconfigPaths from "vite-tsconfig-paths"; +import wasm from "vite-plugin-wasm"; + +import purgecss from "astro-purgecss"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export default defineConfig({ + integrations: [scope(), purgecss()], + build: { + inlineStylesheets: "never", + }, + vite: { + plugins: [tsconfigPaths(), wasm()], + server: { + hmr: false, + }, + build: { + target: "esnext", + }, + resolve: { + alias: { + "@applets": path.resolve(__dirname, "./src/pages"), + "@layouts": path.resolve(__dirname, "./src/layouts"), + "@pages": path.resolve(__dirname, "./src/pages"), + "@scripts": path.resolve(__dirname, "./src/scripts"), + "@styles": path.resolve(__dirname, "./src/styles"), + "@src": path.resolve(__dirname, "./src"), + "@phosphor-icons": path.resolve(__dirname, "./node_modules/@phosphor-icons/web/src"), + }, + }, + worker: { + format: "es", + }, + }, +}); diff --git a/deno.json b/deno.json new file mode 100644 index 000000000..2ee230f34 --- /dev/null +++ b/deno.json @@ -0,0 +1,16 @@ +{ + "imports": { + "@std/fs": "jsr:@std/fs@^1.0.15" + }, + "tasks": { + "astro": "astro", + "astro:build": "astro build", + "build": { + "command": "deno task copy-types", + "dependencies": ["astro:build"] + }, + "copy-types": "deno run --allow-read --allow-write tasks/copy-types.ts", + "deploy:netlify": "npx netlify deploy --prod", + "dev": "astro dev" + } +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 000000000..258ef5fde --- /dev/null +++ b/deno.lock @@ -0,0 +1,63 @@ +{ + "version": "5", + "specifiers": { + "jsr:@std/fs@1": "1.0.16", + "jsr:@std/path@^1.0.8": "1.0.8" + }, + "jsr": { + "@std/fs@1.0.16": { + "integrity": "81878f62b6eeda0bf546197fc3daa5327c132fee1273f6113f940784a468b036", + "dependencies": [ + "jsr:@std/path" + ] + }, + "@std/path@1.0.8": { + "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" + } + }, + "workspace": { + "dependencies": [ + "jsr:@std/fs@^1.0.15" + ], + "packageJson": { + "dependencies": [ + "npm:98.css@~0.1.21", + "npm:@automerge/automerge@^3.0.0-beta.0", + "npm:@js-temporal/polyfill@~0.5.1", + "npm:@jsr/bradenmacdonald__s3-lite-client@0.9", + "npm:@jsr/okikio__transferables@^1.0.2", + "npm:@jsr/std__media-types@^1.1.0", + "npm:@okikio/sharedworker@^1.1.0", + "npm:@orama/orama@^3.1.7", + "npm:@orama/plugin-qps@^3.1.7", + "npm:@phosphor-icons/web@^2.1.2", + "npm:@picocss/pico@^2.1.1", + "npm:@tokenizer/http@~0.9.2", + "npm:@tokenizer/range@0.13", + "npm:@types/throttle-debounce@^5.0.2", + "npm:@types/wicg-file-system-access@^2023.10.6", + "npm:astro-purgecss@^5.2.2", + "npm:astro-scope@^3.0.1", + "npm:astro@^5.7.4", + "npm:comlink@^4.4.2", + "npm:fast-average-color@^9.5.0", + "npm:iconoir@^7.11.0", + "npm:idb-keyval@^6.2.1", + "npm:music-metadata@^11.2.3", + "npm:netlify@^22.1.0", + "npm:purgecss@^7.0.2", + "npm:query-string@^9.1.2", + "npm:sass@^1.87.0", + "npm:spellcaster@6", + "npm:subsonic-api@^3.1.2", + "npm:throttle-debounce@^5.0.2", + "npm:uint8arrays@^5.1.0", + "npm:uri-js@^4.4.1", + "npm:vite-plugin-wasm@^3.4.1", + "npm:vite-tsconfig-paths@^5.1.4", + "npm:webamp@^2.1.2", + "npm:xxh32@^2.0.5" + ] + } + } +} diff --git a/elm.json b/elm.json deleted file mode 100644 index 779122f5c..000000000 --- a/elm.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "application", - "source-directories": ["src/Core", "src/Library"], - "elm-version": "0.19.1", - "dependencies": { - "direct": { - "FabienHenon/elm-infinite-list-view": "3.2.0", - "Fresheyeball/elm-return": "7.1.0", - "Gizra/elm-all-set": "1.0.1", - "Gizra/elm-debouncer": "2.0.0", - "Herteby/enum": "1.0.1", - "NoRedInk/elm-json-decode-pipeline": "1.0.1", - "arturopala/elm-monocle": "2.2.0", - "avh4/elm-color": "1.0.0", - "elm/browser": "1.0.2", - "elm/core": "1.0.5", - "elm/file": "1.0.5", - "elm/html": "1.0.0", - "elm/http": "2.0.0", - "elm/json": "1.1.3", - "elm/random": "1.0.0", - "elm/regex": "1.0.0", - "elm/svg": "1.0.1", - "elm/time": "1.0.0", - "elm/url": "1.0.0", - "elm/virtual-dom": "1.0.3", - "elm-community/dict-extra": "2.4.0", - "elm-community/html-extra": "3.4.0", - "elm-community/list-extra": "8.7.0", - "elm-community/maybe-extra": "5.3.0", - "elm-explorations/markdown": "1.0.0", - "icidasset/elm-binary": "2.1.0", - "icidasset/elm-material-icons": "11.0.0", - "icidasset/elm-sha": "2.0.2", - "jinjor/elm-xml-parser": "2.0.0", - "jzxhuang/http-extras": "2.1.0", - "lobanov/elm-taskport": "2.0.1", - "mpizenberg/elm-pointer-events": "4.0.2", - "newlandsvalley/elm-binary-base64": "1.0.3", - "noahzgordon/elm-color-extra": "1.0.2", - "ohanhi/keyboard": "2.0.1", - "prozacchiwawa/elm-urlbase64": "1.0.6", - "robinheghan/murmur3": "1.0.0", - "rtfeldman/elm-hex": "1.0.0", - "ryan-haskell/date-format": "1.0.0", - "truqu/elm-base64": "2.0.4", - "truqu/elm-md5": "1.1.0", - "wernerdegroot/listzipper": "4.0.0", - "ymtszw/elm-xml-decode": "3.2.2" - }, - "indirect": { - "elm/bytes": "1.0.8", - "elm/parser": "1.1.0", - "fredcy/elm-parseint": "2.0.1", - "miniBill/elm-xml-parser": "1.0.1", - "pzp1997/assoc-list": "1.0.0", - "zwilias/elm-utf-tools": "2.0.1" - } - }, - "test-dependencies": { - "direct": {}, - "indirect": {} - } -} diff --git a/gren.json b/gren.json deleted file mode 100644 index 4b56e6f9e..000000000 --- a/gren.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "application", - "platform": "node", - "source-directories": ["src/Static", "system/Build/"], - "gren-version": "0.3.0", - "dependencies": { - "direct": { - "gren-lang/core": "4.0.1", - "gren-lang/node": "3.0.1", - "icidasset/html-gren": "4.1.0", - "icidasset/markdown-gren": "3.1.0", - "icidasset/shikensu-gren": "5.1.0" - }, - "indirect": { - "gren-lang/parser": "3.0.1", - "gren-lang/url": "3.0.0" - } - } -} diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 000000000..9185298cc --- /dev/null +++ b/netlify.toml @@ -0,0 +1,3 @@ +[build] +command = "deno run build" +publish = "dist" diff --git a/package-lock.json b/package-lock.json index 38747e77a..d8aac5f5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,779 +1,1089 @@ { "name": "diffuse", - "version": "3.5.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "diffuse", - "version": "3.5.0", - "license": "SEE LICENSE IN LICENSE", - "dependencies": { - "@tokenizer/http": "^0.9.1", - "@tokenizer/range": "^0.10.0", - "elm-taskport": "^2.0.1", - "encoding-japanese": "^2.0.0", - "fast-text-encoding": "^1.0.6", - "file-saver": "^2.0.2", - "jszip": "^3.7.1", - "load-script2": "^2.0.5", - "localforage": "^1.10.0", - "lunr": "^2.3.8", - "mediainfo.js": "0.3.3", - "music-metadata": "^10.6.0", - "readable-stream": "^4.5.2", - "remotestoragejs": "^2.0.0-beta.6", - "serve": "^14.2.1", - "throttle-debounce": "^5.0.0", - "timer.js": "^1.0.4", - "tocca": "^2.0.9", - "uint8arrays": "^4.0.10" + "dependencies": { + "@automerge/automerge": "^3.0.0-beta.0", + "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", + "@js-temporal/polyfill": "^0.5.1", + "@okikio/sharedworker": "^1.1.0", + "@okikio/transferables": "npm:@jsr/okikio__transferables@^1.0.2", + "@orama/orama": "^3.1.7", + "@orama/plugin-qps": "^3.1.7", + "@phosphor-icons/web": "^2.1.2", + "@picocss/pico": "^2.1.1", + "@std/media-types": "npm:@jsr/std__media-types@^1.1.0", + "@tokenizer/http": "^0.9.2", + "@tokenizer/range": "^0.13.0", + "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", + "98.css": "^0.1.21", + "comlink": "^4.4.2", + "fast-average-color": "^9.5.0", + "iconoir": "^7.11.0", + "idb-keyval": "^6.2.1", + "music-metadata": "^11.2.3", + "query-string": "^9.1.2", + "spellcaster": "^6.0.0", + "subsonic-api": "^3.1.2", + "throttle-debounce": "^5.0.2", + "uint8arrays": "^5.1.0", + "uri-js": "^4.4.1", + "webamp": "^2.1.2", + "xxh32": "^2.0.5" }, "devDependencies": { - "@tauri-apps/api": "^2.0.0-beta.0", - "@tauri-apps/cli": "^2.0.0-beta.0", - "@tauri-apps/plugin-dialog": "^2.0.0-beta.0", - "@tauri-apps/plugin-fs": "^2.0.0-beta.0", - "@tauri-apps/plugin-shell": "^2.0.0-beta.0", - "@types/elm": "^0.19.3", - "@types/file-saver": "^2.0.7", - "@types/lunr": "^2.3.7", "@types/throttle-debounce": "^5.0.2", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "assert": "^2.1.0", - "autoprefixer": "^10.4.19", - "buffer": "^6.0.3", - "elm": "0.19.1-6", - "elm-format": "^0.8.7", - "elm-review": "^2.10.3", - "esbuild": "^0.20.2", - "esbuild-plugin-wasm": "^1.1.0", - "eslint": "^8.56.0", - "events": "^3.3.0", - "gren-lang": "^0.3.0", - "just-install": "^2.0.2", - "postcss": "^8.4.34", - "postcss-custom-properties": "^13.3.4", - "postcss-import": "^16.0.0", - "stream": "^0.0.3", - "tailwindcss": "^3.4.1", - "tailwindcss-animations": "^2.0.0", - "tailwindcss-interaction-variants": "^5.0.0", - "tiny-parse-argv": "^2.4.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "@types/wicg-file-system-access": "^2023.10.6", + "astro": "^5.7.4", + "astro-purgecss": "^5.2.2", + "astro-scope": "^3.0.1", + "netlify": "^22.1.0", + "purgecss": "^7.0.2", + "sass": "^1.87.0", + "vite-plugin-wasm": "^3.4.1", + "vite-tsconfig-paths": "^5.1.4" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.17.14", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.17.14.tgz", + "integrity": "sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==", + "license": "Apache-2.0" + }, + "node_modules/@astrojs/compiler": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.12.2.tgz", + "integrity": "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz", + "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz", + "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/internal-helpers": "0.6.1", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.2.1", + "smol-toml": "^1.3.1", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1", + "vfile": "^6.0.3" + } + }, + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", "dev": true, + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, "engines": { - "node": ">=0.10.0" + "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, - "node_modules/@avh4/elm-format-darwin-arm64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-arm64/-/elm-format-darwin-arm64-0.8.7-2.tgz", - "integrity": "sha512-F5JD44mJ3KX960J5GkXMfh1/dtkXuPcQpX2EToHQKjLTZUfnhZ++ytQQt0gAvrJ0bzoOvhNzjNjUHDA1ruTVbg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@avh4/elm-format-darwin-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-x64/-/elm-format-darwin-x64-0.8.7-2.tgz", - "integrity": "sha512-4pfF1cl0KyTion+7Mg4XKM3yi4Yc7vP76Kt/DotLVGJOSag4ISGic1og2mt8RZZ7XArybBmHNyYkiUbe/cEiCw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@avh4/elm-format-linux-arm64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-arm64/-/elm-format-linux-arm64-0.8.7-2.tgz", - "integrity": "sha512-WkVmuce2zU6s9dupHhqPc886Vaqpea8dZlxv2fpZ4wSzPUbiiKHoHZzoVndMIMTUL0TZukP3Ps0n/lWO5R5+FA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@avh4/elm-format-linux-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-x64/-/elm-format-linux-x64-0.8.7-2.tgz", - "integrity": "sha512-kmncfJrTBjVT94JtQvMf4M5Pn2Yl0sZt3wo7AzgFiDnB/CiZ+KjJyXuWM64NeGiv4MQqzPq65tsFXUH1CIJeiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "node_modules/@automerge/automerge": { + "version": "3.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@automerge/automerge/-/automerge-3.0.0-preview.13.tgz", + "integrity": "sha512-1r7ggaTqsQ4PHGv45QjVOxPOvJIKjSrHY+HTiFxCU04Qlx3kvXxDLVyBbZeN1jg2I+Y8tpuG0eVtC4QxL9wGIg==", + "license": "MIT", + "dependencies": { + "uuid": "^9.0.0" + } }, - "node_modules/@avh4/elm-format-win32-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-win32-x64/-/elm-format-win32-x64-0.8.7-2.tgz", - "integrity": "sha512-sBdMBGq/8mD8Y5C+fIr5vlb3N50yB7S1MfgeAq2QEbvkr/sKrCZI540i43lZDH9gWsfA1w2W8wCe0penFYzsGw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz", - "integrity": "sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.5.0", - "@csstools/css-tokenizer": "^2.2.3" + "node": ">=6.9.0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", - "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==", + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.3" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", - "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=6.9.0" } }, - "node_modules/@elm_binaries/darwin_arm64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/darwin_arm64/-/darwin_arm64-0.19.1-0.tgz", - "integrity": "sha512-mjbsH7BNHEAmoE2SCJFcfk5fIHwFIpxtSgnEAqMsVLpBUFoEtAeX+LQ+N0vSFJB3WAh73+QYx/xSluxxLcL6dA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@elm_binaries/darwin_x64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/darwin_x64/-/darwin_x64-0.19.1-0.tgz", - "integrity": "sha512-QGUtrZTPBzaxgi9al6nr+9313wrnUVHuijzUK39UsPS+pa+n6CmWyV/69sHZeX9qy6UfeugE0PzF3qcUiy2GDQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "node_modules/@bradenmacdonald/s3-lite-client": { + "name": "@jsr/bradenmacdonald__s3-lite-client", + "version": "0.9.2", + "resolved": "https://npm.jsr.io/~/11/@jsr/bradenmacdonald__s3-lite-client/0.9.2.tgz", + "integrity": "sha512-PwwaCkPS+nAuPJgy8WOTDrh1BSLZ0K2Ho/4Ddmtp8NImN48j0leknNREiSEwqhFiSmfQJIUS3qk9mK7xj8Wq3w==" }, - "node_modules/@elm_binaries/linux_x64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/linux_x64/-/linux_x64-0.19.1-0.tgz", - "integrity": "sha512-T1ZrWVhg2kKAsi8caOd3vp/1A3e21VuCpSG63x8rDie50fHbCytTway9B8WHEdnBFv4mYWiA68dzGxYCiFmU2w==", - "cpu": [ - "x64" - ], + "node_modules/@capsizecss/unpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", + "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "blob-to-buffer": "^1.2.8", + "cross-fetch": "^3.0.4", + "fontkit": "^2.0.2" + } }, - "node_modules/@elm_binaries/win32_x64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/win32_x64/-/win32_x64-0.19.1-0.tgz", - "integrity": "sha512-yDleiXqSE9EcqKtd9SkC/4RIW8I71YsXzMPL79ub2bBPHjWTcoyyeBbYjoOB9SxSlArJ74HaoBApzT6hY7Zobg==", - "cpu": [ - "x64" - ], + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "tslib": "^2.4.0" + } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" } }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.10.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.22" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@emnapi/runtime": "^1.2.0" }, "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -786,26 +1096,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -818,845 +1114,1242 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, + "license": "MIT" + }, + "node_modules/@js-temporal/polyfill": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.5.1.tgz", + "integrity": "sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==", + "license": "ISC", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "jsbi": "^4.3.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } + "node_modules/@okikio/sharedworker": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@okikio/sharedworker/-/sharedworker-1.1.0.tgz", + "integrity": "sha512-Xj9TUWll9mhARsKu5DtlQCjRekfJfQ2E291ow6gmXIz+WuF6uJMH8ZmGhdRTx/ndOippHnm1j/vxXNjmR6JuXw==", + "license": "MIT" }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "node_modules/@okikio/transferables": { + "name": "@jsr/okikio__transferables", + "version": "1.0.2", + "resolved": "https://npm.jsr.io/~/11/@jsr/okikio__transferables/1.0.2.tgz", + "integrity": "sha512-xz7RmslHsTt/Cy7GPnDurV1aKuUuVaR3FOIcKtLMuY8e+yEMVnwkPqaFWvsO/WbfeUQQnygo5C7g1/oLURrPsA==" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "node_modules/@orama/orama": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.9.tgz", + "integrity": "sha512-UXQYvN0DYl5EMOXX3O0Rwke+0R0Pd7PW/hOVwgpPd6KKJPb3RP74m3PEbEFjdTzZVLUW81o7herYXD2h4PVcGQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20.0.0" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@orama/plugin-qps": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@orama/plugin-qps/-/plugin-qps-3.1.9.tgz", + "integrity": "sha512-QqB+fR//Mg6FRWutUxPtQi7IM1fND28Rm+9Cpc90pMZBLatVdqw2prbNJhVfoObu0IpemclHyf9xY0ObyTw7dw==", + "license": "Apache-2.0", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@orama/orama": "3.1.9" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", "dev": true, - "engines": { - "node": ">= 8" - } + "license": "MIT" }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=14" - } - }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/api": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-beta.0.tgz", - "integrity": "sha512-WLoh/Vk8cgY7XrJV7Vpb6PssReBZWQCATfYBb1aCRDk+sp0NyPwumx6fZ2ECAKzAcs3OeanluwZcajruIW4CPQ==", + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 18", - "npm": ">= 6.6.0", - "yarn": ">= 1.19.1" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/tauri" + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz", - "integrity": "sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw==", + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "tauri": "tauri.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/tauri" - }, - "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-beta.1", - "@tauri-apps/cli-darwin-x64": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-beta.1", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-beta.1", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-beta.1", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-beta.1", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-beta.1", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-beta.1" - } - }, - "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz", - "integrity": "sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw==", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "darwin" + "freebsd" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz", - "integrity": "sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg==", + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", "cpu": [ - "x64" + "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz", - "integrity": "sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA==", + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz", - "integrity": "sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz", - "integrity": "sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz", - "integrity": "sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz", - "integrity": "sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ==", + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">= 10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tauri-apps/plugin-dialog": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.0.tgz", - "integrity": "sha512-cNxiBwGB6Xgnwy5GyAabwPyvm1iaC7MmrgzcUwB1JaydLjp/Yu3Z0TmkmmEClFrrvIQA+sMcq0C8wwv6i4aedw==", - "dev": true, - "dependencies": { - "@tauri-apps/api": "2.0.0-beta.0" - } + "node_modules/@phosphor-icons/web": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@phosphor-icons/web/-/web-2.1.2.tgz", + "integrity": "sha512-rPAR9o/bEcp4Cw4DEeZHXf+nlGCMNGkNDRizYHM47NLxz9vvEHp/Tt6FMK1NcWadzw/pFDPnRBGi/ofRya958A==", + "license": "MIT" }, - "node_modules/@tauri-apps/plugin-fs": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-beta.0.tgz", - "integrity": "sha512-oFAA8T5wyg5dmsF/WmjjtUMEnJtzu+p2ElsK2FdwLVSB2AdAdud5izZhd1o63HFjR6waiIYebSI+llzJG7b5MQ==", - "dev": true, - "dependencies": { - "@tauri-apps/api": "2.0.0-beta.0" - } + "node_modules/@picocss/pico": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@picocss/pico/-/pico-2.1.1.tgz", + "integrity": "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg==", + "license": "MIT" }, - "node_modules/@tauri-apps/plugin-shell": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.0.tgz", - "integrity": "sha512-AADGPuGP+YM5Ar48XfA8o9k9jtlSBpEVcsbOEwWdifi0oAiVOBXgiy9C1Icsub/tlD3YjK7oT8vDcOXLGYBhUg==", + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", "dev": true, + "license": "MIT", "dependencies": { - "@tauri-apps/api": "2.0.0-beta.0" - } - }, - "node_modules/@tokenizer/http": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@tokenizer/http/-/http-0.9.1.tgz", - "integrity": "sha512-jwHLkafS9ZVEt8dFR4s4GEa5d/iKiowtn7uE19hbxIYh7IK1tAkU4eWRXB5GJ0PtPRf2BEDzAqKMhAzDpDlUmw==", - "dependencies": { - "@tokenizer/range": "^0.10.0", - "debug": "^4.3.7", - "strtok3": "^9.0.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/range": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.10.0.tgz", - "integrity": "sha512-noYSSTeDdpxLn1WYVB7TZhcq80pA+5b0HdM1Dtvkkk3nlHw4h2nFoaAdrvdwtbjAAT76GIL87/uK5mKE3T+oYg==", - "dependencies": { - "debug": "^4.3.6", - "strtok3": "^9.0.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=16" + "node": ">=14.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/elm": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@types/elm/-/elm-0.19.3.tgz", - "integrity": "sha512-1DnHZiIHvDyjL6MHrePqbD3ooLLix13k6ow8gEydFOAXImkcvbzQX0Ri+WJOM7RvgPfmyUe6uQ2Acupb1oL+GA==", - "dev": true - }, - "node_modules/@types/file-saver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", - "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", - "dev": true - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "license": "MIT" }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", + "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lunr": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.7.tgz", - "integrity": "sha512-Tb/kUm38e8gmjahQzdCKhbdsvQ9/ppzHFfsJ0dMs3ckqQsRj+P5IkSAwFTBrBxdyr3E/LoMUUrZngjDYAjiE3A==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.16.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", - "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", - "dev": true + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", + "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/node": "*" - } + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", + "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@types/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", - "dev": true + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", + "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@types/tv4": { - "version": "1.2.31", - "resolved": "https://registry.npmjs.org/@types/tv4/-/tv4-1.2.31.tgz", - "integrity": "sha512-P97XU07fcpauSw3/fE2Q7eF6bHl4oHhwkikjnM7zlQLENrdC2rZuHSdNlMBhnW82NyBEsVJHII1Jk3d/MtQsQQ==" + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", + "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", + "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", "optional": true, - "dependencies": { - "@types/node": "*" - } + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", + "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", + "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", + "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", + "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", + "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", + "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", + "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", + "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", + "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", + "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", + "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", + "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", + "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", + "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sentry/browser": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.9.1.tgz", + "integrity": "sha512-7AOabwp9yAH9h6Xe6TfDwlLxHbUSWs+SPWHI7bPlht2yDSAqkXYGSzRr5X0XQJX9oBQdx2cEPMqHyJrbNaP/og==", + "license": "BSD-3-Clause", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@sentry/core": "5.8.0", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.8.0", + "tslib": "^1.9.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/core": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.8.0.tgz", + "integrity": "sha512-aAh2KLidIXJVGrxmHSVq2eVKbu7tZiYn5ylW6yzJXFetS5z4MA+JYaSBaG2inVYDEEqqMIkb17TyWxxziUDieg==", + "license": "BSD-3-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" + "@sentry/hub": "5.8.0", + "@sentry/minimal": "5.8.0", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.8.0", + "tslib": "^1.9.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.8.0.tgz", + "integrity": "sha512-VdApn1ZCNwH1wwQwoO6pu53PM/qgHG+DQege0hbByluImpLBhAj9w50nXnF/8KzV4UoMIVbzCb6jXzMRmqqp9A==", + "license": "BSD-3-Clause", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@sentry/types": "5.7.1", + "@sentry/utils": "5.8.0", + "tslib": "^1.9.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.8.0.tgz", + "integrity": "sha512-MIlFOgd+JvAUrBBmq7vr9ovRH1HvckhnwzHdoUPpKRBN+rQgTyZy1o6+kA2fASCbrRqFCP+Zk7EHMACKg8DpIw==", + "license": "BSD-3-Clause", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "@sentry/hub": "5.8.0", + "@sentry/types": "5.7.1", + "tslib": "^1.9.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz", + "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==", + "license": "BSD-3-Clause", "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, + "node_modules/@sentry/utils": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.8.0.tgz", + "integrity": "sha512-KDxUvBSYi0/dHMdunbxAxD3389pcQioLtcO6CI6zt/nJXeVFolix66cRraeQvqupdLhvOk/el649W4fCPayTHw==", + "license": "BSD-3-Clause", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@sentry/types": "5.7.1", + "tslib": "^1.9.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=6" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@shikijs/core": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.7.0.tgz", + "integrity": "sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/@shikijs/engine-javascript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.7.0.tgz", + "integrity": "sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.3" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.7.0.tgz", + "integrity": "sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/@shikijs/langs": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.7.0.tgz", + "integrity": "sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@shikijs/types": "3.7.0" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@shikijs/themes": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.7.0.tgz", + "integrity": "sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.7.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.7.0.tgz", + "integrity": "sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } }, - "node_modules/@zeit/schemas": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", - "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@std/media-types": { + "name": "@jsr/std__media-types", + "version": "1.1.0", + "resolved": "https://npm.jsr.io/~/11/@jsr/std__media-types/1.1.0.tgz", + "integrity": "sha512-dHvaxHL7ENWnltgL653uo3KnKFse3ZbopZop2gqsT7yrscx7irZEClu5Cba7gMPPRk4Lg1FbriNcaBViM2RSBw==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "event-target-shim": "^5.0.0" + "tslib": "^2.8.0" + } + }, + "node_modules/@tokenizer/http": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@tokenizer/http/-/http-0.9.2.tgz", + "integrity": "sha512-rzJwHcqDjO3FdBPr+FK2R6dYE6Qbg6QZP7S47rhCEtG+/YqEFLqZ+gFCLcL8y5D39aYQB9vDssiwbsJlRLePPg==", + "license": "MIT", + "dependencies": { + "@tokenizer/range": "^0.12.0", + "debug": "^4.3.7", + "strtok3": "^10.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/http/node_modules/@tokenizer/range": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.12.0.tgz", + "integrity": "sha512-xvJ1OflWjopkC5EgLge+9HrwsWStgVewQkmusoF2BxgCuGdm1KuhZAMVMNzC7h1WNei9JA6xKQlkbPNJtjZ6aw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.7", + "strtok3": "^9.1.1" }, "engines": { - "node": ">=6.5" + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@tokenizer/http/node_modules/@tokenizer/range/node_modules/strtok3": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", + "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.3.1" }, "engines": { - "node": ">= 0.6" + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/@tokenizer/range": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.13.0.tgz", + "integrity": "sha512-ibLGQRU8an1g/y952+OxeZDGIj+W1HW8AQPtk26VIFWzy3tvQImmGBwYbpHJXMMAz1nhCPAAepCRptGKB8YrKg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "strtok3": "^10.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "license": "MIT", + "dependencies": { + "@types/ms": "*" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fontkit": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", + "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", + "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "license": "MIT" + }, + "node_modules/@types/wicg-file-system-access": { + "version": "2023.10.6", + "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2023.10.6.tgz", + "integrity": "sha512-YO/183gNRzZFSdKu+ikkD7ambAj4PhgjFAF2A/Mw/7wroSF6ne8r804RkpZzqrJ/F6DO2/IYlQF/ULOZ/bhKyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@web-applets/sdk": { + "version": "0.2.6", + "resolved": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", + "integrity": "sha512-cIJ5viAtAKbbeB0izJ9VTXVDr9xsxAiGWMlhDZd1F9iHdGMk7j0cO8Q03wKxidVx5d/1kijHP07CDA7fygccEA==", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/98.css": { + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/98.css/-/98.css-0.1.21.tgz", + "integrity": "sha512-ddk5qtUWyapM0Bzd5jwGExoE5fdSEGrP+F5VbYjyZLf2c9UVmn6w2NPTvCsoD4BWdGsjdLjlkQGhWwWTJcYQJQ==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ani-cursor": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.4.tgz", + "integrity": "sha512-2MTPTcPhVw+SkIV7R0MsYioVi58bYH+Jjz9k3jQraX2mOJjUiZRSa9QK37eD6b7F/VBq+y3q1mK12i+uG+f5HQ==", + "license": "MIT", + "dependencies": { + "byte-data": "18.1.1", + "riff-file": "^1.0.3" } }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1665,120 +2358,200 @@ "node": ">= 8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/astro": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.10.1.tgz", + "integrity": "sha512-DJVmt+51jU1xmgmAHCDwuUgcG/5aVFSU+tcX694acAZqPVt8EMUAmUZcJDX36Z7/EztnPph9HR3pm72jS2EgHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.12.2", + "@astrojs/internal-helpers": "0.6.1", + "@astrojs/markdown-remark": "6.3.2", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^2.4.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.1", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.2.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.0.2", + "cssesc": "^3.0.0", + "debug": "^4.4.0", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.1.1", + "diff": "^5.2.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.6.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.3.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.1.1", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.0", + "package-manager-detector": "^1.1.0", + "picomatch": "^4.0.2", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.1", + "shiki": "^3.2.1", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.12", + "tsconfck": "^3.1.5", + "ultrahtml": "^1.6.0", + "unifont": "~0.5.0", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.15.0", + "vfile": "^6.0.3", + "vite": "^6.3.4", + "vitefu": "^1.0.6", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.1", + "zod": "^3.24.2", + "zod-to-json-schema": "^3.24.5", + "zod-to-ts": "^1.2.0" }, "bin": { - "autoprefixer": "bin/autoprefixer" + "astro": "astro.js" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" }, + "optionalDependencies": { + "sharp": "^0.33.3" + } + }, + "node_modules/astro-purgecss": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/astro-purgecss/-/astro-purgecss-5.2.3.tgz", + "integrity": "sha512-JrGQs37gQRn86X6rUJBg4ujqR++5J6uXFK0HF+W2Yaja+ZvGtIHFdw6JsgoAnzn+XtKB/hsiPzSIqO5FZfU0jQ==", + "dev": true, + "license": "MIT", "peerDependencies": { - "postcss": "^8.1.0" + "astro": "^5.0.0", + "purgecss": "^7.0.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/astro-scope": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/astro-scope/-/astro-scope-3.0.1.tgz", + "integrity": "sha512-/mdiiv0BELoDvhHPMCBokTymW11KOp+zTh4OMqmYGb8DxpOxE59O2VhtiWseoZdKJNQkNyyN/9Nsu3VZrPGWHA==", + "dev": true, + "license": "Public Domain", + "peerDependencies": { + "astro": "^4.2.2 || 5" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" - }, + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -1797,32 +2570,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } + ], + "license": "MIT" }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/blob-to-buffer": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", + "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", "dev": true, "funding": [ { @@ -1838,198 +2592,59 @@ "url": "https://feross.org/support" } ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, "node_modules/boxen": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", - "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", - "camelcase": "^7.0.0", - "chalk": "^5.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "base64-js": "^1.1.2" } }, "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -2044,57 +2659,57 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "ieee754": "^1.1.13" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" + "node_modules/butterchurn": { + "version": "3.0.0-beta.4", + "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-3.0.0-beta.4.tgz", + "integrity": "sha512-hiY1ktHYHQ8MT65nnZi7GjrgZZ6sl/ipT5rBqEfaYJd90L4SvOtB6lVxtKadtzAyJo2TQJc4gJfEca4cpZo0DA==", + "license": "MIT", + "dependencies": { + "@assemblyscript/loader": "^0.17.11", + "@babel/runtime": "^7.11.2", + "ecma-proposal-math-extensions": "0.0.2", + "eel-wasm": "^0.0.15" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" + "node_modules/butterchurn-presets": { + "version": "3.0.0-beta.4", + "resolved": "https://registry.npmjs.org/butterchurn-presets/-/butterchurn-presets-3.0.0-beta.4.tgz", + "integrity": "sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" } }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, + "node_modules/byte-data": { + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/byte-data/-/byte-data-18.1.1.tgz", + "integrity": "sha512-Kv/B0r7adgnCcrs/y703sac2XFLdHW5kPfis1j8+Ij/hmEcWhBKf+1pNTv+vsNqXb207Uiyri8bpnogNxR/4Lg==", + "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "endianness": "^8.0.2", + "ieee754-buffer": "^2.0.0", + "utf8-buffer": "^1.0.0" }, "engines": { "node": ">=8" } }, "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -2103,216 +2718,209 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-css": { + "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "engines": { - "node": ">= 6" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/chainsaw": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", + "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", + "license": "MIT/X11", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "traverse": ">=0.3.0 <0.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "*" } }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "dependencies": { - "chalk": "^4.1.2" - }, + "node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cli-spinners": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.8.0.tgz", - "integrity": "sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==", + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, - "engines": { - "node": ">=6" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/clipboardy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" + "readdirp": "^4.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, + "node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "mimic-response": "^1.0.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12.5.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2323,113 +2931,112 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, - "node_modules/component-emitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz", - "integrity": "sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==", + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "license": "MIT", + "optional": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } + "node_modules/comlink": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz", + "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==", + "license": "Apache-2.0" }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" } }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true, + "license": "ISC" + }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2439,11 +3046,36 @@ "node": ">= 8" } }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -2451,19 +3083,17 @@ "node": ">=4" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2476,88 +3106,51 @@ } } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" + "character-entities": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, + "node_modules/decode-uri-component": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", + "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14.16" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -2570,1966 +3163,2210 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, + "license": "MIT" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, + "license": "MIT" }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.806", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.806.tgz", - "integrity": "sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==", - "dev": true - }, - "node_modules/elm": { - "version": "0.19.1-6", - "resolved": "https://registry.npmjs.org/elm/-/elm-0.19.1-6.tgz", - "integrity": "sha512-mKYyierHICPdMx/vhiIacdPmTPnh889gjHOZ75ZAoCxo3lZmSWbGP8HMw78wyctJH0HwvTmeKhlYSWboQNYPeQ==", + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", "dev": true, - "hasInstallScript": true, - "bin": { - "elm": "bin/elm" + "license": "MIT", + "dependencies": { + "base-64": "^1.0.0" }, "engines": { - "node": ">=7.0.0" - }, - "optionalDependencies": { - "@elm_binaries/darwin_arm64": "0.19.1-0", - "@elm_binaries/darwin_x64": "0.19.1-0", - "@elm_binaries/linux_x64": "0.19.1-0", - "@elm_binaries/win32_x64": "0.19.1-0" + "node": ">=18" } }, - "node_modules/elm-format": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.7.tgz", - "integrity": "sha512-sVzFXfWnb+6rzXK+q3e3Ccgr6/uS5mFbFk1VSmigC+x2XZ28QycAa7lS8owl009ALPhRQk+pZ95Eq5ANjpEZsQ==", + "node_modules/devalue": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", "dev": true, - "hasInstallScript": true, - "bin": { - "elm-format": "bin/elm-format" - }, - "optionalDependencies": { - "@avh4/elm-format-darwin-arm64": "0.8.7-2", - "@avh4/elm-format-darwin-x64": "0.8.7-2", - "@avh4/elm-format-linux-arm64": "0.8.7-2", - "@avh4/elm-format-linux-x64": "0.8.7-2", - "@avh4/elm-format-win32-x64": "0.8.7-2" - } + "license": "MIT" }, - "node_modules/elm-review": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.3.tgz", - "integrity": "sha512-9gBqLc5Xm3v9Ncpf8y2haEaBZZyMX25vmwQkrNqSIaNYQ2vdGOIx1eyqRtt1xwX5O8pZdqU8IWC/ENyTrOTKbw==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "chokidar": "^3.5.2", - "cross-spawn": "^7.0.3", - "elm-tooling": "^1.14.1", - "fastest-levenshtein": "^1.0.16", - "find-up": "^4.1.0", - "folder-hash": "^3.3.0", - "fs-extra": "^9.0.0", - "glob": "^7.1.4", - "got": "^11.8.5", - "graceful-fs": "^4.2.11", - "minimist": "^1.2.6", - "ora": "^5.4.0", - "path-key": "^3.1.1", - "prompts": "^2.2.1", - "rimraf": "^5.0.0", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.1.1", - "which": "^2.0.2", - "wrap-ansi": "^6.2.0" - }, - "bin": { - "elm-review": "bin/elm-review" - }, - "engines": { - "node": ">=10.0.0" + "dequal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/jfmengels" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/elm-review/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } + "license": "MIT" }, - "node_modules/elm-review/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.3.1" } }, - "node_modules/elm-review/node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true, - "dependencies": { - "glob": "^10.2.5" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, + "license": "MIT" + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, - "node_modules/elm-review/node_modules/rimraf/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/elm-taskport": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/elm-taskport/-/elm-taskport-2.0.1.tgz", - "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" - }, - "node_modules/elm-tooling": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.0.tgz", - "integrity": "sha512-quRE5LGJyrkPBoJ3MvFQ5RGgf80J0L0d3NkduStvXh4TmZuMXNC3Z/l2ZRoq2UTUaNWeYfO1Zx5wns1AvsTrnw==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, - "bin": { - "elm-tooling": "index.js" - } + "license": "MIT" + }, + "node_modules/ecma-proposal-math-extensions": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz", + "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==", + "license": "MIT" + }, + "node_modules/eel-wasm": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/eel-wasm/-/eel-wasm-0.0.15.tgz", + "integrity": "sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA==", + "license": "MIT" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" }, - "node_modules/encoding-japanese": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz", - "integrity": "sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==", + "node_modules/endianness": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", + "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==", + "license": "MIT", "engines": { - "node": ">=8.10.0" + "node": ">=8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "dependencies": { - "once": "^1.4.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { "node": ">= 0.4" } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/esbuild-plugin-wasm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", - "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", - "dev": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "individual", - "url": "https://ko-fi.com/tschrock" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" } }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "@types/estree": "^1.0.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-average-color": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-9.5.0.tgz", + "integrity": "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg==", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 12" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/file-type": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", + "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@tokenizer/inflate": "^0.2.7", + "strtok3": "^10.2.2", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "is-glob": "^4.0.3" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, + "node_modules/filter-obj": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", + "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/fontace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.0.tgz", + "integrity": "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/fontkit": "^2.0.8", + "fontkit": "^2.0.4" } }, - "node_modules/esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "engines": { - "node": ">=6" + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } + "node_modules/fscreen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz", + "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==", + "license": "MIT" }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=0.8.x" + "node": ">= 0.4" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dev": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/glsl-optimizer-js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/glsl-optimizer-js/-/glsl-optimizer-js-0.0.2.tgz", + "integrity": "sha512-SMkVILyc1LeBEBgiHOe+4Bh8MEqxLNyAns0NfgmxJTxZZdj7oCoZt+n846rbdB8OLGsg16f5C9nmhi9XEuM8SQ==", + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/h3": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", + "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "cookie-es": "^1.2.2", + "crossws": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { - "node": ">= 10.17.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, + "node_modules/hashish": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", + "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", + "license": "MIT/X11", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "traverse": ">=0.2.4" }, "engines": { - "node": ">=8.6.0" + "node": "*" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, + "function-bind": "^1.1.2" + }, "engines": { - "node": ">= 4.9.1" + "node": ">= 0.4" } }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "dev": true, + "license": "MIT", "dependencies": { - "pend": "~1.2.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "@types/hast": "^3.0.0" }, - "engines": { - "node": "^12.20 || >= 14.13" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "@types/hast": "^3.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "node_modules/file-type": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz", - "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==", - "dependencies": { - "get-stream": "^9.0.1", - "strtok3": "^9.0.1", - "token-types": "^6.0.0", - "uint8array-extras": "^1.3.0" - }, - "engines": { - "node": ">=18" + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/file-type/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "dev": true, + "license": "MIT", "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, - "engines": { - "node": ">=18" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/file-type/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "engines": { - "node": ">=18" + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "@types/hast": "^3.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/folder-hash": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-3.3.3.tgz", - "integrity": "sha512-SDgHBgV+RCjrYs8aUwCb9rTgbTVuSdzvFmLaChsLre1yf+D64khCW++VYciaByZ8Rm0uKF8R/XEpXuTRSGUM1A==", + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "graceful-fs": "~4.2.0", - "minimatch": "~3.0.4" - }, - "bin": { - "folder-hash": "bin/folder-hash" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/folder-hash/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/iconoir": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.11.0.tgz", + "integrity": "sha512-F9T/E08aJBaQ+VOBjn+ChWKn3hFwsaK5VZ024OFMxdDaxKjLGDpU/OsU7MO9wXM+mDs4ZImypdXIn0fFZAXKmA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/iconoir" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "license": "Apache-2.0" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], + "license": "BSD-3-Clause" + }, + "node_modules/ieee754-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ieee754-buffer/-/ieee754-buffer-2.0.0.tgz", + "integrity": "sha512-AXUAT0nMEi7h1Is8HXGXof3eejl/GabZFKSj8Ym6kVRUSwrAb52EkAXywiCQYSHGQMRn7lvfY7vhPMjVc+Kybg==", + "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=8" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, - "engines": { - "node": ">=14" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" + "loose-envify": "^1.0.0" } }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", "dev": true, - "engines": { - "node": "*" - }, + "license": "MIT", "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "url": "https://github.com/sponsors/brc-dd" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "license": "MIT", + "optional": true + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "MIT", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, + "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "is-docker": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": "*" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">= 6" + "node": ">=0.12.0" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "ISC" }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=10.19.0" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/gren-compiler-library": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gren-compiler-library/-/gren-compiler-library-0.3.0.tgz", - "integrity": "sha512-CvcdoHYJuqwc4BUKvQPPhtegTUmW5I6rhQlKxxmu+qRbDYFeB/cypM3Xha3aqJr9l14JdmL5fMichENRqg3CBg==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.2", - "xdg-basedir": "^5.1.0" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/gren-lang": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gren-lang/-/gren-lang-0.3.0.tgz", - "integrity": "sha512-Gl/0jckyK97BH/lUPj68vP4m05d1QTrLlhZ2ELQgKfDJu8PVKeG+LtRRkdpIzcncCfgR/htWdwt2UkwpPXzalA==", - "dev": true, + "node_modules/jsbi": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz", + "integrity": "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==", + "license": "Apache-2.0" + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { - "gren-compiler-library": "0.3.0" - }, - "bin": { - "gren": "index.js" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/jszip/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, + "license": "MIT", "engines": { - "node": ">= 0.4.0" + "node": ">=6" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "20 || >=22" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">= 0.4" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", "dev": true, - "engines": { - "node": ">= 4" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dev": true, + "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-binary-path": { + "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, + "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", "dev": true, - "engines": { - "node": ">=0.12.0" - } + "license": "CC0-1.0" }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/is-port-reachable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", - "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { + "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dev": true, - "bin": { - "jiti": "bin/jiti.js" + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/just-install": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/just-install/-/just-install-2.0.2.tgz", - "integrity": "sha512-zH6aon3V2P8ZbD+njaMB/orHsOyFMgONSpxKtbovNu7Bhb1rD9qhnMkT2Nj91++b9GgqHNbozhUdIMxecmWJaw==", + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, - "hasInstallScript": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "extract-zip": "^2.0.1", - "node-fetch": "^3.3.2" - }, - "bin": { - "just": "bin/just.js", - "just-install": "install.js" - }, - "engines": { - "node": ">=18.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/just-install/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "immediate": "~3.0.5" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/load-script2": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/load-script2/-/load-script2-2.0.6.tgz", - "integrity": "sha512-pyuw/AR+ycZkRKgkMyXOIf/o2OnRQPc9grjZ04wVOeoJ7SqX97WlcZahl+3/r5qi09L/5d0iCVZ0q4OqNT/v0Q==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - ] - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/localforage/node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dependencies": { - "immediate": "~3.0.5" - } + ], + "license": "MIT" }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" + "micromark-util-types": "^2.0.0" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "engines": { - "node": ">= 0.8" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mediainfo.js": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/mediainfo.js/-/mediainfo.js-0.3.3.tgz", - "integrity": "sha512-+k6cobEQ0Ies/XajglElyHZyguxzEfnztGrZ+bEcuJ4gK74MeN1T0aX1DIFAMRwmFsnJlTJVTiOHJHWZssEJjA==", + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "yargs": "^17.7.2" - }, - "bin": { - "mediainfo.js": "dist/esm/cli.js" - }, - "engines": { - "node": ">=18.0.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "dev": true, - "engines": { - "node": ">= 8" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" + "node": ">=8.6" }, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" + "node_modules/milkdrop-eel-parser": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/milkdrop-eel-parser/-/milkdrop-eel-parser-0.0.4.tgz", + "integrity": "sha512-4PsOdTMDB7GM3UFzqXQQXf8MBeoolOhsBLMlhug+IIMZ+yNkvqLbdqDbrueGZc8P8tLRJP8pbAxna1yjFr06HQ==", + "license": "MIT" + }, + "node_modules/milkdrop-preset-converter-aws": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/milkdrop-preset-converter-aws/-/milkdrop-preset-converter-aws-0.1.6.tgz", + "integrity": "sha512-nr89LRZYgdrDn17vGQCvUK/LM9d90mywElL7zlzXBTgkxWAs/Kamn1Yl9676ugt4L4BAGo6PTEipIqeYXFSM7g==", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "glsl-optimizer-js": "^0.0.2", + "milkdrop-eel-parser": "^0.0.4", + "milkdrop-preset-utils": "^0.1.0" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/milkdrop-preset-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/milkdrop-preset-utils/-/milkdrop-preset-utils-0.1.0.tgz", + "integrity": "sha512-yK5y03SN8INC+ssLLYGGsaAHgNxXEUK6PQVV44rg9OAA27F2aPM0tA5uGsDdASH9sgPaAaRVMV5NoEvEkh66Sw==", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "lodash": "^4.17.4" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node": "20 || >=22" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multiformats": { + "version": "13.3.7", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz", + "integrity": "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==", + "license": "Apache-2.0 OR MIT" }, "node_modules/music-metadata": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-10.6.0.tgz", - "integrity": "sha512-YRTM8KhXZHe1zBsBKA+1JwZBR7SYP/6S/9tm+FRne9dD6SdC6F+s3e5+OugwaChh/zxmAb/yw6SaLAhHZxvIiA==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.3.0.tgz", + "integrity": "sha512-Qmv8KY+o68MMcYW0zq+cqEvtVnw+9+GAeF0t9DPcSl4hTkh6v6hmaqRpZ5onYpTywPxdtE4hrkwHNqkMwwOv5A==", "funding": [ { "type": "github", @@ -4540,35 +5377,115 @@ "url": "https://buymeacoffee.com/borewit" } ], + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "content-type": "^1.0.5", - "debug": "^4.3.7", - "file-type": "^19.6.0", + "debug": "^4.4.1", + "file-type": "^21.0.0", "media-typer": "^1.1.0", - "strtok3": "^9.0.1", + "strtok3": "^10.3.1", "token-types": "^6.0.0", "uint8array-extras": "^1.4.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, + "node_modules/music-metadata-browser": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-0.6.6.tgz", + "integrity": "sha512-14KFz4HR6rM6RATcLtJoBDRbehU/dKdVzElCdeI8CjP7Un2HtSf0WiT7f7Lz+XNkcBMZUjthmC6Wy4+NNayCRw==", + "deprecated": "No longer support, superseded by music-metadata", + "license": "MIT", + "dependencies": { + "assert": "^1.4.1", + "buffer": "^5.2.1", + "debug": "^4.0.1", + "music-metadata": "^3.4.0", + "readable-stream": "^3.0.6", + "remove": "^0.1.5", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/music-metadata-browser/node_modules/file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/music-metadata-browser/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/music-metadata-browser/node_modules/music-metadata": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-3.8.0.tgz", + "integrity": "sha512-aIADbp3uCS+ANr4nnFEHzTzMy81OT7PR7WBMW73SJ28Y7P94nnEugmTOj1ICP2JmxBBDlo+MeYVgiPnxVN69tg==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "file-type": "^11.0.0", + "media-typer": "0.3.0", + "strtok3": "^2.3.0", + "token-types": "^1.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/music-metadata-browser/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/music-metadata-browser/node_modules/strtok3": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-2.3.0.tgz", + "integrity": "sha512-AA67/1atBh7X0fUTDevjW89by2ZkY9RZAnkwusx5Yc1COYf0ruUbpYOOIs03SnRA1CF9K3+BtRXKOEtKhAXVaQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "then-read-stream": "^1.5.0", + "token-types": "^1.0.1" + }, + "engines": { + "node": ">=0.1.98" + } + }, + "node_modules/music-metadata-browser/node_modules/token-types": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-1.3.2.tgz", + "integrity": "sha512-LemYprKRfZPUiwVEMIL8fIP/cvZBpMds1PklsyoQyLZdKk7SQlldNGzw4TTrg2MnWLGSkMM6gUa1EW0h1d72fg==", + "license": "MIT", "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "ieee754": "^1.1.13" + }, + "engines": { + "node": ">=0.1.98" } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -4576,6 +5493,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -4583,1694 +5501,1937 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 10" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "node_modules/netlify": { + "version": "22.1.6", + "resolved": "https://registry.npmjs.org/netlify/-/netlify-22.1.6.tgz", + "integrity": "sha512-Z2o+COQOlHgyf+9oGGsyKPzJ1k9tCar7uEJR2wNU5Uiy68nGaktzLHUsoCeW2MbHYoS56OXEnYSMmirOV7ZtXA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], + "hasInstallScript": true, + "hasShrinkwrap": true, + "license": "MIT", + "dependencies": { + "@fastify/static": "7.0.4", + "@netlify/api": "14.0.3", + "@netlify/blobs": "9.1.6", + "@netlify/build": "33.4.6", + "@netlify/build-info": "10.0.6", + "@netlify/config": "23.0.10", + "@netlify/edge-bundler": "14.0.6", + "@netlify/edge-functions": "2.15.1", + "@netlify/headers-parser": "9.0.1", + "@netlify/local-functions-proxy": "2.0.3", + "@netlify/redirect-parser": "15.0.2", + "@netlify/zip-it-and-ship-it": "12.1.4", + "@octokit/rest": "21.1.1", + "@opentelemetry/api": "1.8.0", + "@pnpm/tabtab": "0.5.4", + "ansi-escapes": "7.0.0", + "ansi-to-html": "0.7.2", + "ascii-table": "0.0.9", + "backoff": "2.5.0", + "boxen": "8.0.1", + "chalk": "5.4.1", + "chokidar": "3.6.0", + "ci-info": "4.2.0", + "clean-deep": "3.4.0", + "commander": "12.1.0", + "comment-json": "4.2.5", + "content-type": "1.0.5", + "cookie": "1.0.2", + "cron-parser": "4.9.0", + "debug": "4.4.0", + "decache": "4.6.2", + "dot-prop": "9.0.0", + "dotenv": "16.5.0", + "env-paths": "3.0.0", + "envinfo": "7.14.0", + "etag": "1.8.1", + "execa": "5.1.1", + "express": "4.21.2", + "express-logging": "1.1.1", + "extract-zip": "2.0.1", + "fastest-levenshtein": "1.0.16", + "fastify": "4.29.1", + "find-up": "7.0.0", + "folder-walker": "3.2.0", + "fuzzy": "0.1.3", + "get-port": "5.1.1", + "gh-release-fetch": "4.0.3", + "git-repo-info": "2.1.1", + "gitconfiglocal": "2.1.0", + "http-proxy": "1.18.1", + "http-proxy-middleware": "2.0.9", + "https-proxy-agent": "7.0.6", + "inquirer": "8.2.6", + "inquirer-autocomplete-prompt": "1.4.0", + "ipx": "2.1.0", + "is-docker": "3.0.0", + "is-stream": "4.0.1", + "is-wsl": "3.1.0", + "isexe": "3.1.1", + "jsonwebtoken": "9.0.2", + "jwt-decode": "4.0.0", + "lambda-local": "2.2.0", + "locate-path": "7.2.0", + "lodash": "4.17.21", + "log-update": "6.1.0", + "maxstache": "1.0.7", + "maxstache-stream": "1.0.4", + "multiparty": "4.2.3", + "nanospinner": "1.2.2", + "netlify-redirector": "0.5.0", + "node-fetch": "3.3.2", + "normalize-package-data": "6.0.2", + "open": "10.1.2", + "p-filter": "4.1.0", + "p-map": "7.0.3", + "p-wait-for": "5.0.2", + "parallel-transform": "1.2.0", + "parse-github-url": "1.0.3", + "parse-gitignore": "2.0.0", + "prettyjson": "1.2.5", + "raw-body": "3.0.0", + "read-package-up": "11.0.0", + "readdirp": "4.1.2", + "semver": "7.7.1", + "source-map-support": "0.5.21", + "terminal-link": "4.0.0", + "toml": "3.0.0", + "tomlify-j0.4": "3.0.0", + "ulid": "3.0.0", + "update-notifier": "7.3.1", + "uuid": "11.1.0", + "wait-port": "1.1.0", + "write-file-atomic": "5.0.1", + "ws": "8.18.2" + }, + "bin": { + "npxnetlify": "bin/run.js" + }, "engines": { - "node": ">=10.5.0" + "node": ">=20.12.2" } }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/netlify/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/netlify/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/netlify/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/netlify/node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/netlify/node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/netlify/node_modules/@bugsnag/browser": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-8.2.0.tgz", + "integrity": "sha512-C4BfE3eVsjOAqoXbdrPXfKbgp/hz2H7mKBU0p11Jf9uz+5gUCfZK+39JLrQKvRXwqoDcTlBSfz9Xz5kXLyHg2Q==", "dev": true, - "engines": { - "node": ">= 6" + "license": "MIT", + "dependencies": { + "@bugsnag/core": "^8.2.0" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/netlify/node_modules/@bugsnag/core": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-8.2.0.tgz", + "integrity": "sha512-dFSs80ZwJ508nlC6UTLTUMdHgTaHY5UKvMiuHqstCQrQrOjqFcIv+x4o+l2WrSyOpoYhHAxDlKfzKN8AjwslQw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "^0.0.2", + "stack-generator": "^2.0.3" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/netlify/node_modules/@bugsnag/cuid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.1.1.tgz", + "integrity": "sha512-d2z4b0rEo3chI07FNN1Xds8v25CNeekecU6FC/2Fs9MxY2EipkZTThVcV2YinMn8dvRUlViKOyC50evoUxg8tw==", + "dev": true + }, + "node_modules/netlify/node_modules/@bugsnag/js": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-8.2.0.tgz", + "integrity": "sha512-DTtQwV1Ly5VXSOnVtzW8gSwB+ld3qIc/h0yMS836DEYUfA3V9JPwJE3+2EbD8Ea2ogkDWZ+a0jl0SNSNGiOmfA==", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "MIT", + "dependencies": { + "@bugsnag/browser": "^8.2.0", + "@bugsnag/node": "^8.2.0" } }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "node_modules/netlify/node_modules/@bugsnag/node": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-8.2.0.tgz", + "integrity": "sha512-6XC/KgX61m6YFgsBQP/GaH1UzlJkJmpi3AwlZQLsXloRh3O9lM/0EIk6+2sZm+vlz+GwxCFavcuIDgVmH/qi7Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@bugsnag/core": "^8.2.0", + "byline": "^5.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "^0.0.2", + "pump": "^3.0.0", + "stack-generator": "^2.0.3" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/netlify/node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==", + "dev": true + }, + "node_modules/netlify/node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=0.1.90" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/netlify/node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "dependencies": { - "wrappy": "1" + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/netlify/node_modules/@dabh/diagnostics": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/netlify/node_modules/@dependents/detective-less": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", + "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=18" } }, - "node_modules/optionator/node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/netlify/node_modules/@envelop/instrumentation": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz", + "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==", "dev": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "@whatwg-node/promise-helpers": "^1.2.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.0.0" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "node_modules/netlify/node_modules/@envelop/instrumentation/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/netlify/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/netlify/node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/netlify/node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/netlify/node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/netlify/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/netlify/node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/netlify/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/netlify/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "node_modules/netlify/node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "node_modules/netlify/node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "14 || >=16.14" + "node": ">=18" } }, - "node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/netlify/node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/peek-readable": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.3.1.tgz", - "integrity": "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==", + "node_modules/netlify/node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=18" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/netlify/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=18" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/netlify/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "node_modules/netlify/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/postcss": { - "version": "8.4.34", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", - "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", + "node_modules/netlify/node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=18" } }, - "node_modules/postcss-custom-properties": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz", - "integrity": "sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==", + "node_modules/netlify/node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.7", - "@csstools/css-parser-algorithms": "^2.5.0", - "@csstools/css-tokenizer": "^2.2.3", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">=18" } }, - "node_modules/postcss-import": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.0.0.tgz", - "integrity": "sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q==", + "node_modules/netlify/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" + "node": ">=18" } }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "node_modules/netlify/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" + "node": ">=18" } }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "node_modules/netlify/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">=18" } }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "node_modules/netlify/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" + "node": ">=18" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", + "node_modules/netlify/node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/netlify/node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=18" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/netlify/node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.6.0" + "node": ">=18" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/netlify/node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/netlify/node_modules/@fastify/accept-negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", + "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=14" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" + "node_modules/netlify/node_modules/@fastify/ajv-compiler": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", + "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", + "dev": true, + "dependencies": { + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "fast-uri": "^2.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/fastify" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "opencollective", + "url": "https://opencollective.com/fastify" } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } + "node_modules/netlify/node_modules/@fastify/busboy": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", + "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "dev": true }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/netlify/node_modules/@fastify/error": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", + "dev": true + }, + "node_modules/netlify/node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "dev": true, "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "fast-json-stringify": "^5.7.0" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" + "node_modules/netlify/node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "node_modules/netlify/node_modules/@fastify/send": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.0.1.tgz", + "integrity": "sha512-8jdouu0o5d0FMq1+zCKeKXc1tmOQ5tTGYdQP3MpyF9+WWrZT1KCBdh6hvoEYxOm3oJG/akdE9BpehLiJgYRvGw==", "dev": true, "dependencies": { - "pify": "^2.3.0" + "@lukeed/ms": "^2.0.1", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "2.0.0", + "mime": "^3.0.0" } }, - "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, + "node_modules/netlify/node_modules/@fastify/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.8" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/netlify/node_modules/@fastify/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "node": ">= 0.8" } }, - "node_modules/registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", - "dependencies": { - "rc": "^1.0.1" + "node_modules/netlify/node_modules/@fastify/send/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/remotestoragejs": { - "version": "2.0.0-beta.6", - "resolved": "https://registry.npmjs.org/remotestoragejs/-/remotestoragejs-2.0.0-beta.6.tgz", - "integrity": "sha512-xGBmCPe99F4Gs/IEEzvGFjlmOkG48rRCSFz4+7xFNVs4WUJ3nzkm+fQbKelTB2HHErgOLSIyxc2dloqhI5srAQ==", + "node_modules/netlify/node_modules/@fastify/static": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", + "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", + "dev": true, "dependencies": { - "@types/node": "16.11.59", - "@types/tv4": "^1.2.29", - "esm": "^3.2.25", - "tv4": "^1.3.0", - "webfinger.js": "^2.7.1", - "xhr2": "^0.2.1" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "@fastify/accept-negotiator": "^1.0.0", + "@fastify/send": "^2.0.0", + "content-disposition": "^0.5.3", + "fastify-plugin": "^4.0.0", + "fastq": "^1.17.0", + "glob": "^10.3.4" } }, - "node_modules/remotestoragejs/node_modules/@types/node": { - "version": "16.11.59", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", - "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/netlify/node_modules/@humanwhocodes/momoa": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz", + "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=10.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } + "node_modules/netlify/node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/netlify/node_modules/@import-maps/resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-2.0.0.tgz", + "integrity": "sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==", + "dev": true }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/netlify/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "node_modules/netlify/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/netlify/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "node_modules/netlify/node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { - "lowercase-keys": "^2.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/netlify/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "minipass": "^7.0.4" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/netlify/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/netlify/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/netlify/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/netlify/node_modules/@lukeed/ms": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.1.tgz", + "integrity": "sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/netlify/node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" }, "bin": { - "semver": "bin/semver.js" + "node-pre-gyp": "bin/node-pre-gyp" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/serve": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.1.tgz", - "integrity": "sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA==", + "node_modules/netlify/node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, "dependencies": { - "@zeit/schemas": "2.29.0", - "ajv": "8.11.0", - "arg": "5.0.2", - "boxen": "7.0.0", - "chalk": "5.0.1", - "chalk-template": "0.4.0", - "clipboardy": "3.0.0", - "compression": "1.7.4", - "is-port-reachable": "4.0.0", - "serve-handler": "6.1.5", - "update-check": "1.5.4" - }, - "bin": { - "serve": "build/main.js" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 14" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "node_modules/netlify/node_modules/@netlify/api": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/@netlify/api/-/api-14.0.3.tgz", + "integrity": "sha512-iFYqSYBnn34Fx3eVOH7sG52f/xcyB9or2yjn486d3ZqLk6OJGFZstxjY4LfTv8chCT1HeSVybIvnCqsHsvrzJQ==", + "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "@netlify/open-api": "^2.37.0", + "lodash-es": "^4.17.21", + "micro-api-client": "^3.3.0", + "node-fetch": "^3.0.0", + "p-wait-for": "^5.0.0", + "qs": "^6.9.6" + }, "engines": { - "node": ">= 0.8" + "node": ">=18.14.0" } }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "node_modules/netlify/node_modules/@netlify/binary-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@netlify/binary-info/-/binary-info-1.0.0.tgz", + "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==", + "dev": true + }, + "node_modules/netlify/node_modules/@netlify/blobs": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-9.1.6.tgz", + "integrity": "sha512-RR3t5fv7CkGVJiylOTLf/YaHPyrcWmhHW3zX3EK/9UQsnTi8jPxP7B2nyjgRjAx5S4YTzJQP+FmbQlGKdogALQ==", + "dev": true, + "dependencies": { + "@netlify/dev-utils": "3.2.0", + "@netlify/runtime-utils": "2.1.0" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@netlify/build": { + "version": "33.4.6", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-33.4.6.tgz", + "integrity": "sha512-f0KlSKBfYqvisu2UkmqaTD6fFgjpwVNvf4PdOEhX7FIMv5kM2mlk20hWKTMF7ZXu6UzBNgbAbsoCukKt8qQwSw==", + "dev": true, + "dependencies": { + "@bugsnag/js": "^8.0.0", + "@netlify/blobs": "^10.0.0", + "@netlify/cache-utils": "^6.0.3", + "@netlify/config": "^23.0.10", + "@netlify/edge-bundler": "14.0.6", + "@netlify/functions-utils": "^6.0.10", + "@netlify/git-utils": "^6.0.2", + "@netlify/opentelemetry-utils": "^2.0.1", + "@netlify/plugins-list": "^6.80.0", + "@netlify/run-utils": "^6.0.2", + "@netlify/zip-it-and-ship-it": "12.1.4", + "@sindresorhus/slugify": "^2.0.0", + "ansi-escapes": "^7.0.0", + "chalk": "^5.0.0", + "clean-stack": "^5.0.0", + "execa": "^8.0.0", + "fdir": "^6.0.1", + "figures": "^6.0.0", + "filter-obj": "^6.0.0", + "got": "^13.0.0", + "hot-shots": "10.2.1", + "indent-string": "^5.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "keep-func-props": "^6.0.0", + "locate-path": "^7.0.0", + "log-process-errors": "^11.0.0", + "map-obj": "^5.0.0", + "memoize-one": "^6.0.0", + "minimatch": "^9.0.4", + "os-name": "^6.0.0", + "p-event": "^6.0.0", + "p-every": "^2.0.0", + "p-filter": "^4.0.0", + "p-locate": "^6.0.0", + "p-map": "^7.0.0", + "p-reduce": "^3.0.0", + "package-directory": "^8.0.0", + "path-exists": "^5.0.0", + "path-type": "^6.0.0", + "pretty-ms": "^9.0.0", + "ps-list": "^8.0.0", + "read-package-up": "^11.0.0", + "readdirp": "^4.0.0", + "resolve": "^2.0.0-next.5", + "rfdc": "^1.3.0", + "safe-json-stringify": "^1.2.0", + "semver": "^7.3.8", + "string-width": "^7.0.0", + "strip-ansi": "^7.0.0", + "supports-color": "^10.0.0", + "terminal-link": "^4.0.0", + "ts-node": "^10.9.1", + "typescript": "^5.0.0", + "uuid": "^11.0.0", + "yargs": "^17.6.0" + }, + "bin": { + "netlify-build": "bin.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=18.14.0" + }, + "peerDependencies": { + "@netlify/opentelemetry-sdk-setup": "^2.0.0", + "@opentelemetry/api": "~1.8.0" + }, + "peerDependenciesMeta": { + "@netlify/opentelemetry-sdk-setup": { + "optional": true + } } }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "node_modules/netlify/node_modules/@netlify/build-info": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-10.0.6.tgz", + "integrity": "sha512-wWMCf1IQMpYj5vp5kuZY7EvNdDbfCg77UvCKjSmHTTgWxHmb9UUOVNRH4J/YnP8HIa9i6YMfpp2ix+V34O239A==", + "dev": true, "dependencies": { - "mime-db": "~1.33.0" + "@bugsnag/js": "^8.0.0", + "@iarna/toml": "^2.2.5", + "dot-prop": "^9.0.0", + "find-up": "^7.0.0", + "minimatch": "^9.0.0", + "read-pkg": "^9.0.0", + "semver": "^7.3.8", + "yaml": "^2.8.0", + "yargs": "^17.6.0" + }, + "bin": { + "build-info": "bin.js" }, "engines": { - "node": ">= 0.6" + "node": ">=18.14.0" } }, - "node_modules/serve/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "node_modules/netlify/node_modules/@netlify/build-info/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "balanced-match": "^1.0.0" } }, - "node_modules/serve/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "node_modules/netlify/node_modules/@netlify/build-info/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/serve/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/@netlify/blobs": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-10.0.0.tgz", + "integrity": "sha512-+sECjk88bi+USJ89XmiwWJOrJ5m7qgajhmUYzb1kD25NLZN9AxfewlHlnm2T5iIB9wEZ0XqSr65ycqWxX4SE1A==", "dev": true, "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "@netlify/dev-utils": "3.2.0", + "@netlify/runtime-utils": "2.1.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.16.0 || >=16.0.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "node_modules/netlify/node_modules/@netlify/build/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/netlify/node_modules/@netlify/build/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/execa/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/got": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", + "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", "dev": true, + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=16.17.0" } }, - "node_modules/stream": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.3.tgz", - "integrity": "sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "dependencies": { - "component-emitter": "^2.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", + "node_modules/netlify/node_modules/@netlify/build/node_modules/p-event": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "p-timeout": "^6.1.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strtok3": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.0.1.tgz", - "integrity": "sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.3.1" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=16" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/supports-color": { + "node_modules/netlify/node_modules/@netlify/build/node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "node_modules/netlify/node_modules/@netlify/cache-utils": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-6.0.3.tgz", + "integrity": "sha512-NGkTvsVWs8gbd/wKOQnGjjxtaeTS+2UbqF/eZ5A/hFCXMNWf6xMQ7BcBM+pWLojHJWg/o8P1VgCZ1FDa8Zni4w==", "dev": true, "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" + "cpy": "^11.0.0", + "get-stream": "^9.0.0", + "globby": "^14.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "move-file": "^3.0.0", + "path-exists": "^5.0.0", + "readdirp": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.14.0" } }, - "node_modules/tailwindcss-animations": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tailwindcss-animations/-/tailwindcss-animations-2.0.0.tgz", - "integrity": "sha512-YLdhPiQeDtpnqWd0J70rvy08MDbsq+BBLrzMmPR1Pe6MJDFYDuk4CYGI14GVgj7xRBGkByzp/rAfBcUWD7zpng==", - "deprecated": "Use Tailwind 1.6's animation utilities", + "node_modules/netlify/node_modules/@netlify/cache-utils/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "dependencies": { - "lodash": "^4.17.15" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tailwindcss-interaction-variants": { + "node_modules/netlify/node_modules/@netlify/cache-utils/node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tailwindcss-interaction-variants/-/tailwindcss-interaction-variants-5.0.0.tgz", - "integrity": "sha512-Tmx9HjwuNA3G7cLUcebGkNchKkNVIZXBroxa0LBoq/KUb/xEKEM8qugUG7QczSNPhaZzpXmo3IzPkRhf4tDaOQ==", - "deprecated": "Use Tailwind's JIT engine", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "dependencies": { - "lodash": "^4.17.19", - "postcss-selector-parser": "^6.0.2" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" + "node_modules/netlify/node_modules/@netlify/config": { + "version": "23.0.10", + "resolved": "https://registry.npmjs.org/@netlify/config/-/config-23.0.10.tgz", + "integrity": "sha512-GTfudAUBfdNA0RwvUIrwoQrsG0GdQBpBnWfmVU/UHWYOnB3Yj+x3ETmOOSdPN8CXnqJqDd8Ey2h0iVqQ/mOcGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@iarna/toml": "^2.2.5", + "@netlify/api": "^14.0.3", + "@netlify/headers-parser": "^9.0.1", + "@netlify/redirect-parser": "^15.0.2", + "chalk": "^5.0.0", + "cron-parser": "^4.1.0", + "deepmerge": "^4.2.2", + "dot-prop": "^9.0.0", + "execa": "^8.0.0", + "fast-safe-stringify": "^2.0.7", + "figures": "^6.0.0", + "filter-obj": "^6.0.0", + "find-up": "^7.0.0", + "indent-string": "^5.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "map-obj": "^5.0.0", + "omit.js": "^2.0.2", + "p-locate": "^6.0.0", + "path-type": "^6.0.0", + "tomlify-j0.4": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "yargs": "^17.6.0" + }, + "bin": { + "netlify-config": "bin.js" }, "engines": { - "node": ">=10.13.0" + "node": ">=18.14.0" } }, - "node_modules/tailwindcss/node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.17" }, - "peerDependencies": { - "postcss": "^8.0.0" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, + "license": "Apache-2.0", "engines": { - "node": ">=0.8" + "node": ">=16.17.0" } }, - "node_modules/throttle-debounce": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", - "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.22" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/timer.js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", - "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" - }, - "node_modules/tiny-parse-argv": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tiny-parse-argv/-/tiny-parse-argv-2.4.0.tgz", - "integrity": "sha512-WTEsnmeHNr99hLQIDA+gnsS+fDsCDITlqgI+zEhx9M6ErPt0heoNZ1PGvql6wcf95sIx40J0MLYXaPveGwtpoA==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tocca": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", - "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" - }, - "node_modules/token-types": { + "node_modules/netlify/node_modules/@netlify/config/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, - "engines": { - "node": ">=16.13.0" + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", "engines": { - "node": ">= 0.8.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "p-limit": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "MIT", "engines": { - "node": ">=14.17" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/uint8arrays": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", - "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "node_modules/netlify/node_modules/@netlify/dev-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-3.2.0.tgz", + "integrity": "sha512-5QPVts2j7RHMNVPVB7E28TC564TarS2JDTfMzKGzCrAY35bvOcfJ60Hhp8DOVjI13+BJgN37srUJP4OBDIXCfg==", + "dev": true, "dependencies": { - "multiformats": "^12.0.1" - } - }, - "node_modules/uint8arrays/node_modules/multiformats": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.0.1.tgz", - "integrity": "sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==", + "@whatwg-node/server": "^0.10.0", + "ansis": "^4.1.0", + "chokidar": "^4.0.1", + "decache": "^4.6.2", + "dot-prop": "9.0.0", + "env-paths": "^3.0.0", + "find-up": "7.0.0", + "image-size": "^2.0.2", + "js-image-generator": "^1.0.4", + "lodash.debounce": "^4.0.8", + "parse-gitignore": "^2.0.0", + "uuid": "^11.1.0", + "write-file-atomic": "^5.0.1" + }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": "^18.14.0 || >=20" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/netlify/node_modules/@netlify/dev-utils/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "node_modules/netlify/node_modules/@netlify/edge-bundler": { + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-14.0.6.tgz", + "integrity": "sha512-wfIS26778TG34C3Ma4vhYVTviUuZMD1cWVW/G3m9qZ4MPqC3xII66mmJOdHSfBhwXNeu8tt/b3YoFO0b/nJO0Q==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" + "@import-maps/resolve": "^2.0.0", + "ajv": "^8.11.2", + "ajv-errors": "^3.0.0", + "better-ajv-errors": "^1.2.0", + "common-path-prefix": "^3.0.0", + "env-paths": "^3.0.0", + "esbuild": "0.25.5", + "execa": "^8.0.0", + "find-up": "^7.0.0", + "get-package-name": "^2.2.0", + "get-port": "^7.0.0", + "is-path-inside": "^4.0.0", + "node-stream-zip": "^1.15.0", + "p-retry": "^6.0.0", + "p-wait-for": "^5.0.0", + "parse-imports": "^2.2.1", + "path-key": "^4.0.0", + "semver": "^7.3.8", + "tmp-promise": "^3.0.3", + "urlpattern-polyfill": "8.0.2", + "uuid": "^11.0.0" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">=18.14.0" } }, - "node_modules/update-check": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", - "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "dev": true, + "peerDependencies": { + "ajv": "^8.0.1" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/get-port": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "dependencies": { - "defaults": "^1.0.3" + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=16.17.0" } }, - "node_modules/webfinger.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/webfinger.js/-/webfinger.js-2.7.1.tgz", - "integrity": "sha512-H4RokaE4RC39N3uiRTcjKMmy6yYg06lUPORQHvv8DjowZ6I5SalxUeoqHbtTN3EVBmYP/XHQ8Ow6BLEIpe2DtA==", - "dependencies": { - "xhr2": "0.2.1" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, "engines": { - "node": ">= 8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "path-key": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, "dependencies": { - "string-width": "^5.0.1" + "mimic-fn": "^4.0.0" }, "engines": { "node": ">=12" @@ -6279,31 +7440,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, "engines": { "node": ">=12" }, @@ -6311,4387 +7464,15167 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/netlify/node_modules/@netlify/edge-functions": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/@netlify/edge-functions/-/edge-functions-2.15.1.tgz", + "integrity": "sha512-iu9FYYlD6crNfX8GqS5vywfkfdWWpMqnqzXrGh67iB7b+KdTPpPXsRNSRxfvL/o3GO9HJc/zmTMwXhPXDn/2fA==", + "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "@netlify/dev-utils": "3.2.1", + "@netlify/edge-bundler": "^14.0.6", + "@netlify/edge-functions-bootstrap": "^2.13.0", + "@netlify/runtime-utils": "2.1.0", + "get-port": "^7.1.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/netlify/node_modules/@netlify/edge-functions-bootstrap": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.13.0.tgz", + "integrity": "sha512-8qvD/yBT3e3p5jsdFdm7VAIWXGLNnzw0n257gsmFPeKcbO/+sZMd05q/wVH2y36w/nWo+o9pRZYOJ9GqmLEgzw==", + "dev": true + }, + "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/@netlify/dev-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-3.2.1.tgz", + "integrity": "sha512-a96wZheD3duD20aEJXBIui73GewRIcKwsXyzyFyerrsDffQjaWFuWxU9fnVSiunl6UVrvpBjWMJRGkCv4zf2KQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@whatwg-node/server": "^0.10.0", + "ansis": "^4.1.0", + "chokidar": "^4.0.1", + "decache": "^4.6.2", + "dot-prop": "9.0.0", + "env-paths": "^3.0.0", + "find-up": "7.0.0", + "image-size": "^2.0.2", + "js-image-generator": "^1.0.4", + "lodash.debounce": "^4.0.8", + "parse-gitignore": "^2.0.0", + "semver": "^7.7.2", + "uuid": "^11.1.0", + "write-file-atomic": "^5.0.1" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || >=20" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/get-port": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/netlify/node_modules/@netlify/functions-utils": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-6.0.10.tgz", + "integrity": "sha512-PqXyvmVmrNQgVZpyuWykS4mX7Tm2Ry8Ys/nWlDR/cHv2E+MaRiyyneAN4qrCe25z6mSS+sTCf8ZVQtZf2y1xYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@netlify/zip-it-and-ship-it": "12.1.4", + "cpy": "^11.0.0", + "path-exists": "^5.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18.14.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "node_modules/netlify/node_modules/@netlify/functions-utils/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 14" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/netlify/node_modules/@netlify/git-utils": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-6.0.2.tgz", + "integrity": "sha512-ASp8T6ZAxL5OE0xvTTn5+tIBua5F8ruLH7oYtI/m2W/8rYb9V3qvNeenf9SnKlGj1xv6mPv8l7Tc93kmBLLofw==", + "dev": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "execa": "^8.0.0", + "map-obj": "^5.0.0", + "micromatch": "^4.0.2", + "moize": "^6.1.3", + "path-exists": "^5.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" + "node": ">=18.14.0" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true - }, - "@avh4/elm-format-darwin-arm64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-arm64/-/elm-format-darwin-arm64-0.8.7-2.tgz", - "integrity": "sha512-F5JD44mJ3KX960J5GkXMfh1/dtkXuPcQpX2EToHQKjLTZUfnhZ++ytQQt0gAvrJ0bzoOvhNzjNjUHDA1ruTVbg==", - "dev": true, - "optional": true }, - "@avh4/elm-format-darwin-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-darwin-x64/-/elm-format-darwin-x64-0.8.7-2.tgz", - "integrity": "sha512-4pfF1cl0KyTion+7Mg4XKM3yi4Yc7vP76Kt/DotLVGJOSag4ISGic1og2mt8RZZ7XArybBmHNyYkiUbe/cEiCw==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "optional": true + "engines": { + "node": ">=16.17.0" + } }, - "@avh4/elm-format-linux-arm64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-arm64/-/elm-format-linux-arm64-0.8.7-2.tgz", - "integrity": "sha512-WkVmuce2zU6s9dupHhqPc886Vaqpea8dZlxv2fpZ4wSzPUbiiKHoHZzoVndMIMTUL0TZukP3Ps0n/lWO5R5+FA==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "optional": true + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@avh4/elm-format-linux-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-linux-x64/-/elm-format-linux-x64-0.8.7-2.tgz", - "integrity": "sha512-kmncfJrTBjVT94JtQvMf4M5Pn2Yl0sZt3wo7AzgFiDnB/CiZ+KjJyXuWM64NeGiv4MQqzPq65tsFXUH1CIJeiQ==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "optional": true + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@avh4/elm-format-win32-x64": { - "version": "0.8.7-2", - "resolved": "https://registry.npmjs.org/@avh4/elm-format-win32-x64/-/elm-format-win32-x64-0.8.7-2.tgz", - "integrity": "sha512-sBdMBGq/8mD8Y5C+fIr5vlb3N50yB7S1MfgeAq2QEbvkr/sKrCZI540i43lZDH9gWsfA1w2W8wCe0penFYzsGw==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "optional": true + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@csstools/cascade-layer-name-parser": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz", - "integrity": "sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "requires": {} + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "@csstools/css-parser-algorithms": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", - "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "requires": {} - }, - "@csstools/css-tokenizer": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", - "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", - "dev": true + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "@elm_binaries/darwin_arm64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/darwin_arm64/-/darwin_arm64-0.19.1-0.tgz", - "integrity": "sha512-mjbsH7BNHEAmoE2SCJFcfk5fIHwFIpxtSgnEAqMsVLpBUFoEtAeX+LQ+N0vSFJB3WAh73+QYx/xSluxxLcL6dA==", + "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "optional": true + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@elm_binaries/darwin_x64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/darwin_x64/-/darwin_x64-0.19.1-0.tgz", - "integrity": "sha512-QGUtrZTPBzaxgi9al6nr+9313wrnUVHuijzUK39UsPS+pa+n6CmWyV/69sHZeX9qy6UfeugE0PzF3qcUiy2GDQ==", + "node_modules/netlify/node_modules/@netlify/headers-parser": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@netlify/headers-parser/-/headers-parser-9.0.1.tgz", + "integrity": "sha512-KHKNVNtzWUkUQhttHsLA217xIjUQxBOY5RCMRkR77G5pH1Sca9gqGhnMvk3KfRol/OZK2/1k83ZpYuvMswsK/w==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "@iarna/toml": "^2.2.5", + "escape-string-regexp": "^5.0.0", + "fast-safe-stringify": "^2.0.7", + "is-plain-obj": "^4.0.0", + "map-obj": "^5.0.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": ">=18.14.0" + } }, - "@elm_binaries/linux_x64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/linux_x64/-/linux_x64-0.19.1-0.tgz", - "integrity": "sha512-T1ZrWVhg2kKAsi8caOd3vp/1A3e21VuCpSG63x8rDie50fHbCytTway9B8WHEdnBFv4mYWiA68dzGxYCiFmU2w==", + "node_modules/netlify/node_modules/@netlify/headers-parser/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "optional": true + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@elm_binaries/win32_x64": { - "version": "0.19.1-0", - "resolved": "https://registry.npmjs.org/@elm_binaries/win32_x64/-/win32_x64-0.19.1-0.tgz", - "integrity": "sha512-yDleiXqSE9EcqKtd9SkC/4RIW8I71YsXzMPL79ub2bBPHjWTcoyyeBbYjoOB9SxSlArJ74HaoBApzT6hY7Zobg==", + "node_modules/netlify/node_modules/@netlify/headers-parser/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "optional": true + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy/-/local-functions-proxy-2.0.3.tgz", + "integrity": "sha512-siVwmrp7Ow+7jLALi6jXOja4Y4uHMMgOLLQMgd+OZ1TESOstrJvkUisJEDAc9hx7u0v/B0mh5g1g1huiH3uS3A==", "dev": true, - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "license": "MIT", + "engines": { + "node": ">=18.14.0" + }, + "optionalDependencies": { + "@netlify/local-functions-proxy-darwin-arm64": "1.1.1", + "@netlify/local-functions-proxy-darwin-x64": "1.1.1", + "@netlify/local-functions-proxy-freebsd-arm64": "1.1.1", + "@netlify/local-functions-proxy-freebsd-x64": "1.1.1", + "@netlify/local-functions-proxy-linux-arm": "1.1.1", + "@netlify/local-functions-proxy-linux-arm64": "1.1.1", + "@netlify/local-functions-proxy-linux-ia32": "1.1.1", + "@netlify/local-functions-proxy-linux-ppc64": "1.1.1", + "@netlify/local-functions-proxy-linux-x64": "1.1.1", + "@netlify/local-functions-proxy-openbsd-x64": "1.1.1", + "@netlify/local-functions-proxy-win32-ia32": "1.1.1", + "@netlify/local-functions-proxy-win32-x64": "1.1.1" + } + }, + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-arm64/-/local-functions-proxy-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-lphJ9qqZ3glnKWEqlemU1LMqXxtJ/tKf7VzakqqyjigwLscXSZSb6fupSjQfd4tR1xqxA76ylws/2HDhc/gs+Q==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-x64/-/local-functions-proxy-darwin-x64-1.1.1.tgz", + "integrity": "sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-freebsd-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-arm64/-/local-functions-proxy-freebsd-arm64-1.1.1.tgz", + "integrity": "sha512-u13lWTVMJDF0A6jX7V4N3HYGTIHLe5d1Z2wT43fSIHwXkTs6UXi72cGSraisajG+5JFIwHfPr7asw5vxFC0P9w==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "freebsd" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-x64/-/local-functions-proxy-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-g5xw4xATK5YDzvXtzJ8S1qSkWBiyF8VVRehXPMOAMzpGjCX86twYhWp8rbAk7yA1zBWmmWrWNA2Odq/MgpKJJg==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "freebsd" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-arm": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm/-/local-functions-proxy-linux-arm-1.1.1.tgz", + "integrity": "sha512-YsTpL+AbHwQrfHWXmKnwUrJBjoUON363nr6jUG1ueYnpbbv6wTUA7gI5snMi/gkGpqFusBthAA7C30e6bixfiA==", + "cpu": [ + "arm" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm64/-/local-functions-proxy-linux-arm64-1.1.1.tgz", + "integrity": "sha512-dPGu1H5n8na7mBKxiXQ+FNmthDAiA57wqgpm5JMAHtcdcmRvcXwJkwWVGvwfj8ShhYJHQaSaS9oPgO+mpKkgmA==", + "cpu": [ + "arm64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-ia32": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ia32/-/local-functions-proxy-linux-ia32-1.1.1.tgz", + "integrity": "sha512-Ra0FlXDrmPRaq+rYH3/ttkXSrwk1D5Zx/Na7UPfJZxMY7Qo5iY4bgi/FuzjzWzlp0uuKZOhYOYzYzsIIyrSvmw==", + "cpu": [ + "ia32" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-ppc64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ppc64/-/local-functions-proxy-linux-ppc64-1.1.1.tgz", + "integrity": "sha512-oXf1satwqwUUxz7LHS1BxbRqc4FFEKIDFTls04eXiLReFR3sqv9H/QuYNTCCDMuRcCOd92qKyDfATdnxT4HR8w==", + "cpu": [ + "ppc64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-x64/-/local-functions-proxy-linux-x64-1.1.1.tgz", + "integrity": "sha512-bS3u4JuDg/eC0y4Na3i/29JBOxrdUvsK5JSjHfzUeZEbOcuXYf4KavTpHS5uikdvTgyczoSrvbmQJ5m0FLXfLA==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-openbsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-openbsd-x64/-/local-functions-proxy-openbsd-x64-1.1.1.tgz", + "integrity": "sha512-1xLef/kLRNkBTXJ+ZGoRFcwsFxd/B2H3oeJZyXaZ3CN5umd9Mv9wZuAD74NuMt/535yRva8jtAJqvEgl9xMSdA==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "openbsd" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } }, - "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-win32-ia32": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-ia32/-/local-functions-proxy-win32-ia32-1.1.1.tgz", + "integrity": "sha512-4IOMDBxp2f8VbIkhZ85zGNDrZR4ey8d68fCMSOIwitjsnKav35YrCf8UmAh3UR6CNIRJdJL4MW1GYePJ7iJ8uA==", + "cpu": [ + "ia32" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ], + "bin": { + "local-functions-proxy.exe": "bin/local-functions-proxy.exe" + } }, - "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "node_modules/netlify/node_modules/@netlify/local-functions-proxy-win32-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-x64/-/local-functions-proxy-win32-x64-1.1.1.tgz", + "integrity": "sha512-VCBXBJWBujVxyo5f+3r8ovLc9I7wJqpmgDn3ixs1fvdrER5Ac+SzYwYH4mUug9HI08mzTSAKZErzKeuadSez3w==", + "cpu": [ + "x64" + ], "dev": true, - "optional": true + "optional": true, + "os": [ + "win32" + ], + "bin": { + "local-functions-proxy.exe": "bin/local-functions-proxy.exe" + } }, - "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "node_modules/netlify/node_modules/@netlify/open-api": { + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.37.0.tgz", + "integrity": "sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==", "dev": true, - "optional": true + "engines": { + "node": ">=14.8.0" + } }, - "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "node_modules/netlify/node_modules/@netlify/opentelemetry-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@netlify/opentelemetry-utils/-/opentelemetry-utils-2.0.1.tgz", + "integrity": "sha512-SE9dZZR620yTYky8By/8h+UaTMugxue8oL51aRUrvtDg7y8Ed6fYKC8VY5JExCkLWQ1k3874qktwfc5gdMVx+w==", "dev": true, - "optional": true + "engines": { + "node": ">=18.14.0" + }, + "peerDependencies": { + "@opentelemetry/api": "~1.8.0" + } }, - "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "node_modules/netlify/node_modules/@netlify/plugins-list": { + "version": "6.80.0", + "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.80.0.tgz", + "integrity": "sha512-bCKLI51UZ70ziIWsf2nvgPd4XuG6m8AMCoHiYtl/BSsiaSBfmryZnTTqdRXerH09tBRpbPPwzaEgUJwyU9o8Qw==", "dev": true, - "optional": true + "engines": { + "node": "^14.14.0 || >=16.0.0" + } }, - "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "node_modules/netlify/node_modules/@netlify/redirect-parser": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@netlify/redirect-parser/-/redirect-parser-15.0.2.tgz", + "integrity": "sha512-zS6qBHpmU7IpHGzrHNPqu+Tjvh1cAJuVEoFUvCp0lRUeNcTdIq9VZM7/34vtIN6MD/OMFg3uv80yefSqInV2nA==", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "@iarna/toml": "^2.2.5", + "fast-safe-stringify": "^2.1.1", + "filter-obj": "^6.0.0", + "is-plain-obj": "^4.0.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": ">=18.14.0" + } }, - "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "node_modules/netlify/node_modules/@netlify/redirect-parser/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "optional": true + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "node_modules/netlify/node_modules/@netlify/run-utils": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-6.0.2.tgz", + "integrity": "sha512-62K++LDoPqcR1hTnOL2JhuAfY0LMgQ6MgW89DehPplKLbKaEXQH1K1+hUDvgKsn68ofTpE1CTq30PGZQo8fVxw==", "dev": true, - "optional": true + "dependencies": { + "execa": "^8.0.0" + }, + "engines": { + "node": ">=18.14.0" + } }, - "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "optional": true + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } }, - "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "optional": true + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "optional": true + "engines": { + "node": ">=16.17.0" + } }, - "@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "optional": true + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true + "node_modules/netlify/node_modules/@netlify/runtime-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@netlify/runtime-utils/-/runtime-utils-2.1.0.tgz", + "integrity": "sha512-z1h+wjB7IVYUsFZsuIYyNxiw5WWuylseY+eXaUDHBxNeLTlqziy+lz03QkR67CUR4Y790xGIhaHV00aOR2KAtw==", + "dev": true, + "engines": { + "node": "^18.14.0 || >=20" + } + }, + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-12.1.4.tgz", + "integrity": "sha512-/wM1c0iyym/7SlowbgqTuu/+tJS8CDDs4vLhSizKntFl3VOeDVX0kr9qriH9wA2hYstwGSuHsEgEAnKdMcDBOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.27.6", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^2.1.1", + "@vercel/nft": "0.29.4", + "archiver": "^7.0.0", + "common-path-prefix": "^3.0.0", + "copy-file": "^11.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.25.5", + "execa": "^8.0.0", + "fast-glob": "^3.3.3", + "filter-obj": "^6.0.0", + "find-up": "^7.0.0", + "is-builtin-module": "^3.1.0", + "is-path-inside": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^7.0.0", + "path-exists": "^5.0.0", + "precinct": "^12.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", + "semver": "^7.3.8", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", + "urlpattern-polyfill": "8.0.2", + "yargs": "^17.0.0", + "zod": "^3.23.8" + }, + "bin": { + "zip-it-and-ship-it": "bin.js" + }, + "engines": { + "node": ">=18.14.0" + } }, - "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/@netlify/serverless-functions-api": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-2.1.1.tgz", + "integrity": "sha512-MNYfEmZC6F7ZExOrB/Hrfkif7JW2Cbid9y5poTFEJ6rcAhCLQB8lo0SGlQrFXgKvXowXB14IjpOubaQu2zsyfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } + "balanced-match": "^1.0.0" } }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "engines": { + "node": ">=16" }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "engines": { + "node": ">=16.17.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "optional": true - }, - "@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==" - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@tauri-apps/api": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-beta.0.tgz", - "integrity": "sha512-WLoh/Vk8cgY7XrJV7Vpb6PssReBZWQCATfYBb1aCRDk+sp0NyPwumx6fZ2ECAKzAcs3OeanluwZcajruIW4CPQ==", - "dev": true - }, - "@tauri-apps/cli": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz", - "integrity": "sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "requires": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-beta.1", - "@tauri-apps/cli-darwin-x64": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-beta.1", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-beta.1", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-beta.1", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-beta.1", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-beta.1", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-beta.1" + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz", - "integrity": "sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz", - "integrity": "sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz", - "integrity": "sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz", - "integrity": "sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz", - "integrity": "sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz", - "integrity": "sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz", - "integrity": "sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ==", - "dev": true, - "optional": true - }, - "@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "optional": true + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "optional": true + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "optional": true + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "@tauri-apps/plugin-dialog": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.0.tgz", - "integrity": "sha512-cNxiBwGB6Xgnwy5GyAabwPyvm1iaC7MmrgzcUwB1JaydLjp/Yu3Z0TmkmmEClFrrvIQA+sMcq0C8wwv6i4aedw==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "requires": { - "@tauri-apps/api": "2.0.0-beta.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@tauri-apps/plugin-fs": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-beta.0.tgz", - "integrity": "sha512-oFAA8T5wyg5dmsF/WmjjtUMEnJtzu+p2ElsK2FdwLVSB2AdAdud5izZhd1o63HFjR6waiIYebSI+llzJG7b5MQ==", + "node_modules/netlify/node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { - "@tauri-apps/api": "2.0.0-beta.0" + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@tauri-apps/plugin-shell": { - "version": "2.0.0-beta.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.0.tgz", - "integrity": "sha512-AADGPuGP+YM5Ar48XfA8o9k9jtlSBpEVcsbOEwWdifi0oAiVOBXgiy9C1Icsub/tlD3YjK7oT8vDcOXLGYBhUg==", + "node_modules/netlify/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "requires": { - "@tauri-apps/api": "2.0.0-beta.0" + "engines": { + "node": ">= 8" } }, - "@tokenizer/http": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@tokenizer/http/-/http-0.9.1.tgz", - "integrity": "sha512-jwHLkafS9ZVEt8dFR4s4GEa5d/iKiowtn7uE19hbxIYh7IK1tAkU4eWRXB5GJ0PtPRf2BEDzAqKMhAzDpDlUmw==", - "requires": { - "@tokenizer/range": "^0.10.0", - "debug": "^4.3.7", - "strtok3": "^9.0.1" + "node_modules/netlify/node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@tokenizer/range": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.10.0.tgz", - "integrity": "sha512-noYSSTeDdpxLn1WYVB7TZhcq80pA+5b0HdM1Dtvkkk3nlHw4h2nFoaAdrvdwtbjAAT76GIL87/uK5mKE3T+oYg==", - "requires": { - "debug": "^4.3.6", - "strtok3": "^9.0.0" + "node_modules/netlify/node_modules/@octokit/auth-token": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz", + "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==", + "dev": true, + "engines": { + "node": ">= 18" } }, - "@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "node_modules/netlify/node_modules/@octokit/core": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz", + "integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==", "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "dependencies": { + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.1.2", + "@octokit/request": "^9.2.1", + "@octokit/request-error": "^6.1.7", + "@octokit/types": "^13.6.2", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" } }, - "@types/elm": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@types/elm/-/elm-0.19.3.tgz", - "integrity": "sha512-1DnHZiIHvDyjL6MHrePqbD3ooLLix13k6ow8gEydFOAXImkcvbzQX0Ri+WJOM7RvgPfmyUe6uQ2Acupb1oL+GA==", - "dev": true - }, - "@types/file-saver": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", - "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", - "dev": true - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "node_modules/netlify/node_modules/@octokit/endpoint": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz", + "integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==", "dev": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.6.2", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" } }, - "@types/lunr": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.7.tgz", - "integrity": "sha512-Tb/kUm38e8gmjahQzdCKhbdsvQ9/ppzHFfsJ0dMs3ckqQsRj+P5IkSAwFTBrBxdyr3E/LoMUUrZngjDYAjiE3A==", - "dev": true - }, - "@types/node": { - "version": "18.16.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.3.tgz", - "integrity": "sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "node_modules/netlify/node_modules/@octokit/graphql": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.0.tgz", + "integrity": "sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@octokit/request": "^9.1.4", + "@octokit/types": "^13.8.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" } }, - "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "node_modules/netlify/node_modules/@octokit/openapi-types": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", + "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", "dev": true }, - "@types/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", - "dev": true - }, - "@types/tv4": { - "version": "1.2.31", - "resolved": "https://registry.npmjs.org/@types/tv4/-/tv4-1.2.31.tgz", - "integrity": "sha512-P97XU07fcpauSw3/fE2Q7eF6bHl4oHhwkikjnM7zlQLENrdC2rZuHSdNlMBhnW82NyBEsVJHII1Jk3d/MtQsQQ==" - }, - "@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "node_modules/netlify/node_modules/@octokit/plugin-paginate-rest": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.2.tgz", + "integrity": "sha512-BXJ7XPCTDXFF+wxcg/zscfgw2O/iDPtNSkwwR1W1W5c4Mb3zav/M2XvxQ23nVmKj7jpweB4g8viMeCQdm7LMVA==", "dev": true, - "optional": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.7.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" } }, - "@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "node_modules/netlify/node_modules/@octokit/plugin-request-log": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", + "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" } }, - "@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "node_modules/netlify/node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.0.tgz", + "integrity": "sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==", "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" + "dependencies": { + "@octokit/types": "^13.7.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" } }, - "@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/netlify/node_modules/@octokit/request": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz", + "integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==", "dev": true, - "requires": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "dependencies": { + "@octokit/endpoint": "^10.1.3", + "@octokit/request-error": "^6.1.7", + "@octokit/types": "^13.6.2", + "fast-content-type-parse": "^2.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" } }, - "@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "node_modules/netlify/node_modules/@octokit/request-error": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz", + "integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==", "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "dependencies": { + "@octokit/types": "^13.6.2" + }, + "engines": { + "node": ">= 18" } }, - "@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/netlify/node_modules/@octokit/request/node_modules/fast-content-type-parse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", + "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", "dev": true, - "requires": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" } - } + ] }, - "@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "node_modules/netlify/node_modules/@octokit/rest": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz", + "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==", "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "dependencies": { + "@octokit/core": "^6.1.4", + "@octokit/plugin-paginate-rest": "^11.4.2", + "@octokit/plugin-request-log": "^5.3.1", + "@octokit/plugin-rest-endpoint-methods": "^13.3.0" + }, + "engines": { + "node": ">= 18" } }, - "@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/netlify/node_modules/@octokit/types": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", + "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", "dev": true, - "requires": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - } - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "@zeit/schemas": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", - "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" + "dependencies": { + "@octokit/openapi-types": "^23.0.1" } }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "node_modules/netlify/node_modules/@opentelemetry/api": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", + "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", + "dev": true, + "engines": { + "node": ">=8.0.0" } }, - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/netlify/node_modules/@parcel/watcher": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.0.tgz", + "integrity": "sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg==", "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.0", + "@parcel/watcher-darwin-arm64": "2.4.0", + "@parcel/watcher-darwin-x64": "2.4.0", + "@parcel/watcher-freebsd-x64": "2.4.0", + "@parcel/watcher-linux-arm-glibc": "2.4.0", + "@parcel/watcher-linux-arm64-glibc": "2.4.0", + "@parcel/watcher-linux-arm64-musl": "2.4.0", + "@parcel/watcher-linux-x64-glibc": "2.4.0", + "@parcel/watcher-linux-x64-musl": "2.4.0", + "@parcel/watcher-win32-arm64": "2.4.0", + "@parcel/watcher-win32-ia32": "2.4.0", + "@parcel/watcher-win32-x64": "2.4.0" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz", + "integrity": "sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/netlify/node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz", + "integrity": "sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz", + "integrity": "sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz", + "integrity": "sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz", + "integrity": "sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz", + "integrity": "sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz", + "integrity": "sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz", + "integrity": "sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz", + "integrity": "sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-wasm": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.0.tgz", + "integrity": "sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA==", + "bundleDependencies": [ + "napi-wasm" + ], + "dev": true, + "dependencies": { + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "napi-wasm": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz", + "integrity": "sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz", + "integrity": "sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz", + "integrity": "sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/netlify/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/netlify/node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/netlify/node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/netlify/node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/netlify/node_modules/@pnpm/tabtab": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@pnpm/tabtab/-/tabtab-0.5.4.tgz", + "integrity": "sha512-bWLDlHsBlgKY/05wDN/V3ETcn5G2SV/SiA2ZmNvKGGlmVX4G5li7GRDhHcgYvHJHyJ8TUStqg2xtHmCs0UbAbg==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "enquirer": "^2.3.6", + "minimist": "^1.2.5", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-android-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, + "node_modules/netlify/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/netlify/node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "dev": true, + "dependencies": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@sindresorhus/transliterate": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.5.0.tgz", + "integrity": "sha512-/sfSkoNelLq5riqNRp5uBjHIKBi1MWZk9ubRT1WiBQuTfmDf7BeQkph2DJzRB83QagMPHk2VDjuvpy0VuwyzdA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "lodash.deburr": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/netlify/node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/netlify/node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/netlify/node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/netlify/node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/netlify/node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/netlify/node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/netlify/node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/netlify/node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/netlify/node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/netlify/node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/netlify/node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/netlify/node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/netlify/node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/netlify/node_modules/@types/node": { + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/netlify/node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/netlify/node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/netlify/node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/netlify/node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "node_modules/netlify/node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/netlify/node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/netlify/node_modules/@typescript-eslint/types": { + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz", + "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz", + "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.26.0", + "@typescript-eslint/visitor-keys": "8.26.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz", + "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.26.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/netlify/node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/netlify/node_modules/@vercel/nft": { + "version": "0.29.4", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz", + "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==", + "dev": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^10.4.5", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/@vue/compiler-core": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", + "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.16", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/netlify/node_modules/@vue/compiler-dom": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", + "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/netlify/node_modules/@vue/compiler-sfc": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz", + "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.16", + "@vue/compiler-dom": "3.5.16", + "@vue/compiler-ssr": "3.5.16", + "@vue/shared": "3.5.16", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" + } + }, + "node_modules/netlify/node_modules/@vue/compiler-ssr": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", + "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.5.16", + "@vue/shared": "3.5.16" + } + }, + "node_modules/netlify/node_modules/@vue/shared": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", + "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==", + "dev": true + }, + "node_modules/netlify/node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", + "dev": true, + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/netlify/node_modules/@whatwg-node/disposablestack/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/netlify/node_modules/@whatwg-node/fetch": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.8.tgz", + "integrity": "sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==", + "dev": true, + "dependencies": { + "@whatwg-node/node-fetch": "^0.7.21", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/netlify/node_modules/@whatwg-node/fetch/node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "dev": true + }, + "node_modules/netlify/node_modules/@whatwg-node/node-fetch": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.21.tgz", + "integrity": "sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/netlify/node_modules/@whatwg-node/node-fetch/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/netlify/node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", + "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", + "dev": true, + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/netlify/node_modules/@whatwg-node/promise-helpers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/netlify/node_modules/@whatwg-node/server": { + "version": "0.10.10", + "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.10.tgz", + "integrity": "sha512-GwpdMgUmwIp0jGjP535YtViP/nnmETAyHpGPWPZKdX++Qht/tSLbGXgFUMSsQvEACmZAR1lAPNu2CnYL1HpBgg==", + "dev": true, + "dependencies": { + "@envelop/instrumentation": "^1.0.0", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/fetch": "^0.10.8", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/netlify/node_modules/@whatwg-node/server/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/netlify/node_modules/@xhmikosr/archive-type": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-6.0.1.tgz", + "integrity": "sha512-PB3NeJL8xARZt52yDBupK0dNPn8uIVQDe15qNehUpoeeLWCZyAOam4vGXnoZGz2N9D1VXtjievJuCsXam2TmbQ==", + "dev": true, + "dependencies": { + "file-type": "^18.5.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-9.0.1.tgz", + "integrity": "sha512-9Lvlt6Qdpo9SaRQyRIXCo3lgU++eMZ68lzgjcTwtuKDrlwT635+5zsHZ1yrSx/Blc5IDuVLlPkBPj5CZkx+2+Q==", + "dev": true, + "dependencies": { + "@xhmikosr/decompress-tar": "^7.0.0", + "@xhmikosr/decompress-tarbz2": "^7.0.0", + "@xhmikosr/decompress-targz": "^7.0.0", + "@xhmikosr/decompress-unzip": "^6.0.0", + "graceful-fs": "^4.2.11", + "make-dir": "^4.0.0", + "strip-dirs": "^3.0.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-tar": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-7.0.0.tgz", + "integrity": "sha512-kyWf2hybtQVbWtB+FdRyOT+jyR5jxCNZPLqvQGB7djZj75lrpLUPEmRbyo86AtJ5OEtivpYaNWjCkqSJ8xtRWw==", + "dev": true, + "dependencies": { + "file-type": "^18.5.0", + "is-stream": "^3.0.0", + "tar-stream": "^3.1.4" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-tar/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-tarbz2": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-7.0.0.tgz", + "integrity": "sha512-3QnjipYkRgh3Dee1MWDgKmANWxOQBVN4e1IwiGNe2fHYfMYTeSkVvWREt87UIoSucKUh3E95v8uGFttgTknZcA==", + "dev": true, + "dependencies": { + "@xhmikosr/decompress-tar": "^7.0.0", + "file-type": "^18.5.0", + "is-stream": "^3.0.0", + "seek-bzip": "^1.0.6", + "unbzip2-stream": "^1.4.3" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-tarbz2/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-targz": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-7.0.0.tgz", + "integrity": "sha512-7BNHJl92g9OLhw89zqcFS67V1LAtm4Ex02j6OiQzuE8P7Yy9lQcyBuEL3x6v436grLdL+BcFjgbmhWxnem4GHw==", + "dev": true, + "dependencies": { + "@xhmikosr/decompress-tar": "^7.0.0", + "file-type": "^18.5.0", + "is-stream": "^3.0.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-targz/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress-unzip": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-6.0.0.tgz", + "integrity": "sha512-R1HAkjXLS7RAL74YFLxYY9zYflCcYGssld9KKFDu87PnJ4h4btdhzXfSC8J5i5A2njH3oYIoCzx03RIGTH07Sg==", + "dev": true, + "dependencies": { + "file-type": "^18.5.0", + "get-stream": "^6.0.1", + "yauzl": "^2.10.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/decompress/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/netlify/node_modules/@xhmikosr/downloader": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-13.0.1.tgz", + "integrity": "sha512-mBvWew1kZJHfNQVVfVllMjUDwCGN9apPa0t4/z1zaUJ9MzpXjRL3w8fsfJKB8gHN/h4rik9HneKfDbh2fErN+w==", + "dev": true, + "dependencies": { + "@xhmikosr/archive-type": "^6.0.1", + "@xhmikosr/decompress": "^9.0.1", + "content-disposition": "^0.5.4", + "ext-name": "^5.0.0", + "file-type": "^18.5.0", + "filenamify": "^5.1.1", + "get-stream": "^6.0.1", + "got": "^12.6.1", + "merge-options": "^3.0.4", + "p-event": "^5.0.1" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/filename-reserved-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", + "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/filenamify": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", + "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^3.0.0", + "strip-outer": "^2.0.0", + "trim-repeated": "^2.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/strip-outer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", + "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/trim-repeated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", + "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/netlify/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/netlify/node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/netlify/node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", + "dev": true + }, + "node_modules/netlify/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/netlify/node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/netlify/node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/netlify/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/netlify/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/netlify/node_modules/ajv-formats/node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/netlify/node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/netlify/node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/netlify/node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/ansi-to-html": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz", + "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==", + "dev": true, + "dependencies": { + "entities": "^2.2.0" + }, + "bin": { + "ansi-to-html": "bin/ansi-to-html" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/netlify/node_modules/ansi-to-html/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/netlify/node_modules/ansis": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", + "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/netlify/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/netlify/node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/netlify/node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "dev": true, + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dev": true, + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/archiver-utils/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/netlify/node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/archiver-utils/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/netlify/node_modules/archiver/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/netlify/node_modules/archiver/node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/netlify/node_modules/archiver/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/archiver/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/archiver/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/netlify/node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/netlify/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/netlify/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/netlify/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/netlify/node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, + "node_modules/netlify/node_modules/ascii-table": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", + "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=", + "dev": true + }, + "node_modules/netlify/node_modules/ast-module-types": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", + "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/netlify/node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "dev": true + }, + "node_modules/netlify/node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/netlify/node_modules/atomically": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", + "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", + "dev": true, + "dependencies": { + "stubborn-fs": "^1.2.5", + "when-exit": "^2.1.1" + } + }, + "node_modules/netlify/node_modules/avvio": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", + "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", + "dev": true, + "dependencies": { + "@fastify/error": "^3.3.0", + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.17.1" + } + }, + "node_modules/netlify/node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, + "node_modules/netlify/node_modules/backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", + "dev": true, + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/netlify/node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "dev": true, + "optional": true + }, + "node_modules/netlify/node_modules/bare-fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz", + "integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==", + "dev": true, + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "dev": true, + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/netlify/node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/netlify/node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "dev": true, + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/before-after-hook": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "dev": true + }, + "node_modules/netlify/node_modules/better-ajv-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-1.2.0.tgz", + "integrity": "sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@humanwhocodes/momoa": "^2.0.2", + "chalk": "^4.1.2", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0 < 4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "ajv": "4.11.8 - 8" + } + }, + "node_modules/netlify/node_modules/better-ajv-errors/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/better-ajv-errors/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/netlify/node_modules/better-ajv-errors/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/better-ajv-errors/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/better-ajv-errors/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/netlify/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/netlify/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/netlify/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/netlify/node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/netlify/node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/netlify/node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/boxen/node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/boxen/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/netlify/node_modules/boxen/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/boxen/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/boxen/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/netlify/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/netlify/node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/netlify/node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "node_modules/netlify/node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/netlify/node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/netlify/node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/netlify/node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/netlify/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/netlify/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/netlify/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/netlify/node_modules/chokidar/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/netlify/node_modules/chokidar/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/netlify/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dev": true, + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/netlify/node_modules/clean-deep": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", + "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", + "dev": true, + "dependencies": { + "lodash.isempty": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.transform": "^4.6.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify/node_modules/clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clean-stack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/netlify/node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "dev": true, + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/netlify/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/netlify/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/netlify/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/netlify/node_modules/color-string": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/netlify/node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/netlify/node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dev": true, + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/netlify/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "dev": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/netlify/node_modules/comment-json/node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/netlify/node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/netlify/node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/compress-commons/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/netlify/node_modules/compress-commons/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/compress-commons/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/compress-commons/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/compress-commons/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/netlify/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/netlify/node_modules/configstore": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", + "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "dev": true, + "dependencies": { + "atomically": "^2.0.3", + "dot-prop": "^9.0.0", + "graceful-fs": "^4.2.11", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/netlify/node_modules/configstore/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/netlify/node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/netlify/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "dev": true + }, + "node_modules/netlify/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/netlify/node_modules/copy-file": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.0.0.tgz", + "integrity": "sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.11", + "p-event": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/copy-file/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/netlify/node_modules/copy-file/node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "dev": true, + "dependencies": { + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/netlify/node_modules/cpy": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-11.1.0.tgz", + "integrity": "sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==", + "dev": true, + "dependencies": { + "copy-file": "^11.0.0", + "globby": "^14.0.2", + "junk": "^4.0.1", + "micromatch": "^4.0.7", + "p-filter": "^4.1.0", + "p-map": "^7.0.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/netlify/node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/crc32-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/netlify/node_modules/crc32-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/crc32-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/crc32-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/netlify/node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/netlify/node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "dev": true, + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/netlify/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/netlify/node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/crossws": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.1.3.tgz", + "integrity": "sha512-uZwy53h6ITBxXdzsw7UcGQZ1QSyjBSkAknu70Zb7+JWmJ1LstE1hVFEgt34RVoCQJn8kstSOnNmRjK93SG1LBg==", + "dev": true, + "peerDependencies": { + "uWebSockets.js": "*" + }, + "peerDependenciesMeta": { + "uWebSockets.js": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/netlify/node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/netlify/node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/netlify/node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "dev": true + }, + "node_modules/netlify/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/netlify/node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/netlify/node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/netlify/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "node_modules/netlify/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/netlify/node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true + }, + "node_modules/netlify/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/netlify/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/detective-amd": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", + "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", + "dev": true, + "dependencies": { + "ast-module-types": "^6.0.1", + "escodegen": "^2.1.0", + "get-amd-module-type": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "detective-amd": "bin/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/detective-cjs": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", + "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", + "dev": true, + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/detective-es6": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", + "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", + "dev": true, + "dependencies": { + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/detective-postcss": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", + "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", + "dev": true, + "dependencies": { + "is-url": "^1.2.4", + "postcss-values-parser": "^6.0.2" + }, + "engines": { + "node": "^14.0.0 || >=16.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.47" + } + }, + "node_modules/netlify/node_modules/detective-sass": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", + "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/detective-scss": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", + "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/detective-stylus": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", + "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/detective-typescript": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", + "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "^8.23.0", + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" + } + }, + "node_modules/netlify/node_modules/detective-vue2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", + "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", + "dev": true, + "dependencies": { + "@dependents/detective-less": "^5.0.1", + "@vue/compiler-sfc": "^3.5.13", + "detective-es6": "^5.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "typescript": "^5.4.4" + } + }, + "node_modules/netlify/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/netlify/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/netlify/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/netlify/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/netlify/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/netlify/node_modules/dot-prop": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", + "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", + "dev": true, + "dependencies": { + "type-fest": "^4.18.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/dot-prop/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/netlify/node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/netlify/node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/netlify/node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/netlify/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/netlify/node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "dev": true + }, + "node_modules/netlify/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/netlify/node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/netlify/node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/netlify/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify/node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/netlify/node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/netlify/node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, + "node_modules/netlify/node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/netlify/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/netlify/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/netlify/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/netlify/node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/netlify/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/netlify/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/netlify/node_modules/execa/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/netlify/node_modules/express-logging": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/express-logging/-/express-logging-1.1.1.tgz", + "integrity": "sha512-1KboYwxxCG5kwkJHR5LjFDTD1Mgl8n4PIMcCuhhd/1OqaxlC68P3QKbvvAbZVUtVgtlxEdTgSUwf6yxwzRCuuA==", + "dev": true, + "dependencies": { + "on-headers": "^1.0.0" + }, + "engines": { + "node": ">= 0.10.26" + } + }, + "node_modules/netlify/node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/netlify/node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/netlify/node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "node_modules/netlify/node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify/node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify/node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/netlify/node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-equals": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", + "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/netlify/node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "node_modules/netlify/node_modules/fast-json-stringify": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.15.1.tgz", + "integrity": "sha512-JopGtkvvguRqrS4gHXSSA2jf4pDgOZkeBAkLO1LbzOpiOMo7/kugoR+KiWifpLpluaVeYDkAuxCJOj4Gyc6L9A==", + "dev": true, + "dependencies": { + "@fastify/merge-json-schemas": "^0.1.0", + "ajv": "^8.10.0", + "ajv-formats": "^3.0.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", + "rfdc": "^1.2.0" + } + }, + "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/netlify/node_modules/fast-json-stringify/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-querystring": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.0.0.tgz", + "integrity": "sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==", + "dev": true, + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "node_modules/netlify/node_modules/fast-redact": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", + "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/netlify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/netlify/node_modules/fastify": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.29.1.tgz", + "integrity": "sha512-m2kMNHIG92tSNWv+Z3UeTR9AWLLuo7KctC7mlFPtMEVrfjIhmQhkQnT9v15qA/BfVq3vvj134Y0jl9SBje3jXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "dependencies": { + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", + "abstract-logging": "^2.0.1", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^9.0.0", + "process-warning": "^3.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.3.0", + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" + } + }, + "node_modules/netlify/node_modules/fastify-plugin": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.4.0.tgz", + "integrity": "sha512-ovwFQG2qNy3jcCROiWpr94Hs0le+c7N/3t7m9aVwbFhkxcR/esp2xu25dP8e617HpQdmeDv+gFX4zagdUhDByw==", + "dev": true + }, + "node_modules/netlify/node_modules/fastify/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "dev": true + }, + "node_modules/netlify/node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/netlify/node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/netlify/node_modules/fdir": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", + "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/fecha": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", + "dev": true + }, + "node_modules/netlify/node_modules/fetch-blob": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", + "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/netlify/node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/figures/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/file-type": { + "version": "18.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz", + "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==", + "dev": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0", + "token-types": "^5.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/netlify/node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, + "node_modules/netlify/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/filter-obj": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-6.1.0.tgz", + "integrity": "sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/netlify/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/netlify/node_modules/find-my-way": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", + "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^3.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/netlify/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "dev": true, + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/find-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "dev": true + }, + "node_modules/netlify/node_modules/folder-walker": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/folder-walker/-/folder-walker-3.2.0.tgz", + "integrity": "sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==", + "dev": true, + "dependencies": { + "from2": "^2.1.0" + } + }, + "node_modules/netlify/node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/form-data-encoder": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", + "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==", + "dev": true, + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/netlify/node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/netlify/node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/netlify/node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/netlify/node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/netlify/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/netlify/node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/netlify/node_modules/get-amd-module-type": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", + "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", + "dev": true, + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/netlify/node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/get-package-name": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/get-package-name/-/get-package-name-2.2.0.tgz", + "integrity": "sha512-LmCKVxioe63Fy6KDAQ/mmCSOSSRUE/x4zdrMD+7dU8quF3bGpzvP8mOmq4Dgce3nzU9AgkVDotucNOOg7c27BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/netlify/node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/get-port-please": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", + "dev": true + }, + "node_modules/netlify/node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/gh-release-fetch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gh-release-fetch/-/gh-release-fetch-4.0.3.tgz", + "integrity": "sha512-TOiP1nwLsH5shG85Yt6v6Kjq5JU/44jXyEpbcfPgmj3C829yeXIlx9nAEwQRaxtRF3SJinn2lz7XUkfG9W/U4g==", + "dev": true, + "dependencies": { + "@xhmikosr/downloader": "^13.0.0", + "node-fetch": "^3.3.1", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.18.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/netlify/node_modules/git-repo-info": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", + "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", + "dev": true, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/netlify/node_modules/gitconfiglocal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz", + "integrity": "sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/netlify/node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/netlify/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/netlify/node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/netlify/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/global-directory/node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/netlify/node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/netlify/node_modules/globby/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/netlify/node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/netlify/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/netlify/node_modules/h3": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", + "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/netlify/node_modules/h3/node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/netlify/node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/netlify/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/netlify/node_modules/hot-shots": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-10.2.1.tgz", + "integrity": "sha512-tmjcyZkG/qADhcdC7UjAp8D7v7W2DOYFgaZ48fYMuayMQmVVUg8fntKmrjes/b40ef6yZ+qt1lB8kuEDfLC4zw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "unix-dgram": "2.x" + } + }, + "node_modules/netlify/node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/netlify/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/netlify/node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/http-shutdown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", + "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/netlify/node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/netlify/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/netlify/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/image-meta": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.0.tgz", + "integrity": "sha512-ZBGjl0ZMEMeOC3Ns0wUF/5UdUmr3qQhBSCniT0LxOgGGIRHiNFOkMtIHB7EOznRU47V2AxPgiVP+s+0/UCU0Hg==", + "dev": true + }, + "node_modules/netlify/node_modules/image-size": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/netlify/node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/netlify/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/netlify/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/netlify/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", + "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "figures": "^3.2.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "inquirer": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { "type-fest": "^0.21.3" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/netlify/node_modules/inquirer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/inspect-with-kind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", + "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + } + }, + "node_modules/netlify/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/netlify/node_modules/ipx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipx/-/ipx-2.1.0.tgz", + "integrity": "sha512-AVnPGXJ8L41vjd11Z4akIF2yd14636Klxul3tBySxHA6PKfCOQPxBDkCFK5zcWh0z/keR6toh1eg8qzdBVUgdA==", + "dev": true, + "dependencies": { + "@fastify/accept-negotiator": "^1.1.0", + "citty": "^0.1.5", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.2", + "etag": "^1.8.1", + "h3": "^1.10.0", + "image-meta": "^0.2.0", + "listhen": "^1.5.6", + "ofetch": "^1.3.3", + "pathe": "^1.1.2", + "sharp": "^0.32.6", + "svgo": "^3.2.0", + "ufo": "^1.3.2", + "unstorage": "^1.10.1", + "xss": "^1.0.14" + }, + "bin": { + "ipx": "bin/ipx.mjs" + } + }, + "node_modules/netlify/node_modules/ipx/node_modules/@netlify/blobs": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.2.0.tgz", + "integrity": "sha512-9djLZHBKsoKk8XCgwWSEPK9QnT8qqxEQGuYh48gFIcNLvpBKkLnHbDZuyUxmNemCfDz7h0HnMXgSPnnUVgARhg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/ipx/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/netlify/node_modules/ipx/node_modules/unstorage": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", + "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.2", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.6", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/netlify/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-error-instance": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-error-instance/-/is-error-instance-2.0.0.tgz", + "integrity": "sha512-5RuM+oFY0P5MRa1nXJo6IcTx9m2VyXYhRtb4h0olsi2GHci4bqZ6akHk+GmCYvDrAR9yInbiYdr2pnoqiOMw/Q==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/is-in-ci": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", + "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", + "dev": true, + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "dev": true, + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/netlify/node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "node_modules/netlify/node_modules/is-url-superb": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", + "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "dev": true, + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/netlify/node_modules/iserror": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", + "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==", + "dev": true + }, + "node_modules/netlify/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/netlify/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/netlify/node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/netlify/node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true + }, + "node_modules/netlify/node_modules/js-image-generator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/js-image-generator/-/js-image-generator-1.0.4.tgz", + "integrity": "sha512-ckb7kyVojGAnArouVR+5lBIuwU1fcrn7E/YYSd0FK7oIngAkMmRvHASLro9Zt5SQdWToaI66NybG+OGxPw/HlQ==", + "dev": true, + "dependencies": { + "jpeg-js": "^0.4.2" + } + }, + "node_modules/netlify/node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/netlify/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/netlify/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/netlify/node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/netlify/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "node_modules/netlify/node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/netlify/node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/netlify/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/netlify/node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/keep-func-props": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/keep-func-props/-/keep-func-props-6.0.0.tgz", + "integrity": "sha512-XDYA44ccm6W2MXZeQcDZykS5srkTpPf6Z59AEuOFbfuqdQ5TVxhAjxgzAEFBpr8XpsCEgr/XeCBFAmc9x6wRmQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/netlify/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "dev": true + }, + "node_modules/netlify/node_modules/ky": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.2.tgz", + "integrity": "sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/netlify/node_modules/lambda-local": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.2.0.tgz", + "integrity": "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==", + "dev": true, + "dependencies": { + "commander": "^10.0.1", + "dotenv": "^16.3.1", + "winston": "^3.10.0" + }, + "bin": { + "lambda-local": "build/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/lambda-local/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/netlify/node_modules/latest-version": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", + "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", + "dev": true, + "dependencies": { + "package-json": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/netlify/node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/netlify/node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/light-my-request": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", + "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", + "dev": true, + "dependencies": { + "cookie": "^0.7.0", + "process-warning": "^3.0.0", + "set-cookie-parser": "^2.4.1" + } + }, + "node_modules/netlify/node_modules/light-my-request/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/light-my-request/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "dev": true + }, + "node_modules/netlify/node_modules/listhen": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.6.0.tgz", + "integrity": "sha512-z0RcEXVX5oTpY1bO02SKoTU/kmZSrFSngNNzHRM6KICR17PTq7ANush6AE6ztGJwJD4RLpBrVHd9GnV51J7s3w==", + "dev": true, + "dependencies": { + "@parcel/watcher": "^2.4.0", + "@parcel/watcher-wasm": "2.4.0", + "citty": "^0.1.5", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": "^0.1.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.10.1", + "http-shutdown": "^1.2.2", + "jiti": "^1.21.0", + "mlly": "^1.5.0", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.3.2", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/netlify/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/locate-path/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/locate-path/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/locate-path/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.deburr": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", + "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "node_modules/netlify/node_modules/log-process-errors": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-11.0.1.tgz", + "integrity": "sha512-HXYU83z3kH0VHfJgGyv9ZP9z7uNEayssgvpeQwSzh60mvpNqUBCPyXLSzCDSMxfGvAUUa0Kw06wJjVR46Ohd3A==", + "dev": true, + "dependencies": { + "is-error-instance": "^2.0.0", + "is-plain-obj": "^4.1.0", + "normalize-exception": "^3.0.0", + "set-error-message": "^2.0.1" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/netlify/node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/netlify/node_modules/logform": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", + "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/netlify/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/netlify/node_modules/luxon": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz", + "integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/netlify/node_modules/macos-release": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.3.0.tgz", + "integrity": "sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/netlify/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/netlify/node_modules/map-obj": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", + "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/netlify/node_modules/maxstache": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/maxstache/-/maxstache-1.0.7.tgz", + "integrity": "sha512-53ZBxHrZM+W//5AcRVewiLpDunHnucfdzZUGz54Fnvo4tE+J3p8EL66kBrs2UhBXvYKTWckWYYWBqJqoTcenqg==", + "dev": true + }, + "node_modules/netlify/node_modules/maxstache-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/maxstache-stream/-/maxstache-stream-1.0.4.tgz", + "integrity": "sha512-v8qlfPN0pSp7bdSoLo1NTjG43GXGqk5W2NWFnOCq2GlmFFqebGzPCjLKSbShuqIOVorOtZSAy7O/S1OCCRONUw==", + "dev": true, + "dependencies": { + "maxstache": "^1.0.0", + "pump": "^1.0.0", + "split2": "^1.0.0", + "through2": "^2.0.0" + } + }, + "node_modules/netlify/node_modules/maxstache-stream/node_modules/pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/netlify/node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/netlify/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "dev": true + }, + "node_modules/netlify/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "dev": true, + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/merge-options/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/netlify/node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/netlify/node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/micro-api-client": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", + "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==", + "dev": true + }, + "node_modules/netlify/node_modules/micro-memoize": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.3.tgz", + "integrity": "sha512-DzRMi8smUZXT7rCGikRwldEh6eO6qzKiPPopcr1+2EY3AYKpy5fu159PKWwIS9A6IWnrvPKDMcuFtyrroZa8Bw==", + "dev": true + }, + "node_modules/netlify/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/netlify/node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/netlify/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/netlify/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/netlify/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/netlify/node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/netlify/node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/netlify/node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/module-definition": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", + "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", + "dev": true, + "dependencies": { + "ast-module-types": "^6.0.1", + "node-source-walk": "^7.0.1" + }, + "bin": { + "module-definition": "bin/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/moize": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", + "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", + "dev": true, + "dependencies": { + "fast-equals": "^3.0.1", + "micro-memoize": "^4.1.2" + } + }, + "node_modules/netlify/node_modules/move-file": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/move-file/-/move-file-3.1.0.tgz", + "integrity": "sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==", + "dev": true, + "dependencies": { + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/move-file/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/netlify/node_modules/multiparty": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz", + "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==", + "dev": true, + "dependencies": { + "http-errors": "~1.8.1", + "safe-buffer": "5.2.1", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/netlify/node_modules/multiparty/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/netlify/node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "dev": true, + "optional": true + }, + "node_modules/netlify/node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/netlify/node_modules/nanospinner": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz", + "integrity": "sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==", + "dev": true, + "dependencies": { + "picocolors": "^1.1.1" + } + }, + "node_modules/netlify/node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node_modules/netlify/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/netlify-redirector": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/netlify-redirector/-/netlify-redirector-0.5.0.tgz", + "integrity": "sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==", + "dev": true + }, + "node_modules/netlify/node_modules/node-abi": { + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true + }, + "node_modules/netlify/node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/netlify/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/netlify/node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "dev": true + }, + "node_modules/netlify/node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/netlify/node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/netlify/node_modules/node-mock-http": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", + "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==", + "dev": true + }, + "node_modules/netlify/node_modules/node-source-walk": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", + "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/netlify/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dev": true, + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/netlify/node_modules/normalize-exception": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-exception/-/normalize-exception-3.0.0.tgz", + "integrity": "sha512-SMZtWSLjls45KBgwvS2jWyXLtOI9j90JyQ6tJstl91Gti4W7QwZyF/nWwlFRz/Cx4Gy70DAtLT0EzXYXcPJJUw==", + "dev": true, + "dependencies": { + "is-error-instance": "^2.0.0", + "is-plain-obj": "^4.1.0" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/netlify/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/netlify/node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "dev": true, + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/netlify/node_modules/omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/netlify/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/netlify/node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dev": true, + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/netlify/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/os-name": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.1.0.tgz", + "integrity": "sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==", + "dev": true, + "dependencies": { + "macos-release": "^3.3.0", + "windows-release": "^6.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/netlify/node_modules/p-event": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^5.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-event/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-every": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-every/-/p-every-2.0.0.tgz", + "integrity": "sha512-MCz9DqD5opPC48Zsd+BHm56O/HfhYIQQtupfDzhXoVgQdg/Ux4F8/JcdRuQ+arq7zD5fB6zP3axbH3d9Nr8dlw==", + "dev": true, + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/p-every/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/p-filter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", + "dev": true, + "dependencies": { + "p-map": "^7.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/p-wait-for": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", + "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==", + "dev": true, + "dependencies": { + "p-timeout": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/package-directory": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/package-directory/-/package-directory-8.1.0.tgz", + "integrity": "sha512-qHKRW0pw3lYdZMQVkjDBqh8HlamH/LCww2PH7OWEp4Qrt3SFeYMNpnJrQzlSnGrDD5zGR51XqBh7FnNCdVNEHA==", + "dev": true, + "dependencies": { + "find-up-simple": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/package-json": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", + "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", + "dev": true, + "dependencies": { + "ky": "^1.2.0", + "registry-auth-token": "^5.0.2", + "registry-url": "^6.0.1", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/netlify/node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/netlify/node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/netlify/node_modules/parse-github-url": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", + "integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==", + "dev": true, + "bin": { + "parse-github-url": "cli.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/netlify/node_modules/parse-gitignore": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", + "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/netlify/node_modules/parse-imports": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", + "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", + "dev": true, + "license": "Apache-2.0 AND MIT", + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/netlify/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/parse-json/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/netlify/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/netlify/node_modules/peek-readable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", + "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/netlify/node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/netlify/node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/netlify/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/netlify/node_modules/pino": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz", + "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^4.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/netlify/node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "dev": true + }, + "node_modules/netlify/node_modules/pino/node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "dev": true, + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/netlify/node_modules/pino/node_modules/process-warning": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/netlify/node_modules/pino/node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/netlify/node_modules/pino/node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/netlify/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/netlify/node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/netlify/node_modules/postcss-values-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", + "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", + "dev": true, + "dependencies": { + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" + } + }, + "node_modules/netlify/node_modules/postcss-values-parser/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/netlify/node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/prebuild-install/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/netlify/node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/netlify/node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/precinct": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", + "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", + "dev": true, + "dependencies": { + "@dependents/detective-less": "^5.0.1", + "commander": "^12.1.0", + "detective-amd": "^6.0.1", + "detective-cjs": "^6.0.1", + "detective-es6": "^5.0.1", + "detective-postcss": "^7.0.1", + "detective-sass": "^6.0.1", + "detective-scss": "^5.0.1", + "detective-stylus": "^5.0.1", + "detective-typescript": "^14.0.0", + "detective-vue2": "^2.2.0", + "module-definition": "^6.0.1", + "node-source-walk": "^7.0.1", + "postcss": "^8.5.1", + "typescript": "^5.7.3" + }, + "bin": { + "precinct": "bin/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/prettyjson": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", + "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", + "dev": true, + "dependencies": { + "colors": "1.4.0", + "minimist": "^1.2.0" + }, + "bin": { + "prettyjson": "bin/prettyjson" + } + }, + "node_modules/netlify/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/netlify/node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/netlify/node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/netlify/node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/netlify/node_modules/ps-list": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.1.tgz", + "integrity": "sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/netlify/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "dev": true, + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true + }, + "node_modules/netlify/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/quote-unquote": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", + "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", + "dev": true + }, + "node_modules/netlify/node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "dev": true + }, + "node_modules/netlify/node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/raw-body/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/netlify/node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "dev": true, + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/read-package-up/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/netlify/node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/netlify/node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/netlify/node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/netlify/node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/netlify/node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/netlify/node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dev": true, + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/netlify/node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/netlify/node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/netlify/node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/require-package-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", + "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", + "dev": true + }, + "node_modules/netlify/node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/netlify/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/netlify/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/netlify/node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/netlify/node_modules/rollup": { + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/netlify/node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/netlify/node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/netlify/node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/netlify/node_modules/rxjs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/netlify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/netlify/node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true + }, + "node_modules/netlify/node_modules/safe-regex2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", + "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "dev": true, + "dependencies": { + "ret": "~0.4.0" + } + }, + "node_modules/netlify/node_modules/safe-regex2/node_modules/ret": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", + "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/safe-stable-stringify": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", + "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/netlify/node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "dev": true + }, + "node_modules/netlify/node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/netlify/node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/netlify/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/netlify/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/netlify/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/netlify/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/netlify/node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/netlify/node_modules/set-cookie-parser": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", + "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", + "dev": true + }, + "node_modules/netlify/node_modules/set-error-message": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-error-message/-/set-error-message-2.0.1.tgz", + "integrity": "sha512-s/eeP0f4ed1S3fl0KbxZoy5Pbeg5D6Nbple9nut4VPwHTvEIk5r7vKq0FwjNjszdUPdlTrs4GJCOkWUqWeTeWg==", + "dev": true, + "dependencies": { + "normalize-exception": "^3.0.0" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/netlify/node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/netlify/node_modules/sharp/node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/netlify/node_modules/sharp/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/sharp/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/netlify/node_modules/sharp/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true + }, + "node_modules/netlify/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/netlify/node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/netlify/node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/netlify/node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/netlify/node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/netlify/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true, + "license": "ISC" + }, + "node_modules/netlify/node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/netlify/node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/netlify/node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/netlify/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/netlify/node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true + }, + "node_modules/netlify/node_modules/split2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", + "integrity": "sha512-cfurE2q8LamExY+lJ9Ex3ZfBwqAPduzOKVscPDXNCLLMvyaeD3DTz1yk7fVIs6Chco+12XeD0BB6HEoYzPYbXA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0" + } + }, + "node_modules/netlify/node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/netlify/node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/netlify/node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/netlify/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/std-env": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", + "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/netlify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/netlify/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/netlify/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/netlify/node_modules/strip-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-3.0.0.tgz", + "integrity": "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==", + "dev": true, + "dependencies": { + "inspect-with-kind": "^1.0.5", + "is-plain-obj": "^1.1.0" + } + }, + "node_modules/netlify/node_modules/strip-dirs/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/netlify/node_modules/strtok3": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", + "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/netlify/node_modules/stubborn-fs": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", + "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==", + "dev": true + }, + "node_modules/netlify/node_modules/supports-color": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", + "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/netlify/node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/netlify/node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/netlify/node_modules/svgo": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", + "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/netlify/node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/netlify/node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/tar-fs": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/netlify/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/netlify/node_modules/tar/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/terminal-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", + "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^3.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/netlify/node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "dev": true + }, + "node_modules/netlify/node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "dev": true, + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/netlify/node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/netlify/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/netlify/node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/netlify/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/netlify/node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/netlify/node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/netlify/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/netlify/node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/netlify/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/netlify/node_modules/token-types": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", + "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/netlify/node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true + }, + "node_modules/netlify/node_modules/tomlify-j0.4": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz", + "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==", + "dev": true + }, + "node_modules/netlify/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/netlify/node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, + "node_modules/netlify/node_modules/ts-api-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/netlify/node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true } } }, - "ansi-regex": { + "node_modules/netlify/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/netlify/node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/netlify/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/netlify/node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dev": true, + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/ulid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.0.tgz", + "integrity": "sha512-yvZYdXInnJve6LdlPIuYmURdS2NP41ZoF4QW7SXwbUKYt53+0eDAySO+rGSvM2O/ciuB/G+8N7GQrZ1mCJpuqw==", + "dev": true, + "bin": { + "ulid": "dist/cli.js" + } + }, + "node_modules/netlify/node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/netlify/node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "dev": true + }, + "node_modules/netlify/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/netlify/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/universal-user-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", + "dev": true + }, + "node_modules/netlify/node_modules/unix-dgram": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz", + "integrity": "sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.16.0" + }, + "engines": { + "node": ">=0.10.48" + } + }, + "node_modules/netlify/node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/netlify/node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "dev": true, + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/netlify/node_modules/update-notifier": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", + "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", + "dev": true, + "dependencies": { + "boxen": "^8.0.1", + "chalk": "^5.3.0", + "configstore": "^7.0.0", + "is-in-ci": "^1.0.0", + "is-installed-globally": "^1.0.0", + "is-npm": "^6.0.0", + "latest-version": "^9.0.0", + "pupa": "^3.1.0", + "semver": "^7.6.3", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/netlify/node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", + "dev": true + }, + "node_modules/netlify/node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/netlify/node_modules/urlpattern-polyfill": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", + "dev": true + }, + "node_modules/netlify/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/netlify/node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/netlify/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/netlify/node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/netlify/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/netlify/node_modules/validate-npm-package-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/netlify/node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/wait-port": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-1.1.0.tgz", + "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "commander": "^9.3.0", + "debug": "^4.3.4" + }, + "bin": { + "wait-port": "bin/wait-port.js" + }, + "engines": { + "node": ">=10" + } }, - "ansi-styles": { + "node_modules/netlify/node_modules/wait-port/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { + "dev": true, + "dependencies": { "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/wait-port/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/netlify/node_modules/wait-port/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "node_modules/netlify/node_modules/wait-port/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/netlify/node_modules/wait-port/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "engines": { + "node": "^12.20.0 || >=14" } }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==" + "node_modules/netlify/node_modules/wait-port/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "node_modules/netlify/node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/netlify/node_modules/web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "dev": true, + "engines": { + "node": ">= 8" + } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/netlify/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "node_modules/netlify/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/netlify/node_modules/when-exit": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.3.tgz", + "integrity": "sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==", "dev": true }, - "autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "node_modules/netlify/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/netlify/node_modules/which/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "node_modules/netlify/node_modules/widest-line": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", + "dev": true, + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/netlify/node_modules/widest-line/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/netlify/node_modules/widest-line/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/windows-release": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.1.0.tgz", + "integrity": "sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==", + "dev": true, "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "execa": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "boxen": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", - "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.0", - "chalk": "^5.0.1", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } + "node_modules/netlify/node_modules/windows-release/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/netlify/node_modules/windows-release/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/netlify/node_modules/windows-release/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "requires": { - "fill-range": "^7.0.1" + "engines": { + "node": ">=16.17.0" } }, - "browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "node_modules/netlify/node_modules/windows-release/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node_modules/netlify/node_modules/windows-release/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "node_modules/netlify/node_modules/windows-release/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true + "node_modules/netlify/node_modules/windows-release/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "node_modules/netlify/node_modules/windows-release/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "node_modules/netlify/node_modules/winston": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", + "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "node_modules/netlify/node_modules/winston-transport": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "dev": true, + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } }, - "camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==" + "node_modules/netlify/node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } }, - "camelcase-css": { + "node_modules/netlify/node_modules/winston/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", - "dev": true + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "node_modules/netlify/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "requires": { - "chalk": "^4.1.2" + "node_modules/netlify/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "restore-cursor": "^3.1.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "cli-spinners": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.8.0.tgz", - "integrity": "sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==", + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "clipboardy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", - "requires": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/netlify/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "mimic-response": "^1.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "color-convert": { + "node_modules/netlify/node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { + "dev": true, + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "node_modules/netlify/node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "component-emitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz", - "integrity": "sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, + "node_modules/netlify/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/netlify/node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true + "node_modules/netlify/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "requires": { - "ms": "^2.1.3" + "node_modules/netlify/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/netlify/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "dev": true, - "requires": { - "mimic-response": "^3.1.0" + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true } } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "node_modules/netlify/node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/netlify/node_modules/xss": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", "dev": true, - "requires": { - "clone": "^1.0.2" + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" } }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/netlify/node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "node_modules/netlify/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "engines": { + "node": ">=0.4" } }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/netlify/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "engines": { + "node": ">=10" } }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/netlify/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "requires": { - "path-type": "^4.0.0" + "engines": { + "node": ">=18" } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/netlify/node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, - "requires": { - "esutils": "^2.0.2" + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "electron-to-chromium": { - "version": "1.4.806", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.806.tgz", - "integrity": "sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==", - "dev": true - }, - "elm": { - "version": "0.19.1-6", - "resolved": "https://registry.npmjs.org/elm/-/elm-0.19.1-6.tgz", - "integrity": "sha512-mKYyierHICPdMx/vhiIacdPmTPnh889gjHOZ75ZAoCxo3lZmSWbGP8HMw78wyctJH0HwvTmeKhlYSWboQNYPeQ==", + "node_modules/netlify/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { - "@elm_binaries/darwin_arm64": "0.19.1-0", - "@elm_binaries/darwin_x64": "0.19.1-0", - "@elm_binaries/linux_x64": "0.19.1-0", - "@elm_binaries/win32_x64": "0.19.1-0" + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "elm-format": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.7.tgz", - "integrity": "sha512-sVzFXfWnb+6rzXK+q3e3Ccgr6/uS5mFbFk1VSmigC+x2XZ28QycAa7lS8owl009ALPhRQk+pZ95Eq5ANjpEZsQ==", + "node_modules/netlify/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "requires": { - "@avh4/elm-format-darwin-arm64": "0.8.7-2", - "@avh4/elm-format-darwin-x64": "0.8.7-2", - "@avh4/elm-format-linux-arm64": "0.8.7-2", - "@avh4/elm-format-linux-x64": "0.8.7-2", - "@avh4/elm-format-win32-x64": "0.8.7-2" + "engines": { + "node": ">=12" } }, - "elm-review": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/elm-review/-/elm-review-2.10.3.tgz", - "integrity": "sha512-9gBqLc5Xm3v9Ncpf8y2haEaBZZyMX25vmwQkrNqSIaNYQ2vdGOIx1eyqRtt1xwX5O8pZdqU8IWC/ENyTrOTKbw==", + "node_modules/netlify/node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "requires": { - "chalk": "^4.0.0", - "chokidar": "^3.5.2", - "cross-spawn": "^7.0.3", - "elm-tooling": "^1.14.1", - "fastest-levenshtein": "^1.0.16", - "find-up": "^4.1.0", - "folder-hash": "^3.3.0", - "fs-extra": "^9.0.0", - "glob": "^7.1.4", - "got": "^11.8.5", - "graceful-fs": "^4.2.11", - "minimist": "^1.2.6", - "ora": "^5.4.0", - "path-key": "^3.1.1", - "prompts": "^2.2.1", - "rimraf": "^5.0.0", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.1.1", - "which": "^2.0.2", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", - "dev": true, - "requires": { - "glob": "^10.2.5" - }, - "dependencies": { - "glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } - } - } - } + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "elm-taskport": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/elm-taskport/-/elm-taskport-2.0.1.tgz", - "integrity": "sha512-8UgIjzmGuoU6Wt6VC0tkJnzvc5xHL5yH7GdN+/QNxaaA3ckoyveCtV0QJqNCRa42bpyR1JhOwLSApwf2Id5xZg==" - }, - "elm-tooling": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/elm-tooling/-/elm-tooling-1.15.0.tgz", - "integrity": "sha512-quRE5LGJyrkPBoJ3MvFQ5RGgf80J0L0d3NkduStvXh4TmZuMXNC3Z/l2ZRoq2UTUaNWeYfO1Zx5wns1AvsTrnw==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encoding-japanese": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz", - "integrity": "sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/netlify/node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true + "node_modules/netlify/node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } }, - "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "esbuild-plugin-wasm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esbuild-plugin-wasm/-/esbuild-plugin-wasm-1.1.0.tgz", - "integrity": "sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==", - "dev": true + "node_modules/netlify/node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + "node_modules/netlify/node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "dev": true, + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } + "node_modules/netlify/node_modules/zip-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/netlify/node_modules/zip-stream/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" - }, - "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/netlify/node_modules/zip-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/netlify/node_modules/zip-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "requires": { - "estraverse": "^5.1.0" + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/netlify/node_modules/zod": { + "version": "3.24.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", + "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "node_modules/netlify/site": { + "name": "cli-docs-site", + "version": "1.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@astrojs/starlight": "^0.31.1", + "astro": "^5.1.5", + "markdown-magic": "2.6.1", + "sharp": "^0.32.5", + "strip-ansi": "7.1.0" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/netlify/tools/lint-rules": { + "name": "eslint-plugin-workspace", + "extraneous": true }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true } } }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } + "license": "MIT" }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/node-mock-http": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.1.tgz", + "integrity": "sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==", + "dev": true, + "license": "MIT" }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", "dev": true, - "requires": { - "reusify": "^1.0.4" + "license": "MIT", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", "dev": true, - "requires": { - "pend": "~1.2.0" - } + "license": "MIT" }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", "dev": true, - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } + "license": "MIT" }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/oniguruma-to-es": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", + "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "file-type": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz", - "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==", - "requires": { - "get-stream": "^9.0.1", - "strtok3": "^9.0.1", - "token-types": "^6.0.0", - "uint8array-extras": "^1.3.0" - }, - "dependencies": { - "get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "requires": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - } - }, - "is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==" - } + "license": "MIT", + "dependencies": { + "oniguruma-parser": "^0.12.1", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", "dev": true, - "requires": { - "to-regex-range": "^5.0.1" + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/p-queue": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", + "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" }, - "folder-hash": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-3.3.3.tgz", - "integrity": "sha512-SDgHBgV+RCjrYs8aUwCb9rTgbTVuSdzvFmLaChsLre1yf+D64khCW++VYciaByZ8Rm0uKF8R/XEpXuTRSGUM1A==", + "node_modules/package-manager-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", "dev": true, - "requires": { - "debug": "^4.1.1", - "graceful-fs": "~4.2.0", - "minimatch": "~3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } + "license": "MIT" }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true, + "license": "MIT" }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", "dev": true, - "requires": { - "is-callable": "^1.1.3" + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, + "license": "MIT", "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "requires": { - "fetch-blob": "^3.1.2" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "node_modules/peek-readable": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", + "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } + "license": "ISC" }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "requires": { - "pump": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, - "requires": { - "is-glob": "^4.0.1" + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "dev": true, - "requires": { - "type-fest": "^0.20.2" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "gren-compiler-library": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gren-compiler-library/-/gren-compiler-library-0.3.0.tgz", - "integrity": "sha512-CvcdoHYJuqwc4BUKvQPPhtegTUmW5I6rhQlKxxmu+qRbDYFeB/cypM3Xha3aqJr9l14JdmL5fMichENRqg3CBg==", + "node_modules/purgecss": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-7.0.2.tgz", + "integrity": "sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ==", "dev": true, - "requires": { - "follow-redirects": "^1.15.2", - "xdg-basedir": "^5.1.0" + "license": "MIT", + "dependencies": { + "commander": "^12.1.0", + "glob": "^11.0.0", + "postcss": "^8.4.47", + "postcss-selector-parser": "^6.1.2" + }, + "bin": { + "purgecss": "bin/purgecss.js" } }, - "gren-lang": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gren-lang/-/gren-lang-0.3.0.tgz", - "integrity": "sha512-Gl/0jckyK97BH/lUPj68vP4m05d1QTrLlhZ2ELQgKfDJu8PVKeG+LtRRkdpIzcncCfgR/htWdwt2UkwpPXzalA==", - "dev": true, - "requires": { - "gren-compiler-library": "0.3.0" + "node_modules/query-string": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.1.tgz", + "integrity": "sha512-3jTGGLRzlhu/1ws2zlr4Q+GVMLCQTLFOj8CMX5x44cdZG9FQE07x2mQhaNxaKVPNmIDu0mvJ/cEwtY7Pim7hqA==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.4.1", + "filter-obj": "^5.1.0", + "split-on-first": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", "dev": true, - "requires": { - "function-bind": "^1.1.1" - } + "license": "MIT" }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.2" + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" } }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "node_modules/react-redux": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "requires": { - "function-bind": "^1.1.2" + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.9.2" } }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "node_modules/redux-devtools-extension": { + "version": "2.13.9", + "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz", + "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==", + "deprecated": "Package moved to @redux-devtools/extension.", + "license": "MIT", + "peerDependencies": { + "redux": "^3.1.0 || ^4.0.0" + } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "node_modules/redux-sentry-middleware": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/redux-sentry-middleware/-/redux-sentry-middleware-0.1.8.tgz", + "integrity": "sha512-xubpYH9RgE31tZUESeRW5agwQa19Yd6Gy+4iO09raW/2TITPO5fhJdXpVwJfpGMbIYhEmHFqE2wD5Lnz7YtAeA==", + "license": "MIT" }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "license": "MIT", + "peerDependencies": { + "redux": "^4" + } }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", + "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "dev": true, + "license": "MIT" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", "dev": true, - "requires": { - "binary-extensions": "^2.0.0" + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", "dev": true, - "requires": { - "has": "^1.0.3" + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-port-reachable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", - "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "license": "MIT", + "dependencies": { + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" + "node_modules/remove": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/remove/-/remove-0.1.5.tgz", + "integrity": "sha512-AJMA9oWvJzdTjwIGwSQZsjGQiRx73YTmiOWmfCp1fpLa/D4n7jKcpoA+CZiVLJqKcEKUuh1Suq80c5wF+L/qVQ==", + "license": "MIT", + "dependencies": { + "seq": ">= 0.3.5" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "node_modules/reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==", + "license": "MIT" }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/restructure": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", + "dev": true, + "license": "MIT" }, - "jackspeak": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", - "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", "dev": true, - "requires": { - "argparse": "^2.0.1" + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "license": "MIT", + "dependencies": { + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - }, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "dev": true, + "license": "MIT", "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "just-install": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/just-install/-/just-install-2.0.2.tgz", - "integrity": "sha512-zH6aon3V2P8ZbD+njaMB/orHsOyFMgONSpxKtbovNu7Bhb1rD9qhnMkT2Nj91++b9GgqHNbozhUdIMxecmWJaw==", - "dev": true, - "requires": { - "extract-zip": "^2.0.1", - "node-fetch": "^3.3.2" - }, - "dependencies": { - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - } + "node_modules/riff-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/riff-file/-/riff-file-1.0.3.tgz", + "integrity": "sha512-Vv8wwGr0BCks7VMI3Lv0houZee4DaHFjjTT0LMhMJKio2YmLncLeIVpK63ydSverngNk8XQPU3fbeP3bWgSIig==", + "license": "MIT", + "dependencies": { + "byte-data": "^18.0.3" + }, + "engines": { + "node": ">=8" } }, - "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "node_modules/rollup": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", + "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==", "dev": true, - "requires": { - "json-buffer": "3.0.1" + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.44.0", + "@rollup/rollup-android-arm64": "4.44.0", + "@rollup/rollup-darwin-arm64": "4.44.0", + "@rollup/rollup-darwin-x64": "4.44.0", + "@rollup/rollup-freebsd-arm64": "4.44.0", + "@rollup/rollup-freebsd-x64": "4.44.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", + "@rollup/rollup-linux-arm-musleabihf": "4.44.0", + "@rollup/rollup-linux-arm64-gnu": "4.44.0", + "@rollup/rollup-linux-arm64-musl": "4.44.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", + "@rollup/rollup-linux-riscv64-gnu": "4.44.0", + "@rollup/rollup-linux-riscv64-musl": "4.44.0", + "@rollup/rollup-linux-s390x-gnu": "4.44.0", + "@rollup/rollup-linux-x64-gnu": "4.44.0", + "@rollup/rollup-linux-x64-musl": "4.44.0", + "@rollup/rollup-win32-arm64-msvc": "4.44.0", + "@rollup/rollup-win32-ia32-msvc": "4.44.0", + "@rollup/rollup-win32-x64-msvc": "4.44.0", + "fsevents": "~2.3.2" } }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/sass": { + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" } }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "load-script2": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/load-script2/-/load-script2-2.0.6.tgz", - "integrity": "sha512-pyuw/AR+ycZkRKgkMyXOIf/o2OnRQPc9grjZ04wVOeoJ7SqX97WlcZahl+3/r5qi09L/5d0iCVZ0q4OqNT/v0Q==" - }, - "localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "requires": { - "lie": "3.1.1" - }, - "dependencies": { - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "requires": { - "immediate": "~3.0.5" - } - } + "node_modules/seq": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", + "integrity": "sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g==", + "license": "MIT/X11", + "dependencies": { + "chainsaw": ">=0.0.7 <0.1", + "hashish": ">=0.0.2 <0.1" + }, + "engines": { + "node": "*" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "requires": { - "yallist": "^4.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" - }, - "mediainfo.js": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/mediainfo.js/-/mediainfo.js-0.3.3.tgz", - "integrity": "sha512-+k6cobEQ0Ies/XajglElyHZyguxzEfnztGrZ+bEcuJ4gK74MeN1T0aX1DIFAMRwmFsnJlTJVTiOHJHWZssEJjA==", - "requires": { - "yargs": "^17.7.2" + "node_modules/shiki": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.7.0.tgz", + "integrity": "sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.7.0", + "@shikijs/engine-javascript": "3.7.0", + "@shikijs/engine-oniguruma": "3.7.0", + "@shikijs/langs": "3.7.0", + "@shikijs/themes": "3.7.0", + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "node_modules/signal-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/signal-polyfill/-/signal-polyfill-0.2.2.tgz", + "integrity": "sha512-p63Y4Er5/eMQ9RHg0M0Y64NlsQKpiu6MDdhBXpyywRuWiPywhJTpKJ1iB5K2hJEbFZ0BnDS7ZkJ+0AfTuL37Rg==", + "license": "Apache-2.0" }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" + "node_modules/smol-toml": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz", + "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" } }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "music-metadata": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-10.6.0.tgz", - "integrity": "sha512-YRTM8KhXZHe1zBsBKA+1JwZBR7SYP/6S/9tm+FRne9dD6SdC6F+s3e5+OugwaChh/zxmAb/yw6SaLAhHZxvIiA==", - "requires": { - "@tokenizer/token": "^0.3.0", - "content-type": "^1.0.5", - "debug": "^4.3.7", - "file-type": "^19.6.0", - "media-typer": "^1.1.0", - "strtok3": "^9.0.1", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "node_modules/spellcaster": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/spellcaster/-/spellcaster-6.0.0.tgz", + "integrity": "sha512-BLHYZFnvf5XtVwVr2x/esn7gJjUCevywkJoVmlN33MrneSR7AVTTYkeu6Nt9NUguGaOv11yb4zjLo5hV0PYj0w==", + "license": "MIT", + "dependencies": { + "signal-polyfill": "^0.2.0" + } }, - "normalize-path": { + "node_modules/split-on-first": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", + "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "wrappy": "1" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", "dependencies": { - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - } + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true + "node_modules/strtok3": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.1.tgz", + "integrity": "sha512-3JWEZM6mfix/GCJBBUrkA8p2Id2pBkyTkVCJKto55w080QBKZ+8R171fGrbiSp+yMO/u6F8/yUh7K4V9K+YCnw==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" + "node_modules/subsonic-api": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/subsonic-api/-/subsonic-api-3.1.2.tgz", + "integrity": "sha512-EPuqd+z/6v/AbZhd25/5AN+QWsdFQ9K1SHd3N9PIN7Jheo9+L2bsmrbpjJ7D/AgnrmiSmlwhdfnkiaC83hVsfQ==", + "license": "MIT", + "dependencies": { + "typescript": "^5.7.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/then-read-stream": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/then-read-stream/-/then-read-stream-1.5.1.tgz", + "integrity": "sha512-I+iiemYWhp1ysJQEioqpEICgvHlqHS5WrQGZkboFLs7Jm350Kvq4cN3qRCzHpETUuq5+NsdrdWEg6M0NFxtwtQ==", + "deprecated": "Package renamed to peak-readable.", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "license": "MIT" }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, - "requires": { - "callsites": "^3.0.0" + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node_modules/tinyqueue": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", + "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==", + "license": "ISC" }, - "path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, + "license": "MIT", + "optional": true, "dependencies": { - "lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "peek-readable": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.3.1.tgz", - "integrity": "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==" - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "postcss": { - "version": "8.4.34", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", - "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", - "dev": true, - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "node_modules/token-types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", + "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "postcss-custom-properties": { - "version": "13.3.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.4.tgz", - "integrity": "sha512-9YN0gg9sG3OH+Z9xBrp2PWRb+O4msw+5Sbp3ZgqrblrwKspXVQe5zr5sVqi43gJGwW/Rv1A483PRQUzQOEewvA==", + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true, - "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.7", - "@csstools/css-parser-algorithms": "^2.5.0", - "@csstools/css-tokenizer": "^2.2.3", - "postcss-value-parser": "^4.2.0" + "license": "MIT" + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" } }, - "postcss-import": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.0.0.tgz", - "integrity": "sha512-e77lhVvrD1I2y7dYmBv0k9ULTdArgEYZt97T4w6sFIU5uxIHvDFQlKgUUyY7v7Barj0Yf/zm5A4OquZN7jKm5Q==", + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "dev": true, - "requires": { - "camelcase-css": "^2.0.1" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "node_modules/tsconfck": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.11" - } + "license": "0BSD" }, - "postcss-selector-parser": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz", - "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==", + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "license": "MIT" + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + "node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "dev": true, + "license": "MIT" }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "dev": true, + "license": "MIT" }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true, + "license": "MIT" }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "license": "MIT", "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" } }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, - "requires": { - "picomatch": "^2.2.1" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "node_modules/unifont": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.2.tgz", + "integrity": "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.0" } }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", - "requires": { - "rc": "^1.0.1" - } - }, - "remotestoragejs": { - "version": "2.0.0-beta.6", - "resolved": "https://registry.npmjs.org/remotestoragejs/-/remotestoragejs-2.0.0-beta.6.tgz", - "integrity": "sha512-xGBmCPe99F4Gs/IEEzvGFjlmOkG48rRCSFz4+7xFNVs4WUJ3nzkm+fQbKelTB2HHErgOLSIyxc2dloqhI5srAQ==", - "requires": { - "@types/node": "16.11.59", - "@types/tv4": "^1.2.29", - "esm": "^3.2.25", - "fsevents": "^2.3.2", - "tv4": "^1.3.0", - "webfinger.js": "^2.7.1", - "xhr2": "^0.2.1" - }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": { - "version": "16.11.59", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", - "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==" - } + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "resolve-from": { + "node_modules/unist-util-modify-children": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", "dev": true, - "requires": { - "glob": "^7.1.3" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "queue-microtask": "^1.2.2" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serve": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.1.tgz", - "integrity": "sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA==", - "requires": { - "@zeit/schemas": "2.29.0", - "ajv": "8.11.0", - "arg": "5.0.2", - "boxen": "7.0.0", - "chalk": "5.0.1", - "chalk-template": "0.4.0", - "clipboardy": "3.0.0", - "compression": "1.7.4", - "is-port-reachable": "4.0.0", - "serve-handler": "6.1.5", - "update-check": "1.5.4" + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "dev": true, + "license": "MIT", "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - } + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "node_modules/unstorage": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", + "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", "dev": true, - "requires": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.2", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.6", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "node_modules/unstorage/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "node_modules/utf8-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utf8-buffer/-/utf8-buffer-1.0.0.tgz", + "integrity": "sha512-ueuhzvWnp5JU5CiGSY4WdKbiN/PO2AZ/lpeLiz2l38qwdLy/cW40XobgyuIWucNyum0B33bVB0owjFCeGBSLqg==", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } }, - "source-map-js": { + "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, - "stream": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.3.tgz", - "integrity": "sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==", - "dev": true, - "requires": { - "component-emitter": "^2.0.0" - } + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, - "requires": { - "ansi-regex": "^5.0.1" + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strtok3": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.0.1.tgz", - "integrity": "sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw==", - "requires": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.3.1" + "node_modules/vite-plugin-wasm": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.4.1.tgz", + "integrity": "sha512-ja3nSo2UCkVeitltJGkS3pfQHAanHv/DqGatdI39ja6McgABlpsZ5hVgl6wuR8Qx5etY3T5qgDQhOWzc5RReZA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "vite": "^2 || ^3 || ^4 || ^5 || ^6" } }, - "sucrase": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "node_modules/vite-tsconfig-paths": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", + "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true } } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" + "node_modules/vitefu": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.7.tgz", + "integrity": "sha512-eRWXLBbJjW3X5z5P5IHcSm2yYbYRPb2kQuc+oqsbAl99WB5kVsPbiiox+cymo8twTzifA6itvhr2CmjnaZZp0Q==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webamp": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/webamp/-/webamp-2.1.2.tgz", + "integrity": "sha512-WbxvG+hQ1eo5d1oLHHw6ncu87ZKj6T5BBFr0vdgUFTDKJI1kuNa4vvIzGDQAJuAPN1zRrhaq/PvX7/Hz82VR+g==", + "license": "MIT", + "dependencies": { + "@sentry/browser": "5.9.1", + "ani-cursor": "^0.0.4", + "butterchurn": "^3.0.0-beta.3", + "butterchurn-presets": "3.0.0-beta.4", + "classnames": "^2.2.5", + "fscreen": "^1.0.2", + "invariant": "^2.2.3", + "jszip": "^3.10.1", + "lodash": "^4.17.21", + "milkdrop-preset-converter-aws": "^0.1.6", + "music-metadata-browser": "^0.6.1", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-redux": "^8.0.5", + "redux": "^5.0.0-alpha.0", + "redux-devtools-extension": "^2.13.9", + "redux-sentry-middleware": "^0.1.3", + "redux-thunk": "^2.4.0", + "reselect": "^3.0.1", + "tinyqueue": "^1.2.3", + "winamp-eqf": "^1.0.0" + } + }, + "node_modules/webamp/node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", - "dev": true, - "requires": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - } + "node_modules/webamp/node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" } }, - "tailwindcss-animations": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tailwindcss-animations/-/tailwindcss-animations-2.0.0.tgz", - "integrity": "sha512-YLdhPiQeDtpnqWd0J70rvy08MDbsq+BBLrzMmPR1Pe6MJDFYDuk4CYGI14GVgj7xRBGkByzp/rAfBcUWD7zpng==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } + "node_modules/webamp/node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" }, - "tailwindcss-interaction-variants": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tailwindcss-interaction-variants/-/tailwindcss-interaction-variants-5.0.0.tgz", - "integrity": "sha512-Tmx9HjwuNA3G7cLUcebGkNchKkNVIZXBroxa0LBoq/KUb/xEKEM8qugUG7QczSNPhaZzpXmo3IzPkRhf4tDaOQ==", + "node_modules/webamp/node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true, - "requires": { - "lodash": "^4.17.19", - "postcss-selector-parser": "^6.0.2" - } + "license": "BSD-2-Clause" }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "any-promise": "^1.0.0" + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "throttle-debounce": { + "node_modules/widest-line": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", - "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==" - }, - "timer.js": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/timer.js/-/timer.js-1.0.4.tgz", - "integrity": "sha512-UU/lL02CjPMu8cu29h/uyt5yBqcm0vlx51Je9xCmVcH+TLS+X/+chv4V4rHlb37ZiI4iUVyLuC3QvyoFMzadwQ==" - }, - "tiny-parse-argv": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tiny-parse-argv/-/tiny-parse-argv-2.4.0.tgz", - "integrity": "sha512-WTEsnmeHNr99hLQIDA+gnsS+fDsCDITlqgI+zEhx9M6ErPt0heoNZ1PGvql6wcf95sIx40J0MLYXaPveGwtpoA==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", + "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", "dev": true, - "requires": { - "is-number": "^7.0.0" + "license": "MIT", + "dependencies": { + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tocca": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/tocca/-/tocca-2.0.9.tgz", - "integrity": "sha512-FXofUGAFcgEIEOS3m9Dk9URaY3x+JeerPfVFc8K820PjV0JcCsH98BFxrVOTANC8YvM4QTrmKMol2/818gFmCw==" + "node_modules/winamp-eqf": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/winamp-eqf/-/winamp-eqf-1.0.0.tgz", + "integrity": "sha512-yUIb4+lTYBKP4L6nPXdDj1CQBXlJ+/PrNAkT1VbTAgeFjX8lPxAthsUE5NxQP4s8SO4YMJemsrErZ49Bh+/Veg==", + "license": "ISC" }, - "token-types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", - "requires": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": {} - }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true - }, - "uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==" - }, - "uint8arrays": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", - "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", - "requires": { - "multiformats": "^12.0.1" - }, + "license": "MIT", "dependencies": { - "multiformats": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.0.1.tgz", - "integrity": "sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==" - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "requires": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - } - }, - "update-check": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", - "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", - "requires": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" - } + "license": "MIT" }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "node_modules/xxh32": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/xxh32/-/xxh32-2.0.5.tgz", + "integrity": "sha512-glQIaPvLHV4xG2Sn0E4mZWY25JT34+XcG4e2c8OMIH2SXxVrm6MmJ8miCsqGBLtf+rn2YcaeS11vq/66vkXGUQ==", + "license": "MIT" }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/xxhash-wasm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", + "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", "dev": true, - "requires": { - "defaults": "^1.0.3" - } + "license": "MIT" }, - "web-streams-polyfill": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", - "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", - "dev": true - }, - "webfinger.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/webfinger.js/-/webfinger.js-2.7.1.tgz", - "integrity": "sha512-H4RokaE4RC39N3uiRTcjKMmy6yYg06lUPORQHvv8DjowZ6I5SalxUeoqHbtTN3EVBmYP/XHQ8Ow6BLEIpe2DtA==", - "requires": { - "xhr2": "0.2.1" + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "node_modules/yocto-spinner": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", + "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { - "string-width": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/zod": { + "version": "3.25.67", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", + "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "dev": true - }, - "xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "node_modules/zod-to-ts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", + "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", + "dev": true, + "peerDependencies": { + "typescript": "^4.9.4 || ^5.0.2", + "zod": "^3" } }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } } } diff --git a/package.json b/package.json index b4a27019d..f6c35fa2a 100644 --- a/package.json +++ b/package.json @@ -1,66 +1,43 @@ { - "name": "diffuse", - "description": "A music player that connects to your cloud/distributed storage", - "version": "3.5.0", - "author": "Steven Vandevelde ", - "homepage": "https://diffuse.sh", - "repository": "github:icidasset/diffuse", - "license": "SEE LICENSE IN LICENSE", - "devDependencies": { - "@tauri-apps/api": "^2.0.0-beta.0", - "@tauri-apps/cli": "^2.0.0-beta.0", - "@tauri-apps/plugin-dialog": "^2.0.0-beta.0", - "@tauri-apps/plugin-fs": "^2.0.0-beta.0", - "@tauri-apps/plugin-shell": "^2.0.0-beta.0", - "@types/elm": "^0.19.3", - "@types/file-saver": "^2.0.7", - "@types/lunr": "^2.3.7", - "@types/throttle-debounce": "^5.0.2", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "assert": "^2.1.0", - "autoprefixer": "^10.4.19", - "buffer": "^6.0.3", - "elm": "0.19.1-6", - "elm-format": "^0.8.7", - "elm-review": "^2.10.3", - "esbuild": "^0.20.2", - "esbuild-plugin-wasm": "^1.1.0", - "eslint": "^8.56.0", - "events": "^3.3.0", - "gren-lang": "^0.3.0", - "just-install": "^2.0.2", - "postcss": "^8.4.34", - "postcss-custom-properties": "^13.3.4", - "postcss-import": "^16.0.0", - "stream": "^0.0.3", - "tailwindcss": "^3.4.1", - "tailwindcss-animations": "^2.0.0", - "tailwindcss-interaction-variants": "^5.0.0", - "tiny-parse-argv": "^2.4.0" - }, "dependencies": { - "@tokenizer/http": "^0.9.1", - "@tokenizer/range": "^0.10.0", - "elm-taskport": "^2.0.1", - "encoding-japanese": "^2.0.0", - "fast-text-encoding": "^1.0.6", - "file-saver": "^2.0.2", - "jszip": "^3.7.1", - "load-script2": "^2.0.5", - "localforage": "^1.10.0", - "lunr": "^2.3.8", - "mediainfo.js": "0.3.3", - "music-metadata": "^10.6.0", - "readable-stream": "^4.5.2", - "remotestoragejs": "^2.0.0-beta.6", - "serve": "^14.2.1", - "throttle-debounce": "^5.0.0", - "timer.js": "^1.0.4", - "tocca": "^2.0.9", - "uint8arrays": "^4.0.10" + "@automerge/automerge": "^3.0.0-beta.0", + "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", + "@js-temporal/polyfill": "^0.5.1", + "@okikio/sharedworker": "^1.1.0", + "@okikio/transferables": "npm:@jsr/okikio__transferables@^1.0.2", + "@orama/orama": "^3.1.7", + "@orama/plugin-qps": "^3.1.7", + "@phosphor-icons/web": "^2.1.2", + "@picocss/pico": "^2.1.1", + "@std/media-types": "npm:@jsr/std__media-types@^1.1.0", + "@tokenizer/http": "^0.9.2", + "@tokenizer/range": "^0.13.0", + "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", + "98.css": "^0.1.21", + "comlink": "^4.4.2", + "fast-average-color": "^9.5.0", + "iconoir": "^7.11.0", + "idb-keyval": "^6.2.1", + "music-metadata": "^11.2.3", + "query-string": "^9.1.2", + "spellcaster": "^6.0.0", + "subsonic-api": "^3.1.2", + "throttle-debounce": "^5.0.2", + "uint8arrays": "^5.1.0", + "uri-js": "^4.4.1", + "webamp": "^2.1.2", + "xxh32": "^2.0.5" }, - "scripts": { - "tauri": "tauri" + "devDependencies": { + "@types/throttle-debounce": "^5.0.2", + "@types/wicg-file-system-access": "^2023.10.6", + "astro": "^5.7.4", + "astro-purgecss": "^5.2.2", + "astro-scope": "^3.0.1", + "netlify": "^22.1.0", + "purgecss": "^7.0.2", + "sass": "^1.87.0", + "vite-plugin-wasm": "^3.4.1", + "vite-tsconfig-paths": "^5.1.4" } } diff --git a/src/Static/Favicons/android-chrome-192x192.png b/public/favicons/android-chrome-192x192.png similarity index 100% rename from src/Static/Favicons/android-chrome-192x192.png rename to public/favicons/android-chrome-192x192.png diff --git a/src/Static/Favicons/android-chrome-512x512.png b/public/favicons/android-chrome-512x512.png similarity index 100% rename from src/Static/Favicons/android-chrome-512x512.png rename to public/favicons/android-chrome-512x512.png diff --git a/src/Static/Favicons/apple-touch-icon.png b/public/favicons/apple-touch-icon.png similarity index 100% rename from src/Static/Favicons/apple-touch-icon.png rename to public/favicons/apple-touch-icon.png diff --git a/src/Static/Favicons/browserconfig.xml b/public/favicons/browserconfig.xml similarity index 100% rename from src/Static/Favicons/browserconfig.xml rename to public/favicons/browserconfig.xml diff --git a/src/Static/Favicons/favicon-16x16.png b/public/favicons/favicon-16x16.png similarity index 100% rename from src/Static/Favicons/favicon-16x16.png rename to public/favicons/favicon-16x16.png diff --git a/src/Static/Favicons/favicon-32x32.png b/public/favicons/favicon-32x32.png similarity index 100% rename from src/Static/Favicons/favicon-32x32.png rename to public/favicons/favicon-32x32.png diff --git a/src/Static/Favicons/favicon.ico b/public/favicons/favicon.ico similarity index 100% rename from src/Static/Favicons/favicon.ico rename to public/favicons/favicon.ico diff --git a/src/Static/Favicons/mstile-150x150.png b/public/favicons/mstile-150x150.png similarity index 100% rename from src/Static/Favicons/mstile-150x150.png rename to public/favicons/mstile-150x150.png diff --git a/src/Static/Favicons/safari-pinned-tab.svg b/public/favicons/safari-pinned-tab.svg similarity index 100% rename from src/Static/Favicons/safari-pinned-tab.svg rename to public/favicons/safari-pinned-tab.svg diff --git a/public/fonts/InterVariable-Italic.woff2 b/public/fonts/InterVariable-Italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b3530f3f5269165314114a9e1c2f129e20fddcbd GIT binary patch literal 387976 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 z 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 z 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[G8ma>d@I@Ptv~HW&n>5!LJ>IqF?wh27o@tW3v1 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 W%eOyDp`ynDC{VwN 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/src/Static/Images/Background/1.jpg b/public/images/background/1.jpg similarity index 100% rename from src/Static/Images/Background/1.jpg rename to public/images/background/1.jpg diff --git a/src/Static/Images/Background/10.jpg b/public/images/background/10.jpg similarity index 100% rename from src/Static/Images/Background/10.jpg rename to public/images/background/10.jpg diff --git a/src/Static/Images/Background/11.jpg b/public/images/background/11.jpg similarity index 100% rename from src/Static/Images/Background/11.jpg rename to public/images/background/11.jpg diff --git a/src/Static/Images/Background/12.jpg b/public/images/background/12.jpg similarity index 100% rename from src/Static/Images/Background/12.jpg rename to public/images/background/12.jpg diff --git a/src/Static/Images/Background/13.jpg b/public/images/background/13.jpg similarity index 100% rename from src/Static/Images/Background/13.jpg rename to public/images/background/13.jpg diff --git a/src/Static/Images/Background/14.jpg b/public/images/background/14.jpg similarity index 100% rename from src/Static/Images/Background/14.jpg rename to public/images/background/14.jpg diff --git a/src/Static/Images/Background/15.jpg b/public/images/background/15.jpg similarity index 100% rename from src/Static/Images/Background/15.jpg rename to public/images/background/15.jpg diff --git a/src/Static/Images/Background/16.jpg b/public/images/background/16.jpg similarity index 100% rename from src/Static/Images/Background/16.jpg rename to public/images/background/16.jpg diff --git a/src/Static/Images/Background/17.jpg b/public/images/background/17.jpg similarity index 100% rename from src/Static/Images/Background/17.jpg rename to public/images/background/17.jpg diff --git a/src/Static/Images/Background/18.jpg b/public/images/background/18.jpg similarity index 100% rename from src/Static/Images/Background/18.jpg rename to public/images/background/18.jpg diff --git a/src/Static/Images/Background/19.jpg b/public/images/background/19.jpg similarity index 100% rename from src/Static/Images/Background/19.jpg rename to public/images/background/19.jpg diff --git a/src/Static/Images/Background/2.jpg b/public/images/background/2.jpg similarity index 100% rename from src/Static/Images/Background/2.jpg rename to public/images/background/2.jpg diff --git a/src/Static/Images/Background/20.jpg b/public/images/background/20.jpg similarity index 100% rename from src/Static/Images/Background/20.jpg rename to public/images/background/20.jpg diff --git a/src/Static/Images/Background/21.jpg b/public/images/background/21.jpg similarity index 100% rename from src/Static/Images/Background/21.jpg rename to public/images/background/21.jpg diff --git a/src/Static/Images/Background/22.jpg b/public/images/background/22.jpg similarity index 100% rename from src/Static/Images/Background/22.jpg rename to public/images/background/22.jpg diff --git a/src/Static/Images/Background/23.jpg b/public/images/background/23.jpg similarity index 100% rename from src/Static/Images/Background/23.jpg rename to public/images/background/23.jpg diff --git a/src/Static/Images/Background/24.jpg b/public/images/background/24.jpg similarity index 100% rename from src/Static/Images/Background/24.jpg rename to public/images/background/24.jpg diff --git a/src/Static/Images/Background/25.jpg b/public/images/background/25.jpg similarity index 100% rename from src/Static/Images/Background/25.jpg rename to public/images/background/25.jpg diff --git a/src/Static/Images/Background/26.jpg b/public/images/background/26.jpg similarity index 100% rename from src/Static/Images/Background/26.jpg rename to public/images/background/26.jpg diff --git a/src/Static/Images/Background/27.jpg b/public/images/background/27.jpg similarity index 100% rename from src/Static/Images/Background/27.jpg rename to public/images/background/27.jpg diff --git a/src/Static/Images/Background/28.jpg b/public/images/background/28.jpg similarity index 100% rename from src/Static/Images/Background/28.jpg rename to public/images/background/28.jpg diff --git a/src/Static/Images/Background/29.jpg b/public/images/background/29.jpg similarity index 100% rename from src/Static/Images/Background/29.jpg rename to public/images/background/29.jpg diff --git a/src/Static/Images/Background/3.jpg b/public/images/background/3.jpg similarity index 100% rename from src/Static/Images/Background/3.jpg rename to public/images/background/3.jpg diff --git a/src/Static/Images/Background/30.jpg b/public/images/background/30.jpg similarity index 100% rename from src/Static/Images/Background/30.jpg rename to public/images/background/30.jpg diff --git a/src/Static/Images/Background/4.jpg b/public/images/background/4.jpg similarity index 100% rename from src/Static/Images/Background/4.jpg rename to public/images/background/4.jpg diff --git a/src/Static/Images/Background/5.jpg b/public/images/background/5.jpg similarity index 100% rename from src/Static/Images/Background/5.jpg rename to public/images/background/5.jpg diff --git a/src/Static/Images/Background/6.jpg b/public/images/background/6.jpg similarity index 100% rename from src/Static/Images/Background/6.jpg rename to public/images/background/6.jpg diff --git a/src/Static/Images/Background/7.jpg b/public/images/background/7.jpg similarity index 100% rename from src/Static/Images/Background/7.jpg rename to public/images/background/7.jpg diff --git a/src/Static/Images/Background/8.jpg b/public/images/background/8.jpg similarity index 100% rename from src/Static/Images/Background/8.jpg rename to public/images/background/8.jpg diff --git a/src/Static/Images/Background/9.jpg b/public/images/background/9.jpg similarity index 100% rename from src/Static/Images/Background/9.jpg rename to public/images/background/9.jpg diff --git a/src/Static/Images/Background/Thumbnails/1.jpg b/public/images/background/thumbnails/1.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/1.jpg rename to public/images/background/thumbnails/1.jpg diff --git a/src/Static/Images/Background/Thumbnails/10.jpg b/public/images/background/thumbnails/10.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/10.jpg rename to public/images/background/thumbnails/10.jpg diff --git a/src/Static/Images/Background/Thumbnails/11.jpg b/public/images/background/thumbnails/11.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/11.jpg rename to public/images/background/thumbnails/11.jpg diff --git a/src/Static/Images/Background/Thumbnails/12.jpg b/public/images/background/thumbnails/12.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/12.jpg rename to public/images/background/thumbnails/12.jpg diff --git a/src/Static/Images/Background/Thumbnails/13.jpg b/public/images/background/thumbnails/13.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/13.jpg rename to public/images/background/thumbnails/13.jpg diff --git a/src/Static/Images/Background/Thumbnails/14.jpg b/public/images/background/thumbnails/14.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/14.jpg rename to public/images/background/thumbnails/14.jpg diff --git a/src/Static/Images/Background/Thumbnails/15.jpg b/public/images/background/thumbnails/15.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/15.jpg rename to public/images/background/thumbnails/15.jpg diff --git a/src/Static/Images/Background/Thumbnails/16.jpg b/public/images/background/thumbnails/16.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/16.jpg rename to public/images/background/thumbnails/16.jpg diff --git a/src/Static/Images/Background/Thumbnails/17.jpg b/public/images/background/thumbnails/17.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/17.jpg rename to public/images/background/thumbnails/17.jpg diff --git a/src/Static/Images/Background/Thumbnails/18.jpg b/public/images/background/thumbnails/18.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/18.jpg rename to public/images/background/thumbnails/18.jpg diff --git a/src/Static/Images/Background/Thumbnails/19.jpg b/public/images/background/thumbnails/19.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/19.jpg rename to public/images/background/thumbnails/19.jpg diff --git a/src/Static/Images/Background/Thumbnails/2.jpg b/public/images/background/thumbnails/2.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/2.jpg rename to public/images/background/thumbnails/2.jpg diff --git a/src/Static/Images/Background/Thumbnails/20.jpg b/public/images/background/thumbnails/20.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/20.jpg rename to public/images/background/thumbnails/20.jpg diff --git a/src/Static/Images/Background/Thumbnails/21.jpg b/public/images/background/thumbnails/21.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/21.jpg rename to public/images/background/thumbnails/21.jpg diff --git a/src/Static/Images/Background/Thumbnails/22.jpg b/public/images/background/thumbnails/22.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/22.jpg rename to public/images/background/thumbnails/22.jpg diff --git a/src/Static/Images/Background/Thumbnails/23.jpg b/public/images/background/thumbnails/23.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/23.jpg rename to public/images/background/thumbnails/23.jpg diff --git a/src/Static/Images/Background/Thumbnails/24.jpg b/public/images/background/thumbnails/24.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/24.jpg rename to public/images/background/thumbnails/24.jpg diff --git a/src/Static/Images/Background/Thumbnails/25.jpg b/public/images/background/thumbnails/25.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/25.jpg rename to public/images/background/thumbnails/25.jpg diff --git a/src/Static/Images/Background/Thumbnails/26.jpg b/public/images/background/thumbnails/26.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/26.jpg rename to public/images/background/thumbnails/26.jpg diff --git a/src/Static/Images/Background/Thumbnails/27.jpg b/public/images/background/thumbnails/27.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/27.jpg rename to public/images/background/thumbnails/27.jpg diff --git a/src/Static/Images/Background/Thumbnails/28.jpg b/public/images/background/thumbnails/28.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/28.jpg rename to public/images/background/thumbnails/28.jpg diff --git a/src/Static/Images/Background/Thumbnails/29.jpg b/public/images/background/thumbnails/29.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/29.jpg rename to public/images/background/thumbnails/29.jpg diff --git a/src/Static/Images/Background/Thumbnails/3.jpg b/public/images/background/thumbnails/3.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/3.jpg rename to public/images/background/thumbnails/3.jpg diff --git a/src/Static/Images/Background/Thumbnails/30.jpg b/public/images/background/thumbnails/30.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/30.jpg rename to public/images/background/thumbnails/30.jpg diff --git a/src/Static/Images/Background/Thumbnails/4.jpg b/public/images/background/thumbnails/4.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/4.jpg rename to public/images/background/thumbnails/4.jpg diff --git a/src/Static/Images/Background/Thumbnails/5.jpg b/public/images/background/thumbnails/5.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/5.jpg rename to public/images/background/thumbnails/5.jpg diff --git a/src/Static/Images/Background/Thumbnails/6.jpg b/public/images/background/thumbnails/6.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/6.jpg rename to public/images/background/thumbnails/6.jpg diff --git a/src/Static/Images/Background/Thumbnails/7.jpg b/public/images/background/thumbnails/7.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/7.jpg rename to public/images/background/thumbnails/7.jpg diff --git a/src/Static/Images/Background/Thumbnails/8.jpg b/public/images/background/thumbnails/8.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/8.jpg rename to public/images/background/thumbnails/8.jpg diff --git a/src/Static/Images/Background/Thumbnails/9.jpg b/public/images/background/thumbnails/9.jpg similarity index 100% rename from src/Static/Images/Background/Thumbnails/9.jpg rename to public/images/background/thumbnails/9.jpg diff --git a/public/images/diffuse-current.svg b/public/images/diffuse-current.svg new file mode 100644 index 000000000..d388861a4 --- /dev/null +++ b/public/images/diffuse-current.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/Static/Images/diffuse-dark.svg b/public/images/diffuse-dark.svg similarity index 100% rename from src/Static/Images/diffuse-dark.svg rename to public/images/diffuse-dark.svg diff --git a/src/Static/Images/diffuse-grey.svg b/public/images/diffuse-grey.svg similarity index 100% rename from src/Static/Images/diffuse-grey.svg rename to public/images/diffuse-grey.svg diff --git a/src/Static/Images/diffuse-light.svg b/public/images/diffuse-light.svg similarity index 100% rename from src/Static/Images/diffuse-light.svg rename to public/images/diffuse-light.svg diff --git a/src/Static/Images/diffuse__icon-dark.svg b/public/images/diffuse__icon-dark.svg similarity index 100% rename from src/Static/Images/diffuse__icon-dark.svg rename to public/images/diffuse__icon-dark.svg diff --git a/src/Static/Images/diffuse__icon-grey.svg b/public/images/diffuse__icon-grey.svg similarity index 100% rename from src/Static/Images/diffuse__icon-grey.svg rename to public/images/diffuse__icon-grey.svg diff --git a/src/Static/Images/diffuse__icon-light.svg b/public/images/diffuse__icon-light.svg similarity index 100% rename from src/Static/Images/diffuse__icon-light.svg rename to public/images/diffuse__icon-light.svg diff --git a/src/Static/Images/icon-square-ws.png b/public/images/icon-square-ws.png similarity index 100% rename from src/Static/Images/icon-square-ws.png rename to public/images/icon-square-ws.png diff --git a/src/Static/Images/icon-square.png b/public/images/icon-square.png similarity index 100% rename from src/Static/Images/icon-square.png rename to public/images/icon-square.png diff --git a/src-tauri/icons/icon.png b/public/images/icon.png similarity index 100% rename from src-tauri/icons/icon.png rename to public/images/icon.png diff --git a/public/images/icons/windows_98/cd_audio_cd_a-4.png b/public/images/icons/windows_98/cd_audio_cd_a-4.png new file mode 100644 index 0000000000000000000000000000000000000000..fc07a9dea1c1cc5ef206eb76d3b2a971d0ae5674 GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq8r{zDi(Vu$sZZAYL$MSD+10LL$H?#1%*bK|@2s|NjgJ z4jf?k4+0GT8IpJW*#VSbED7=pW^j0RBMrn!@^*J&OHA8Q3*@kuc>21sKVlJPRFasQ z@#`i~I?~g{F~s8Z+AH39hZO|a63%e;q^`VO zf=%Y3kr86^>*ScX3EY?!_GY`=R`&u0j^9ojw0*rdaX%6`qS&#YA>sDTc};~|#O@h? z;R!m+axLeQ1yg0vJVkG2mh|}t{8AS_nRRfR?n;%4dV1TfwE0@} zZ!K8oC$8~8X4;c2AqN@-bPik&SFmi5ef)HnNbrSC8V4SD3kWcC`0sx*v0##f!U7LA zNoJ1MqRKyiC8!+Q5%s<}!CHt#W;Mr=%e4ph{#vo5?x0mDqF?Wh6@ z?euhU46!(U^ok>2lYszhz^(%Qs2hum7<@|eHP$F{HyzTPO3Drs?WM3dS}gTcCL2{%?hg=1;n_@ z#Khh>s!a4;bkO{SEK7GNOP%T+oj>b#MB2O99Xpuxy>Ii$^N+ag4{pg9;L6AadP23t zHKHUXu_V>=^B}Y7#Uj`7+aYd=^B_=85rc-T>FipAvZrIGp!Q0 U2D!vMcc2CaPgg&ebxsLQ0PNqNjsO4v literal 0 HcmV?d00001 diff --git a/public/images/icons/windows_98/directory_open_file_mydocs_2k-2.png b/public/images/icons/windows_98/directory_open_file_mydocs_2k-2.png new file mode 100644 index 0000000000000000000000000000000000000000..92e1be82b4f44ae11c2c6a21361ac2d26414c975 GIT binary patch literal 596 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq8r{zDi(Vu$sZZAYL$MSD+10LNUN6#1*8Vq2a)R13BP>!)A$S;_|;n|He5GTpo-G!w;<7Oa`!(QU)>&pI!O+uX6 zWS(nB6;N8))5S5w;`Guh2eS@22(UePA~;KD?{3bk(Z$T_$#5qH{`5_D?*>OH^0t6sM; z`%M;IXa7Jad+mqUInz&i@3~RD)hF)JQHwwio1#-4N|z%H9&MOtsvRc%r@(JZw#;-{ z?~9%{Tw`3G7&>l$B>s_gdq-Et)UJ+cTy+ywjIKRC^xtd8MyHQEcIZCtcF`67+5N+~ zd{_C+Z%iMpUI9Z;wZt`|BqgyV)hf9t6-Y4{85mmV8kp%CnS>Y_TNxNznHuRDm{=JY i","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellScopeEntryAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellScopeEntryAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"Shell scope entry.","title":"ShellScopeEntry"}},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json deleted file mode 100644 index f5273c7d7..000000000 --- a/src-tauri/gen/schemas/capabilities.json +++ /dev/null @@ -1 +0,0 @@ -{"main-capability":{"identifier":"main-capability","description":"Capability for the main window","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","dialog:allow-ask","dialog:allow-confirm","dialog:allow-message","dialog:allow-open","dialog:allow-save","fs:allow-download-write","core:resources:default","core:menu:default","core:tray:default","shell:allow-open"],"platforms":["linux","macOS","windows","android","iOS"]}} \ No newline at end of file diff --git a/src-tauri/gen/schemas/desktop-schema.json b/src-tauri/gen/schemas/desktop-schema.json deleted file mode 100644 index 7ee3c87f4..000000000 --- a/src-tauri/gen/schemas/desktop-schema.json +++ /dev/null @@ -1,5181 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CapabilityFile", - "description": "Capability formats accepted in a capability file.", - "anyOf": [ - { - "description": "A single capability.", - "allOf": [ - { - "$ref": "#/definitions/Capability" - } - ] - }, - { - "description": "A list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - }, - { - "description": "A list of capabilities.", - "type": "object", - "required": [ - "capabilities" - ], - "properties": { - "capabilities": { - "description": "The list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - } - } - } - ], - "definitions": { - "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", - "type": "object", - "required": [ - "identifier", - "permissions" - ], - "properties": { - "identifier": { - "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", - "type": "string" - }, - "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", - "default": "", - "type": "string" - }, - "remote": { - "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", - "anyOf": [ - { - "$ref": "#/definitions/CapabilityRemote" - }, - { - "type": "null" - } - ] - }, - "local": { - "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", - "default": true, - "type": "boolean" - }, - "windows": { - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "webviews": { - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", - "type": "array", - "items": { - "$ref": "#/definitions/PermissionEntry" - }, - "uniqueItems": true - }, - "platforms": { - "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Target" - } - } - } - }, - "CapabilityRemote": { - "description": "Configuration for remote URLs that are associated with the capability.", - "type": "object", - "required": [ - "urls" - ], - "properties": { - "urls": { - "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PermissionEntry": { - "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", - "anyOf": [ - { - "description": "Reference a permission or permission set by identifier.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - { - "description": "Reference a permission or permission set by identifier and extends its scope.", - "type": "object", - "allOf": [ - { - "if": { - "properties": { - "identifier": { - "anyOf": [ - { - "description": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### Included permissions within this default permission set:\n", - "type": "string", - "const": "fs:default" - }, - { - "description": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta" - }, - { - "description": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the application folders.", - "type": "string", - "const": "fs:allow-app-read" - }, - { - "description": "This allows full recursive read access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-read-recursive" - }, - { - "description": "This allows non-recursive write access to the application folders.", - "type": "string", - "const": "fs:allow-app-write" - }, - { - "description": "This allows full recursive write access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-read" - }, - { - "description": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-write" - }, - { - "description": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-read" - }, - { - "description": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-write" - }, - { - "description": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-read" - }, - { - "description": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-write" - }, - { - "description": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-read" - }, - { - "description": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-write" - }, - { - "description": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-read" - }, - { - "description": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-write" - }, - { - "description": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-read" - }, - { - "description": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-write" - }, - { - "description": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-read" - }, - { - "description": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-write" - }, - { - "description": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-read" - }, - { - "description": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-write" - }, - { - "description": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-read" - }, - { - "description": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-write" - }, - { - "description": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-read" - }, - { - "description": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-write" - }, - { - "description": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-read" - }, - { - "description": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-write" - }, - { - "description": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-read" - }, - { - "description": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-write" - }, - { - "description": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-read" - }, - { - "description": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-write" - }, - { - "description": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-write-recursive" - }, - { - "description": "This denies access to dangerous Tauri relevant files and folders by default.", - "type": "string", - "const": "fs:deny-default" - }, - { - "description": "Enables the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-copy-file" - }, - { - "description": "Enables the create command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-create" - }, - { - "description": "Enables the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-exists" - }, - { - "description": "Enables the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-fstat" - }, - { - "description": "Enables the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-ftruncate" - }, - { - "description": "Enables the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-lstat" - }, - { - "description": "Enables the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-mkdir" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-open" - }, - { - "description": "Enables the read command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read" - }, - { - "description": "Enables the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-dir" - }, - { - "description": "Enables the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-file" - }, - { - "description": "Enables the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file" - }, - { - "description": "Enables the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines" - }, - { - "description": "Enables the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines-next" - }, - { - "description": "Enables the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-remove" - }, - { - "description": "Enables the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-rename" - }, - { - "description": "Enables the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-seek" - }, - { - "description": "Enables the size command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-size" - }, - { - "description": "Enables the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-stat" - }, - { - "description": "Enables the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-truncate" - }, - { - "description": "Enables the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-unwatch" - }, - { - "description": "Enables the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-watch" - }, - { - "description": "Enables the write command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write" - }, - { - "description": "Enables the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-file" - }, - { - "description": "Enables the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-text-file" - }, - { - "description": "This permissions allows to create the application specific directories.\n", - "type": "string", - "const": "fs:create-app-specific-dirs" - }, - { - "description": "Denies the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-copy-file" - }, - { - "description": "Denies the create command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-create" - }, - { - "description": "Denies the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-exists" - }, - { - "description": "Denies the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-fstat" - }, - { - "description": "Denies the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-ftruncate" - }, - { - "description": "Denies the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-lstat" - }, - { - "description": "Denies the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-mkdir" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-open" - }, - { - "description": "Denies the read command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read" - }, - { - "description": "Denies the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-dir" - }, - { - "description": "Denies the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-file" - }, - { - "description": "Denies the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file" - }, - { - "description": "Denies the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines" - }, - { - "description": "Denies the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines-next" - }, - { - "description": "Denies the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-remove" - }, - { - "description": "Denies the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-rename" - }, - { - "description": "Denies the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-seek" - }, - { - "description": "Denies the size command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-size" - }, - { - "description": "Denies the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-stat" - }, - { - "description": "Denies the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-truncate" - }, - { - "description": "Denies the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-unwatch" - }, - { - "description": "Denies the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-watch" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-linux" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-windows" - }, - { - "description": "Denies the write command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write" - }, - { - "description": "Denies the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-file" - }, - { - "description": "Denies the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-text-file" - }, - { - "description": "This enables all read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-all" - }, - { - "description": "This permission allows recursive read functionality on the application\nspecific base directories. \n", - "type": "string", - "const": "fs:read-app-specific-dirs-recursive" - }, - { - "description": "This enables directory read and file metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-dirs" - }, - { - "description": "This enables file read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-files" - }, - { - "description": "This enables all index or metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-meta" - }, - { - "description": "An empty permission you can use to modify the global scope.", - "type": "string", - "const": "fs:scope" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the application folders.", - "type": "string", - "const": "fs:scope-app" - }, - { - "description": "This scope permits to list all files and folders in the application directories.", - "type": "string", - "const": "fs:scope-app-index" - }, - { - "description": "This scope permits recursive access to the complete application folders, including sub directories and files.", - "type": "string", - "const": "fs:scope-app-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.", - "type": "string", - "const": "fs:scope-appcache" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCACHE`folder.", - "type": "string", - "const": "fs:scope-appcache-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appcache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:scope-appconfig" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCONFIG`folder.", - "type": "string", - "const": "fs:scope-appconfig-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appconfig-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.", - "type": "string", - "const": "fs:scope-appdata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPDATA`folder.", - "type": "string", - "const": "fs:scope-appdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:scope-applocaldata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder.", - "type": "string", - "const": "fs:scope-applocaldata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applocaldata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.", - "type": "string", - "const": "fs:scope-applog" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOG`folder.", - "type": "string", - "const": "fs:scope-applog-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applog-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.", - "type": "string", - "const": "fs:scope-audio" - }, - { - "description": "This scope permits to list all files and folders in the `$AUDIO`folder.", - "type": "string", - "const": "fs:scope-audio-index" - }, - { - "description": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-audio-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CACHE` folder.", - "type": "string", - "const": "fs:scope-cache" - }, - { - "description": "This scope permits to list all files and folders in the `$CACHE`folder.", - "type": "string", - "const": "fs:scope-cache-index" - }, - { - "description": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-cache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.", - "type": "string", - "const": "fs:scope-config" - }, - { - "description": "This scope permits to list all files and folders in the `$CONFIG`folder.", - "type": "string", - "const": "fs:scope-config-index" - }, - { - "description": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-config-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DATA` folder.", - "type": "string", - "const": "fs:scope-data" - }, - { - "description": "This scope permits to list all files and folders in the `$DATA`folder.", - "type": "string", - "const": "fs:scope-data-index" - }, - { - "description": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-data-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.", - "type": "string", - "const": "fs:scope-desktop" - }, - { - "description": "This scope permits to list all files and folders in the `$DESKTOP`folder.", - "type": "string", - "const": "fs:scope-desktop-index" - }, - { - "description": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-desktop-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:scope-document" - }, - { - "description": "This scope permits to list all files and folders in the `$DOCUMENT`folder.", - "type": "string", - "const": "fs:scope-document-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-document-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:scope-download" - }, - { - "description": "This scope permits to list all files and folders in the `$DOWNLOAD`folder.", - "type": "string", - "const": "fs:scope-download-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-download-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$EXE` folder.", - "type": "string", - "const": "fs:scope-exe" - }, - { - "description": "This scope permits to list all files and folders in the `$EXE`folder.", - "type": "string", - "const": "fs:scope-exe-index" - }, - { - "description": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-exe-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$FONT` folder.", - "type": "string", - "const": "fs:scope-font" - }, - { - "description": "This scope permits to list all files and folders in the `$FONT`folder.", - "type": "string", - "const": "fs:scope-font-index" - }, - { - "description": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-font-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$HOME` folder.", - "type": "string", - "const": "fs:scope-home" - }, - { - "description": "This scope permits to list all files and folders in the `$HOME`folder.", - "type": "string", - "const": "fs:scope-home-index" - }, - { - "description": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-home-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:scope-localdata" - }, - { - "description": "This scope permits to list all files and folders in the `$LOCALDATA`folder.", - "type": "string", - "const": "fs:scope-localdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-localdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOG` folder.", - "type": "string", - "const": "fs:scope-log" - }, - { - "description": "This scope permits to list all files and folders in the `$LOG`folder.", - "type": "string", - "const": "fs:scope-log-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-log-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.", - "type": "string", - "const": "fs:scope-picture" - }, - { - "description": "This scope permits to list all files and folders in the `$PICTURE`folder.", - "type": "string", - "const": "fs:scope-picture-index" - }, - { - "description": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-picture-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.", - "type": "string", - "const": "fs:scope-public" - }, - { - "description": "This scope permits to list all files and folders in the `$PUBLIC`folder.", - "type": "string", - "const": "fs:scope-public-index" - }, - { - "description": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-public-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.", - "type": "string", - "const": "fs:scope-resource" - }, - { - "description": "This scope permits to list all files and folders in the `$RESOURCE`folder.", - "type": "string", - "const": "fs:scope-resource-index" - }, - { - "description": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-resource-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.", - "type": "string", - "const": "fs:scope-runtime" - }, - { - "description": "This scope permits to list all files and folders in the `$RUNTIME`folder.", - "type": "string", - "const": "fs:scope-runtime-index" - }, - { - "description": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-runtime-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMP` folder.", - "type": "string", - "const": "fs:scope-temp" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMP`folder.", - "type": "string", - "const": "fs:scope-temp-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-temp-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:scope-template" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMPLATE`folder.", - "type": "string", - "const": "fs:scope-template-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-template-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.", - "type": "string", - "const": "fs:scope-video" - }, - { - "description": "This scope permits to list all files and folders in the `$VIDEO`folder.", - "type": "string", - "const": "fs:scope-video-index" - }, - { - "description": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-video-recursive" - }, - { - "description": "This enables all write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-all" - }, - { - "description": "This enables all file write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-files" - } - ] - } - } - }, - "then": { - "properties": { - "allow": { - "items": { - "title": "FsScopeEntry", - "description": "FS scope entry.", - "anyOf": [ - { - "description": "A path that can be accessed by the webview when using the fs APIs. FS scope path pattern.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - { - "type": "object", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "A path that can be accessed by the webview when using the fs APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - } - } - } - ] - } - }, - "deny": { - "items": { - "title": "FsScopeEntry", - "description": "FS scope entry.", - "anyOf": [ - { - "description": "A path that can be accessed by the webview when using the fs APIs. FS scope path pattern.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - { - "type": "object", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "A path that can be accessed by the webview when using the fs APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - } - } - } - ] - } - } - } - }, - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - } - } - }, - { - "if": { - "properties": { - "identifier": { - "anyOf": [ - { - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", - "type": "string", - "const": "shell:default" - }, - { - "description": "Enables the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-execute" - }, - { - "description": "Enables the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-kill" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-open" - }, - { - "description": "Enables the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-spawn" - }, - { - "description": "Enables the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-stdin-write" - }, - { - "description": "Denies the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-execute" - }, - { - "description": "Denies the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-kill" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-open" - }, - { - "description": "Denies the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-spawn" - }, - { - "description": "Denies the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-stdin-write" - } - ] - } - } - }, - "then": { - "properties": { - "allow": { - "items": { - "title": "ShellScopeEntry", - "description": "Shell scope entry.", - "anyOf": [ - { - "type": "object", - "required": [ - "cmd", - "name" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "cmd": { - "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "name", - "sidecar" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - }, - "sidecar": { - "description": "If this command is a sidecar command.", - "type": "boolean" - } - }, - "additionalProperties": false - } - ] - } - }, - "deny": { - "items": { - "title": "ShellScopeEntry", - "description": "Shell scope entry.", - "anyOf": [ - { - "type": "object", - "required": [ - "cmd", - "name" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "cmd": { - "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "name", - "sidecar" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - }, - "sidecar": { - "description": "If this command is a sidecar command.", - "type": "boolean" - } - }, - "additionalProperties": false - } - ] - } - } - } - }, - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - } - } - }, - { - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - "allow": { - "description": "Data that defines what is allowed by the scope.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - }, - "deny": { - "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - } - } - } - ], - "required": [ - "identifier" - ] - } - ] - }, - "Identifier": { - "description": "Permission identifier", - "oneOf": [ - { - "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", - "type": "string", - "const": "core:default" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:app:default" - }, - { - "description": "Enables the app_hide command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-app-hide" - }, - { - "description": "Enables the app_show command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-app-show" - }, - { - "description": "Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-default-window-icon" - }, - { - "description": "Enables the name command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-name" - }, - { - "description": "Enables the set_app_theme command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-set-app-theme" - }, - { - "description": "Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-tauri-version" - }, - { - "description": "Enables the version command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-version" - }, - { - "description": "Denies the app_hide command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-app-hide" - }, - { - "description": "Denies the app_show command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-app-show" - }, - { - "description": "Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-default-window-icon" - }, - { - "description": "Denies the name command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-name" - }, - { - "description": "Denies the set_app_theme command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-set-app-theme" - }, - { - "description": "Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-tauri-version" - }, - { - "description": "Denies the version command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-version" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:event:default" - }, - { - "description": "Enables the emit command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-emit" - }, - { - "description": "Enables the emit_to command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-emit-to" - }, - { - "description": "Enables the listen command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-listen" - }, - { - "description": "Enables the unlisten command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-unlisten" - }, - { - "description": "Denies the emit command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-emit" - }, - { - "description": "Denies the emit_to command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-emit-to" - }, - { - "description": "Denies the listen command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-listen" - }, - { - "description": "Denies the unlisten command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-unlisten" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:image:default" - }, - { - "description": "Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-from-bytes" - }, - { - "description": "Enables the from_path command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-from-path" - }, - { - "description": "Enables the new command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-new" - }, - { - "description": "Enables the rgba command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-rgba" - }, - { - "description": "Enables the size command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-size" - }, - { - "description": "Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-from-bytes" - }, - { - "description": "Denies the from_path command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-from-path" - }, - { - "description": "Denies the new command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-new" - }, - { - "description": "Denies the rgba command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-rgba" - }, - { - "description": "Denies the size command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-size" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:menu:default" - }, - { - "description": "Enables the append command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-append" - }, - { - "description": "Enables the create_default command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-create-default" - }, - { - "description": "Enables the get command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-get" - }, - { - "description": "Enables the insert command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-insert" - }, - { - "description": "Enables the is_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-is-checked" - }, - { - "description": "Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-is-enabled" - }, - { - "description": "Enables the items command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-items" - }, - { - "description": "Enables the new command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-new" - }, - { - "description": "Enables the popup command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-popup" - }, - { - "description": "Enables the prepend command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-prepend" - }, - { - "description": "Enables the remove command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-remove" - }, - { - "description": "Enables the remove_at command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-remove-at" - }, - { - "description": "Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-accelerator" - }, - { - "description": "Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-app-menu" - }, - { - "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-help-menu-for-nsapp" - }, - { - "description": "Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-window-menu" - }, - { - "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-windows-menu-for-nsapp" - }, - { - "description": "Enables the set_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-checked" - }, - { - "description": "Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-enabled" - }, - { - "description": "Enables the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-icon" - }, - { - "description": "Enables the set_text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-text" - }, - { - "description": "Enables the text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-text" - }, - { - "description": "Denies the append command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-append" - }, - { - "description": "Denies the create_default command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-create-default" - }, - { - "description": "Denies the get command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-get" - }, - { - "description": "Denies the insert command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-insert" - }, - { - "description": "Denies the is_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-is-checked" - }, - { - "description": "Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-is-enabled" - }, - { - "description": "Denies the items command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-items" - }, - { - "description": "Denies the new command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-new" - }, - { - "description": "Denies the popup command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-popup" - }, - { - "description": "Denies the prepend command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-prepend" - }, - { - "description": "Denies the remove command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-remove" - }, - { - "description": "Denies the remove_at command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-remove-at" - }, - { - "description": "Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-accelerator" - }, - { - "description": "Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-app-menu" - }, - { - "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-help-menu-for-nsapp" - }, - { - "description": "Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-window-menu" - }, - { - "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-windows-menu-for-nsapp" - }, - { - "description": "Denies the set_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-checked" - }, - { - "description": "Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-enabled" - }, - { - "description": "Denies the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-icon" - }, - { - "description": "Denies the set_text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-text" - }, - { - "description": "Denies the text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-text" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:path:default" - }, - { - "description": "Enables the basename command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-basename" - }, - { - "description": "Enables the dirname command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-dirname" - }, - { - "description": "Enables the extname command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-extname" - }, - { - "description": "Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-is-absolute" - }, - { - "description": "Enables the join command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-join" - }, - { - "description": "Enables the normalize command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-normalize" - }, - { - "description": "Enables the resolve command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-resolve" - }, - { - "description": "Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-resolve-directory" - }, - { - "description": "Denies the basename command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-basename" - }, - { - "description": "Denies the dirname command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-dirname" - }, - { - "description": "Denies the extname command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-extname" - }, - { - "description": "Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-is-absolute" - }, - { - "description": "Denies the join command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-join" - }, - { - "description": "Denies the normalize command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-normalize" - }, - { - "description": "Denies the resolve command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-resolve" - }, - { - "description": "Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-resolve-directory" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:resources:default" - }, - { - "description": "Enables the close command without any pre-configured scope.", - "type": "string", - "const": "core:resources:allow-close" - }, - { - "description": "Denies the close command without any pre-configured scope.", - "type": "string", - "const": "core:resources:deny-close" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:tray:default" - }, - { - "description": "Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-get-by-id" - }, - { - "description": "Enables the new command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-new" - }, - { - "description": "Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-remove-by-id" - }, - { - "description": "Enables the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-icon" - }, - { - "description": "Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-icon-as-template" - }, - { - "description": "Enables the set_menu command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-menu" - }, - { - "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-show-menu-on-left-click" - }, - { - "description": "Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-temp-dir-path" - }, - { - "description": "Enables the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-title" - }, - { - "description": "Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-tooltip" - }, - { - "description": "Enables the set_visible command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-visible" - }, - { - "description": "Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-get-by-id" - }, - { - "description": "Denies the new command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-new" - }, - { - "description": "Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-remove-by-id" - }, - { - "description": "Denies the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-icon" - }, - { - "description": "Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-icon-as-template" - }, - { - "description": "Denies the set_menu command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-menu" - }, - { - "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-show-menu-on-left-click" - }, - { - "description": "Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-temp-dir-path" - }, - { - "description": "Denies the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-title" - }, - { - "description": "Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-tooltip" - }, - { - "description": "Denies the set_visible command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-visible" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:webview:default" - }, - { - "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-clear-all-browsing-data" - }, - { - "description": "Enables the create_webview command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-create-webview" - }, - { - "description": "Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-create-webview-window" - }, - { - "description": "Enables the get_all_webviews command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-get-all-webviews" - }, - { - "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-internal-toggle-devtools" - }, - { - "description": "Enables the print command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-print" - }, - { - "description": "Enables the reparent command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-reparent" - }, - { - "description": "Enables the set_webview_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-background-color" - }, - { - "description": "Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-focus" - }, - { - "description": "Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-position" - }, - { - "description": "Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-size" - }, - { - "description": "Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-zoom" - }, - { - "description": "Enables the webview_close command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-close" - }, - { - "description": "Enables the webview_hide command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-hide" - }, - { - "description": "Enables the webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-position" - }, - { - "description": "Enables the webview_show command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-show" - }, - { - "description": "Enables the webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-size" - }, - { - "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-clear-all-browsing-data" - }, - { - "description": "Denies the create_webview command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-create-webview" - }, - { - "description": "Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-create-webview-window" - }, - { - "description": "Denies the get_all_webviews command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-get-all-webviews" - }, - { - "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-internal-toggle-devtools" - }, - { - "description": "Denies the print command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-print" - }, - { - "description": "Denies the reparent command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-reparent" - }, - { - "description": "Denies the set_webview_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-background-color" - }, - { - "description": "Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-focus" - }, - { - "description": "Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-position" - }, - { - "description": "Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-size" - }, - { - "description": "Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-zoom" - }, - { - "description": "Denies the webview_close command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-close" - }, - { - "description": "Denies the webview_hide command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-hide" - }, - { - "description": "Denies the webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-position" - }, - { - "description": "Denies the webview_show command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-show" - }, - { - "description": "Denies the webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-size" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:window:default" - }, - { - "description": "Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-available-monitors" - }, - { - "description": "Enables the center command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-center" - }, - { - "description": "Enables the close command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-close" - }, - { - "description": "Enables the create command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-create" - }, - { - "description": "Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-current-monitor" - }, - { - "description": "Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-cursor-position" - }, - { - "description": "Enables the destroy command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-destroy" - }, - { - "description": "Enables the get_all_windows command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-get-all-windows" - }, - { - "description": "Enables the hide command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-hide" - }, - { - "description": "Enables the inner_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-inner-position" - }, - { - "description": "Enables the inner_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-inner-size" - }, - { - "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-internal-toggle-maximize" - }, - { - "description": "Enables the is_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-closable" - }, - { - "description": "Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-decorated" - }, - { - "description": "Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-enabled" - }, - { - "description": "Enables the is_focused command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-focused" - }, - { - "description": "Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-fullscreen" - }, - { - "description": "Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-maximizable" - }, - { - "description": "Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-maximized" - }, - { - "description": "Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-minimizable" - }, - { - "description": "Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-minimized" - }, - { - "description": "Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-resizable" - }, - { - "description": "Enables the is_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-visible" - }, - { - "description": "Enables the maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-maximize" - }, - { - "description": "Enables the minimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-minimize" - }, - { - "description": "Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-monitor-from-point" - }, - { - "description": "Enables the outer_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-outer-position" - }, - { - "description": "Enables the outer_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-outer-size" - }, - { - "description": "Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-primary-monitor" - }, - { - "description": "Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-request-user-attention" - }, - { - "description": "Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-scale-factor" - }, - { - "description": "Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-always-on-bottom" - }, - { - "description": "Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-always-on-top" - }, - { - "description": "Enables the set_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-background-color" - }, - { - "description": "Enables the set_badge_count command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-badge-count" - }, - { - "description": "Enables the set_badge_label command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-badge-label" - }, - { - "description": "Enables the set_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-closable" - }, - { - "description": "Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-content-protected" - }, - { - "description": "Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-grab" - }, - { - "description": "Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-icon" - }, - { - "description": "Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-position" - }, - { - "description": "Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-visible" - }, - { - "description": "Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-decorations" - }, - { - "description": "Enables the set_effects command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-effects" - }, - { - "description": "Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-enabled" - }, - { - "description": "Enables the set_focus command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-focus" - }, - { - "description": "Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-fullscreen" - }, - { - "description": "Enables the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-icon" - }, - { - "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-ignore-cursor-events" - }, - { - "description": "Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-max-size" - }, - { - "description": "Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-maximizable" - }, - { - "description": "Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-min-size" - }, - { - "description": "Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-minimizable" - }, - { - "description": "Enables the set_overlay_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-overlay-icon" - }, - { - "description": "Enables the set_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-position" - }, - { - "description": "Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-progress-bar" - }, - { - "description": "Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-resizable" - }, - { - "description": "Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-shadow" - }, - { - "description": "Enables the set_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-size" - }, - { - "description": "Enables the set_size_constraints command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-size-constraints" - }, - { - "description": "Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-skip-taskbar" - }, - { - "description": "Enables the set_theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-theme" - }, - { - "description": "Enables the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-title" - }, - { - "description": "Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-title-bar-style" - }, - { - "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-visible-on-all-workspaces" - }, - { - "description": "Enables the show command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-show" - }, - { - "description": "Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-start-dragging" - }, - { - "description": "Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-start-resize-dragging" - }, - { - "description": "Enables the theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-theme" - }, - { - "description": "Enables the title command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-title" - }, - { - "description": "Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-toggle-maximize" - }, - { - "description": "Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-unmaximize" - }, - { - "description": "Enables the unminimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-unminimize" - }, - { - "description": "Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-available-monitors" - }, - { - "description": "Denies the center command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-center" - }, - { - "description": "Denies the close command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-close" - }, - { - "description": "Denies the create command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-create" - }, - { - "description": "Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-current-monitor" - }, - { - "description": "Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-cursor-position" - }, - { - "description": "Denies the destroy command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-destroy" - }, - { - "description": "Denies the get_all_windows command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-get-all-windows" - }, - { - "description": "Denies the hide command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-hide" - }, - { - "description": "Denies the inner_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-inner-position" - }, - { - "description": "Denies the inner_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-inner-size" - }, - { - "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-internal-toggle-maximize" - }, - { - "description": "Denies the is_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-closable" - }, - { - "description": "Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-decorated" - }, - { - "description": "Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-enabled" - }, - { - "description": "Denies the is_focused command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-focused" - }, - { - "description": "Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-fullscreen" - }, - { - "description": "Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-maximizable" - }, - { - "description": "Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-maximized" - }, - { - "description": "Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-minimizable" - }, - { - "description": "Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-minimized" - }, - { - "description": "Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-resizable" - }, - { - "description": "Denies the is_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-visible" - }, - { - "description": "Denies the maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-maximize" - }, - { - "description": "Denies the minimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-minimize" - }, - { - "description": "Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-monitor-from-point" - }, - { - "description": "Denies the outer_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-outer-position" - }, - { - "description": "Denies the outer_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-outer-size" - }, - { - "description": "Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-primary-monitor" - }, - { - "description": "Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-request-user-attention" - }, - { - "description": "Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-scale-factor" - }, - { - "description": "Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-always-on-bottom" - }, - { - "description": "Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-always-on-top" - }, - { - "description": "Denies the set_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-background-color" - }, - { - "description": "Denies the set_badge_count command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-badge-count" - }, - { - "description": "Denies the set_badge_label command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-badge-label" - }, - { - "description": "Denies the set_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-closable" - }, - { - "description": "Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-content-protected" - }, - { - "description": "Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-grab" - }, - { - "description": "Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-icon" - }, - { - "description": "Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-position" - }, - { - "description": "Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-visible" - }, - { - "description": "Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-decorations" - }, - { - "description": "Denies the set_effects command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-effects" - }, - { - "description": "Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-enabled" - }, - { - "description": "Denies the set_focus command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-focus" - }, - { - "description": "Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-fullscreen" - }, - { - "description": "Denies the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-icon" - }, - { - "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-ignore-cursor-events" - }, - { - "description": "Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-max-size" - }, - { - "description": "Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-maximizable" - }, - { - "description": "Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-min-size" - }, - { - "description": "Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-minimizable" - }, - { - "description": "Denies the set_overlay_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-overlay-icon" - }, - { - "description": "Denies the set_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-position" - }, - { - "description": "Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-progress-bar" - }, - { - "description": "Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-resizable" - }, - { - "description": "Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-shadow" - }, - { - "description": "Denies the set_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-size" - }, - { - "description": "Denies the set_size_constraints command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-size-constraints" - }, - { - "description": "Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-skip-taskbar" - }, - { - "description": "Denies the set_theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-theme" - }, - { - "description": "Denies the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-title" - }, - { - "description": "Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-title-bar-style" - }, - { - "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-visible-on-all-workspaces" - }, - { - "description": "Denies the show command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-show" - }, - { - "description": "Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-start-dragging" - }, - { - "description": "Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-start-resize-dragging" - }, - { - "description": "Denies the theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-theme" - }, - { - "description": "Denies the title command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-title" - }, - { - "description": "Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-toggle-maximize" - }, - { - "description": "Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-unmaximize" - }, - { - "description": "Denies the unminimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-unminimize" - }, - { - "description": "This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", - "type": "string", - "const": "dialog:default" - }, - { - "description": "Enables the ask command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-ask" - }, - { - "description": "Enables the confirm command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-confirm" - }, - { - "description": "Enables the message command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-message" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-open" - }, - { - "description": "Enables the save command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-save" - }, - { - "description": "Denies the ask command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-ask" - }, - { - "description": "Denies the confirm command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-confirm" - }, - { - "description": "Denies the message command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-message" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-open" - }, - { - "description": "Denies the save command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-save" - }, - { - "description": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### Included permissions within this default permission set:\n", - "type": "string", - "const": "fs:default" - }, - { - "description": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta" - }, - { - "description": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the application folders.", - "type": "string", - "const": "fs:allow-app-read" - }, - { - "description": "This allows full recursive read access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-read-recursive" - }, - { - "description": "This allows non-recursive write access to the application folders.", - "type": "string", - "const": "fs:allow-app-write" - }, - { - "description": "This allows full recursive write access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-read" - }, - { - "description": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-write" - }, - { - "description": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-read" - }, - { - "description": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-write" - }, - { - "description": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-read" - }, - { - "description": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-write" - }, - { - "description": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-read" - }, - { - "description": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-write" - }, - { - "description": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-read" - }, - { - "description": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-write" - }, - { - "description": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-read" - }, - { - "description": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-write" - }, - { - "description": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-read" - }, - { - "description": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-write" - }, - { - "description": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-read" - }, - { - "description": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-write" - }, - { - "description": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-read" - }, - { - "description": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-write" - }, - { - "description": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-read" - }, - { - "description": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-write" - }, - { - "description": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-read" - }, - { - "description": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-write" - }, - { - "description": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-read" - }, - { - "description": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-write" - }, - { - "description": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-read" - }, - { - "description": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-write" - }, - { - "description": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-write-recursive" - }, - { - "description": "This denies access to dangerous Tauri relevant files and folders by default.", - "type": "string", - "const": "fs:deny-default" - }, - { - "description": "Enables the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-copy-file" - }, - { - "description": "Enables the create command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-create" - }, - { - "description": "Enables the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-exists" - }, - { - "description": "Enables the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-fstat" - }, - { - "description": "Enables the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-ftruncate" - }, - { - "description": "Enables the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-lstat" - }, - { - "description": "Enables the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-mkdir" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-open" - }, - { - "description": "Enables the read command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read" - }, - { - "description": "Enables the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-dir" - }, - { - "description": "Enables the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-file" - }, - { - "description": "Enables the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file" - }, - { - "description": "Enables the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines" - }, - { - "description": "Enables the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines-next" - }, - { - "description": "Enables the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-remove" - }, - { - "description": "Enables the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-rename" - }, - { - "description": "Enables the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-seek" - }, - { - "description": "Enables the size command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-size" - }, - { - "description": "Enables the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-stat" - }, - { - "description": "Enables the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-truncate" - }, - { - "description": "Enables the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-unwatch" - }, - { - "description": "Enables the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-watch" - }, - { - "description": "Enables the write command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write" - }, - { - "description": "Enables the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-file" - }, - { - "description": "Enables the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-text-file" - }, - { - "description": "This permissions allows to create the application specific directories.\n", - "type": "string", - "const": "fs:create-app-specific-dirs" - }, - { - "description": "Denies the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-copy-file" - }, - { - "description": "Denies the create command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-create" - }, - { - "description": "Denies the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-exists" - }, - { - "description": "Denies the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-fstat" - }, - { - "description": "Denies the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-ftruncate" - }, - { - "description": "Denies the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-lstat" - }, - { - "description": "Denies the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-mkdir" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-open" - }, - { - "description": "Denies the read command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read" - }, - { - "description": "Denies the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-dir" - }, - { - "description": "Denies the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-file" - }, - { - "description": "Denies the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file" - }, - { - "description": "Denies the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines" - }, - { - "description": "Denies the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines-next" - }, - { - "description": "Denies the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-remove" - }, - { - "description": "Denies the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-rename" - }, - { - "description": "Denies the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-seek" - }, - { - "description": "Denies the size command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-size" - }, - { - "description": "Denies the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-stat" - }, - { - "description": "Denies the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-truncate" - }, - { - "description": "Denies the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-unwatch" - }, - { - "description": "Denies the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-watch" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-linux" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-windows" - }, - { - "description": "Denies the write command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write" - }, - { - "description": "Denies the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-file" - }, - { - "description": "Denies the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-text-file" - }, - { - "description": "This enables all read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-all" - }, - { - "description": "This permission allows recursive read functionality on the application\nspecific base directories. \n", - "type": "string", - "const": "fs:read-app-specific-dirs-recursive" - }, - { - "description": "This enables directory read and file metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-dirs" - }, - { - "description": "This enables file read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-files" - }, - { - "description": "This enables all index or metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-meta" - }, - { - "description": "An empty permission you can use to modify the global scope.", - "type": "string", - "const": "fs:scope" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the application folders.", - "type": "string", - "const": "fs:scope-app" - }, - { - "description": "This scope permits to list all files and folders in the application directories.", - "type": "string", - "const": "fs:scope-app-index" - }, - { - "description": "This scope permits recursive access to the complete application folders, including sub directories and files.", - "type": "string", - "const": "fs:scope-app-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.", - "type": "string", - "const": "fs:scope-appcache" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCACHE`folder.", - "type": "string", - "const": "fs:scope-appcache-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appcache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:scope-appconfig" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCONFIG`folder.", - "type": "string", - "const": "fs:scope-appconfig-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appconfig-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.", - "type": "string", - "const": "fs:scope-appdata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPDATA`folder.", - "type": "string", - "const": "fs:scope-appdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:scope-applocaldata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder.", - "type": "string", - "const": "fs:scope-applocaldata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applocaldata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.", - "type": "string", - "const": "fs:scope-applog" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOG`folder.", - "type": "string", - "const": "fs:scope-applog-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applog-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.", - "type": "string", - "const": "fs:scope-audio" - }, - { - "description": "This scope permits to list all files and folders in the `$AUDIO`folder.", - "type": "string", - "const": "fs:scope-audio-index" - }, - { - "description": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-audio-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CACHE` folder.", - "type": "string", - "const": "fs:scope-cache" - }, - { - "description": "This scope permits to list all files and folders in the `$CACHE`folder.", - "type": "string", - "const": "fs:scope-cache-index" - }, - { - "description": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-cache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.", - "type": "string", - "const": "fs:scope-config" - }, - { - "description": "This scope permits to list all files and folders in the `$CONFIG`folder.", - "type": "string", - "const": "fs:scope-config-index" - }, - { - "description": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-config-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DATA` folder.", - "type": "string", - "const": "fs:scope-data" - }, - { - "description": "This scope permits to list all files and folders in the `$DATA`folder.", - "type": "string", - "const": "fs:scope-data-index" - }, - { - "description": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-data-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.", - "type": "string", - "const": "fs:scope-desktop" - }, - { - "description": "This scope permits to list all files and folders in the `$DESKTOP`folder.", - "type": "string", - "const": "fs:scope-desktop-index" - }, - { - "description": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-desktop-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:scope-document" - }, - { - "description": "This scope permits to list all files and folders in the `$DOCUMENT`folder.", - "type": "string", - "const": "fs:scope-document-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-document-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:scope-download" - }, - { - "description": "This scope permits to list all files and folders in the `$DOWNLOAD`folder.", - "type": "string", - "const": "fs:scope-download-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-download-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$EXE` folder.", - "type": "string", - "const": "fs:scope-exe" - }, - { - "description": "This scope permits to list all files and folders in the `$EXE`folder.", - "type": "string", - "const": "fs:scope-exe-index" - }, - { - "description": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-exe-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$FONT` folder.", - "type": "string", - "const": "fs:scope-font" - }, - { - "description": "This scope permits to list all files and folders in the `$FONT`folder.", - "type": "string", - "const": "fs:scope-font-index" - }, - { - "description": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-font-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$HOME` folder.", - "type": "string", - "const": "fs:scope-home" - }, - { - "description": "This scope permits to list all files and folders in the `$HOME`folder.", - "type": "string", - "const": "fs:scope-home-index" - }, - { - "description": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-home-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:scope-localdata" - }, - { - "description": "This scope permits to list all files and folders in the `$LOCALDATA`folder.", - "type": "string", - "const": "fs:scope-localdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-localdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOG` folder.", - "type": "string", - "const": "fs:scope-log" - }, - { - "description": "This scope permits to list all files and folders in the `$LOG`folder.", - "type": "string", - "const": "fs:scope-log-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-log-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.", - "type": "string", - "const": "fs:scope-picture" - }, - { - "description": "This scope permits to list all files and folders in the `$PICTURE`folder.", - "type": "string", - "const": "fs:scope-picture-index" - }, - { - "description": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-picture-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.", - "type": "string", - "const": "fs:scope-public" - }, - { - "description": "This scope permits to list all files and folders in the `$PUBLIC`folder.", - "type": "string", - "const": "fs:scope-public-index" - }, - { - "description": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-public-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.", - "type": "string", - "const": "fs:scope-resource" - }, - { - "description": "This scope permits to list all files and folders in the `$RESOURCE`folder.", - "type": "string", - "const": "fs:scope-resource-index" - }, - { - "description": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-resource-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.", - "type": "string", - "const": "fs:scope-runtime" - }, - { - "description": "This scope permits to list all files and folders in the `$RUNTIME`folder.", - "type": "string", - "const": "fs:scope-runtime-index" - }, - { - "description": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-runtime-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMP` folder.", - "type": "string", - "const": "fs:scope-temp" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMP`folder.", - "type": "string", - "const": "fs:scope-temp-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-temp-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:scope-template" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMPLATE`folder.", - "type": "string", - "const": "fs:scope-template-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-template-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.", - "type": "string", - "const": "fs:scope-video" - }, - { - "description": "This scope permits to list all files and folders in the `$VIDEO`folder.", - "type": "string", - "const": "fs:scope-video-index" - }, - { - "description": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-video-recursive" - }, - { - "description": "This enables all write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-all" - }, - { - "description": "This enables all file write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-files" - }, - { - "description": "Allows the moveWindow and handleIconState APIs", - "type": "string", - "const": "positioner:default" - }, - { - "description": "Enables the move_window command without any pre-configured scope.", - "type": "string", - "const": "positioner:allow-move-window" - }, - { - "description": "Enables the move_window_constrained command without any pre-configured scope.", - "type": "string", - "const": "positioner:allow-move-window-constrained" - }, - { - "description": "Enables the set_tray_icon_state command without any pre-configured scope.", - "type": "string", - "const": "positioner:allow-set-tray-icon-state" - }, - { - "description": "Denies the move_window command without any pre-configured scope.", - "type": "string", - "const": "positioner:deny-move-window" - }, - { - "description": "Denies the move_window_constrained command without any pre-configured scope.", - "type": "string", - "const": "positioner:deny-move-window-constrained" - }, - { - "description": "Denies the set_tray_icon_state command without any pre-configured scope.", - "type": "string", - "const": "positioner:deny-set-tray-icon-state" - }, - { - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", - "type": "string", - "const": "shell:default" - }, - { - "description": "Enables the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-execute" - }, - { - "description": "Enables the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-kill" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-open" - }, - { - "description": "Enables the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-spawn" - }, - { - "description": "Enables the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-stdin-write" - }, - { - "description": "Denies the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-execute" - }, - { - "description": "Denies the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-kill" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-open" - }, - { - "description": "Denies the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-spawn" - }, - { - "description": "Denies the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-stdin-write" - }, - { - "description": "This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "const": "window-state:default" - }, - { - "description": "Enables the filename command without any pre-configured scope.", - "type": "string", - "const": "window-state:allow-filename" - }, - { - "description": "Enables the restore_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:allow-restore-state" - }, - { - "description": "Enables the save_window_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:allow-save-window-state" - }, - { - "description": "Denies the filename command without any pre-configured scope.", - "type": "string", - "const": "window-state:deny-filename" - }, - { - "description": "Denies the restore_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:deny-restore-state" - }, - { - "description": "Denies the save_window_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:deny-save-window-state" - } - ] - }, - "Value": { - "description": "All supported ACL values.", - "anyOf": [ - { - "description": "Represents a null JSON value.", - "type": "null" - }, - { - "description": "Represents a [`bool`].", - "type": "boolean" - }, - { - "description": "Represents a valid ACL [`Number`].", - "allOf": [ - { - "$ref": "#/definitions/Number" - } - ] - }, - { - "description": "Represents a [`String`].", - "type": "string" - }, - { - "description": "Represents a list of other [`Value`]s.", - "type": "array", - "items": { - "$ref": "#/definitions/Value" - } - }, - { - "description": "Represents a map of [`String`] keys to [`Value`]s.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Value" - } - } - ] - }, - "Number": { - "description": "A valid ACL number.", - "anyOf": [ - { - "description": "Represents an [`i64`].", - "type": "integer", - "format": "int64" - }, - { - "description": "Represents a [`f64`].", - "type": "number", - "format": "double" - } - ] - }, - "Target": { - "description": "Platform target.", - "oneOf": [ - { - "description": "MacOS.", - "type": "string", - "enum": [ - "macOS" - ] - }, - { - "description": "Windows.", - "type": "string", - "enum": [ - "windows" - ] - }, - { - "description": "Linux.", - "type": "string", - "enum": [ - "linux" - ] - }, - { - "description": "Android.", - "type": "string", - "enum": [ - "android" - ] - }, - { - "description": "iOS.", - "type": "string", - "enum": [ - "iOS" - ] - } - ] - }, - "ShellScopeEntryAllowedArg": { - "description": "A command argument allowed to be executed by the webview API.", - "anyOf": [ - { - "description": "A non-configurable argument that is passed to the command in the order it was specified.", - "type": "string" - }, - { - "description": "A variable that is set while calling the command from the webview API.", - "type": "object", - "required": [ - "validator" - ], - "properties": { - "raw": { - "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", - "default": false, - "type": "boolean" - }, - "validator": { - "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: ", - "type": "string" - } - }, - "additionalProperties": false - } - ] - }, - "ShellScopeEntryAllowedArgs": { - "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.", - "anyOf": [ - { - "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.", - "type": "boolean" - }, - { - "description": "A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.", - "type": "array", - "items": { - "$ref": "#/definitions/ShellScopeEntryAllowedArg" - } - } - ] - } - } -} \ No newline at end of file diff --git a/src-tauri/gen/schemas/macOS-schema.json b/src-tauri/gen/schemas/macOS-schema.json deleted file mode 100644 index 7ee3c87f4..000000000 --- a/src-tauri/gen/schemas/macOS-schema.json +++ /dev/null @@ -1,5181 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CapabilityFile", - "description": "Capability formats accepted in a capability file.", - "anyOf": [ - { - "description": "A single capability.", - "allOf": [ - { - "$ref": "#/definitions/Capability" - } - ] - }, - { - "description": "A list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - }, - { - "description": "A list of capabilities.", - "type": "object", - "required": [ - "capabilities" - ], - "properties": { - "capabilities": { - "description": "The list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - } - } - } - ], - "definitions": { - "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, ], \"platforms\": [\"macOS\",\"windows\"] } ```", - "type": "object", - "required": [ - "identifier", - "permissions" - ], - "properties": { - "identifier": { - "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", - "type": "string" - }, - "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", - "default": "", - "type": "string" - }, - "remote": { - "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", - "anyOf": [ - { - "$ref": "#/definitions/CapabilityRemote" - }, - { - "type": "null" - } - ] - }, - "local": { - "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", - "default": true, - "type": "boolean" - }, - "windows": { - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "webviews": { - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", - "type": "array", - "items": { - "$ref": "#/definitions/PermissionEntry" - }, - "uniqueItems": true - }, - "platforms": { - "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Target" - } - } - } - }, - "CapabilityRemote": { - "description": "Configuration for remote URLs that are associated with the capability.", - "type": "object", - "required": [ - "urls" - ], - "properties": { - "urls": { - "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PermissionEntry": { - "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", - "anyOf": [ - { - "description": "Reference a permission or permission set by identifier.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - { - "description": "Reference a permission or permission set by identifier and extends its scope.", - "type": "object", - "allOf": [ - { - "if": { - "properties": { - "identifier": { - "anyOf": [ - { - "description": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### Included permissions within this default permission set:\n", - "type": "string", - "const": "fs:default" - }, - { - "description": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta" - }, - { - "description": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the application folders.", - "type": "string", - "const": "fs:allow-app-read" - }, - { - "description": "This allows full recursive read access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-read-recursive" - }, - { - "description": "This allows non-recursive write access to the application folders.", - "type": "string", - "const": "fs:allow-app-write" - }, - { - "description": "This allows full recursive write access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-read" - }, - { - "description": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-write" - }, - { - "description": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-read" - }, - { - "description": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-write" - }, - { - "description": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-read" - }, - { - "description": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-write" - }, - { - "description": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-read" - }, - { - "description": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-write" - }, - { - "description": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-read" - }, - { - "description": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-write" - }, - { - "description": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-read" - }, - { - "description": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-write" - }, - { - "description": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-read" - }, - { - "description": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-write" - }, - { - "description": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-read" - }, - { - "description": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-write" - }, - { - "description": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-read" - }, - { - "description": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-write" - }, - { - "description": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-read" - }, - { - "description": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-write" - }, - { - "description": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-read" - }, - { - "description": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-write" - }, - { - "description": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-read" - }, - { - "description": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-write" - }, - { - "description": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-read" - }, - { - "description": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-write" - }, - { - "description": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-write-recursive" - }, - { - "description": "This denies access to dangerous Tauri relevant files and folders by default.", - "type": "string", - "const": "fs:deny-default" - }, - { - "description": "Enables the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-copy-file" - }, - { - "description": "Enables the create command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-create" - }, - { - "description": "Enables the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-exists" - }, - { - "description": "Enables the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-fstat" - }, - { - "description": "Enables the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-ftruncate" - }, - { - "description": "Enables the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-lstat" - }, - { - "description": "Enables the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-mkdir" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-open" - }, - { - "description": "Enables the read command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read" - }, - { - "description": "Enables the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-dir" - }, - { - "description": "Enables the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-file" - }, - { - "description": "Enables the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file" - }, - { - "description": "Enables the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines" - }, - { - "description": "Enables the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines-next" - }, - { - "description": "Enables the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-remove" - }, - { - "description": "Enables the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-rename" - }, - { - "description": "Enables the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-seek" - }, - { - "description": "Enables the size command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-size" - }, - { - "description": "Enables the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-stat" - }, - { - "description": "Enables the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-truncate" - }, - { - "description": "Enables the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-unwatch" - }, - { - "description": "Enables the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-watch" - }, - { - "description": "Enables the write command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write" - }, - { - "description": "Enables the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-file" - }, - { - "description": "Enables the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-text-file" - }, - { - "description": "This permissions allows to create the application specific directories.\n", - "type": "string", - "const": "fs:create-app-specific-dirs" - }, - { - "description": "Denies the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-copy-file" - }, - { - "description": "Denies the create command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-create" - }, - { - "description": "Denies the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-exists" - }, - { - "description": "Denies the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-fstat" - }, - { - "description": "Denies the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-ftruncate" - }, - { - "description": "Denies the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-lstat" - }, - { - "description": "Denies the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-mkdir" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-open" - }, - { - "description": "Denies the read command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read" - }, - { - "description": "Denies the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-dir" - }, - { - "description": "Denies the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-file" - }, - { - "description": "Denies the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file" - }, - { - "description": "Denies the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines" - }, - { - "description": "Denies the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines-next" - }, - { - "description": "Denies the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-remove" - }, - { - "description": "Denies the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-rename" - }, - { - "description": "Denies the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-seek" - }, - { - "description": "Denies the size command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-size" - }, - { - "description": "Denies the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-stat" - }, - { - "description": "Denies the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-truncate" - }, - { - "description": "Denies the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-unwatch" - }, - { - "description": "Denies the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-watch" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-linux" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-windows" - }, - { - "description": "Denies the write command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write" - }, - { - "description": "Denies the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-file" - }, - { - "description": "Denies the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-text-file" - }, - { - "description": "This enables all read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-all" - }, - { - "description": "This permission allows recursive read functionality on the application\nspecific base directories. \n", - "type": "string", - "const": "fs:read-app-specific-dirs-recursive" - }, - { - "description": "This enables directory read and file metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-dirs" - }, - { - "description": "This enables file read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-files" - }, - { - "description": "This enables all index or metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-meta" - }, - { - "description": "An empty permission you can use to modify the global scope.", - "type": "string", - "const": "fs:scope" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the application folders.", - "type": "string", - "const": "fs:scope-app" - }, - { - "description": "This scope permits to list all files and folders in the application directories.", - "type": "string", - "const": "fs:scope-app-index" - }, - { - "description": "This scope permits recursive access to the complete application folders, including sub directories and files.", - "type": "string", - "const": "fs:scope-app-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.", - "type": "string", - "const": "fs:scope-appcache" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCACHE`folder.", - "type": "string", - "const": "fs:scope-appcache-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appcache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:scope-appconfig" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCONFIG`folder.", - "type": "string", - "const": "fs:scope-appconfig-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appconfig-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.", - "type": "string", - "const": "fs:scope-appdata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPDATA`folder.", - "type": "string", - "const": "fs:scope-appdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:scope-applocaldata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder.", - "type": "string", - "const": "fs:scope-applocaldata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applocaldata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.", - "type": "string", - "const": "fs:scope-applog" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOG`folder.", - "type": "string", - "const": "fs:scope-applog-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applog-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.", - "type": "string", - "const": "fs:scope-audio" - }, - { - "description": "This scope permits to list all files and folders in the `$AUDIO`folder.", - "type": "string", - "const": "fs:scope-audio-index" - }, - { - "description": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-audio-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CACHE` folder.", - "type": "string", - "const": "fs:scope-cache" - }, - { - "description": "This scope permits to list all files and folders in the `$CACHE`folder.", - "type": "string", - "const": "fs:scope-cache-index" - }, - { - "description": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-cache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.", - "type": "string", - "const": "fs:scope-config" - }, - { - "description": "This scope permits to list all files and folders in the `$CONFIG`folder.", - "type": "string", - "const": "fs:scope-config-index" - }, - { - "description": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-config-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DATA` folder.", - "type": "string", - "const": "fs:scope-data" - }, - { - "description": "This scope permits to list all files and folders in the `$DATA`folder.", - "type": "string", - "const": "fs:scope-data-index" - }, - { - "description": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-data-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.", - "type": "string", - "const": "fs:scope-desktop" - }, - { - "description": "This scope permits to list all files and folders in the `$DESKTOP`folder.", - "type": "string", - "const": "fs:scope-desktop-index" - }, - { - "description": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-desktop-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:scope-document" - }, - { - "description": "This scope permits to list all files and folders in the `$DOCUMENT`folder.", - "type": "string", - "const": "fs:scope-document-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-document-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:scope-download" - }, - { - "description": "This scope permits to list all files and folders in the `$DOWNLOAD`folder.", - "type": "string", - "const": "fs:scope-download-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-download-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$EXE` folder.", - "type": "string", - "const": "fs:scope-exe" - }, - { - "description": "This scope permits to list all files and folders in the `$EXE`folder.", - "type": "string", - "const": "fs:scope-exe-index" - }, - { - "description": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-exe-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$FONT` folder.", - "type": "string", - "const": "fs:scope-font" - }, - { - "description": "This scope permits to list all files and folders in the `$FONT`folder.", - "type": "string", - "const": "fs:scope-font-index" - }, - { - "description": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-font-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$HOME` folder.", - "type": "string", - "const": "fs:scope-home" - }, - { - "description": "This scope permits to list all files and folders in the `$HOME`folder.", - "type": "string", - "const": "fs:scope-home-index" - }, - { - "description": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-home-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:scope-localdata" - }, - { - "description": "This scope permits to list all files and folders in the `$LOCALDATA`folder.", - "type": "string", - "const": "fs:scope-localdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-localdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOG` folder.", - "type": "string", - "const": "fs:scope-log" - }, - { - "description": "This scope permits to list all files and folders in the `$LOG`folder.", - "type": "string", - "const": "fs:scope-log-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-log-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.", - "type": "string", - "const": "fs:scope-picture" - }, - { - "description": "This scope permits to list all files and folders in the `$PICTURE`folder.", - "type": "string", - "const": "fs:scope-picture-index" - }, - { - "description": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-picture-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.", - "type": "string", - "const": "fs:scope-public" - }, - { - "description": "This scope permits to list all files and folders in the `$PUBLIC`folder.", - "type": "string", - "const": "fs:scope-public-index" - }, - { - "description": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-public-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.", - "type": "string", - "const": "fs:scope-resource" - }, - { - "description": "This scope permits to list all files and folders in the `$RESOURCE`folder.", - "type": "string", - "const": "fs:scope-resource-index" - }, - { - "description": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-resource-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.", - "type": "string", - "const": "fs:scope-runtime" - }, - { - "description": "This scope permits to list all files and folders in the `$RUNTIME`folder.", - "type": "string", - "const": "fs:scope-runtime-index" - }, - { - "description": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-runtime-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMP` folder.", - "type": "string", - "const": "fs:scope-temp" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMP`folder.", - "type": "string", - "const": "fs:scope-temp-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-temp-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:scope-template" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMPLATE`folder.", - "type": "string", - "const": "fs:scope-template-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-template-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.", - "type": "string", - "const": "fs:scope-video" - }, - { - "description": "This scope permits to list all files and folders in the `$VIDEO`folder.", - "type": "string", - "const": "fs:scope-video-index" - }, - { - "description": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-video-recursive" - }, - { - "description": "This enables all write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-all" - }, - { - "description": "This enables all file write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-files" - } - ] - } - } - }, - "then": { - "properties": { - "allow": { - "items": { - "title": "FsScopeEntry", - "description": "FS scope entry.", - "anyOf": [ - { - "description": "A path that can be accessed by the webview when using the fs APIs. FS scope path pattern.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - { - "type": "object", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "A path that can be accessed by the webview when using the fs APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - } - } - } - ] - } - }, - "deny": { - "items": { - "title": "FsScopeEntry", - "description": "FS scope entry.", - "anyOf": [ - { - "description": "A path that can be accessed by the webview when using the fs APIs. FS scope path pattern.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - { - "type": "object", - "required": [ - "path" - ], - "properties": { - "path": { - "description": "A path that can be accessed by the webview when using the fs APIs.\n\nThe pattern can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - } - } - } - ] - } - } - } - }, - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - } - } - }, - { - "if": { - "properties": { - "identifier": { - "anyOf": [ - { - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", - "type": "string", - "const": "shell:default" - }, - { - "description": "Enables the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-execute" - }, - { - "description": "Enables the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-kill" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-open" - }, - { - "description": "Enables the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-spawn" - }, - { - "description": "Enables the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-stdin-write" - }, - { - "description": "Denies the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-execute" - }, - { - "description": "Denies the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-kill" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-open" - }, - { - "description": "Denies the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-spawn" - }, - { - "description": "Denies the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-stdin-write" - } - ] - } - } - }, - "then": { - "properties": { - "allow": { - "items": { - "title": "ShellScopeEntry", - "description": "Shell scope entry.", - "anyOf": [ - { - "type": "object", - "required": [ - "cmd", - "name" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "cmd": { - "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "name", - "sidecar" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - }, - "sidecar": { - "description": "If this command is a sidecar command.", - "type": "boolean" - } - }, - "additionalProperties": false - } - ] - } - }, - "deny": { - "items": { - "title": "ShellScopeEntry", - "description": "Shell scope entry.", - "anyOf": [ - { - "type": "object", - "required": [ - "cmd", - "name" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "cmd": { - "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", - "type": "string" - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - } - }, - "additionalProperties": false - }, - { - "type": "object", - "required": [ - "name", - "sidecar" - ], - "properties": { - "args": { - "description": "The allowed arguments for the command execution.", - "allOf": [ - { - "$ref": "#/definitions/ShellScopeEntryAllowedArgs" - } - ] - }, - "name": { - "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", - "type": "string" - }, - "sidecar": { - "description": "If this command is a sidecar command.", - "type": "boolean" - } - }, - "additionalProperties": false - } - ] - } - } - } - }, - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - } - } - }, - { - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - "allow": { - "description": "Data that defines what is allowed by the scope.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - }, - "deny": { - "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - } - } - } - ], - "required": [ - "identifier" - ] - } - ] - }, - "Identifier": { - "description": "Permission identifier", - "oneOf": [ - { - "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", - "type": "string", - "const": "core:default" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:app:default" - }, - { - "description": "Enables the app_hide command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-app-hide" - }, - { - "description": "Enables the app_show command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-app-show" - }, - { - "description": "Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-default-window-icon" - }, - { - "description": "Enables the name command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-name" - }, - { - "description": "Enables the set_app_theme command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-set-app-theme" - }, - { - "description": "Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-tauri-version" - }, - { - "description": "Enables the version command without any pre-configured scope.", - "type": "string", - "const": "core:app:allow-version" - }, - { - "description": "Denies the app_hide command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-app-hide" - }, - { - "description": "Denies the app_show command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-app-show" - }, - { - "description": "Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-default-window-icon" - }, - { - "description": "Denies the name command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-name" - }, - { - "description": "Denies the set_app_theme command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-set-app-theme" - }, - { - "description": "Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-tauri-version" - }, - { - "description": "Denies the version command without any pre-configured scope.", - "type": "string", - "const": "core:app:deny-version" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:event:default" - }, - { - "description": "Enables the emit command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-emit" - }, - { - "description": "Enables the emit_to command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-emit-to" - }, - { - "description": "Enables the listen command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-listen" - }, - { - "description": "Enables the unlisten command without any pre-configured scope.", - "type": "string", - "const": "core:event:allow-unlisten" - }, - { - "description": "Denies the emit command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-emit" - }, - { - "description": "Denies the emit_to command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-emit-to" - }, - { - "description": "Denies the listen command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-listen" - }, - { - "description": "Denies the unlisten command without any pre-configured scope.", - "type": "string", - "const": "core:event:deny-unlisten" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:image:default" - }, - { - "description": "Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-from-bytes" - }, - { - "description": "Enables the from_path command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-from-path" - }, - { - "description": "Enables the new command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-new" - }, - { - "description": "Enables the rgba command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-rgba" - }, - { - "description": "Enables the size command without any pre-configured scope.", - "type": "string", - "const": "core:image:allow-size" - }, - { - "description": "Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-from-bytes" - }, - { - "description": "Denies the from_path command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-from-path" - }, - { - "description": "Denies the new command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-new" - }, - { - "description": "Denies the rgba command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-rgba" - }, - { - "description": "Denies the size command without any pre-configured scope.", - "type": "string", - "const": "core:image:deny-size" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:menu:default" - }, - { - "description": "Enables the append command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-append" - }, - { - "description": "Enables the create_default command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-create-default" - }, - { - "description": "Enables the get command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-get" - }, - { - "description": "Enables the insert command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-insert" - }, - { - "description": "Enables the is_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-is-checked" - }, - { - "description": "Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-is-enabled" - }, - { - "description": "Enables the items command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-items" - }, - { - "description": "Enables the new command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-new" - }, - { - "description": "Enables the popup command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-popup" - }, - { - "description": "Enables the prepend command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-prepend" - }, - { - "description": "Enables the remove command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-remove" - }, - { - "description": "Enables the remove_at command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-remove-at" - }, - { - "description": "Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-accelerator" - }, - { - "description": "Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-app-menu" - }, - { - "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-help-menu-for-nsapp" - }, - { - "description": "Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-window-menu" - }, - { - "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-as-windows-menu-for-nsapp" - }, - { - "description": "Enables the set_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-checked" - }, - { - "description": "Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-enabled" - }, - { - "description": "Enables the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-icon" - }, - { - "description": "Enables the set_text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-set-text" - }, - { - "description": "Enables the text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:allow-text" - }, - { - "description": "Denies the append command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-append" - }, - { - "description": "Denies the create_default command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-create-default" - }, - { - "description": "Denies the get command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-get" - }, - { - "description": "Denies the insert command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-insert" - }, - { - "description": "Denies the is_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-is-checked" - }, - { - "description": "Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-is-enabled" - }, - { - "description": "Denies the items command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-items" - }, - { - "description": "Denies the new command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-new" - }, - { - "description": "Denies the popup command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-popup" - }, - { - "description": "Denies the prepend command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-prepend" - }, - { - "description": "Denies the remove command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-remove" - }, - { - "description": "Denies the remove_at command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-remove-at" - }, - { - "description": "Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-accelerator" - }, - { - "description": "Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-app-menu" - }, - { - "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-help-menu-for-nsapp" - }, - { - "description": "Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-window-menu" - }, - { - "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-as-windows-menu-for-nsapp" - }, - { - "description": "Denies the set_checked command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-checked" - }, - { - "description": "Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-enabled" - }, - { - "description": "Denies the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-icon" - }, - { - "description": "Denies the set_text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-set-text" - }, - { - "description": "Denies the text command without any pre-configured scope.", - "type": "string", - "const": "core:menu:deny-text" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:path:default" - }, - { - "description": "Enables the basename command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-basename" - }, - { - "description": "Enables the dirname command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-dirname" - }, - { - "description": "Enables the extname command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-extname" - }, - { - "description": "Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-is-absolute" - }, - { - "description": "Enables the join command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-join" - }, - { - "description": "Enables the normalize command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-normalize" - }, - { - "description": "Enables the resolve command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-resolve" - }, - { - "description": "Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "const": "core:path:allow-resolve-directory" - }, - { - "description": "Denies the basename command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-basename" - }, - { - "description": "Denies the dirname command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-dirname" - }, - { - "description": "Denies the extname command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-extname" - }, - { - "description": "Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-is-absolute" - }, - { - "description": "Denies the join command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-join" - }, - { - "description": "Denies the normalize command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-normalize" - }, - { - "description": "Denies the resolve command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-resolve" - }, - { - "description": "Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "const": "core:path:deny-resolve-directory" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:resources:default" - }, - { - "description": "Enables the close command without any pre-configured scope.", - "type": "string", - "const": "core:resources:allow-close" - }, - { - "description": "Denies the close command without any pre-configured scope.", - "type": "string", - "const": "core:resources:deny-close" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:tray:default" - }, - { - "description": "Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-get-by-id" - }, - { - "description": "Enables the new command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-new" - }, - { - "description": "Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-remove-by-id" - }, - { - "description": "Enables the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-icon" - }, - { - "description": "Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-icon-as-template" - }, - { - "description": "Enables the set_menu command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-menu" - }, - { - "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-show-menu-on-left-click" - }, - { - "description": "Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-temp-dir-path" - }, - { - "description": "Enables the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-title" - }, - { - "description": "Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-tooltip" - }, - { - "description": "Enables the set_visible command without any pre-configured scope.", - "type": "string", - "const": "core:tray:allow-set-visible" - }, - { - "description": "Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-get-by-id" - }, - { - "description": "Denies the new command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-new" - }, - { - "description": "Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-remove-by-id" - }, - { - "description": "Denies the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-icon" - }, - { - "description": "Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-icon-as-template" - }, - { - "description": "Denies the set_menu command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-menu" - }, - { - "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-show-menu-on-left-click" - }, - { - "description": "Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-temp-dir-path" - }, - { - "description": "Denies the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-title" - }, - { - "description": "Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-tooltip" - }, - { - "description": "Denies the set_visible command without any pre-configured scope.", - "type": "string", - "const": "core:tray:deny-set-visible" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:webview:default" - }, - { - "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-clear-all-browsing-data" - }, - { - "description": "Enables the create_webview command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-create-webview" - }, - { - "description": "Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-create-webview-window" - }, - { - "description": "Enables the get_all_webviews command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-get-all-webviews" - }, - { - "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-internal-toggle-devtools" - }, - { - "description": "Enables the print command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-print" - }, - { - "description": "Enables the reparent command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-reparent" - }, - { - "description": "Enables the set_webview_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-background-color" - }, - { - "description": "Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-focus" - }, - { - "description": "Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-position" - }, - { - "description": "Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-size" - }, - { - "description": "Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-set-webview-zoom" - }, - { - "description": "Enables the webview_close command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-close" - }, - { - "description": "Enables the webview_hide command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-hide" - }, - { - "description": "Enables the webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-position" - }, - { - "description": "Enables the webview_show command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-show" - }, - { - "description": "Enables the webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:allow-webview-size" - }, - { - "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-clear-all-browsing-data" - }, - { - "description": "Denies the create_webview command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-create-webview" - }, - { - "description": "Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-create-webview-window" - }, - { - "description": "Denies the get_all_webviews command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-get-all-webviews" - }, - { - "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-internal-toggle-devtools" - }, - { - "description": "Denies the print command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-print" - }, - { - "description": "Denies the reparent command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-reparent" - }, - { - "description": "Denies the set_webview_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-background-color" - }, - { - "description": "Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-focus" - }, - { - "description": "Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-position" - }, - { - "description": "Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-size" - }, - { - "description": "Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-set-webview-zoom" - }, - { - "description": "Denies the webview_close command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-close" - }, - { - "description": "Denies the webview_hide command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-hide" - }, - { - "description": "Denies the webview_position command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-position" - }, - { - "description": "Denies the webview_show command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-show" - }, - { - "description": "Denies the webview_size command without any pre-configured scope.", - "type": "string", - "const": "core:webview:deny-webview-size" - }, - { - "description": "Default permissions for the plugin.", - "type": "string", - "const": "core:window:default" - }, - { - "description": "Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-available-monitors" - }, - { - "description": "Enables the center command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-center" - }, - { - "description": "Enables the close command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-close" - }, - { - "description": "Enables the create command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-create" - }, - { - "description": "Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-current-monitor" - }, - { - "description": "Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-cursor-position" - }, - { - "description": "Enables the destroy command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-destroy" - }, - { - "description": "Enables the get_all_windows command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-get-all-windows" - }, - { - "description": "Enables the hide command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-hide" - }, - { - "description": "Enables the inner_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-inner-position" - }, - { - "description": "Enables the inner_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-inner-size" - }, - { - "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-internal-toggle-maximize" - }, - { - "description": "Enables the is_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-closable" - }, - { - "description": "Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-decorated" - }, - { - "description": "Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-enabled" - }, - { - "description": "Enables the is_focused command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-focused" - }, - { - "description": "Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-fullscreen" - }, - { - "description": "Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-maximizable" - }, - { - "description": "Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-maximized" - }, - { - "description": "Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-minimizable" - }, - { - "description": "Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-minimized" - }, - { - "description": "Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-resizable" - }, - { - "description": "Enables the is_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-is-visible" - }, - { - "description": "Enables the maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-maximize" - }, - { - "description": "Enables the minimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-minimize" - }, - { - "description": "Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-monitor-from-point" - }, - { - "description": "Enables the outer_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-outer-position" - }, - { - "description": "Enables the outer_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-outer-size" - }, - { - "description": "Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-primary-monitor" - }, - { - "description": "Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-request-user-attention" - }, - { - "description": "Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-scale-factor" - }, - { - "description": "Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-always-on-bottom" - }, - { - "description": "Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-always-on-top" - }, - { - "description": "Enables the set_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-background-color" - }, - { - "description": "Enables the set_badge_count command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-badge-count" - }, - { - "description": "Enables the set_badge_label command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-badge-label" - }, - { - "description": "Enables the set_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-closable" - }, - { - "description": "Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-content-protected" - }, - { - "description": "Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-grab" - }, - { - "description": "Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-icon" - }, - { - "description": "Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-position" - }, - { - "description": "Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-cursor-visible" - }, - { - "description": "Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-decorations" - }, - { - "description": "Enables the set_effects command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-effects" - }, - { - "description": "Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-enabled" - }, - { - "description": "Enables the set_focus command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-focus" - }, - { - "description": "Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-fullscreen" - }, - { - "description": "Enables the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-icon" - }, - { - "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-ignore-cursor-events" - }, - { - "description": "Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-max-size" - }, - { - "description": "Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-maximizable" - }, - { - "description": "Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-min-size" - }, - { - "description": "Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-minimizable" - }, - { - "description": "Enables the set_overlay_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-overlay-icon" - }, - { - "description": "Enables the set_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-position" - }, - { - "description": "Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-progress-bar" - }, - { - "description": "Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-resizable" - }, - { - "description": "Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-shadow" - }, - { - "description": "Enables the set_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-size" - }, - { - "description": "Enables the set_size_constraints command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-size-constraints" - }, - { - "description": "Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-skip-taskbar" - }, - { - "description": "Enables the set_theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-theme" - }, - { - "description": "Enables the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-title" - }, - { - "description": "Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-title-bar-style" - }, - { - "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-set-visible-on-all-workspaces" - }, - { - "description": "Enables the show command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-show" - }, - { - "description": "Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-start-dragging" - }, - { - "description": "Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-start-resize-dragging" - }, - { - "description": "Enables the theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-theme" - }, - { - "description": "Enables the title command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-title" - }, - { - "description": "Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-toggle-maximize" - }, - { - "description": "Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-unmaximize" - }, - { - "description": "Enables the unminimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:allow-unminimize" - }, - { - "description": "Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-available-monitors" - }, - { - "description": "Denies the center command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-center" - }, - { - "description": "Denies the close command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-close" - }, - { - "description": "Denies the create command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-create" - }, - { - "description": "Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-current-monitor" - }, - { - "description": "Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-cursor-position" - }, - { - "description": "Denies the destroy command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-destroy" - }, - { - "description": "Denies the get_all_windows command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-get-all-windows" - }, - { - "description": "Denies the hide command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-hide" - }, - { - "description": "Denies the inner_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-inner-position" - }, - { - "description": "Denies the inner_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-inner-size" - }, - { - "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-internal-toggle-maximize" - }, - { - "description": "Denies the is_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-closable" - }, - { - "description": "Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-decorated" - }, - { - "description": "Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-enabled" - }, - { - "description": "Denies the is_focused command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-focused" - }, - { - "description": "Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-fullscreen" - }, - { - "description": "Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-maximizable" - }, - { - "description": "Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-maximized" - }, - { - "description": "Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-minimizable" - }, - { - "description": "Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-minimized" - }, - { - "description": "Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-resizable" - }, - { - "description": "Denies the is_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-is-visible" - }, - { - "description": "Denies the maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-maximize" - }, - { - "description": "Denies the minimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-minimize" - }, - { - "description": "Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-monitor-from-point" - }, - { - "description": "Denies the outer_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-outer-position" - }, - { - "description": "Denies the outer_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-outer-size" - }, - { - "description": "Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-primary-monitor" - }, - { - "description": "Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-request-user-attention" - }, - { - "description": "Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-scale-factor" - }, - { - "description": "Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-always-on-bottom" - }, - { - "description": "Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-always-on-top" - }, - { - "description": "Denies the set_background_color command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-background-color" - }, - { - "description": "Denies the set_badge_count command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-badge-count" - }, - { - "description": "Denies the set_badge_label command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-badge-label" - }, - { - "description": "Denies the set_closable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-closable" - }, - { - "description": "Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-content-protected" - }, - { - "description": "Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-grab" - }, - { - "description": "Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-icon" - }, - { - "description": "Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-position" - }, - { - "description": "Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-cursor-visible" - }, - { - "description": "Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-decorations" - }, - { - "description": "Denies the set_effects command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-effects" - }, - { - "description": "Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-enabled" - }, - { - "description": "Denies the set_focus command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-focus" - }, - { - "description": "Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-fullscreen" - }, - { - "description": "Denies the set_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-icon" - }, - { - "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-ignore-cursor-events" - }, - { - "description": "Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-max-size" - }, - { - "description": "Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-maximizable" - }, - { - "description": "Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-min-size" - }, - { - "description": "Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-minimizable" - }, - { - "description": "Denies the set_overlay_icon command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-overlay-icon" - }, - { - "description": "Denies the set_position command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-position" - }, - { - "description": "Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-progress-bar" - }, - { - "description": "Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-resizable" - }, - { - "description": "Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-shadow" - }, - { - "description": "Denies the set_size command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-size" - }, - { - "description": "Denies the set_size_constraints command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-size-constraints" - }, - { - "description": "Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-skip-taskbar" - }, - { - "description": "Denies the set_theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-theme" - }, - { - "description": "Denies the set_title command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-title" - }, - { - "description": "Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-title-bar-style" - }, - { - "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-set-visible-on-all-workspaces" - }, - { - "description": "Denies the show command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-show" - }, - { - "description": "Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-start-dragging" - }, - { - "description": "Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-start-resize-dragging" - }, - { - "description": "Denies the theme command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-theme" - }, - { - "description": "Denies the title command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-title" - }, - { - "description": "Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-toggle-maximize" - }, - { - "description": "Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-unmaximize" - }, - { - "description": "Denies the unminimize command without any pre-configured scope.", - "type": "string", - "const": "core:window:deny-unminimize" - }, - { - "description": "This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", - "type": "string", - "const": "dialog:default" - }, - { - "description": "Enables the ask command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-ask" - }, - { - "description": "Enables the confirm command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-confirm" - }, - { - "description": "Enables the message command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-message" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-open" - }, - { - "description": "Enables the save command without any pre-configured scope.", - "type": "string", - "const": "dialog:allow-save" - }, - { - "description": "Denies the ask command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-ask" - }, - { - "description": "Denies the confirm command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-confirm" - }, - { - "description": "Denies the message command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-message" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-open" - }, - { - "description": "Denies the save command without any pre-configured scope.", - "type": "string", - "const": "dialog:deny-save" - }, - { - "description": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### Included permissions within this default permission set:\n", - "type": "string", - "const": "fs:default" - }, - { - "description": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta" - }, - { - "description": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.", - "type": "string", - "const": "fs:allow-app-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the application folders.", - "type": "string", - "const": "fs:allow-app-read" - }, - { - "description": "This allows full recursive read access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-read-recursive" - }, - { - "description": "This allows non-recursive write access to the application folders.", - "type": "string", - "const": "fs:allow-app-write" - }, - { - "description": "This allows full recursive write access to the complete application folders, files and subdirectories.", - "type": "string", - "const": "fs:allow-app-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appcache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCACHE` folder.", - "type": "string", - "const": "fs:allow-appcache-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appcache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appconfig-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:allow-appconfig-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appconfig-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-appdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPDATA` folder.", - "type": "string", - "const": "fs:allow-appdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-appdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applocaldata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:allow-applocaldata-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applocaldata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-applog-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-read" - }, - { - "description": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$APPLOG` folder.", - "type": "string", - "const": "fs:allow-applog-write" - }, - { - "description": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-applog-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-audio-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-read" - }, - { - "description": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$AUDIO` folder.", - "type": "string", - "const": "fs:allow-audio-write" - }, - { - "description": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-audio-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-cache-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-read" - }, - { - "description": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CACHE` folder.", - "type": "string", - "const": "fs:allow-cache-write" - }, - { - "description": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-cache-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-config-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-read" - }, - { - "description": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$CONFIG` folder.", - "type": "string", - "const": "fs:allow-config-write" - }, - { - "description": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-config-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-data-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-read" - }, - { - "description": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DATA` folder.", - "type": "string", - "const": "fs:allow-data-write" - }, - { - "description": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-data-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-desktop-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-read" - }, - { - "description": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DESKTOP` folder.", - "type": "string", - "const": "fs:allow-desktop-write" - }, - { - "description": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-desktop-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-document-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:allow-document-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-document-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-download-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-read" - }, - { - "description": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:allow-download-write" - }, - { - "description": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-download-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-exe-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-read" - }, - { - "description": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$EXE` folder.", - "type": "string", - "const": "fs:allow-exe-write" - }, - { - "description": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-exe-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-font-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-read" - }, - { - "description": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$FONT` folder.", - "type": "string", - "const": "fs:allow-font-write" - }, - { - "description": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-font-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-home-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-read" - }, - { - "description": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$HOME` folder.", - "type": "string", - "const": "fs:allow-home-write" - }, - { - "description": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-home-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-localdata-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:allow-localdata-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-localdata-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-log-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-read" - }, - { - "description": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$LOG` folder.", - "type": "string", - "const": "fs:allow-log-write" - }, - { - "description": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-log-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-picture-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-read" - }, - { - "description": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PICTURE` folder.", - "type": "string", - "const": "fs:allow-picture-write" - }, - { - "description": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-picture-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-public-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-read" - }, - { - "description": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$PUBLIC` folder.", - "type": "string", - "const": "fs:allow-public-write" - }, - { - "description": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-public-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-resource-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-read" - }, - { - "description": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RESOURCE` folder.", - "type": "string", - "const": "fs:allow-resource-write" - }, - { - "description": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-resource-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-runtime-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-read" - }, - { - "description": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$RUNTIME` folder.", - "type": "string", - "const": "fs:allow-runtime-write" - }, - { - "description": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-runtime-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-temp-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMP` folder.", - "type": "string", - "const": "fs:allow-temp-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-temp-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-template-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-read" - }, - { - "description": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:allow-template-write" - }, - { - "description": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-template-write-recursive" - }, - { - "description": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta" - }, - { - "description": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.", - "type": "string", - "const": "fs:allow-video-meta-recursive" - }, - { - "description": "This allows non-recursive read access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-read" - }, - { - "description": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-read-recursive" - }, - { - "description": "This allows non-recursive write access to the `$VIDEO` folder.", - "type": "string", - "const": "fs:allow-video-write" - }, - { - "description": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.", - "type": "string", - "const": "fs:allow-video-write-recursive" - }, - { - "description": "This denies access to dangerous Tauri relevant files and folders by default.", - "type": "string", - "const": "fs:deny-default" - }, - { - "description": "Enables the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-copy-file" - }, - { - "description": "Enables the create command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-create" - }, - { - "description": "Enables the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-exists" - }, - { - "description": "Enables the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-fstat" - }, - { - "description": "Enables the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-ftruncate" - }, - { - "description": "Enables the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-lstat" - }, - { - "description": "Enables the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-mkdir" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-open" - }, - { - "description": "Enables the read command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read" - }, - { - "description": "Enables the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-dir" - }, - { - "description": "Enables the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-file" - }, - { - "description": "Enables the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file" - }, - { - "description": "Enables the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines" - }, - { - "description": "Enables the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-read-text-file-lines-next" - }, - { - "description": "Enables the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-remove" - }, - { - "description": "Enables the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-rename" - }, - { - "description": "Enables the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-seek" - }, - { - "description": "Enables the size command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-size" - }, - { - "description": "Enables the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-stat" - }, - { - "description": "Enables the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-truncate" - }, - { - "description": "Enables the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-unwatch" - }, - { - "description": "Enables the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-watch" - }, - { - "description": "Enables the write command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write" - }, - { - "description": "Enables the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-file" - }, - { - "description": "Enables the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:allow-write-text-file" - }, - { - "description": "This permissions allows to create the application specific directories.\n", - "type": "string", - "const": "fs:create-app-specific-dirs" - }, - { - "description": "Denies the copy_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-copy-file" - }, - { - "description": "Denies the create command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-create" - }, - { - "description": "Denies the exists command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-exists" - }, - { - "description": "Denies the fstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-fstat" - }, - { - "description": "Denies the ftruncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-ftruncate" - }, - { - "description": "Denies the lstat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-lstat" - }, - { - "description": "Denies the mkdir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-mkdir" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-open" - }, - { - "description": "Denies the read command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read" - }, - { - "description": "Denies the read_dir command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-dir" - }, - { - "description": "Denies the read_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-file" - }, - { - "description": "Denies the read_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file" - }, - { - "description": "Denies the read_text_file_lines command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines" - }, - { - "description": "Denies the read_text_file_lines_next command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-read-text-file-lines-next" - }, - { - "description": "Denies the remove command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-remove" - }, - { - "description": "Denies the rename command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-rename" - }, - { - "description": "Denies the seek command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-seek" - }, - { - "description": "Denies the size command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-size" - }, - { - "description": "Denies the stat command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-stat" - }, - { - "description": "Denies the truncate command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-truncate" - }, - { - "description": "Denies the unwatch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-unwatch" - }, - { - "description": "Denies the watch command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-watch" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-linux" - }, - { - "description": "This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.", - "type": "string", - "const": "fs:deny-webview-data-windows" - }, - { - "description": "Denies the write command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write" - }, - { - "description": "Denies the write_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-file" - }, - { - "description": "Denies the write_text_file command without any pre-configured scope.", - "type": "string", - "const": "fs:deny-write-text-file" - }, - { - "description": "This enables all read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-all" - }, - { - "description": "This permission allows recursive read functionality on the application\nspecific base directories. \n", - "type": "string", - "const": "fs:read-app-specific-dirs-recursive" - }, - { - "description": "This enables directory read and file metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-dirs" - }, - { - "description": "This enables file read related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-files" - }, - { - "description": "This enables all index or metadata related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:read-meta" - }, - { - "description": "An empty permission you can use to modify the global scope.", - "type": "string", - "const": "fs:scope" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the application folders.", - "type": "string", - "const": "fs:scope-app" - }, - { - "description": "This scope permits to list all files and folders in the application directories.", - "type": "string", - "const": "fs:scope-app-index" - }, - { - "description": "This scope permits recursive access to the complete application folders, including sub directories and files.", - "type": "string", - "const": "fs:scope-app-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.", - "type": "string", - "const": "fs:scope-appcache" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCACHE`folder.", - "type": "string", - "const": "fs:scope-appcache-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appcache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.", - "type": "string", - "const": "fs:scope-appconfig" - }, - { - "description": "This scope permits to list all files and folders in the `$APPCONFIG`folder.", - "type": "string", - "const": "fs:scope-appconfig-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appconfig-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.", - "type": "string", - "const": "fs:scope-appdata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPDATA`folder.", - "type": "string", - "const": "fs:scope-appdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-appdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.", - "type": "string", - "const": "fs:scope-applocaldata" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder.", - "type": "string", - "const": "fs:scope-applocaldata-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applocaldata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.", - "type": "string", - "const": "fs:scope-applog" - }, - { - "description": "This scope permits to list all files and folders in the `$APPLOG`folder.", - "type": "string", - "const": "fs:scope-applog-index" - }, - { - "description": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-applog-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.", - "type": "string", - "const": "fs:scope-audio" - }, - { - "description": "This scope permits to list all files and folders in the `$AUDIO`folder.", - "type": "string", - "const": "fs:scope-audio-index" - }, - { - "description": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-audio-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CACHE` folder.", - "type": "string", - "const": "fs:scope-cache" - }, - { - "description": "This scope permits to list all files and folders in the `$CACHE`folder.", - "type": "string", - "const": "fs:scope-cache-index" - }, - { - "description": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-cache-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.", - "type": "string", - "const": "fs:scope-config" - }, - { - "description": "This scope permits to list all files and folders in the `$CONFIG`folder.", - "type": "string", - "const": "fs:scope-config-index" - }, - { - "description": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-config-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DATA` folder.", - "type": "string", - "const": "fs:scope-data" - }, - { - "description": "This scope permits to list all files and folders in the `$DATA`folder.", - "type": "string", - "const": "fs:scope-data-index" - }, - { - "description": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-data-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.", - "type": "string", - "const": "fs:scope-desktop" - }, - { - "description": "This scope permits to list all files and folders in the `$DESKTOP`folder.", - "type": "string", - "const": "fs:scope-desktop-index" - }, - { - "description": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-desktop-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.", - "type": "string", - "const": "fs:scope-document" - }, - { - "description": "This scope permits to list all files and folders in the `$DOCUMENT`folder.", - "type": "string", - "const": "fs:scope-document-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-document-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.", - "type": "string", - "const": "fs:scope-download" - }, - { - "description": "This scope permits to list all files and folders in the `$DOWNLOAD`folder.", - "type": "string", - "const": "fs:scope-download-index" - }, - { - "description": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-download-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$EXE` folder.", - "type": "string", - "const": "fs:scope-exe" - }, - { - "description": "This scope permits to list all files and folders in the `$EXE`folder.", - "type": "string", - "const": "fs:scope-exe-index" - }, - { - "description": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-exe-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$FONT` folder.", - "type": "string", - "const": "fs:scope-font" - }, - { - "description": "This scope permits to list all files and folders in the `$FONT`folder.", - "type": "string", - "const": "fs:scope-font-index" - }, - { - "description": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-font-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$HOME` folder.", - "type": "string", - "const": "fs:scope-home" - }, - { - "description": "This scope permits to list all files and folders in the `$HOME`folder.", - "type": "string", - "const": "fs:scope-home-index" - }, - { - "description": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-home-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.", - "type": "string", - "const": "fs:scope-localdata" - }, - { - "description": "This scope permits to list all files and folders in the `$LOCALDATA`folder.", - "type": "string", - "const": "fs:scope-localdata-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-localdata-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$LOG` folder.", - "type": "string", - "const": "fs:scope-log" - }, - { - "description": "This scope permits to list all files and folders in the `$LOG`folder.", - "type": "string", - "const": "fs:scope-log-index" - }, - { - "description": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-log-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.", - "type": "string", - "const": "fs:scope-picture" - }, - { - "description": "This scope permits to list all files and folders in the `$PICTURE`folder.", - "type": "string", - "const": "fs:scope-picture-index" - }, - { - "description": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-picture-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.", - "type": "string", - "const": "fs:scope-public" - }, - { - "description": "This scope permits to list all files and folders in the `$PUBLIC`folder.", - "type": "string", - "const": "fs:scope-public-index" - }, - { - "description": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-public-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.", - "type": "string", - "const": "fs:scope-resource" - }, - { - "description": "This scope permits to list all files and folders in the `$RESOURCE`folder.", - "type": "string", - "const": "fs:scope-resource-index" - }, - { - "description": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-resource-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.", - "type": "string", - "const": "fs:scope-runtime" - }, - { - "description": "This scope permits to list all files and folders in the `$RUNTIME`folder.", - "type": "string", - "const": "fs:scope-runtime-index" - }, - { - "description": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-runtime-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMP` folder.", - "type": "string", - "const": "fs:scope-temp" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMP`folder.", - "type": "string", - "const": "fs:scope-temp-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-temp-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.", - "type": "string", - "const": "fs:scope-template" - }, - { - "description": "This scope permits to list all files and folders in the `$TEMPLATE`folder.", - "type": "string", - "const": "fs:scope-template-index" - }, - { - "description": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-template-recursive" - }, - { - "description": "This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.", - "type": "string", - "const": "fs:scope-video" - }, - { - "description": "This scope permits to list all files and folders in the `$VIDEO`folder.", - "type": "string", - "const": "fs:scope-video-index" - }, - { - "description": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.", - "type": "string", - "const": "fs:scope-video-recursive" - }, - { - "description": "This enables all write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-all" - }, - { - "description": "This enables all file write related commands without any pre-configured accessible paths.", - "type": "string", - "const": "fs:write-files" - }, - { - "description": "Allows the moveWindow and handleIconState APIs", - "type": "string", - "const": "positioner:default" - }, - { - "description": "Enables the move_window command without any pre-configured scope.", - "type": "string", - "const": "positioner:allow-move-window" - }, - { - "description": "Enables the move_window_constrained command without any pre-configured scope.", - "type": "string", - "const": "positioner:allow-move-window-constrained" - }, - { - "description": "Enables the set_tray_icon_state command without any pre-configured scope.", - "type": "string", - "const": "positioner:allow-set-tray-icon-state" - }, - { - "description": "Denies the move_window command without any pre-configured scope.", - "type": "string", - "const": "positioner:deny-move-window" - }, - { - "description": "Denies the move_window_constrained command without any pre-configured scope.", - "type": "string", - "const": "positioner:deny-move-window-constrained" - }, - { - "description": "Denies the set_tray_icon_state command without any pre-configured scope.", - "type": "string", - "const": "positioner:deny-set-tray-icon-state" - }, - { - "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", - "type": "string", - "const": "shell:default" - }, - { - "description": "Enables the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-execute" - }, - { - "description": "Enables the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-kill" - }, - { - "description": "Enables the open command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-open" - }, - { - "description": "Enables the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-spawn" - }, - { - "description": "Enables the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:allow-stdin-write" - }, - { - "description": "Denies the execute command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-execute" - }, - { - "description": "Denies the kill command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-kill" - }, - { - "description": "Denies the open command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-open" - }, - { - "description": "Denies the spawn command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-spawn" - }, - { - "description": "Denies the stdin_write command without any pre-configured scope.", - "type": "string", - "const": "shell:deny-stdin-write" - }, - { - "description": "This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "const": "window-state:default" - }, - { - "description": "Enables the filename command without any pre-configured scope.", - "type": "string", - "const": "window-state:allow-filename" - }, - { - "description": "Enables the restore_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:allow-restore-state" - }, - { - "description": "Enables the save_window_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:allow-save-window-state" - }, - { - "description": "Denies the filename command without any pre-configured scope.", - "type": "string", - "const": "window-state:deny-filename" - }, - { - "description": "Denies the restore_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:deny-restore-state" - }, - { - "description": "Denies the save_window_state command without any pre-configured scope.", - "type": "string", - "const": "window-state:deny-save-window-state" - } - ] - }, - "Value": { - "description": "All supported ACL values.", - "anyOf": [ - { - "description": "Represents a null JSON value.", - "type": "null" - }, - { - "description": "Represents a [`bool`].", - "type": "boolean" - }, - { - "description": "Represents a valid ACL [`Number`].", - "allOf": [ - { - "$ref": "#/definitions/Number" - } - ] - }, - { - "description": "Represents a [`String`].", - "type": "string" - }, - { - "description": "Represents a list of other [`Value`]s.", - "type": "array", - "items": { - "$ref": "#/definitions/Value" - } - }, - { - "description": "Represents a map of [`String`] keys to [`Value`]s.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Value" - } - } - ] - }, - "Number": { - "description": "A valid ACL number.", - "anyOf": [ - { - "description": "Represents an [`i64`].", - "type": "integer", - "format": "int64" - }, - { - "description": "Represents a [`f64`].", - "type": "number", - "format": "double" - } - ] - }, - "Target": { - "description": "Platform target.", - "oneOf": [ - { - "description": "MacOS.", - "type": "string", - "enum": [ - "macOS" - ] - }, - { - "description": "Windows.", - "type": "string", - "enum": [ - "windows" - ] - }, - { - "description": "Linux.", - "type": "string", - "enum": [ - "linux" - ] - }, - { - "description": "Android.", - "type": "string", - "enum": [ - "android" - ] - }, - { - "description": "iOS.", - "type": "string", - "enum": [ - "iOS" - ] - } - ] - }, - "ShellScopeEntryAllowedArg": { - "description": "A command argument allowed to be executed by the webview API.", - "anyOf": [ - { - "description": "A non-configurable argument that is passed to the command in the order it was specified.", - "type": "string" - }, - { - "description": "A variable that is set while calling the command from the webview API.", - "type": "object", - "required": [ - "validator" - ], - "properties": { - "raw": { - "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", - "default": false, - "type": "boolean" - }, - "validator": { - "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: ", - "type": "string" - } - }, - "additionalProperties": false - } - ] - }, - "ShellScopeEntryAllowedArgs": { - "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellScopeEntryAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.", - "anyOf": [ - { - "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.", - "type": "boolean" - }, - { - "description": "A specific set of [`ShellScopeEntryAllowedArg`] that are valid to call for the command configuration.", - "type": "array", - "items": { - "$ref": "#/definitions/ShellScopeEntryAllowedArg" - } - } - ] - } - } -} \ No newline at end of file diff --git a/src-tauri/gen/schemas/plugin-manifests.json b/src-tauri/gen/schemas/plugin-manifests.json deleted file mode 100644 index 8af6336fc..000000000 --- a/src-tauri/gen/schemas/plugin-manifests.json +++ /dev/null @@ -1 +0,0 @@ -{"app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"version":null,"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]},"scope":{}},"allow-app-show":{"version":null,"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]},"scope":{}},"allow-name":{"version":null,"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]},"scope":{}},"allow-tauri-version":{"version":null,"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]},"scope":{}},"allow-version":{"version":null,"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]},"scope":{}},"deny-app-hide":{"version":null,"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]},"scope":{}},"deny-app-show":{"version":null,"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]},"scope":{}},"deny-name":{"version":null,"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]},"scope":{}},"deny-tauri-version":{"version":null,"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]},"scope":{}},"deny-version":{"version":null,"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":null,"permissions":{"allow-ask":{"version":null,"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]},"scope":{}},"allow-confirm":{"version":null,"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]},"scope":{}},"allow-message":{"version":null,"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]},"scope":{}},"allow-open":{"version":null,"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]},"scope":{}},"allow-save":{"version":null,"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]},"scope":{}},"deny-ask":{"version":null,"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]},"scope":{}},"deny-confirm":{"version":null,"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]},"scope":{}},"deny-message":{"version":null,"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]},"scope":{}},"deny-open":{"version":null,"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]},"scope":{}},"deny-save":{"version":null,"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"version":null,"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]},"scope":{}},"allow-emit-to":{"version":null,"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]},"scope":{}},"allow-listen":{"version":null,"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]},"scope":{}},"allow-unlisten":{"version":null,"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]},"scope":{}},"deny-emit":{"version":null,"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]},"scope":{}},"deny-emit-to":{"version":null,"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]},"scope":{}},"deny-listen":{"version":null,"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]},"scope":{}},"deny-unlisten":{"version":null,"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"fs":{"default_permission":{"identifier":"default","description":"# Tauri `fs` default permissions\n\nThis configuration file defines the default permissions granted\nto the filesystem.\n\n### Granted Permissions\n\nThis default permission set enables all read-related commands and\nallows access to the `$APP` folder and sub directories created in it.\nThe location of the `$APP` folder depends on the operating system,\nwhere the application is run.\n\nIn general the `$APP` folder needs to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\n### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n","permissions":["read-all","scope-app-recursive","deny-default"]},"permissions":{"allow-copy-file":{"version":null,"identifier":"allow-copy-file","description":"Enables the copy_file command without any pre-configured scope.","commands":{"allow":["copy_file"],"deny":[]},"scope":{}},"allow-create":{"version":null,"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]},"scope":{}},"allow-exists":{"version":null,"identifier":"allow-exists","description":"Enables the exists command without any pre-configured scope.","commands":{"allow":["exists"],"deny":[]},"scope":{}},"allow-fstat":{"version":null,"identifier":"allow-fstat","description":"Enables the fstat command without any pre-configured scope.","commands":{"allow":["fstat"],"deny":[]},"scope":{}},"allow-ftruncate":{"version":null,"identifier":"allow-ftruncate","description":"Enables the ftruncate command without any pre-configured scope.","commands":{"allow":["ftruncate"],"deny":[]},"scope":{}},"allow-lstat":{"version":null,"identifier":"allow-lstat","description":"Enables the lstat command without any pre-configured scope.","commands":{"allow":["lstat"],"deny":[]},"scope":{}},"allow-mkdir":{"version":null,"identifier":"allow-mkdir","description":"Enables the mkdir command without any pre-configured scope.","commands":{"allow":["mkdir"],"deny":[]},"scope":{}},"allow-open":{"version":null,"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]},"scope":{}},"allow-read":{"version":null,"identifier":"allow-read","description":"Enables the read command without any pre-configured scope.","commands":{"allow":["read"],"deny":[]},"scope":{}},"allow-read-dir":{"version":null,"identifier":"allow-read-dir","description":"Enables the read_dir command without any pre-configured scope.","commands":{"allow":["read_dir"],"deny":[]},"scope":{}},"allow-read-file":{"version":null,"identifier":"allow-read-file","description":"Enables the read_file command without any pre-configured scope.","commands":{"allow":["read_file"],"deny":[]},"scope":{}},"allow-read-text-file":{"version":null,"identifier":"allow-read-text-file","description":"Enables the read_text_file command without any pre-configured scope.","commands":{"allow":["read_text_file"],"deny":[]},"scope":{}},"allow-read-text-file-lines":{"version":null,"identifier":"allow-read-text-file-lines","description":"Enables the read_text_file_lines command without any pre-configured scope.","commands":{"allow":["read_text_file_lines"],"deny":[]},"scope":{}},"allow-read-text-file-lines-next":{"version":null,"identifier":"allow-read-text-file-lines-next","description":"Enables the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":["read_text_file_lines_next"],"deny":[]},"scope":{}},"allow-remove":{"version":null,"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]},"scope":{}},"allow-rename":{"version":null,"identifier":"allow-rename","description":"Enables the rename command without any pre-configured scope.","commands":{"allow":["rename"],"deny":[]},"scope":{}},"allow-seek":{"version":null,"identifier":"allow-seek","description":"Enables the seek command without any pre-configured scope.","commands":{"allow":["seek"],"deny":[]},"scope":{}},"allow-stat":{"version":null,"identifier":"allow-stat","description":"Enables the stat command without any pre-configured scope.","commands":{"allow":["stat"],"deny":[]},"scope":{}},"allow-truncate":{"version":null,"identifier":"allow-truncate","description":"Enables the truncate command without any pre-configured scope.","commands":{"allow":["truncate"],"deny":[]},"scope":{}},"allow-unwatch":{"version":null,"identifier":"allow-unwatch","description":"Enables the unwatch command without any pre-configured scope.","commands":{"allow":["unwatch"],"deny":[]},"scope":{}},"allow-watch":{"version":null,"identifier":"allow-watch","description":"Enables the watch command without any pre-configured scope.","commands":{"allow":["watch"],"deny":[]},"scope":{}},"allow-write":{"version":null,"identifier":"allow-write","description":"Enables the write command without any pre-configured scope.","commands":{"allow":["write"],"deny":[]},"scope":{}},"allow-write-file":{"version":null,"identifier":"allow-write-file","description":"Enables the write_file command without any pre-configured scope.","commands":{"allow":["write_file"],"deny":[]},"scope":{}},"allow-write-text-file":{"version":null,"identifier":"allow-write-text-file","description":"Enables the write_text_file command without any pre-configured scope.","commands":{"allow":["write_text_file"],"deny":[]},"scope":{}},"deny-copy-file":{"version":null,"identifier":"deny-copy-file","description":"Denies the copy_file command without any pre-configured scope.","commands":{"allow":[],"deny":["copy_file"]},"scope":{}},"deny-create":{"version":null,"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]},"scope":{}},"deny-exists":{"version":null,"identifier":"deny-exists","description":"Denies the exists command without any pre-configured scope.","commands":{"allow":[],"deny":["exists"]},"scope":{}},"deny-fstat":{"version":null,"identifier":"deny-fstat","description":"Denies the fstat command without any pre-configured scope.","commands":{"allow":[],"deny":["fstat"]},"scope":{}},"deny-ftruncate":{"version":null,"identifier":"deny-ftruncate","description":"Denies the ftruncate command without any pre-configured scope.","commands":{"allow":[],"deny":["ftruncate"]},"scope":{}},"deny-lstat":{"version":null,"identifier":"deny-lstat","description":"Denies the lstat command without any pre-configured scope.","commands":{"allow":[],"deny":["lstat"]},"scope":{}},"deny-mkdir":{"version":null,"identifier":"deny-mkdir","description":"Denies the mkdir command without any pre-configured scope.","commands":{"allow":[],"deny":["mkdir"]},"scope":{}},"deny-open":{"version":null,"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]},"scope":{}},"deny-read":{"version":null,"identifier":"deny-read","description":"Denies the read command without any pre-configured scope.","commands":{"allow":[],"deny":["read"]},"scope":{}},"deny-read-dir":{"version":null,"identifier":"deny-read-dir","description":"Denies the read_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["read_dir"]},"scope":{}},"deny-read-file":{"version":null,"identifier":"deny-read-file","description":"Denies the read_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_file"]},"scope":{}},"deny-read-text-file":{"version":null,"identifier":"deny-read-text-file","description":"Denies the read_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file"]},"scope":{}},"deny-read-text-file-lines":{"version":null,"identifier":"deny-read-text-file-lines","description":"Denies the read_text_file_lines command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines"]},"scope":{}},"deny-read-text-file-lines-next":{"version":null,"identifier":"deny-read-text-file-lines-next","description":"Denies the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines_next"]},"scope":{}},"deny-remove":{"version":null,"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]},"scope":{}},"deny-rename":{"version":null,"identifier":"deny-rename","description":"Denies the rename command without any pre-configured scope.","commands":{"allow":[],"deny":["rename"]},"scope":{}},"deny-seek":{"version":null,"identifier":"deny-seek","description":"Denies the seek command without any pre-configured scope.","commands":{"allow":[],"deny":["seek"]},"scope":{}},"deny-stat":{"version":null,"identifier":"deny-stat","description":"Denies the stat command without any pre-configured scope.","commands":{"allow":[],"deny":["stat"]},"scope":{}},"deny-truncate":{"version":null,"identifier":"deny-truncate","description":"Denies the truncate command without any pre-configured scope.","commands":{"allow":[],"deny":["truncate"]},"scope":{}},"deny-unwatch":{"version":null,"identifier":"deny-unwatch","description":"Denies the unwatch command without any pre-configured scope.","commands":{"allow":[],"deny":["unwatch"]},"scope":{}},"deny-watch":{"version":null,"identifier":"deny-watch","description":"Denies the watch command without any pre-configured scope.","commands":{"allow":[],"deny":["watch"]},"scope":{}},"deny-webview-data-linux":{"version":null,"identifier":"deny-webview-data-linux","description":"This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]},"scope":{}},"deny-webview-data-windows":{"version":null,"identifier":"deny-webview-data-windows","description":"This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]},"scope":{}},"deny-write":{"version":null,"identifier":"deny-write","description":"Denies the write command without any pre-configured scope.","commands":{"allow":[],"deny":["write"]},"scope":{}},"deny-write-file":{"version":null,"identifier":"deny-write-file","description":"Denies the write_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_file"]},"scope":{}},"deny-write-text-file":{"version":null,"identifier":"deny-write-text-file","description":"Denies the write_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text_file"]},"scope":{}},"read-all":{"version":null,"identifier":"read-all","description":"This enables all read related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists","watch","unwatch"],"deny":[]},"scope":{}},"read-dirs":{"version":null,"identifier":"read-dirs","description":"This enables directory read and file metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]},"scope":{}},"read-files":{"version":null,"identifier":"read-files","description":"This enables file read related commands without any pre-configured accessible paths.","commands":{"allow":["read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists"],"deny":[]},"scope":{}},"read-meta":{"version":null,"identifier":"read-meta","description":"This enables all index or metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]},"scope":{}},"scope":{"version":null,"identifier":"scope","description":"An empty permission you can use to modify the global scope.","commands":{"allow":[],"deny":[]},"scope":{}},"scope-app":{"version":null,"identifier":"scope-app","description":"This scope permits access to all files and list content of top level directories in the `$APP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/*"}]}},"scope-app-index":{"version":null,"identifier":"scope-app-index","description":"This scope permits to list all files and folders in the `$APP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/"}]}},"scope-app-recursive":{"version":null,"identifier":"scope-app-recursive","description":"This scope recursive access to the complete `$APP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/**"}]}},"scope-appcache":{"version":null,"identifier":"scope-appcache","description":"This scope permits access to all files and list content of top level directories in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/*"}]}},"scope-appcache-index":{"version":null,"identifier":"scope-appcache-index","description":"This scope permits to list all files and folders in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/"}]}},"scope-appcache-recursive":{"version":null,"identifier":"scope-appcache-recursive","description":"This scope recursive access to the complete `$APPCACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/**"}]}},"scope-appconfig":{"version":null,"identifier":"scope-appconfig","description":"This scope permits access to all files and list content of top level directories in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/*"}]}},"scope-appconfig-index":{"version":null,"identifier":"scope-appconfig-index","description":"This scope permits to list all files and folders in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/"}]}},"scope-appconfig-recursive":{"version":null,"identifier":"scope-appconfig-recursive","description":"This scope recursive access to the complete `$APPCONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/**"}]}},"scope-appdata":{"version":null,"identifier":"scope-appdata","description":"This scope permits access to all files and list content of top level directories in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/*"}]}},"scope-appdata-index":{"version":null,"identifier":"scope-appdata-index","description":"This scope permits to list all files and folders in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/"}]}},"scope-appdata-recursive":{"version":null,"identifier":"scope-appdata-recursive","description":"This scope recursive access to the complete `$APPDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/**"}]}},"scope-applocaldata":{"version":null,"identifier":"scope-applocaldata","description":"This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/*"}]}},"scope-applocaldata-index":{"version":null,"identifier":"scope-applocaldata-index","description":"This scope permits to list all files and folders in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/"}]}},"scope-applocaldata-recursive":{"version":null,"identifier":"scope-applocaldata-recursive","description":"This scope recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/**"}]}},"scope-applog":{"version":null,"identifier":"scope-applog","description":"This scope permits access to all files and list content of top level directories in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/*"}]}},"scope-applog-index":{"version":null,"identifier":"scope-applog-index","description":"This scope permits to list all files and folders in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/"}]}},"scope-applog-recursive":{"version":null,"identifier":"scope-applog-recursive","description":"This scope recursive access to the complete `$APPLOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/**"}]}},"scope-audio":{"version":null,"identifier":"scope-audio","description":"This scope permits access to all files and list content of top level directories in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/*"}]}},"scope-audio-index":{"version":null,"identifier":"scope-audio-index","description":"This scope permits to list all files and folders in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/"}]}},"scope-audio-recursive":{"version":null,"identifier":"scope-audio-recursive","description":"This scope recursive access to the complete `$AUDIO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/**"}]}},"scope-cache":{"version":null,"identifier":"scope-cache","description":"This scope permits access to all files and list content of top level directories in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/*"}]}},"scope-cache-index":{"version":null,"identifier":"scope-cache-index","description":"This scope permits to list all files and folders in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/"}]}},"scope-cache-recursive":{"version":null,"identifier":"scope-cache-recursive","description":"This scope recursive access to the complete `$CACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/**"}]}},"scope-config":{"version":null,"identifier":"scope-config","description":"This scope permits access to all files and list content of top level directories in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/*"}]}},"scope-config-index":{"version":null,"identifier":"scope-config-index","description":"This scope permits to list all files and folders in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/"}]}},"scope-config-recursive":{"version":null,"identifier":"scope-config-recursive","description":"This scope recursive access to the complete `$CONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/**"}]}},"scope-data":{"version":null,"identifier":"scope-data","description":"This scope permits access to all files and list content of top level directories in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/*"}]}},"scope-data-index":{"version":null,"identifier":"scope-data-index","description":"This scope permits to list all files and folders in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/"}]}},"scope-data-recursive":{"version":null,"identifier":"scope-data-recursive","description":"This scope recursive access to the complete `$DATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/**"}]}},"scope-desktop":{"version":null,"identifier":"scope-desktop","description":"This scope permits access to all files and list content of top level directories in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/*"}]}},"scope-desktop-index":{"version":null,"identifier":"scope-desktop-index","description":"This scope permits to list all files and folders in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/"}]}},"scope-desktop-recursive":{"version":null,"identifier":"scope-desktop-recursive","description":"This scope recursive access to the complete `$DESKTOP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/**"}]}},"scope-document":{"version":null,"identifier":"scope-document","description":"This scope permits access to all files and list content of top level directories in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/*"}]}},"scope-document-index":{"version":null,"identifier":"scope-document-index","description":"This scope permits to list all files and folders in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/"}]}},"scope-document-recursive":{"version":null,"identifier":"scope-document-recursive","description":"This scope recursive access to the complete `$DOCUMENT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/**"}]}},"scope-download":{"version":null,"identifier":"scope-download","description":"This scope permits access to all files and list content of top level directories in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/*"}]}},"scope-download-index":{"version":null,"identifier":"scope-download-index","description":"This scope permits to list all files and folders in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/"}]}},"scope-download-recursive":{"version":null,"identifier":"scope-download-recursive","description":"This scope recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/**"}]}},"scope-exe":{"version":null,"identifier":"scope-exe","description":"This scope permits access to all files and list content of top level directories in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/*"}]}},"scope-exe-index":{"version":null,"identifier":"scope-exe-index","description":"This scope permits to list all files and folders in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/"}]}},"scope-exe-recursive":{"version":null,"identifier":"scope-exe-recursive","description":"This scope recursive access to the complete `$EXE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/**"}]}},"scope-font":{"version":null,"identifier":"scope-font","description":"This scope permits access to all files and list content of top level directories in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/*"}]}},"scope-font-index":{"version":null,"identifier":"scope-font-index","description":"This scope permits to list all files and folders in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/"}]}},"scope-font-recursive":{"version":null,"identifier":"scope-font-recursive","description":"This scope recursive access to the complete `$FONT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/**"}]}},"scope-home":{"version":null,"identifier":"scope-home","description":"This scope permits access to all files and list content of top level directories in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/*"}]}},"scope-home-index":{"version":null,"identifier":"scope-home-index","description":"This scope permits to list all files and folders in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/"}]}},"scope-home-recursive":{"version":null,"identifier":"scope-home-recursive","description":"This scope recursive access to the complete `$HOME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/**"}]}},"scope-localdata":{"version":null,"identifier":"scope-localdata","description":"This scope permits access to all files and list content of top level directories in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/*"}]}},"scope-localdata-index":{"version":null,"identifier":"scope-localdata-index","description":"This scope permits to list all files and folders in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/"}]}},"scope-localdata-recursive":{"version":null,"identifier":"scope-localdata-recursive","description":"This scope recursive access to the complete `$LOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/**"}]}},"scope-log":{"version":null,"identifier":"scope-log","description":"This scope permits access to all files and list content of top level directories in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/*"}]}},"scope-log-index":{"version":null,"identifier":"scope-log-index","description":"This scope permits to list all files and folders in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/"}]}},"scope-log-recursive":{"version":null,"identifier":"scope-log-recursive","description":"This scope recursive access to the complete `$LOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/**"}]}},"scope-picture":{"version":null,"identifier":"scope-picture","description":"This scope permits access to all files and list content of top level directories in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/*"}]}},"scope-picture-index":{"version":null,"identifier":"scope-picture-index","description":"This scope permits to list all files and folders in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/"}]}},"scope-picture-recursive":{"version":null,"identifier":"scope-picture-recursive","description":"This scope recursive access to the complete `$PICTURE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/**"}]}},"scope-public":{"version":null,"identifier":"scope-public","description":"This scope permits access to all files and list content of top level directories in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/*"}]}},"scope-public-index":{"version":null,"identifier":"scope-public-index","description":"This scope permits to list all files and folders in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/"}]}},"scope-public-recursive":{"version":null,"identifier":"scope-public-recursive","description":"This scope recursive access to the complete `$PUBLIC` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/**"}]}},"scope-resource":{"version":null,"identifier":"scope-resource","description":"This scope permits access to all files and list content of top level directories in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/*"}]}},"scope-resource-index":{"version":null,"identifier":"scope-resource-index","description":"This scope permits to list all files and folders in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/"}]}},"scope-resource-recursive":{"version":null,"identifier":"scope-resource-recursive","description":"This scope recursive access to the complete `$RESOURCE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/**"}]}},"scope-runtime":{"version":null,"identifier":"scope-runtime","description":"This scope permits access to all files and list content of top level directories in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/*"}]}},"scope-runtime-index":{"version":null,"identifier":"scope-runtime-index","description":"This scope permits to list all files and folders in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/"}]}},"scope-runtime-recursive":{"version":null,"identifier":"scope-runtime-recursive","description":"This scope recursive access to the complete `$RUNTIME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/**"}]}},"scope-temp":{"version":null,"identifier":"scope-temp","description":"This scope permits access to all files and list content of top level directories in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/*"}]}},"scope-temp-index":{"version":null,"identifier":"scope-temp-index","description":"This scope permits to list all files and folders in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/"}]}},"scope-temp-recursive":{"version":null,"identifier":"scope-temp-recursive","description":"This scope recursive access to the complete `$TEMP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/**"}]}},"scope-template":{"version":null,"identifier":"scope-template","description":"This scope permits access to all files and list content of top level directories in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/*"}]}},"scope-template-index":{"version":null,"identifier":"scope-template-index","description":"This scope permits to list all files and folders in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/"}]}},"scope-template-recursive":{"version":null,"identifier":"scope-template-recursive","description":"This scope recursive access to the complete `$TEMPLATE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/**"}]}},"scope-video":{"version":null,"identifier":"scope-video","description":"This scope permits access to all files and list content of top level directories in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/*"}]}},"scope-video-index":{"version":null,"identifier":"scope-video-index","description":"This scope permits to list all files and folders in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/"}]}},"scope-video-recursive":{"version":null,"identifier":"scope-video-recursive","description":"This scope recursive access to the complete `$VIDEO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/**"}]}},"write-all":{"version":null,"identifier":"write-all","description":"This enables all write related commands without any pre-configured accessible paths.","commands":{"allow":["mkdir","create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]},"scope":{}},"write-files":{"version":null,"identifier":"write-files","description":"This enables all file write related commands without any pre-configured accessible paths.","commands":{"allow":["create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]},"scope":{}}},"permission_sets":{"allow-app-meta":{"identifier":"allow-app-meta","description":"This allows read access to metadata of the `$APP` folder, including file listing and statistics.","permissions":["read-meta","scope-app-index"]},"allow-app-meta-recursive":{"identifier":"allow-app-meta-recursive","description":"This allows read access to metadata of the `$APP` folder, including file listing and statistics.","permissions":["read-meta","scope-app-recursive"]},"allow-app-read":{"identifier":"allow-app-read","description":"This allows non-recursive read access to the `$APP` folder.","permissions":["read-all","scope-app"]},"allow-app-read-recursive":{"identifier":"allow-app-read-recursive","description":"This allows full recursive read access to the complete `$APP` folder, files and subdirectories.","permissions":["read-all","scope-app-recursive"]},"allow-app-write":{"identifier":"allow-app-write","description":"This allows non-recursive write access to the `$APP` folder.","permissions":["write-all","scope-app"]},"allow-app-write-recursive":{"identifier":"allow-app-write-recursive","description":"This allows full recusrive write access to the complete `$APP` folder, files and subdirectories.","permissions":["write-all","scope-app-recursive"]},"allow-appcache-meta":{"identifier":"allow-appcache-meta","description":"This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-index"]},"allow-appcache-meta-recursive":{"identifier":"allow-appcache-meta-recursive","description":"This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-recursive"]},"allow-appcache-read":{"identifier":"allow-appcache-read","description":"This allows non-recursive read access to the `$APPCACHE` folder.","permissions":["read-all","scope-appcache"]},"allow-appcache-read-recursive":{"identifier":"allow-appcache-read-recursive","description":"This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["read-all","scope-appcache-recursive"]},"allow-appcache-write":{"identifier":"allow-appcache-write","description":"This allows non-recursive write access to the `$APPCACHE` folder.","permissions":["write-all","scope-appcache"]},"allow-appcache-write-recursive":{"identifier":"allow-appcache-write-recursive","description":"This allows full recusrive write access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["write-all","scope-appcache-recursive"]},"allow-appconfig-meta":{"identifier":"allow-appconfig-meta","description":"This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-index"]},"allow-appconfig-meta-recursive":{"identifier":"allow-appconfig-meta-recursive","description":"This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-recursive"]},"allow-appconfig-read":{"identifier":"allow-appconfig-read","description":"This allows non-recursive read access to the `$APPCONFIG` folder.","permissions":["read-all","scope-appconfig"]},"allow-appconfig-read-recursive":{"identifier":"allow-appconfig-read-recursive","description":"This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["read-all","scope-appconfig-recursive"]},"allow-appconfig-write":{"identifier":"allow-appconfig-write","description":"This allows non-recursive write access to the `$APPCONFIG` folder.","permissions":["write-all","scope-appconfig"]},"allow-appconfig-write-recursive":{"identifier":"allow-appconfig-write-recursive","description":"This allows full recusrive write access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["write-all","scope-appconfig-recursive"]},"allow-appdata-meta":{"identifier":"allow-appdata-meta","description":"This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-index"]},"allow-appdata-meta-recursive":{"identifier":"allow-appdata-meta-recursive","description":"This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-recursive"]},"allow-appdata-read":{"identifier":"allow-appdata-read","description":"This allows non-recursive read access to the `$APPDATA` folder.","permissions":["read-all","scope-appdata"]},"allow-appdata-read-recursive":{"identifier":"allow-appdata-read-recursive","description":"This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["read-all","scope-appdata-recursive"]},"allow-appdata-write":{"identifier":"allow-appdata-write","description":"This allows non-recursive write access to the `$APPDATA` folder.","permissions":["write-all","scope-appdata"]},"allow-appdata-write-recursive":{"identifier":"allow-appdata-write-recursive","description":"This allows full recusrive write access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["write-all","scope-appdata-recursive"]},"allow-applocaldata-meta":{"identifier":"allow-applocaldata-meta","description":"This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-index"]},"allow-applocaldata-meta-recursive":{"identifier":"allow-applocaldata-meta-recursive","description":"This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-recursive"]},"allow-applocaldata-read":{"identifier":"allow-applocaldata-read","description":"This allows non-recursive read access to the `$APPLOCALDATA` folder.","permissions":["read-all","scope-applocaldata"]},"allow-applocaldata-read-recursive":{"identifier":"allow-applocaldata-read-recursive","description":"This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-applocaldata-recursive"]},"allow-applocaldata-write":{"identifier":"allow-applocaldata-write","description":"This allows non-recursive write access to the `$APPLOCALDATA` folder.","permissions":["write-all","scope-applocaldata"]},"allow-applocaldata-write-recursive":{"identifier":"allow-applocaldata-write-recursive","description":"This allows full recusrive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-applocaldata-recursive"]},"allow-applog-meta":{"identifier":"allow-applog-meta","description":"This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-index"]},"allow-applog-meta-recursive":{"identifier":"allow-applog-meta-recursive","description":"This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-recursive"]},"allow-applog-read":{"identifier":"allow-applog-read","description":"This allows non-recursive read access to the `$APPLOG` folder.","permissions":["read-all","scope-applog"]},"allow-applog-read-recursive":{"identifier":"allow-applog-read-recursive","description":"This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["read-all","scope-applog-recursive"]},"allow-applog-write":{"identifier":"allow-applog-write","description":"This allows non-recursive write access to the `$APPLOG` folder.","permissions":["write-all","scope-applog"]},"allow-applog-write-recursive":{"identifier":"allow-applog-write-recursive","description":"This allows full recusrive write access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["write-all","scope-applog-recursive"]},"allow-audio-meta":{"identifier":"allow-audio-meta","description":"This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-index"]},"allow-audio-meta-recursive":{"identifier":"allow-audio-meta-recursive","description":"This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-recursive"]},"allow-audio-read":{"identifier":"allow-audio-read","description":"This allows non-recursive read access to the `$AUDIO` folder.","permissions":["read-all","scope-audio"]},"allow-audio-read-recursive":{"identifier":"allow-audio-read-recursive","description":"This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["read-all","scope-audio-recursive"]},"allow-audio-write":{"identifier":"allow-audio-write","description":"This allows non-recursive write access to the `$AUDIO` folder.","permissions":["write-all","scope-audio"]},"allow-audio-write-recursive":{"identifier":"allow-audio-write-recursive","description":"This allows full recusrive write access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["write-all","scope-audio-recursive"]},"allow-cache-meta":{"identifier":"allow-cache-meta","description":"This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-index"]},"allow-cache-meta-recursive":{"identifier":"allow-cache-meta-recursive","description":"This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-recursive"]},"allow-cache-read":{"identifier":"allow-cache-read","description":"This allows non-recursive read access to the `$CACHE` folder.","permissions":["read-all","scope-cache"]},"allow-cache-read-recursive":{"identifier":"allow-cache-read-recursive","description":"This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.","permissions":["read-all","scope-cache-recursive"]},"allow-cache-write":{"identifier":"allow-cache-write","description":"This allows non-recursive write access to the `$CACHE` folder.","permissions":["write-all","scope-cache"]},"allow-cache-write-recursive":{"identifier":"allow-cache-write-recursive","description":"This allows full recusrive write access to the complete `$CACHE` folder, files and subdirectories.","permissions":["write-all","scope-cache-recursive"]},"allow-config-meta":{"identifier":"allow-config-meta","description":"This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-index"]},"allow-config-meta-recursive":{"identifier":"allow-config-meta-recursive","description":"This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-recursive"]},"allow-config-read":{"identifier":"allow-config-read","description":"This allows non-recursive read access to the `$CONFIG` folder.","permissions":["read-all","scope-config"]},"allow-config-read-recursive":{"identifier":"allow-config-read-recursive","description":"This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["read-all","scope-config-recursive"]},"allow-config-write":{"identifier":"allow-config-write","description":"This allows non-recursive write access to the `$CONFIG` folder.","permissions":["write-all","scope-config"]},"allow-config-write-recursive":{"identifier":"allow-config-write-recursive","description":"This allows full recusrive write access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["write-all","scope-config-recursive"]},"allow-data-meta":{"identifier":"allow-data-meta","description":"This allows read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-index"]},"allow-data-meta-recursive":{"identifier":"allow-data-meta-recursive","description":"This allows read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-recursive"]},"allow-data-read":{"identifier":"allow-data-read","description":"This allows non-recursive read access to the `$DATA` folder.","permissions":["read-all","scope-data"]},"allow-data-read-recursive":{"identifier":"allow-data-read-recursive","description":"This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.","permissions":["read-all","scope-data-recursive"]},"allow-data-write":{"identifier":"allow-data-write","description":"This allows non-recursive write access to the `$DATA` folder.","permissions":["write-all","scope-data"]},"allow-data-write-recursive":{"identifier":"allow-data-write-recursive","description":"This allows full recusrive write access to the complete `$DATA` folder, files and subdirectories.","permissions":["write-all","scope-data-recursive"]},"allow-desktop-meta":{"identifier":"allow-desktop-meta","description":"This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-index"]},"allow-desktop-meta-recursive":{"identifier":"allow-desktop-meta-recursive","description":"This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-recursive"]},"allow-desktop-read":{"identifier":"allow-desktop-read","description":"This allows non-recursive read access to the `$DESKTOP` folder.","permissions":["read-all","scope-desktop"]},"allow-desktop-read-recursive":{"identifier":"allow-desktop-read-recursive","description":"This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["read-all","scope-desktop-recursive"]},"allow-desktop-write":{"identifier":"allow-desktop-write","description":"This allows non-recursive write access to the `$DESKTOP` folder.","permissions":["write-all","scope-desktop"]},"allow-desktop-write-recursive":{"identifier":"allow-desktop-write-recursive","description":"This allows full recusrive write access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["write-all","scope-desktop-recursive"]},"allow-document-meta":{"identifier":"allow-document-meta","description":"This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-index"]},"allow-document-meta-recursive":{"identifier":"allow-document-meta-recursive","description":"This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-recursive"]},"allow-document-read":{"identifier":"allow-document-read","description":"This allows non-recursive read access to the `$DOCUMENT` folder.","permissions":["read-all","scope-document"]},"allow-document-read-recursive":{"identifier":"allow-document-read-recursive","description":"This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["read-all","scope-document-recursive"]},"allow-document-write":{"identifier":"allow-document-write","description":"This allows non-recursive write access to the `$DOCUMENT` folder.","permissions":["write-all","scope-document"]},"allow-document-write-recursive":{"identifier":"allow-document-write-recursive","description":"This allows full recusrive write access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["write-all","scope-document-recursive"]},"allow-download-meta":{"identifier":"allow-download-meta","description":"This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-index"]},"allow-download-meta-recursive":{"identifier":"allow-download-meta-recursive","description":"This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-recursive"]},"allow-download-read":{"identifier":"allow-download-read","description":"This allows non-recursive read access to the `$DOWNLOAD` folder.","permissions":["read-all","scope-download"]},"allow-download-read-recursive":{"identifier":"allow-download-read-recursive","description":"This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["read-all","scope-download-recursive"]},"allow-download-write":{"identifier":"allow-download-write","description":"This allows non-recursive write access to the `$DOWNLOAD` folder.","permissions":["write-all","scope-download"]},"allow-download-write-recursive":{"identifier":"allow-download-write-recursive","description":"This allows full recusrive write access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["write-all","scope-download-recursive"]},"allow-exe-meta":{"identifier":"allow-exe-meta","description":"This allows read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-index"]},"allow-exe-meta-recursive":{"identifier":"allow-exe-meta-recursive","description":"This allows read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-recursive"]},"allow-exe-read":{"identifier":"allow-exe-read","description":"This allows non-recursive read access to the `$EXE` folder.","permissions":["read-all","scope-exe"]},"allow-exe-read-recursive":{"identifier":"allow-exe-read-recursive","description":"This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.","permissions":["read-all","scope-exe-recursive"]},"allow-exe-write":{"identifier":"allow-exe-write","description":"This allows non-recursive write access to the `$EXE` folder.","permissions":["write-all","scope-exe"]},"allow-exe-write-recursive":{"identifier":"allow-exe-write-recursive","description":"This allows full recusrive write access to the complete `$EXE` folder, files and subdirectories.","permissions":["write-all","scope-exe-recursive"]},"allow-font-meta":{"identifier":"allow-font-meta","description":"This allows read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-index"]},"allow-font-meta-recursive":{"identifier":"allow-font-meta-recursive","description":"This allows read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-recursive"]},"allow-font-read":{"identifier":"allow-font-read","description":"This allows non-recursive read access to the `$FONT` folder.","permissions":["read-all","scope-font"]},"allow-font-read-recursive":{"identifier":"allow-font-read-recursive","description":"This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.","permissions":["read-all","scope-font-recursive"]},"allow-font-write":{"identifier":"allow-font-write","description":"This allows non-recursive write access to the `$FONT` folder.","permissions":["write-all","scope-font"]},"allow-font-write-recursive":{"identifier":"allow-font-write-recursive","description":"This allows full recusrive write access to the complete `$FONT` folder, files and subdirectories.","permissions":["write-all","scope-font-recursive"]},"allow-home-meta":{"identifier":"allow-home-meta","description":"This allows read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-index"]},"allow-home-meta-recursive":{"identifier":"allow-home-meta-recursive","description":"This allows read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-recursive"]},"allow-home-read":{"identifier":"allow-home-read","description":"This allows non-recursive read access to the `$HOME` folder.","permissions":["read-all","scope-home"]},"allow-home-read-recursive":{"identifier":"allow-home-read-recursive","description":"This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.","permissions":["read-all","scope-home-recursive"]},"allow-home-write":{"identifier":"allow-home-write","description":"This allows non-recursive write access to the `$HOME` folder.","permissions":["write-all","scope-home"]},"allow-home-write-recursive":{"identifier":"allow-home-write-recursive","description":"This allows full recusrive write access to the complete `$HOME` folder, files and subdirectories.","permissions":["write-all","scope-home-recursive"]},"allow-localdata-meta":{"identifier":"allow-localdata-meta","description":"This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-index"]},"allow-localdata-meta-recursive":{"identifier":"allow-localdata-meta-recursive","description":"This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-recursive"]},"allow-localdata-read":{"identifier":"allow-localdata-read","description":"This allows non-recursive read access to the `$LOCALDATA` folder.","permissions":["read-all","scope-localdata"]},"allow-localdata-read-recursive":{"identifier":"allow-localdata-read-recursive","description":"This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-localdata-recursive"]},"allow-localdata-write":{"identifier":"allow-localdata-write","description":"This allows non-recursive write access to the `$LOCALDATA` folder.","permissions":["write-all","scope-localdata"]},"allow-localdata-write-recursive":{"identifier":"allow-localdata-write-recursive","description":"This allows full recusrive write access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-localdata-recursive"]},"allow-log-meta":{"identifier":"allow-log-meta","description":"This allows read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-index"]},"allow-log-meta-recursive":{"identifier":"allow-log-meta-recursive","description":"This allows read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-recursive"]},"allow-log-read":{"identifier":"allow-log-read","description":"This allows non-recursive read access to the `$LOG` folder.","permissions":["read-all","scope-log"]},"allow-log-read-recursive":{"identifier":"allow-log-read-recursive","description":"This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.","permissions":["read-all","scope-log-recursive"]},"allow-log-write":{"identifier":"allow-log-write","description":"This allows non-recursive write access to the `$LOG` folder.","permissions":["write-all","scope-log"]},"allow-log-write-recursive":{"identifier":"allow-log-write-recursive","description":"This allows full recusrive write access to the complete `$LOG` folder, files and subdirectories.","permissions":["write-all","scope-log-recursive"]},"allow-picture-meta":{"identifier":"allow-picture-meta","description":"This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-index"]},"allow-picture-meta-recursive":{"identifier":"allow-picture-meta-recursive","description":"This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-recursive"]},"allow-picture-read":{"identifier":"allow-picture-read","description":"This allows non-recursive read access to the `$PICTURE` folder.","permissions":["read-all","scope-picture"]},"allow-picture-read-recursive":{"identifier":"allow-picture-read-recursive","description":"This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["read-all","scope-picture-recursive"]},"allow-picture-write":{"identifier":"allow-picture-write","description":"This allows non-recursive write access to the `$PICTURE` folder.","permissions":["write-all","scope-picture"]},"allow-picture-write-recursive":{"identifier":"allow-picture-write-recursive","description":"This allows full recusrive write access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["write-all","scope-picture-recursive"]},"allow-public-meta":{"identifier":"allow-public-meta","description":"This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-index"]},"allow-public-meta-recursive":{"identifier":"allow-public-meta-recursive","description":"This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-recursive"]},"allow-public-read":{"identifier":"allow-public-read","description":"This allows non-recursive read access to the `$PUBLIC` folder.","permissions":["read-all","scope-public"]},"allow-public-read-recursive":{"identifier":"allow-public-read-recursive","description":"This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["read-all","scope-public-recursive"]},"allow-public-write":{"identifier":"allow-public-write","description":"This allows non-recursive write access to the `$PUBLIC` folder.","permissions":["write-all","scope-public"]},"allow-public-write-recursive":{"identifier":"allow-public-write-recursive","description":"This allows full recusrive write access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["write-all","scope-public-recursive"]},"allow-resource-meta":{"identifier":"allow-resource-meta","description":"This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-index"]},"allow-resource-meta-recursive":{"identifier":"allow-resource-meta-recursive","description":"This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-recursive"]},"allow-resource-read":{"identifier":"allow-resource-read","description":"This allows non-recursive read access to the `$RESOURCE` folder.","permissions":["read-all","scope-resource"]},"allow-resource-read-recursive":{"identifier":"allow-resource-read-recursive","description":"This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["read-all","scope-resource-recursive"]},"allow-resource-write":{"identifier":"allow-resource-write","description":"This allows non-recursive write access to the `$RESOURCE` folder.","permissions":["write-all","scope-resource"]},"allow-resource-write-recursive":{"identifier":"allow-resource-write-recursive","description":"This allows full recusrive write access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["write-all","scope-resource-recursive"]},"allow-runtime-meta":{"identifier":"allow-runtime-meta","description":"This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-index"]},"allow-runtime-meta-recursive":{"identifier":"allow-runtime-meta-recursive","description":"This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-recursive"]},"allow-runtime-read":{"identifier":"allow-runtime-read","description":"This allows non-recursive read access to the `$RUNTIME` folder.","permissions":["read-all","scope-runtime"]},"allow-runtime-read-recursive":{"identifier":"allow-runtime-read-recursive","description":"This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["read-all","scope-runtime-recursive"]},"allow-runtime-write":{"identifier":"allow-runtime-write","description":"This allows non-recursive write access to the `$RUNTIME` folder.","permissions":["write-all","scope-runtime"]},"allow-runtime-write-recursive":{"identifier":"allow-runtime-write-recursive","description":"This allows full recusrive write access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["write-all","scope-runtime-recursive"]},"allow-temp-meta":{"identifier":"allow-temp-meta","description":"This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-index"]},"allow-temp-meta-recursive":{"identifier":"allow-temp-meta-recursive","description":"This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-recursive"]},"allow-temp-read":{"identifier":"allow-temp-read","description":"This allows non-recursive read access to the `$TEMP` folder.","permissions":["read-all","scope-temp"]},"allow-temp-read-recursive":{"identifier":"allow-temp-read-recursive","description":"This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.","permissions":["read-all","scope-temp-recursive"]},"allow-temp-write":{"identifier":"allow-temp-write","description":"This allows non-recursive write access to the `$TEMP` folder.","permissions":["write-all","scope-temp"]},"allow-temp-write-recursive":{"identifier":"allow-temp-write-recursive","description":"This allows full recusrive write access to the complete `$TEMP` folder, files and subdirectories.","permissions":["write-all","scope-temp-recursive"]},"allow-template-meta":{"identifier":"allow-template-meta","description":"This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-index"]},"allow-template-meta-recursive":{"identifier":"allow-template-meta-recursive","description":"This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-recursive"]},"allow-template-read":{"identifier":"allow-template-read","description":"This allows non-recursive read access to the `$TEMPLATE` folder.","permissions":["read-all","scope-template"]},"allow-template-read-recursive":{"identifier":"allow-template-read-recursive","description":"This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["read-all","scope-template-recursive"]},"allow-template-write":{"identifier":"allow-template-write","description":"This allows non-recursive write access to the `$TEMPLATE` folder.","permissions":["write-all","scope-template"]},"allow-template-write-recursive":{"identifier":"allow-template-write-recursive","description":"This allows full recusrive write access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["write-all","scope-template-recursive"]},"allow-video-meta":{"identifier":"allow-video-meta","description":"This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-index"]},"allow-video-meta-recursive":{"identifier":"allow-video-meta-recursive","description":"This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-recursive"]},"allow-video-read":{"identifier":"allow-video-read","description":"This allows non-recursive read access to the `$VIDEO` folder.","permissions":["read-all","scope-video"]},"allow-video-read-recursive":{"identifier":"allow-video-read-recursive","description":"This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["read-all","scope-video-recursive"]},"allow-video-write":{"identifier":"allow-video-write","description":"This allows non-recursive write access to the `$VIDEO` folder.","permissions":["write-all","scope-video"]},"allow-video-write-recursive":{"identifier":"allow-video-write-recursive","description":"This allows full recusrive write access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["write-all","scope-video-recursive"]},"deny-default":{"identifier":"deny-default","description":"This denies access to dangerous Tauri relevant files and folders by default.","permissions":["deny-webview-data-linux","deny-webview-data-windows"]}},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"path":{"type":"string"}},"required":["path"],"title":"Entry","type":"object"}},"menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":[]},"permissions":{"allow-append":{"version":null,"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]},"scope":{}},"allow-create-default":{"version":null,"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]},"scope":{}},"allow-get":{"version":null,"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]},"scope":{}},"allow-insert":{"version":null,"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]},"scope":{}},"allow-is-checked":{"version":null,"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]},"scope":{}},"allow-is-enabled":{"version":null,"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]},"scope":{}},"allow-items":{"version":null,"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]},"scope":{}},"allow-new":{"version":null,"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]},"scope":{}},"allow-popup":{"version":null,"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]},"scope":{}},"allow-prepend":{"version":null,"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]},"scope":{}},"allow-remove":{"version":null,"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]},"scope":{}},"allow-remove-at":{"version":null,"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]},"scope":{}},"allow-set-accelerator":{"version":null,"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]},"scope":{}},"allow-set-as-app-menu":{"version":null,"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]},"scope":{}},"allow-set-as-help-menu-for-nsapp":{"version":null,"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]},"scope":{}},"allow-set-as-window-menu":{"version":null,"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]},"scope":{}},"allow-set-as-windows-menu-for-nsapp":{"version":null,"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]},"scope":{}},"allow-set-checked":{"version":null,"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]},"scope":{}},"allow-set-enabled":{"version":null,"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]},"scope":{}},"allow-set-icon":{"version":null,"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]},"scope":{}},"allow-set-text":{"version":null,"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]},"scope":{}},"allow-text":{"version":null,"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]},"scope":{}},"deny-append":{"version":null,"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]},"scope":{}},"deny-create-default":{"version":null,"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]},"scope":{}},"deny-get":{"version":null,"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]},"scope":{}},"deny-insert":{"version":null,"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]},"scope":{}},"deny-is-checked":{"version":null,"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]},"scope":{}},"deny-is-enabled":{"version":null,"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]},"scope":{}},"deny-items":{"version":null,"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]},"scope":{}},"deny-new":{"version":null,"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]},"scope":{}},"deny-popup":{"version":null,"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]},"scope":{}},"deny-prepend":{"version":null,"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]},"scope":{}},"deny-remove":{"version":null,"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]},"scope":{}},"deny-remove-at":{"version":null,"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]},"scope":{}},"deny-set-accelerator":{"version":null,"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]},"scope":{}},"deny-set-as-app-menu":{"version":null,"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]},"scope":{}},"deny-set-as-help-menu-for-nsapp":{"version":null,"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]},"scope":{}},"deny-set-as-window-menu":{"version":null,"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]},"scope":{}},"deny-set-as-windows-menu-for-nsapp":{"version":null,"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]},"scope":{}},"deny-set-checked":{"version":null,"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]},"scope":{}},"deny-set-enabled":{"version":null,"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]},"scope":{}},"deny-set-icon":{"version":null,"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]},"scope":{}},"deny-set-text":{"version":null,"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]},"scope":{}},"deny-text":{"version":null,"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"version":null,"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]},"scope":{}},"allow-dirname":{"version":null,"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]},"scope":{}},"allow-extname":{"version":null,"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]},"scope":{}},"allow-is-absolute":{"version":null,"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]},"scope":{}},"allow-join":{"version":null,"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]},"scope":{}},"allow-normalize":{"version":null,"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]},"scope":{}},"allow-resolve":{"version":null,"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]},"scope":{}},"allow-resolve-directory":{"version":null,"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]},"scope":{}},"deny-basename":{"version":null,"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]},"scope":{}},"deny-dirname":{"version":null,"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]},"scope":{}},"deny-extname":{"version":null,"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]},"scope":{}},"deny-is-absolute":{"version":null,"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]},"scope":{}},"deny-join":{"version":null,"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]},"scope":{}},"deny-normalize":{"version":null,"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]},"scope":{}},"deny-resolve":{"version":null,"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]},"scope":{}},"deny-resolve-directory":{"version":null,"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"positioner":{"default_permission":{"identifier":"default","description":"Allows the move_window command","permissions":["allow-move-window"]},"permissions":{"allow-move-window":{"version":null,"identifier":"allow-move-window","description":"Enables the move_window command without any pre-configured scope.","commands":{"allow":["move_window"],"deny":[]},"scope":{}},"deny-move-window":{"version":null,"identifier":"deny-move-window","description":"Denies the move_window command without any pre-configured scope.","commands":{"allow":[],"deny":["move_window"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"version":null,"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]},"scope":{}},"deny-close":{"version":null,"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":null,"permissions":{"allow-execute":{"version":null,"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]},"scope":{}},"allow-kill":{"version":null,"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]},"scope":{}},"allow-open":{"version":null,"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]},"scope":{}},"allow-stdin-write":{"version":null,"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]},"scope":{}},"deny-execute":{"version":null,"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]},"scope":{}},"deny-kill":{"version":null,"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]},"scope":{}},"deny-open":{"version":null,"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]},"scope":{}},"deny-stdin-write":{"version":null,"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]},"scope":{}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"ShellAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\n[regex]: https://docs.rs/regex/latest/regex/#syntax","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"A command allowed to be executed by the webview API.","properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellAllowedArgs"}],"description":"The allowed arguments for the command execution."},"command":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["args","command","name","sidecar"],"title":"Entry","type":"object"}},"tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":[]},"permissions":{"allow-new":{"version":null,"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]},"scope":{}},"allow-set-icon":{"version":null,"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]},"scope":{}},"allow-set-icon-as-template":{"version":null,"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]},"scope":{}},"allow-set-menu":{"version":null,"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]},"scope":{}},"allow-set-show-menu-on-left-click":{"version":null,"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]},"scope":{}},"allow-set-temp-dir-path":{"version":null,"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]},"scope":{}},"allow-set-title":{"version":null,"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]},"scope":{}},"allow-set-tooltip":{"version":null,"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]},"scope":{}},"allow-set-visible":{"version":null,"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]},"scope":{}},"deny-new":{"version":null,"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]},"scope":{}},"deny-set-icon":{"version":null,"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]},"scope":{}},"deny-set-icon-as-template":{"version":null,"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]},"scope":{}},"deny-set-menu":{"version":null,"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]},"scope":{}},"deny-set-show-menu-on-left-click":{"version":null,"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]},"scope":{}},"deny-set-temp-dir-path":{"version":null,"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]},"scope":{}},"deny-set-title":{"version":null,"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]},"scope":{}},"deny-set-tooltip":{"version":null,"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]},"scope":{}},"deny-set-visible":{"version":null,"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"version":null,"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]},"scope":{}},"allow-create-webview-window":{"version":null,"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]},"scope":{}},"allow-internal-toggle-devtools":{"version":null,"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]},"scope":{}},"allow-print":{"version":null,"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]},"scope":{}},"allow-set-webview-focus":{"version":null,"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]},"scope":{}},"allow-set-webview-position":{"version":null,"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]},"scope":{}},"allow-set-webview-size":{"version":null,"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]},"scope":{}},"allow-webview-close":{"version":null,"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]},"scope":{}},"allow-webview-position":{"version":null,"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]},"scope":{}},"allow-webview-size":{"version":null,"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]},"scope":{}},"deny-create-webview":{"version":null,"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]},"scope":{}},"deny-create-webview-window":{"version":null,"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]},"scope":{}},"deny-internal-toggle-devtools":{"version":null,"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]},"scope":{}},"deny-print":{"version":null,"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]},"scope":{}},"deny-set-webview-focus":{"version":null,"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]},"scope":{}},"deny-set-webview-position":{"version":null,"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]},"scope":{}},"deny-set-webview-size":{"version":null,"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]},"scope":{}},"deny-webview-close":{"version":null,"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]},"scope":{}},"deny-webview-position":{"version":null,"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]},"scope":{}},"deny-webview-size":{"version":null,"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-available-monitors","allow-theme","allow-internal-toggle-maximize","allow-internal-on-mousemove","allow-internal-on-mousedown"]},"permissions":{"allow-available-monitors":{"version":null,"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]},"scope":{}},"allow-center":{"version":null,"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]},"scope":{}},"allow-close":{"version":null,"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]},"scope":{}},"allow-create":{"version":null,"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]},"scope":{}},"allow-current-monitor":{"version":null,"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]},"scope":{}},"allow-destroy":{"version":null,"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]},"scope":{}},"allow-hide":{"version":null,"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]},"scope":{}},"allow-inner-position":{"version":null,"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]},"scope":{}},"allow-inner-size":{"version":null,"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]},"scope":{}},"allow-internal-on-mousedown":{"version":null,"identifier":"allow-internal-on-mousedown","description":"Enables the internal_on_mousedown command without any pre-configured scope.","commands":{"allow":["internal_on_mousedown"],"deny":[]},"scope":{}},"allow-internal-on-mousemove":{"version":null,"identifier":"allow-internal-on-mousemove","description":"Enables the internal_on_mousemove command without any pre-configured scope.","commands":{"allow":["internal_on_mousemove"],"deny":[]},"scope":{}},"allow-internal-toggle-maximize":{"version":null,"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]},"scope":{}},"allow-is-closable":{"version":null,"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]},"scope":{}},"allow-is-decorated":{"version":null,"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]},"scope":{}},"allow-is-focused":{"version":null,"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]},"scope":{}},"allow-is-fullscreen":{"version":null,"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]},"scope":{}},"allow-is-maximizable":{"version":null,"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]},"scope":{}},"allow-is-maximized":{"version":null,"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]},"scope":{}},"allow-is-minimizable":{"version":null,"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]},"scope":{}},"allow-is-minimized":{"version":null,"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]},"scope":{}},"allow-is-resizable":{"version":null,"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]},"scope":{}},"allow-is-visible":{"version":null,"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]},"scope":{}},"allow-maximize":{"version":null,"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]},"scope":{}},"allow-minimize":{"version":null,"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]},"scope":{}},"allow-outer-position":{"version":null,"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]},"scope":{}},"allow-outer-size":{"version":null,"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]},"scope":{}},"allow-primary-monitor":{"version":null,"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]},"scope":{}},"allow-request-user-attention":{"version":null,"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]},"scope":{}},"allow-scale-factor":{"version":null,"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]},"scope":{}},"allow-set-always-on-bottom":{"version":null,"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]},"scope":{}},"allow-set-always-on-top":{"version":null,"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]},"scope":{}},"allow-set-closable":{"version":null,"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]},"scope":{}},"allow-set-content-protected":{"version":null,"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]},"scope":{}},"allow-set-cursor-grab":{"version":null,"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]},"scope":{}},"allow-set-cursor-icon":{"version":null,"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]},"scope":{}},"allow-set-cursor-position":{"version":null,"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]},"scope":{}},"allow-set-cursor-visible":{"version":null,"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]},"scope":{}},"allow-set-decorations":{"version":null,"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]},"scope":{}},"allow-set-effects":{"version":null,"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]},"scope":{}},"allow-set-focus":{"version":null,"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]},"scope":{}},"allow-set-fullscreen":{"version":null,"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]},"scope":{}},"allow-set-icon":{"version":null,"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]},"scope":{}},"allow-set-ignore-cursor-events":{"version":null,"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]},"scope":{}},"allow-set-max-size":{"version":null,"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]},"scope":{}},"allow-set-maximizable":{"version":null,"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]},"scope":{}},"allow-set-min-size":{"version":null,"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]},"scope":{}},"allow-set-minimizable":{"version":null,"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]},"scope":{}},"allow-set-position":{"version":null,"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]},"scope":{}},"allow-set-progress-bar":{"version":null,"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]},"scope":{}},"allow-set-resizable":{"version":null,"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]},"scope":{}},"allow-set-shadow":{"version":null,"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]},"scope":{}},"allow-set-size":{"version":null,"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]},"scope":{}},"allow-set-skip-taskbar":{"version":null,"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]},"scope":{}},"allow-set-title":{"version":null,"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]},"scope":{}},"allow-set-visible-on-all-workspaces":{"version":null,"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]},"scope":{}},"allow-show":{"version":null,"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]},"scope":{}},"allow-start-dragging":{"version":null,"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]},"scope":{}},"allow-theme":{"version":null,"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]},"scope":{}},"allow-title":{"version":null,"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]},"scope":{}},"allow-toggle-maximize":{"version":null,"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]},"scope":{}},"allow-unmaximize":{"version":null,"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]},"scope":{}},"allow-unminimize":{"version":null,"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]},"scope":{}},"deny-available-monitors":{"version":null,"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]},"scope":{}},"deny-center":{"version":null,"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]},"scope":{}},"deny-close":{"version":null,"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]},"scope":{}},"deny-create":{"version":null,"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]},"scope":{}},"deny-current-monitor":{"version":null,"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]},"scope":{}},"deny-destroy":{"version":null,"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]},"scope":{}},"deny-hide":{"version":null,"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]},"scope":{}},"deny-inner-position":{"version":null,"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]},"scope":{}},"deny-inner-size":{"version":null,"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]},"scope":{}},"deny-internal-on-mousedown":{"version":null,"identifier":"deny-internal-on-mousedown","description":"Denies the internal_on_mousedown command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_on_mousedown"]},"scope":{}},"deny-internal-on-mousemove":{"version":null,"identifier":"deny-internal-on-mousemove","description":"Denies the internal_on_mousemove command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_on_mousemove"]},"scope":{}},"deny-internal-toggle-maximize":{"version":null,"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]},"scope":{}},"deny-is-closable":{"version":null,"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]},"scope":{}},"deny-is-decorated":{"version":null,"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]},"scope":{}},"deny-is-focused":{"version":null,"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]},"scope":{}},"deny-is-fullscreen":{"version":null,"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]},"scope":{}},"deny-is-maximizable":{"version":null,"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]},"scope":{}},"deny-is-maximized":{"version":null,"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]},"scope":{}},"deny-is-minimizable":{"version":null,"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]},"scope":{}},"deny-is-minimized":{"version":null,"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]},"scope":{}},"deny-is-resizable":{"version":null,"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]},"scope":{}},"deny-is-visible":{"version":null,"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]},"scope":{}},"deny-maximize":{"version":null,"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]},"scope":{}},"deny-minimize":{"version":null,"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]},"scope":{}},"deny-outer-position":{"version":null,"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]},"scope":{}},"deny-outer-size":{"version":null,"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]},"scope":{}},"deny-primary-monitor":{"version":null,"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]},"scope":{}},"deny-request-user-attention":{"version":null,"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]},"scope":{}},"deny-scale-factor":{"version":null,"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]},"scope":{}},"deny-set-always-on-bottom":{"version":null,"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]},"scope":{}},"deny-set-always-on-top":{"version":null,"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]},"scope":{}},"deny-set-closable":{"version":null,"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]},"scope":{}},"deny-set-content-protected":{"version":null,"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]},"scope":{}},"deny-set-cursor-grab":{"version":null,"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]},"scope":{}},"deny-set-cursor-icon":{"version":null,"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]},"scope":{}},"deny-set-cursor-position":{"version":null,"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]},"scope":{}},"deny-set-cursor-visible":{"version":null,"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]},"scope":{}},"deny-set-decorations":{"version":null,"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]},"scope":{}},"deny-set-effects":{"version":null,"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]},"scope":{}},"deny-set-focus":{"version":null,"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]},"scope":{}},"deny-set-fullscreen":{"version":null,"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]},"scope":{}},"deny-set-icon":{"version":null,"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]},"scope":{}},"deny-set-ignore-cursor-events":{"version":null,"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]},"scope":{}},"deny-set-max-size":{"version":null,"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]},"scope":{}},"deny-set-maximizable":{"version":null,"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]},"scope":{}},"deny-set-min-size":{"version":null,"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]},"scope":{}},"deny-set-minimizable":{"version":null,"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]},"scope":{}},"deny-set-position":{"version":null,"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]},"scope":{}},"deny-set-progress-bar":{"version":null,"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]},"scope":{}},"deny-set-resizable":{"version":null,"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]},"scope":{}},"deny-set-shadow":{"version":null,"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]},"scope":{}},"deny-set-size":{"version":null,"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]},"scope":{}},"deny-set-skip-taskbar":{"version":null,"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]},"scope":{}},"deny-set-title":{"version":null,"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]},"scope":{}},"deny-set-visible-on-all-workspaces":{"version":null,"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]},"scope":{}},"deny-show":{"version":null,"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]},"scope":{}},"deny-start-dragging":{"version":null,"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]},"scope":{}},"deny-theme":{"version":null,"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]},"scope":{}},"deny-title":{"version":null,"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]},"scope":{}},"deny-toggle-maximize":{"version":null,"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]},"scope":{}},"deny-unmaximize":{"version":null,"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]},"scope":{}},"deny-unminimize":{"version":null,"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":null,"permissions":{"allow-restore-window-state":{"version":null,"identifier":"allow-restore-window-state","description":"Enables the restore_window_state command without any pre-configured scope.","commands":{"allow":["restore_window_state"],"deny":[]},"scope":{}},"allow-save-window-state":{"version":null,"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]},"scope":{}},"deny-restore-window-state":{"version":null,"identifier":"deny-restore-window-state","description":"Denies the restore_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_window_state"]},"scope":{}},"deny-save-window-state":{"version":null,"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns deleted file mode 100644 index 6ef70f3ad63fc2a4dc17459e8e4c7348d6d83e5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785363 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%0D@8AfT#_-j5FVDNv) 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�ECK@L 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�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Π==SUUE=LVFsjK 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

    *hqeCK-=IZ&bohLD+<#7irk3JC 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 oSo8`?ysja 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�ECK@L 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 z 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

    `r+5=7opeJLRVs$MeLC$e`8C$v;#_ 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%0AQOWfkVRAG5tO*0`7lIE>SUv*`9|h7} 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 diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico deleted file mode 100644 index 2171bb312ea587275a4b39dce2b28f999609d55b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49906 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 diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs deleted file mode 100644 index 34962a1b1..000000000 --- a/src-tauri/src/main.rs +++ /dev/null @@ -1,112 +0,0 @@ -// Prevents additional console window on Windows in release, DO NOT REMOVE!! -#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] - -use tauri::{webview::Url, AppHandle, WebviewBuilder, WebviewUrl, WindowBuilder}; -use tauri::{Manager, Runtime}; -use tauri_plugin_positioner::{Position, WindowExt}; -use tauri_plugin_window_state::{StateFlags, WindowExt as WindowStateExt}; - -// 🚀 PRODUCTION - -#[cfg(not(dev))] -fn main() { - let port = 44999; - let url = format!("http://localhost:{}", port).parse().unwrap(); - - let builder = default_builder().plugin(tauri_plugin_localhost::Builder::new(port).build()); - - setup(url, builder) -} - -// 💣 DEVELOPMENT - -#[cfg(dev)] -fn main() { - let port = 8000; - let url = format!("http://localhost:{}", port).parse().unwrap(); - - let builder = default_builder(); - - setup(url, builder) -} - -// BUILDER - -fn default_builder() -> tauri::Builder { - tauri::Builder::default() - .plugin(tauri_plugin_fs::init()) - .plugin(tauri_plugin_shell::init()) - .plugin(tauri_plugin_dialog::init()) - .plugin(tauri_plugin_window_state::Builder::default().build()) -} - -// WINDOWS - -fn build_window(app: &AppHandle, url: Url) { - let monitor = app.primary_monitor().unwrap(); - - let height; - let width; - - match monitor { - Some(m) => { - height = (m.size().height as f64 / m.scale_factor()) - 80.0; - width = (m.size().width as f64 / m.scale_factor()) - 40.0; - } - - None => { - height = 675.0; - width = 1080.0; - } - } - - let mut window_builder = WindowBuilder::new(app, "main") - .title("Diffuse") - .theme(None) - .inner_size(width, height); - - window_builder = title_styles(window_builder); - - let window = window_builder.build().unwrap(); - window.move_window(Position::Center).unwrap(); - window.restore_state(StateFlags::all()).unwrap(); - - let webview_builder = WebviewBuilder::new("main", WebviewUrl::External(url)) - .auto_resize() - .enable_clipboard_access() - .user_agent("Chrome"); - - window - .add_child( - webview_builder, - tauri::LogicalPosition::new(0, 0), - window.inner_size().unwrap(), - ) - .unwrap(); - - window.set_resizable(true).unwrap(); -} - -#[cfg(target_os = "macos")] -fn title_styles>(builder: WindowBuilder) -> WindowBuilder { - return builder - .title_bar_style(tauri::TitleBarStyle::Overlay) - .hidden_title(true); -} - -#[cfg(not(target_os = "macos"))] -fn title_styles>(builder: WindowBuilder) -> WindowBuilder { - return builder; -} - -// SETUP - -fn setup(url: Url, builder: tauri::Builder) { - builder - .setup(move |app| { - build_window(app.handle(), url); - Ok(()) - }) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); -} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json deleted file mode 100644 index c4006b07e..000000000 --- a/src-tauri/tauri.conf.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "app": { - "security": { - "csp": null - }, - "windows": [], - "withGlobalTauri": true - }, - "build": { - "beforeBuildCommand": "", - "beforeDevCommand": "", - "devUrl": "http://localhost:8000", - "frontendDist": "../dist" - }, - "bundle": { - "active": true, - "category": "Music", - "icon": [ - "icons/icon.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "targets": "all" - }, - "identifier": "com.icidasset.diffuse", - "plugins": {}, - "productName": "Diffuse", - "version": "3.5.0" -} \ No newline at end of file diff --git a/src/Core/Brain.elm b/src/Core/Brain.elm deleted file mode 100644 index 081e1d0be..000000000 --- a/src/Core/Brain.elm +++ /dev/null @@ -1,273 +0,0 @@ -module Brain exposing (main) - -import Alien -import Brain.Common.State as Common -import Brain.Other.State as Other -import Brain.Ports as Ports -import Brain.Sources.Processing.State as Processing -import Brain.Sources.Processing.Types as Processing -import Brain.Tracks.State as Tracks -import Brain.Types exposing (..) -import Brain.User.State as User -import Brain.User.Types as User -import Debouncer.Basic as Debouncer -import Json.Decode as Json -import Return -import Return.Ext as Return -import Sources.Processing as Processing -import Task -import Time -import Time.Ext as Time -import Url -import User.Layer as User - - - --- 🧠 - - -main : Program Flags Model Msg -main = - Platform.worker - { init = init - , update = update - , subscriptions = subscriptions - } - - - --- 🌳 - - -init : Flags -> ( Model, Cmd Msg ) -init flags = - let - hypDebouncer = - 2.5 - |> Debouncer.fromSeconds - |> Debouncer.debounce - |> Debouncer.accumulateWith Debouncer.allInputs - |> Debouncer.toDebouncer - - initialUrl = - flags.initialUrl - |> Url.fromString - |> Maybe.withDefault - { protocol = Url.Http - , host = "" - , port_ = Nothing - , path = "" - , query = Nothing - , fragment = Nothing - } - in - ( ----------------------------------------- - -- Initial model - ----------------------------------------- - { currentTime = Time.default - , hypaethralDebouncer = hypDebouncer - , hypaethralRetrieval = Nothing - , hypaethralStorage = [] - , hypaethralUserData = User.emptyHypaethralData - , origin = "ORIGIN_UNKNOWN" - , processingStatus = Processing.NotProcessing - , userSyncMethod = Nothing - } - ----------------------------------------- - -- Initial command - ----------------------------------------- - , Cmd.batch - [ Task.perform SetCurrentTime Time.now - , User.initialCommand initialUrl - ] - ) - - - --- 📣 - - -update : Msg -> Manager -update msg = - case msg of - Bypass -> - Return.singleton - - Cmd a -> - Return.communicate a - - ----------------------------------------- - -- Tracks - ----------------------------------------- - DownloadTracks a -> - Tracks.download a - - GotSearchResults a -> - Tracks.gotSearchResults a - - MakeArtworkTrackUrls a -> - Tracks.makeArtworkTrackUrls a - - RemoveTracksBySourceId a -> - Tracks.removeBySourceId a - - RemoveTracksFromCache a -> - Tracks.removeFromCache a - - ReplaceTrackTags a -> - Tracks.replaceTags a - - Search a -> - Tracks.search a - - StoreTracksInCache a -> - Tracks.storeInCache a - - SyncTrackTags a -> - Tracks.syncTrackTags a - - UpdateSearchIndex a -> - Tracks.updateSearchIndex a - - ----------------------------------------- - -- 🦉 Nested - ----------------------------------------- - ProcessingMsg a -> - Processing.update a - - UserMsg a -> - User.update a - - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - RefreshedAccessToken a -> - Other.refreshedAccessToken a - - SetCurrentTime a -> - Other.setCurrentTime a - - ToCache a -> - Other.toCache a - - - --- 📰 - - -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.batch - [ Ports.fromAlien alien - , Ports.makeArtworkTrackUrls MakeArtworkTrackUrls - , Ports.refreshedAccessToken RefreshedAccessToken - , Ports.receiveSearchResults GotSearchResults - , Ports.receiveTags (ProcessingMsg << Processing.TagsStep) - , Ports.replaceTags ReplaceTrackTags - - -- - , Time.every (60 * 1000) SetCurrentTime - ] - - - --- 👽 - - -alien : Alien.Event -> Msg -alien event = - case ( event.error, Alien.tagFromString event.tag ) of - ( Nothing, Just tag ) -> - translateAlienData tag event.data - - ( Just err, Just tag ) -> - translateAlienError tag event.data err - - _ -> - Bypass - - -translateAlienData : Alien.Tag -> Json.Value -> Msg -translateAlienData tag data = - case tag of - Alien.EnclosedData -> - UserMsg (User.EnclosedDataRetrieved data) - - Alien.SearchTracks -> - Search data - - ----------------------------------------- - -- From UI - ----------------------------------------- - Alien.DownloadTracks -> - DownloadTracks data - - Alien.ProcessSources -> - ProcessingMsg (Processing.Process data) - - Alien.RefreshedAccessToken -> - RefreshedAccessToken data - - Alien.RemoveEncryptionKey -> - UserMsg User.RemoveEncryptionKey - - Alien.RemoveTracksBySourceId -> - RemoveTracksBySourceId data - - Alien.RemoveTracksFromCache -> - RemoveTracksFromCache data - - Alien.SaveEnclosedUserData -> - UserMsg (User.SaveEnclosedData data) - - Alien.SaveFavourites -> - UserMsg (User.SaveFavourites data) - - Alien.SavePlaylists -> - UserMsg (User.SavePlaylists data) - - Alien.SaveProgress -> - UserMsg (User.SaveProgress data) - - Alien.SaveSettings -> - UserMsg (User.SaveSettings data) - - Alien.SaveSources -> - UserMsg (User.SaveSources data) - - Alien.SaveTracks -> - UserMsg (User.SaveTracks data) - - Alien.SetSyncMethod -> - UserMsg (User.SetSyncMethod data) - - Alien.StopProcessing -> - ProcessingMsg Processing.StopProcessing - - Alien.StoreTracksInCache -> - StoreTracksInCache data - - Alien.SyncTrackTags -> - SyncTrackTags data - - Alien.ToCache -> - ToCache data - - Alien.UnsetSyncMethod -> - UserMsg User.UnsetSyncMethod - - Alien.UpdateEncryptionKey -> - UserMsg (User.UpdateEncryptionKey data) - - _ -> - Bypass - - -translateAlienError : Alien.Tag -> Json.Value -> String -> Msg -translateAlienError tag _ err = - case err of - "db is undefined" -> - Common.reportUICmdMsg tag "Can't connect to the browser's IndexedDB. FYI, this is __not supported in Firefox's private mode__." - - _ -> - Common.reportUICmdMsg tag err diff --git a/src/Core/Brain/Common/State.elm b/src/Core/Brain/Common/State.elm deleted file mode 100644 index ea7ffe8aa..000000000 --- a/src/Core/Brain/Common/State.elm +++ /dev/null @@ -1,110 +0,0 @@ -module Brain.Common.State exposing (..) - -import Alien -import Brain.Ports as Ports -import Brain.Types exposing (..) -import Json.Decode as Json -import Return.Ext as Return -import Task -import TaskPort -import TaskPort.Extra as TaskPort - - - --- 🛠 - - -attemptPortTask : (a -> Msg) -> Task.Task TaskPort.Error a -> Cmd Msg -attemptPortTask mapFn = - Task.attempt (reportPortErrorToUI mapFn) - - -attemptTask : (a -> Msg) -> Task.Task String a -> Cmd Msg -attemptTask mapFn = - Task.attempt (reportErrorToUI mapFn) - - - --- GIVE - - -giveUI : Alien.Tag -> Json.Value -> Manager -giveUI tag data = - data - |> giveUICmd tag - |> Return.communicate - - -giveUICmd : Alien.Tag -> Json.Value -> Cmd Msg -giveUICmd tag data = - data - |> Alien.broadcast tag - |> Ports.toUI - - -giveUICmdMsg : Alien.Tag -> Json.Value -> Msg -giveUICmdMsg tag data = - data - |> giveUICmd tag - |> Cmd - - - --- NUDGE - - -nudgeUI : Alien.Tag -> Manager -nudgeUI = - nudgeUICmd >> Return.communicate - - -nudgeUICmd : Alien.Tag -> Cmd Msg -nudgeUICmd tag = - tag - |> Alien.trigger - |> Ports.toUI - - -nudgeUICmdMsg : Alien.Tag -> Msg -nudgeUICmdMsg = - nudgeUICmd >> Cmd - - - --- REPORT - - -reportErrorToUI : (a -> Msg) -> Result String a -> Msg -reportErrorToUI mapFn result = - case result of - Ok value -> - mapFn value - - Err error -> - reportUICmdMsg Alien.ReportError error - - -reportPortErrorToUI : (a -> Msg) -> Result TaskPort.Error a -> Msg -reportPortErrorToUI mapFn = - Result.mapError TaskPort.errorToStringCustom >> reportErrorToUI mapFn - - -reportUI : Alien.Tag -> String -> Manager -reportUI tag error = - error - |> reportUICmd tag - |> Return.communicate - - -reportUICmd : Alien.Tag -> String -> Cmd Msg -reportUICmd tag error = - error - |> Alien.report tag - |> Ports.toUI - - -reportUICmdMsg : Alien.Tag -> String -> Msg -reportUICmdMsg tag error = - error - |> reportUICmd tag - |> Cmd diff --git a/src/Core/Brain/Other/State.elm b/src/Core/Brain/Other/State.elm deleted file mode 100644 index 16a3ffabf..000000000 --- a/src/Core/Brain/Other/State.elm +++ /dev/null @@ -1,79 +0,0 @@ -module Brain.Other.State exposing (..) - -import Alien -import Brain.Common.State as Common -import Brain.Ports as Ports -import Brain.Task.Ports -import Brain.Types exposing (..) -import Dict -import Json.Decode as Json -import List.Extra as List -import Return exposing (return) -import Return.Ext as Return -import Sources exposing (Service(..)) -import Sources.Encoding -import Sources.Refresh.AccessToken -import Time - - - --- 🔱 - - -refreshedAccessToken : Json.Value -> Manager -refreshedAccessToken value model = - case Json.decodeValue Sources.Refresh.AccessToken.portArgumentsDecoder value of - Ok portArguments -> - case portArguments.service of - Google -> - model.hypaethralUserData.sources - |> List.find (.id >> (==) portArguments.sourceId) - |> Maybe.map - (\source -> - source.data - |> Dict.insert "accessToken" portArguments.accessToken - |> Dict.insert "expiresAt" (String.fromInt portArguments.expiresAt) - |> (\newData -> { source | data = newData }) - ) - |> Maybe.map - (\source -> - source - |> Sources.Encoding.encode - |> Alien.broadcast Alien.UpdateSourceData - |> Ports.toUI - ) - |> Maybe.withDefault Cmd.none - |> return model - - _ -> - Return.singleton model - - Err err -> - Common.reportUI Alien.ToCache (Json.errorToString err) model - - -setCurrentTime : Time.Posix -> Manager -setCurrentTime time model = - Return.singleton { model | currentTime = time } - - -{-| Save alien data to cache. --} -toCache : Json.Value -> Manager -toCache data = - case Json.decodeValue Alien.hostDecoder data of - Ok alienEvent -> - case Alien.tagFromString alienEvent.tag of - Just tag -> - alienEvent.data - |> Brain.Task.Ports.toCache tag - |> Common.attemptPortTask (always Bypass) - |> Return.communicate - - Nothing -> - Common.reportUI Alien.ToCache "Failed to decode alien tag" - - Err err -> - err - |> Json.errorToString - |> Common.reportUI Alien.ToCache diff --git a/src/Core/Brain/Ports.elm b/src/Core/Brain/Ports.elm deleted file mode 100644 index 14526a926..000000000 --- a/src/Core/Brain/Ports.elm +++ /dev/null @@ -1,83 +0,0 @@ -port module Brain.Ports exposing (..) - -import Alien -import Json.Encode as Json -import Sources.Processing exposing (ContextForTags, ContextForTagsSync) - - - --- 📣 - - -port downloadTracks : Json.Value -> Cmd msg - - -port removeTracksFromCache : Json.Value -> Cmd msg - - -port requestSearch : String -> Cmd msg - - -port requestTags : ContextForTags -> Cmd msg - - -port storeTracksInCache : Json.Value -> Cmd msg - - -port syncTags : ContextForTagsSync -> Cmd msg - - -port toUI : Alien.Event -> Cmd msg - - -port updateSearchIndex : Json.Value -> Cmd msg - - - --- 📣 ░░ USER LAYER SERVICES - - -port deconstructRemoteStorage : () -> Cmd msg - - -port provideArtworkTrackUrls : Json.Value -> Cmd msg - - -port requestDropbox : Alien.Event -> Cmd msg - - -port requestIpfs : Alien.Event -> Cmd msg - - -port requestRemoteStorage : Alien.Event -> Cmd msg - - -port toDropbox : Alien.Event -> Cmd msg - - -port toIpfs : Alien.Event -> Cmd msg - - -port toRemoteStorage : Alien.Event -> Cmd msg - - - --- 📰 - - -port fromAlien : (Alien.Event -> msg) -> Sub msg - - -port makeArtworkTrackUrls : (Json.Value -> msg) -> Sub msg - - -port receiveSearchResults : (List String -> msg) -> Sub msg - - -port refreshedAccessToken : (Json.Value -> msg) -> Sub msg - - -port receiveTags : (ContextForTags -> msg) -> Sub msg - - -port replaceTags : (ContextForTagsSync -> msg) -> Sub msg diff --git a/src/Core/Brain/Sources/Processing/Common.elm b/src/Core/Brain/Sources/Processing/Common.elm deleted file mode 100644 index 39b501ff2..000000000 --- a/src/Core/Brain/Sources/Processing/Common.elm +++ /dev/null @@ -1,86 +0,0 @@ -module Brain.Sources.Processing.Common exposing (..) - -import Alien -import Brain.Common.State as Common -import Brain.Types exposing (Manager) -import Dict.Ext as Dict -import Http exposing (Error(..)) -import Json.Encode as Encode -import List.Extra as List -import Maybe.Extra as Maybe -import Sources exposing (Service, Source) -import Sources.Processing exposing (..) -import Sources.Services as Services -import Tracks exposing (Track) - - - --- 🔱 - - -contextToTagsContext : Context -> ContextForTags -contextToTagsContext context = - { amount = List.length context.filePaths - , nextFilePaths = context.filePaths - , receivedFilePaths = [] - , receivedTags = [] - , sourceId = context.source.id - , urlsForTags = [] - } - - -isProcessing : Status -> Bool -isProcessing status = - case status of - Processing _ _ -> - True - - NotProcessing -> - False - - -reportHttpError : Source -> Http.Error -> Manager -reportHttpError source err = - reportError - source - (translateHttpError source.service err) - - -reportError : Source -> String -> Manager -reportError source error = - [ ( "sourceId", Encode.string source.id ) - , ( "sourceName", Encode.string (Dict.fetch "name" "Unnamed" source.data) ) - , ( "error", Encode.string error ) - ] - |> Encode.object - |> Common.giveUI Alien.ReportProcessingError - - -tracksFromTagsContext : ContextForTags -> List Track -tracksFromTagsContext context = - context.receivedTags - |> List.zip context.receivedFilePaths - |> List.filter (Tuple.second >> Maybe.isJust) - |> List.map (Tuple.mapSecond (Maybe.withDefault Tracks.emptyTags)) - |> List.map (Tracks.makeTrack context.sourceId) - - -translateHttpError : Service -> Http.Error -> String -translateHttpError service err = - case err of - NetworkError -> - "Cannot connect to this source" - - Timeout -> - "Source did not respond (timeout)" - - BadUrl _ -> - "Diffuse error, invalid url was used" - - BadStatus _ -> - "Got a faulty response from this source. Use the developer console to get more info." - - BadBody response -> - response - |> Services.parseErrorResponse service - |> Maybe.withDefault (translateHttpError service <| BadStatus 0) diff --git a/src/Core/Brain/Sources/Processing/State.elm b/src/Core/Brain/Sources/Processing/State.elm deleted file mode 100644 index 53982918b..000000000 --- a/src/Core/Brain/Sources/Processing/State.elm +++ /dev/null @@ -1,236 +0,0 @@ -module Brain.Sources.Processing.State exposing (..) - -import Alien -import Brain.Common.State as Common -import Brain.Sources.Processing.Common exposing (..) -import Brain.Sources.Processing.Steps as Steps -import Brain.Sources.Processing.Types as Processing exposing (..) -import Brain.Tracks.State as Tracks -import Brain.Types exposing (..) -import Dict.Ext as Dict -import Http -import Json.Decode as Json -import Json.Encode as Encode -import List.Extra as List -import Return exposing (..) -import Sources exposing (Source) -import Sources.Processing exposing (..) -import Sources.Processing.Encoding as Processing - - - --- 📣 - - -update : Processing.Msg -> Manager -update msg = - case msg of - Process a -> - process a - - NextInLine -> - nextInLine - - StopProcessing -> - stopProcessing - - ----------------------------------------- - -- Steps - ----------------------------------------- - PrepareStep a b -> - prepareStep a b - - TreeStep a b -> - treeStep a b - - TreeStepRemoveTracks a b -> - treeStepRemoveTracks a b - - TagsStep a -> - tagsStep a - - - --- 🔱 - - -process : Json.Value -> Manager -process json = - -- Only proceed to the processing if we got all the necessary data, - -- otherwise report an error in the UI. - case Json.decodeValue Processing.argumentsDecoder json of - Ok arguments -> - process_ arguments - - Err err -> - Common.reportUI Alien.ProcessSources (Json.errorToString err) - - - -{- If already processing, do nothing. - If there are no sources, do nothing. - If there are sources, start processing the first source. --} - - -process_ : { origin : String, sources : List Source } -> Manager -process_ { origin, sources } model = - let - tracks = - model.hypaethralUserData.tracks - - filter s = - List.filter (.sourceId >> (==) s.id) tracks - - all = - sources - |> List.sortBy (.data >> Dict.fetch "name" "") - |> List.map (\s -> ( s, filter s )) - in - case - ( isProcessing model.processingStatus || List.isEmpty sources - , List.uncons all - ) - of - ( False, Just ( ( s, t ), future ) ) -> - return - { model | origin = origin, processingStatus = Processing ( s, t ) future } - (Steps.takeFirstStep origin model.currentTime s) - - _ -> - Return.singleton model - - - -{- If not processing, do nothing. - If there are no sources left, do nothing. - If there are sources left, start processing the next source in line. --} - - -nextInLine : Manager -nextInLine model = - case model.processingStatus of - Processing ( processedSource, _ ) (( source, tracks ) :: rest) -> - source - |> Steps.takeFirstStep model.origin model.currentTime - |> return - { model | processingStatus = Processing ( source, tracks ) rest } - |> andThen - (processedSource.id - |> Encode.string - |> Common.giveUI Alien.FinishedProcessingSource - ) - - _ -> - Common.nudgeUI - Alien.FinishedProcessingSources - { model | processingStatus = NotProcessing } - - - -{- STOP! -} - - -stopProcessing : Manager -stopProcessing model = - Return.singleton { model | processingStatus = NotProcessing } - - - --- PHASE 1 ----------- --- Prepare for processing. - - -prepareStep : Context -> Result Http.Error String -> Manager -prepareStep context result model = - case result of - Ok response -> - model.currentTime - |> Steps.takePrepareStep context response - |> return model - - Err err -> - model - |> nextInLine - |> andThen (reportHttpError context.source err) - - - --- PHASE 2 ----------- --- Make a file list/tree. - - -treeStep : Context -> Result Http.Error String -> Manager -treeStep context result model = - case result of - Ok response -> - case model.processingStatus of - Processing ( _, tracks ) rest -> - return - { model | processingStatus = Processing ( context.source, tracks ) rest } - (Steps.takeTreeStep context response tracks model.currentTime) - - NotProcessing -> - Return.singleton model - - Err err -> - model - |> nextInLine - |> andThen (reportHttpError context.source err) - - -treeStepRemoveTracks : String -> List String -> Manager -treeStepRemoveTracks sourceId filePaths model = - let - encodedData = - Encode.object - [ ( "filePaths", Encode.list Encode.string filePaths ) - , ( "sourceId", Encode.string sourceId ) - ] - in - model - |> Common.giveUI Alien.RemoveTracksByPath encodedData - |> andThen (Tracks.removeByPaths { sourceId = sourceId, paths = filePaths }) - - - --- PHASE 3 ----------- --- Get the tags for each file in the file list. - - -tagsStep : ContextForTags -> Manager -tagsStep tagsContext model = - let - maybeCmd = - case model.processingStatus of - Processing ( source, _ ) _ -> - Steps.takeTagsStep model.currentTime tagsContext source - - NotProcessing -> - Just Cmd.none - - tracksToAdd = - tagsContext - |> tracksFromTagsContext - |> List.map (\track -> { track | insertedAt = model.currentTime }) - - amountLeft = - List.length tagsContext.nextFilePaths - - progressPercentage = - 0.05 + 0.95 * (1 - toFloat amountLeft / toFloat tagsContext.amount) - - progress = - [ ( "progress", Encode.float progressPercentage ) - , ( "sourceId", Encode.string tagsContext.sourceId ) - ] - in - maybeCmd - |> Maybe.map (return model) - |> Maybe.withDefault (nextInLine model) - |> andThen (Tracks.add tracksToAdd) - |> andThen (Common.giveUI Alien.ReportProcessingProgress <| Encode.object progress) diff --git a/src/Core/Brain/Sources/Processing/Steps.elm b/src/Core/Brain/Sources/Processing/Steps.elm deleted file mode 100644 index 61f1d55ab..000000000 --- a/src/Core/Brain/Sources/Processing/Steps.elm +++ /dev/null @@ -1,327 +0,0 @@ -module Brain.Sources.Processing.Steps exposing - ( takeFirstStep - , takePrepareStep - , takeTagsStep - , takeTreeStep - ) - -{-| Processing. - - ## How it works - - This describes the process for a single source. - - 1. Prepare the source for processing. - -> For example, a source could get an access token first. - 2. Get a file tree/list from the source - -> This can happen in multiple steps as with Amazon S3. - A command is issued for each step of this process. - 3. Get the tags (ie. metadata) for each file that we found. - -> This also happens in multiple steps, so that we can flush - every x tracks while processing. - A command is issued for each step of this process. - --} - -import Alien -import Brain.Ports as Ports -import Brain.Sources.Processing.Common exposing (..) -import Brain.Sources.Processing.Types exposing (..) -import Brain.Types as Brain exposing (..) -import List.Extra as List -import Set -import Sources exposing (Source) -import Sources.Encoding -import Sources.Processing exposing (..) -import Sources.Services as Services -import Task.Extra exposing (do) -import Time -import Tracks exposing (Track) - - - --- SETTINGS - - -{-| How much tags do we want to process -before we send them back to Elm. - - eg. After we got the tags for 20 tracks, - we store these and continue with the rest. - --} -tagsBatchSize : Int -tagsBatchSize = - 20 - - - --- 1st STEP - - -takeFirstStep : String -> Time.Posix -> Source -> Cmd Brain.Msg -takeFirstStep origin currentTime source = - let - initialContext = - { filePaths = [] - , origin = origin - , preparationMarker = TheBeginning - , source = source - , treeMarker = TheBeginning - } - in - prepare initialContext currentTime - - - --- 2nd STEP - - -takePrepareStep : Context -> String -> Time.Posix -> Cmd Brain.Msg -takePrepareStep context response currentTime = - context - |> handlePreparationResponse response currentTime - |> intoPreparationCommands currentTime - - - --- 3rd STEP - - -takeTreeStep : Context -> String -> List Track -> Time.Posix -> Cmd Brain.Msg -takeTreeStep context response associatedTracks currentTime = - context - |> handleTreeResponse response - |> intoTreeCommand associatedTracks currentTime - - - --- 4th STEP - - -takeTagsStep : Time.Posix -> ContextForTags -> Source -> Maybe (Cmd Brain.Msg) -takeTagsStep currentTime tagsCtx source = - let - ( filesToProcess, nextFiles ) = - List.splitAt tagsBatchSize tagsCtx.nextFilePaths - - newTagsCtx = - { amount = tagsCtx.amount - , nextFilePaths = nextFiles - , receivedFilePaths = filesToProcess - , receivedTags = [] - , sourceId = source.id - , urlsForTags = makeTrackUrls currentTime source filesToProcess - } - in - if List.isEmpty filesToProcess then - Nothing - - else - Just (getTags newTagsCtx) - - - ------------------------------------------ --- ㊙️ ------------------------------------------ --- PREPARE - - -prepare : Context -> Time.Posix -> Cmd Brain.Msg -prepare context currentTime = - let - maybePreparationCommand = - Services.prepare - context.source.service - context.origin - context.source.data - context.preparationMarker - (ProcessingMsg << PrepareStep context) - in - case maybePreparationCommand of - Just cmd -> - cmd - - Nothing -> - -- Some services don't need to prepare for processing. - -- 🚀 - makeTree context currentTime - - -handlePreparationResponse : String -> Time.Posix -> Context -> Context -handlePreparationResponse response currentTime context = - let - answer = - Services.parsePreparationResponse - context.source.service - response - currentTime - context.source.data - context.preparationMarker - - source = - context.source - in - { context - | preparationMarker = answer.marker - , source = { source | data = answer.sourceData } - } - - -intoPreparationCommands : Time.Posix -> Context -> Cmd Brain.Msg -intoPreparationCommands currentTime context = - case context.preparationMarker of - TheBeginning -> - Cmd.none - - -- Still preparing, - -- carry on. - -- - InProgress _ -> - prepare context currentTime - - -- The preparation is completed, - -- continue to the next step. - -- - TheEnd -> - let - updatedSource = - context.source - in - Cmd.batch - [ -- Make a file tree, the next step. - -- 🚀 - makeTree context currentTime - - -- Update source data. - , updatedSource - |> Sources.Encoding.encode - |> Alien.broadcast Alien.UpdateSourceData - |> Ports.toUI - ] - - - --- TREE - - -makeTree : Context -> Time.Posix -> Cmd Brain.Msg -makeTree context currentTime = - Services.makeTree - context.source.service - context.source.data - context.treeMarker - currentTime - (ProcessingMsg << TreeStep context) - - -handleTreeResponse : String -> Context -> Context -handleTreeResponse response context = - let - parsingFunc = - Services.parseTreeResponse context.source.service - - parsedResponse = - parsingFunc response context.treeMarker - in - { context - | filePaths = context.filePaths ++ parsedResponse.filePaths - , treeMarker = parsedResponse.marker - } - - -intoTreeCommand : List Track -> Time.Posix -> Context -> Cmd Brain.Msg -intoTreeCommand associatedTracks currentTime context = - case context.treeMarker of - TheBeginning -> - Cmd.none - - -- Still building the tree, - -- carry on. - -- - InProgress _ -> - makeTree context currentTime - - -- The tree's been build, - -- continue to the next step. - -- - TheEnd -> - let - filteredFiles = - Services.postProcessTree context.source.service context.filePaths - - postContext = - { context | filePaths = filteredFiles } - - pathsSourceOfTruth = - postContext.filePaths - - pathsCurrent = - List.map .path associatedTracks - - ( pathsAdded, pathsRemoved ) = - separate pathsCurrent pathsSourceOfTruth - in - Cmd.batch - [ -- Get tags from tracks, the next step. - -- 🚀 - postContext - |> (\ctx -> { ctx | filePaths = pathsAdded }) - |> contextToTagsContext - |> TagsStep - |> ProcessingMsg - |> do - - -- Remove tracks - , if not (List.isEmpty pathsRemoved) then - pathsRemoved - |> TreeStepRemoveTracks context.source.id - |> ProcessingMsg - |> do - - else - Cmd.none - ] - - -separate : List String -> List String -> ( List String, List String ) -separate current srcOfTruth = - let - setCurrent = - Set.fromList current - - setSrcOfTruth = - Set.fromList srcOfTruth - in - ( -- Added - -------- - Set.diff setSrcOfTruth setCurrent |> Set.toList - , -- Removed - ---------- - Set.diff setCurrent setSrcOfTruth |> Set.toList - ) - - - --- TAGS - - -getTags : ContextForTags -> Cmd Brain.Msg -getTags = - Ports.requestTags - - -makeTrackUrls : Time.Posix -> Source -> List String -> List TagUrls -makeTrackUrls currentTime source filePaths = - let - maker = - Services.makeTrackUrl source.service - - mapFn = - \path -> - { getUrl = maker currentTime source.id source.data Get path - , headUrl = maker currentTime source.id source.data Head path - } - in - List.map mapFn filePaths diff --git a/src/Core/Brain/Sources/Processing/Types.elm b/src/Core/Brain/Sources/Processing/Types.elm deleted file mode 100644 index 843003bd7..000000000 --- a/src/Core/Brain/Sources/Processing/Types.elm +++ /dev/null @@ -1,22 +0,0 @@ -module Brain.Sources.Processing.Types exposing (..) - -import Http -import Json.Decode as Json -import Sources.Processing exposing (..) - - - --- 📣 - - -type Msg - = Process Json.Value - | NextInLine - | StopProcessing - ----------------------------------------- - -- Steps - ----------------------------------------- - | PrepareStep Context (Result Http.Error String) - | TreeStep Context (Result Http.Error String) - | TreeStepRemoveTracks String (List String) - | TagsStep ContextForTags diff --git a/src/Core/Brain/Task/Ports.elm b/src/Core/Brain/Task/Ports.elm deleted file mode 100644 index 452d5891a..000000000 --- a/src/Core/Brain/Task/Ports.elm +++ /dev/null @@ -1,79 +0,0 @@ -module Brain.Task.Ports exposing (..) - -import Alien -import Json.Decode -import Json.Encode -import TaskPort - - - --- CACHE - - -fromCache : Alien.Tag -> Json.Decode.Decoder value -> TaskPort.Task (Maybe value) -fromCache tag decoder = - TaskPort.call - { function = "fromCache" - , valueDecoder = Json.Decode.maybe decoder - , argsEncoder = Json.Encode.string - } - (Alien.tagToString tag) - - -fromCacheWithSuffix : Alien.Tag -> String -> Json.Decode.Decoder value -> TaskPort.Task (Maybe value) -fromCacheWithSuffix tag suffix decoder = - TaskPort.call - { function = "fromCache" - , valueDecoder = Json.Decode.maybe decoder - , argsEncoder = Json.Encode.string - } - (Alien.tagToString tag ++ "_" ++ suffix) - - -removeCache : Alien.Tag -> TaskPort.Task () -removeCache tag = - TaskPort.call - { function = "removeCache" - , valueDecoder = TaskPort.ignoreValue - , argsEncoder = Json.Encode.string - } - (Alien.tagToString tag) - - -toCache : Alien.Tag -> Json.Encode.Value -> TaskPort.Task () -toCache tag = - let - key = - Alien.tagToString tag - in - TaskPort.call - { function = "toCache" - , valueDecoder = TaskPort.ignoreValue - , argsEncoder = \v -> Json.Encode.object [ ( "key", Json.Encode.string key ), ( "value", v ) ] - } - - -toCacheWithSuffix : Alien.Tag -> String -> Json.Encode.Value -> TaskPort.Task () -toCacheWithSuffix tag suffix = - let - key = - Alien.tagToString tag ++ "_" ++ suffix - in - TaskPort.call - { function = "toCache" - , valueDecoder = TaskPort.ignoreValue - , argsEncoder = \v -> Json.Encode.object [ ( "key", Json.Encode.string key ), ( "value", v ) ] - } - - - --- CRYPTO - - -fabricateSecretKey : String -> TaskPort.Task () -fabricateSecretKey = - TaskPort.call - { function = "fabricateSecretKey" - , valueDecoder = Json.Decode.succeed () - , argsEncoder = Json.Encode.string - } diff --git a/src/Core/Brain/Tracks/State.elm b/src/Core/Brain/Tracks/State.elm deleted file mode 100644 index 966065a54..000000000 --- a/src/Core/Brain/Tracks/State.elm +++ /dev/null @@ -1,347 +0,0 @@ -module Brain.Tracks.State exposing (..) - -import Alien -import Brain.Common.State as Common -import Brain.Ports as Ports -import Brain.Types exposing (..) -import Brain.User.State as User -import Dict -import Dict.Ext as Dict -import Json.Decode as Json exposing (Decoder) -import Json.Encode -import List.Extra as List -import Queue -import Return exposing (andThen, return) -import Return.Ext as Return -import Sources exposing (Source) -import Sources.Processing exposing (ContextForTagsSync, HttpMethod(..), TagUrls) -import Sources.Services -import Time -import Tracks exposing (Track) -import Tracks.Encoding - - - --- 🔱 - - -add : List Track -> Manager -add list model = - case list of - [] -> - Return.singleton model - - tracks -> - model - |> User.saveTracksAndUpdateSearchIndex - (List.append model.hypaethralUserData.tracks tracks) - |> andThen - (tracks - |> Json.Encode.list Tracks.Encoding.encodeTrack - |> Common.giveUI Alien.AddTracks - ) - - -download : Json.Value -> Manager -download json model = - let - { prefixTrackNumber, trackIds, zipName } = - json - |> Json.decodeValue downloadParamsDecoder - |> Result.withDefault - { prefixTrackNumber = False - , trackIds = [] - , zipName = "failed-to-decode-json" - } - in - model.hypaethralUserData.tracks - |> Tracks.pick trackIds - |> List.indexedMap Tuple.pair - |> Json.Encode.list - (\( idx, track ) -> - Json.Encode.object - [ ( "filename" - , [ if prefixTrackNumber then - (idx + 1) - |> String.fromInt - |> String.padLeft 2 '0' - |> (\s -> s ++ " - ") - - else - "" - , track.tags.artist - |> Maybe.map (\a -> a ++ " - ") - |> Maybe.withDefault "" - , track.tags.title - ] - |> String.concat - |> Json.Encode.string - ) - - -- - , ( "path" - , Json.Encode.string track.path - ) - , ( "url" - , track - |> Queue.makeTrackUrl - model.currentTime - model.hypaethralUserData.sources - |> Json.Encode.string - ) - ] - ) - |> (\encodedTracks -> - Json.Encode.object - [ ( "name", Json.Encode.string zipName ) - , ( "tracks", encodedTracks ) - ] - ) - |> Ports.downloadTracks - |> return model - - -gotSearchResults : List String -> Manager -gotSearchResults results = - Common.giveUI Alien.SearchTracks (Json.Encode.list Json.Encode.string results) - - -makeArtworkTrackUrls : Json.Value -> Manager -makeArtworkTrackUrls json model = - json - |> Json.decodeValue - (Json.dict Json.string) - |> Result.map - (\dict -> - let - maybeSource = - Maybe.andThen - (\trackSourceId -> - List.find - (.id >> (==) trackSourceId) - model.hypaethralUserData.sources - ) - (Dict.get "trackSourceId" dict) - - trackPath = - Dict.fetch "trackPath" "" dict - - mkTrackUrl = - makeTrackUrl model.currentTime trackPath maybeSource - in - dict - |> Dict.insert "trackGetUrl" (mkTrackUrl Get) - |> Dict.insert "trackHeadUrl" (mkTrackUrl Head) - |> Json.Encode.dict identity Json.Encode.string - |> Ports.provideArtworkTrackUrls - |> return model - ) - |> Result.withDefault - (Return.singleton model) - - -removeByPaths : { sourceId : String, paths : List String } -> Manager -removeByPaths args model = - User.saveTracksAndUpdateSearchIndex - (model.hypaethralUserData.tracks - |> Tracks.removeByPaths args - |> .kept - ) - model - - -removeBySourceId : Json.Value -> Manager -removeBySourceId data model = - case Json.decodeValue Json.string data of - Ok sourceId -> - User.saveTracksAndUpdateSearchIndex - (model.hypaethralUserData.tracks - |> Tracks.removeBySourceId sourceId - |> .kept - ) - model - - Err _ -> - Return.singleton model - - -removeFromCache : Json.Value -> Manager -removeFromCache data = - Return.communicate (Ports.removeTracksFromCache data) - - -replaceTags : ContextForTagsSync -> Manager -replaceTags context model = - model.hypaethralUserData.tracks - |> List.foldr - (\track ( acc, trackIds, tags ) -> - case List.elemIndex track.id trackIds of - Just idx -> - let - newTags = - tags - |> List.getAt idx - |> Maybe.andThen identity - |> Maybe.withDefault track.tags - in - ( { track | tags = newTags } :: acc - , List.removeAt idx trackIds - , List.removeAt idx tags - ) - - Nothing -> - ( track :: acc - , trackIds - , tags - ) - ) - ( [] - , context.trackIds - , context.receivedTags - ) - |> (\( a, _, _ ) -> - User.saveTracksAndUpdateSearchIndex a model - ) - |> andThen - (\m -> - m.hypaethralUserData.tracks - |> Json.Encode.list Tracks.Encoding.encodeTrack - |> (\data -> Common.giveUI Alien.ReloadTracks data m) - ) - - -search : Json.Value -> Manager -search encodedSearchTerm = - encodedSearchTerm - |> Json.decodeValue Json.string - |> Result.map Ports.requestSearch - |> Result.withDefault Cmd.none - |> Return.communicate - - -storeInCache : Json.Value -> Manager -storeInCache data = - Return.communicate (Ports.storeTracksInCache data) - - -syncTrackTags : Json.Value -> Manager -syncTrackTags data model = - let - result = - Json.decodeValue - (Json.list <| - Json.map3 - (\path sourceId trackId -> - { path = path - , sourceId = sourceId - , trackId = trackId - } - ) - (Json.field "path" Json.string) - (Json.field "sourceId" Json.string) - (Json.field "trackId" Json.string) - ) - data - - ( sources, _ ) = - result - |> Result.withDefault [] - |> List.foldl - (\{ sourceId } ( dict, acc ) -> - if List.member sourceId acc then - ( dict, acc ) - - else - case List.find (.id >> (==) sourceId) model.hypaethralUserData.sources of - Just source -> - ( Dict.insert sourceId source dict, sourceId :: acc ) - - Nothing -> - ( dict, sourceId :: acc ) - ) - ( Dict.empty, [] ) - in - case result of - Ok list -> - list - |> List.foldr - (\{ path, sourceId, trackId } ( accPaths, accUrls, accIds ) -> - sources - |> Dict.get sourceId - |> Maybe.map - (tagUrls model.currentTime path) - |> Maybe.map - (\urls -> - ( path :: accPaths, urls :: accUrls, trackId :: accIds ) - ) - |> Maybe.withDefault - ( accPaths, accUrls, accIds ) - ) - ( [], [], [] ) - |> (\( accPaths, accUrls, accIds ) -> - Ports.syncTags - { receivedFilePaths = accPaths - , receivedTags = [] - , trackIds = accIds - , urlsForTags = accUrls - } - ) - |> return model - - Err _ -> - Return.singleton model - - -updateSearchIndex : Json.Value -> Manager -updateSearchIndex data = - Return.communicate (Ports.updateSearchIndex data) - - - --- ⚗️ - - -downloadParamsDecoder : - Decoder - { prefixTrackNumber : Bool - , trackIds : List String - , zipName : String - } -downloadParamsDecoder = - Json.map3 - (\a b c -> - { prefixTrackNumber = a - , trackIds = b - , zipName = c - } - ) - (Json.field "prefixTrackNumber" <| Json.bool) - (Json.field "trackIds" <| Json.list Json.string) - (Json.field "zipName" <| Json.string) - - -makeTrackUrl : Time.Posix -> String -> Maybe Source -> HttpMethod -> String -makeTrackUrl timestamp trackPath maybeSource httpMethod = - case maybeSource of - Just source -> - Sources.Services.makeTrackUrl - source.service - timestamp - source.id - source.data - httpMethod - trackPath - - Nothing -> - "" - - -tagUrls : Time.Posix -> String -> Source -> TagUrls -tagUrls currentTime path source = - let - maker = - Sources.Services.makeTrackUrl source.service currentTime source.id source.data - in - { getUrl = maker Get path - , headUrl = maker Head path - } diff --git a/src/Core/Brain/Types.elm b/src/Core/Brain/Types.elm deleted file mode 100644 index 0fcde6b0d..000000000 --- a/src/Core/Brain/Types.elm +++ /dev/null @@ -1,76 +0,0 @@ -module Brain.Types exposing (..) - -import Brain.Sources.Processing.Types as Processing -import Brain.User.Types as User -import Debouncer.Basic exposing (Debouncer) -import Json.Decode as Json -import List.Zipper exposing (Zipper) -import Management -import Sources.Processing as Processing -import Time -import User.Layer as User exposing (HypaethralBaggage, HypaethralBit) - - - --- 🧠 - - -type alias Flags = - { initialUrl : String } - - - --- 🌳 - - -type alias Model = - { currentTime : Time.Posix - , hypaethralDebouncer : Debouncer HypaethralBit (List HypaethralBit) - , hypaethralRetrieval : Maybe (Zipper ( HypaethralBit, Json.Value, HypaethralBaggage )) - , hypaethralStorage : List { bit : HypaethralBit, saving : Bool } - , hypaethralUserData : User.HypaethralData - , origin : String - , processingStatus : Processing.Status - , userSyncMethod : Maybe User.Method - } - - - --- 📣 - - -type Msg - = Bypass - | Cmd (Cmd Msg) - ----------------------------------------- - -- Tracks - ----------------------------------------- - | DownloadTracks Json.Value - | GotSearchResults (List String) - | MakeArtworkTrackUrls Json.Value - | RemoveTracksBySourceId Json.Value - | RemoveTracksFromCache Json.Value - | ReplaceTrackTags Processing.ContextForTagsSync - | Search Json.Value - | StoreTracksInCache Json.Value - | SyncTrackTags Json.Value - | UpdateSearchIndex Json.Value - ----------------------------------------- - -- 🦉 Nested - ----------------------------------------- - | ProcessingMsg Processing.Msg - | UserMsg User.Msg - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - | RefreshedAccessToken Json.Value - | SetCurrentTime Time.Posix - | ToCache Json.Value - - -type alias Organizer model = - Management.Manager Msg model - - -type alias Manager = - Organizer Model diff --git a/src/Core/Brain/User/Hypaethral.elm b/src/Core/Brain/User/Hypaethral.elm deleted file mode 100644 index af1505b0d..000000000 --- a/src/Core/Brain/User/Hypaethral.elm +++ /dev/null @@ -1,128 +0,0 @@ -module Brain.User.Hypaethral exposing (..) - -import Alien -import Brain.Task.Ports -import Json.Decode -import Json.Encode -import Task exposing (Task) -import TaskPort -import TaskPort.Extra as TaskPort -import User.Layer exposing (..) - - - --- RETRIEVAL - - -retrieveDropbox : String -> HypaethralBit -> Task String (Maybe Json.Decode.Value) -retrieveDropbox accessToken bit = - [ ( "fileName", fileName bit ) - , ( "token", Json.Encode.string accessToken ) - ] - |> TaskPort.call - { function = "fromDropbox" - , valueDecoder = Json.Decode.maybe Json.Decode.value - , argsEncoder = Json.Encode.object - } - |> Task.mapError TaskPort.errorToStringCustom - - -retrieveIpfs : String -> HypaethralBit -> Task String (Maybe Json.Decode.Value) -retrieveIpfs apiOrigin bit = - [ ( "fileName", fileName bit ) - , ( "apiOrigin", Json.Encode.string apiOrigin ) - ] - |> TaskPort.call - { function = "fromIpfs" - , valueDecoder = Json.Decode.maybe Json.Decode.value - , argsEncoder = Json.Encode.object - } - |> Task.mapError TaskPort.errorToStringCustom - - -retrieveRemoteStorage : { token : String, userAddress : String } -> HypaethralBit -> Task String (Maybe Json.Decode.Value) -retrieveRemoteStorage { token, userAddress } bit = - [ ( "fileName", fileName bit ) - , ( "token", Json.Encode.string token ) - , ( "userAddress", Json.Encode.string userAddress ) - ] - |> TaskPort.call - { function = "fromRemoteStorage" - , valueDecoder = Json.Decode.maybe Json.Decode.value - , argsEncoder = Json.Encode.object - } - |> Task.mapError TaskPort.errorToStringCustom - - -retrieveLocal : HypaethralBit -> Task String (Maybe Json.Decode.Value) -retrieveLocal bit = - Json.Decode.value - |> Brain.Task.Ports.fromCacheWithSuffix - Alien.SyncLocal - (hypaethralBitFileName bit) - |> Task.mapError TaskPort.errorToStringCustom - - - --- STORAGE - - -saveDropbox : String -> HypaethralBit -> Json.Decode.Value -> Task String () -saveDropbox accessToken bit data = - [ ( "fileName", fileName bit ) - , ( "data", data ) - , ( "token", Json.Encode.string accessToken ) - ] - |> TaskPort.call - { function = "toDropbox" - , valueDecoder = TaskPort.ignoreValue - , argsEncoder = Json.Encode.object - } - |> Task.mapError TaskPort.errorToStringCustom - - -saveIpfs : String -> HypaethralBit -> Json.Decode.Value -> Task String () -saveIpfs apiOrigin bit data = - [ ( "apiOrigin", Json.Encode.string apiOrigin ) - , ( "fileName", fileName bit ) - , ( "data", data ) - ] - |> TaskPort.call - { function = "toIpfs" - , valueDecoder = TaskPort.ignoreValue - , argsEncoder = Json.Encode.object - } - |> Task.mapError TaskPort.errorToStringCustom - - -saveRemoteStorage : { token : String, userAddress : String } -> HypaethralBit -> Json.Decode.Value -> Task String () -saveRemoteStorage { token, userAddress } bit data = - [ ( "fileName", fileName bit ) - , ( "data", data ) - , ( "token", Json.Encode.string token ) - , ( "userAddress", Json.Encode.string userAddress ) - ] - |> TaskPort.call - { function = "toRemoteStorage" - , valueDecoder = TaskPort.ignoreValue - , argsEncoder = Json.Encode.object - } - |> Task.mapError TaskPort.errorToStringCustom - - -saveLocal : HypaethralBit -> Json.Decode.Value -> Task String () -saveLocal bit data = - data - |> Brain.Task.Ports.toCacheWithSuffix - Alien.SyncLocal - (hypaethralBitFileName bit) - |> Task.mapError TaskPort.errorToStringCustom - - - --- 🛠 - - -fileName : HypaethralBit -> Json.Decode.Value -fileName = - Json.Encode.string << hypaethralBitFileName diff --git a/src/Core/Brain/User/State.elm b/src/Core/Brain/User/State.elm deleted file mode 100644 index 5cc12c14c..000000000 --- a/src/Core/Brain/User/State.elm +++ /dev/null @@ -1,749 +0,0 @@ -module Brain.User.State exposing (..) - -import Alien -import Brain.Common.State as Common -import Brain.Ports as Ports -import Brain.Task.Ports -import Brain.Types as Brain exposing (..) -import Brain.User.Hypaethral as Hypaethral -import Brain.User.Types as User exposing (..) -import Debouncer.Basic as Debouncer -import EverySet -import Json.Decode as Decode -import Json.Encode as Json -import Playlists.Encoding as Playlists -import Return exposing (andThen, return) -import Return.Ext as Return -import Settings -import Sources.Encoding as Sources -import Syncing -import Syncing.Services.Dropbox.Token -import Task exposing (Task) -import TaskPort.Extra as TaskPort -import Time -import Tracks exposing (Track) -import Tracks.Encoding as Tracks -import Url exposing (Url) -import Url.Ext as Url -import User.Layer as User exposing (..) -import User.Layer.Methods.Dropbox as Dropbox - - - --- 🌳 - - -initialCommand : Url -> Cmd Brain.Msg -initialCommand uiUrl = - case Url.action uiUrl of - _ -> - Cmd.batch - [ loadEnclosedData - , loadLocalHypaethralData - { initialUrl = uiUrl - , methodTask = loadSyncMethod - } - ] - - -{-| Loads the "enclosed" data from cache and sends it to the UI. --} -loadEnclosedData : Cmd Brain.Msg -loadEnclosedData = - Decode.value - |> Brain.Task.Ports.fromCache Alien.EnclosedData - |> Task.map (Maybe.withDefault Json.null) - |> Common.attemptPortTask (Common.giveUICmdMsg Alien.LoadEnclosedUserData) - - -{-| Loads the "sync method". --} -loadSyncMethod : Task String (Maybe Method) -loadSyncMethod = - Decode.value - |> Brain.Task.Ports.fromCache Alien.SyncMethod - |> Task.mapError TaskPort.errorToStringCustom - |> Task.map (Maybe.andThen decodeMethod) - - -{-| Loads the "sync method" and "hypaethral" data, -see `Commence` Msg what happens next. --} -loadLocalHypaethralData : { initialUrl : Url, methodTask : Task String (Maybe Method) } -> Cmd Brain.Msg -loadLocalHypaethralData { initialUrl, methodTask } = - methodTask - |> Task.andThen - (\maybeMethod -> - Hypaethral.retrieveLocal - |> User.retrieveHypaethralData - |> Task.map - (\bits -> - bits - |> List.map (\( a, b ) -> ( hypaethralBitKey a, Maybe.withDefault Json.null b )) - |> Json.object - ) - |> Task.map (Tuple.pair maybeMethod) - ) - |> Common.attemptTask - (\( maybeMethod, hypaethralJson ) -> - hypaethralJson - |> User.decodeHypaethralData - |> Result.map - (\hypaethralData -> - Commence - maybeMethod - initialUrl - ( hypaethralJson - , hypaethralData - ) - ) - |> Result.mapError Decode.errorToString - |> Common.reportErrorToUI UserMsg - ) - - - --- 📣 - - -update : User.Msg -> Manager -update msg = - case msg of - Commence a b c -> - commence a b c - - SetSyncMethod a -> - setSyncMethod a - - Sync -> - sync { initialTask = Nothing } - - UnsetSyncMethod -> - unsetSyncMethod - - ----------------------------------------- - -- x. Data - ----------------------------------------- - RetrieveEnclosedData -> - retrieveEnclosedData - - EnclosedDataRetrieved a -> - enclosedDataRetrieved a - - SaveEnclosedData a -> - saveEnclosedData a - - ----------------------------------------- - -- y. Data - ----------------------------------------- - -- The hypaethral user data is received in pieces, - -- pieces which are "cached" here in the web worker. - -- - -- The reasons for this are: - -- 1. Lesser performance penalty on the UI when saving data - -- (ie. this avoids having to encode/decode everything each time) - -- 2. The data can be used in the web worker (brain) as well. - -- (eg. for track-search index) - -- - SaveFavourites a -> - saveFavourites a - - SavePlaylists a -> - savePlaylists a - - SaveProgress a -> - saveProgress a - - SaveSettings a -> - saveSettings a - - SaveSources a -> - saveSources a - - SaveTracks a -> - saveTracks a - - ----------------------------------------- - -- z. Data - ----------------------------------------- - FinishedSyncing -> - finishedSyncing - - GotHypaethralData a -> - gotHypaethralData a - - SaveHypaethralDataBits a -> - saveHypaethralDataBits a - - SaveHypaethralDataSlowly a -> - saveHypaethralDataSlowly a - - ----------------------------------------- - -- z. Secret Key - ----------------------------------------- - RemoveEncryptionKey -> - removeEncryptionKey - - UpdateEncryptionKey a -> - updateEncryptionKey a - - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - RefreshedDropboxTokens a b c -> - refreshedDropboxTokens a b c - - - --- 🔱 - - -commence : Maybe Method -> Url -> ( Json.Value, HypaethralData ) -> Manager -commence maybeMethod initialUrl ( hypaethralJson, hypaethralData ) model = - -- 🚀 - -- Initiated from `initialCommand`. - -- Loaded the used-sync method and the local hypaethral data. - { model | userSyncMethod = maybeMethod } - |> sendHypaethralDataToUI hypaethralJson hypaethralData - |> andThen - (case Url.action initialUrl of - _ -> - sync { initialTask = Nothing } - ) - - -setSyncMethod : Json.Value -> Manager -setSyncMethod json model = - -- 🐤 - -- Set & store method, - -- and retrieve data. - let - decoder = - Decode.map2 - (\a b -> ( a, b )) - (Decode.field "method" <| Decode.map methodFromString Decode.string) - (Decode.field "passphrase" <| Decode.maybe Decode.string) - in - case Decode.decodeValue decoder json of - Ok ( Just method, Just passphrase ) -> - let - initialTask = - passphrase - |> Brain.Task.Ports.fabricateSecretKey - |> Task.mapError TaskPort.errorToStringCustom - in - { model | userSyncMethod = Just method } - |> sync { initialTask = Just initialTask } - |> andThen (saveMethod method) - - Ok ( Just method, Nothing ) -> - { model | userSyncMethod = Just method } - |> sync { initialTask = Nothing } - |> andThen (saveMethod method) - - Ok ( Nothing, _ ) -> - Return.singleton { model | userSyncMethod = Nothing } - - Err _ -> - Return.singleton model - - -sync : { initialTask : Maybe (Task.Task String ()) } -> Manager -sync { initialTask } model = - model - |> syncCommand (Maybe.withDefault (Task.succeed ()) initialTask) - |> return model - |> andThen - (case model.userSyncMethod of - Just method -> - Common.giveUI Alien.StartedSyncing (encodeMethod method) - - Nothing -> - Return.singleton - ) - - -syncCommand : Task.Task String a -> Model -> Cmd Brain.Msg -syncCommand initialTask model = - let - localData = - model.hypaethralUserData - - attemptSync args = - args - |> Syncing.task - initialTask - { localData = localData - , saveLocal = Hypaethral.saveLocal - } - |> Common.attemptTask - (\maybe -> - case maybe of - Just data -> - UserMsg (GotHypaethralData data) - - Nothing -> - UserMsg FinishedSyncing - ) - in - case model.userSyncMethod of - Just (Dropbox { accessToken, expiresAt, refreshToken }) -> - if - Syncing.Services.Dropbox.Token.isExpired - { currentTime = model.currentTime - , expiresAt = expiresAt - } - then - refreshDropboxTokens - model.currentTime - Sync - initialTask - refreshToken - - else - attemptSync - { retrieve = Hypaethral.retrieveDropbox accessToken - , save = Hypaethral.saveDropbox accessToken - } - - Just (Ipfs { apiOrigin }) -> - attemptSync - { retrieve = Hypaethral.retrieveIpfs apiOrigin - , save = Hypaethral.saveIpfs apiOrigin - } - - Just (RemoteStorage args) -> - attemptSync - { retrieve = Hypaethral.retrieveRemoteStorage args - , save = Hypaethral.saveRemoteStorage args - } - - Nothing -> - Cmd.none - - -unsetSyncMethod : Manager -unsetSyncMethod model = - -- 💀 - -- Unset & remove stored method. - [ Common.attemptPortTask (always Brain.Bypass) (Brain.Task.Ports.removeCache Alien.SyncMethod) - , Common.attemptPortTask (always Brain.Bypass) (Brain.Task.Ports.removeCache Alien.SecretKey) - - -- - , case model.userSyncMethod of - Just (Dropbox _) -> - Cmd.none - - Just (Ipfs _) -> - Cmd.none - - Just (RemoteStorage _) -> - Ports.deconstructRemoteStorage () - - Nothing -> - Cmd.none - ] - |> Cmd.batch - |> return { model | userSyncMethod = Nothing } - - - --- 🔱 ░░ DATA - ENCLOSED - - -enclosedDataRetrieved : Json.Value -> Manager -enclosedDataRetrieved json = - Common.giveUI Alien.LoadEnclosedUserData json - - -retrieveEnclosedData : Manager -retrieveEnclosedData = - Decode.value - |> Brain.Task.Ports.fromCache Alien.EnclosedData - |> Common.attemptPortTask - (\maybe -> - case maybe of - Just json -> - Brain.UserMsg (EnclosedDataRetrieved json) - - Nothing -> - Brain.Bypass - ) - |> Return.communicate - - -saveEnclosedData : Json.Value -> Manager -saveEnclosedData json = - json - |> Brain.Task.Ports.toCache Alien.EnclosedData - |> Common.attemptPortTask (always Brain.Bypass) - |> Return.communicate - - - --- 🔱 ░░ DATA - HYPAETHRAL - - -finishedSyncing : Manager -finishedSyncing model = - case model.userSyncMethod of - Just userSyncMethod -> - Common.giveUI Alien.SyncMethod (encodeMethod userSyncMethod) model - - Nothing -> - Return.singleton model - - -gotHypaethralData : HypaethralData -> Manager -gotHypaethralData hypaethralData model = - model - |> sendHypaethralDataToUI (User.encodeHypaethralData hypaethralData) hypaethralData - |> andThen finishedSyncing - - -saveAllHypaethralDataTask : HypaethralData -> Method -> Task String () -saveAllHypaethralDataTask userData method = - let - save = - saveHypaethralDataBitsTask (ModifiedAt :: User.allHypaethralBits) userData - in - case method of - Dropbox { accessToken } -> - save (Hypaethral.saveDropbox accessToken) - - Ipfs { apiOrigin } -> - save (Hypaethral.saveIpfs apiOrigin) - - RemoteStorage a -> - save (Hypaethral.saveRemoteStorage a) - - -saveHypaethralDataBitsTask : List HypaethralBit -> HypaethralData -> (HypaethralBit -> Json.Value -> Task String ()) -> Task String () -saveHypaethralDataBitsTask bits userData saveFn = - [ -------- - -- LOCAL - -------- - List.map - (\bit -> - Hypaethral.saveLocal bit (encodeHypaethralBit bit userData) - ) - bits - , --------- - -- REMOTE - --------- - List.map - (\bit -> - saveFn bit (encodeHypaethralBit bit userData) - ) - bits - ] - |> List.concat - |> List.foldl - (\nextTask -> Task.andThen (\_ -> nextTask)) - (Task.succeed ()) - - -{-| Save different parts of hypaethral data, -one part at a time. --} -saveHypaethralDataBits : List HypaethralBit -> Manager -saveHypaethralDataBits bitsWithoutModifiedAt model = - let - bits = - ModifiedAt :: bitsWithoutModifiedAt - - userData = - model.hypaethralUserData - - updatedUserData = - { userData | modifiedAt = Just model.currentTime } - - updatedModel = - { model | hypaethralUserData = updatedUserData } - - save saveFn = - Time.now - |> Task.andThen - (\currentTime -> - saveHypaethralDataBitsTask - bits - { updatedUserData | modifiedAt = Just currentTime } - saveFn - ) - |> Common.attemptTask (always Brain.Bypass) - |> return updatedModel - in - case model.userSyncMethod of - Just (Dropbox { accessToken, expiresAt, refreshToken }) -> - if - Syncing.Services.Dropbox.Token.isExpired - { currentTime = model.currentTime - , expiresAt = expiresAt - } - then - refreshToken - |> refreshDropboxTokens - model.currentTime - (SaveHypaethralDataBits bits) - (Task.succeed ()) - |> return model - - else - save (Hypaethral.saveDropbox accessToken) - - Just (Ipfs { apiOrigin }) -> - save (Hypaethral.saveIpfs apiOrigin) - - Just (RemoteStorage args) -> - save (Hypaethral.saveRemoteStorage args) - - Nothing -> - -- Only save locally - save (\_ _ -> Task.succeed ()) - - -saveHypaethralDataBitWithDebounce : HypaethralBit -> Manager -saveHypaethralDataBitWithDebounce bit = - bit - |> Debouncer.provideInput - |> saveHypaethralDataSlowly - - -saveHypaethralDataSlowly : Debouncer.Msg HypaethralBit -> Manager -saveHypaethralDataSlowly debouncerMsg model = - let - ( m, c, e ) = - Debouncer.update debouncerMsg model.hypaethralDebouncer - - bits = - e - |> Maybe.withDefault [] - |> EverySet.fromList - |> EverySet.toList - in - c - |> Cmd.map (SaveHypaethralDataSlowly >> UserMsg) - |> return { model | hypaethralDebouncer = m } - |> (if not (List.isEmpty bits) then - andThen (saveHypaethralDataBits bits) - - else - identity - ) - - -sendHypaethralDataToUI : Json.Value -> HypaethralData -> Manager -sendHypaethralDataToUI encodedData decodedData model = - [ encodedData - |> Alien.broadcast Alien.LoadHypaethralUserData - |> Ports.toUI - - -- - , decodedData.tracks - |> Json.list Tracks.encodeTrack - |> Ports.updateSearchIndex - ] - |> Cmd.batch - |> return { model | hypaethralUserData = decodedData } - - - --- 🔱 ░░ DATA - HYPAETHRAL BITS - - -saveFavourites : Json.Value -> Manager -saveFavourites value model = - value - |> Decode.decodeValue (Decode.list Tracks.favouriteDecoder) - |> Result.withDefault model.hypaethralUserData.favourites - |> hypaethralLenses.setFavourites model - |> saveHypaethralDataBitWithDebounce Favourites - - -savePlaylists : Json.Value -> Manager -savePlaylists value model = - value - |> Decode.decodeValue (Decode.list Playlists.decoder) - |> Result.withDefault model.hypaethralUserData.playlists - |> hypaethralLenses.setPlaylists model - |> saveHypaethralDataBitWithDebounce Playlists - - -saveProgress : Json.Value -> Manager -saveProgress value model = - value - |> Decode.decodeValue (Decode.dict Decode.float) - |> Result.withDefault model.hypaethralUserData.progress - |> hypaethralLenses.setProgress model - |> saveHypaethralDataBitWithDebounce Progress - - -saveSettings : Json.Value -> Manager -saveSettings value model = - value - |> Decode.decodeValue (Decode.map Just Settings.decoder) - |> Result.withDefault model.hypaethralUserData.settings - |> hypaethralLenses.setSettings model - |> saveHypaethralDataBitWithDebounce Settings - - -saveSources : Json.Value -> Manager -saveSources value model = - value - |> Decode.decodeValue (Decode.list Sources.decoder) - |> Result.withDefault model.hypaethralUserData.sources - |> hypaethralLenses.setSources model - |> saveHypaethralDataBitWithDebounce Sources - - -saveTracks : Json.Value -> Manager -saveTracks value model = - saveTracksAndUpdateSearchIndex - (value - |> Decode.decodeValue (Decode.list Tracks.trackDecoder) - |> Result.withDefault model.hypaethralUserData.tracks - ) - model - - -saveTracksAndUpdateSearchIndex : List Track -> Manager -saveTracksAndUpdateSearchIndex tracks model = - tracks - -- Store in model - |> hypaethralLenses.setTracks model - -- Update search index - |> Return.communicate - (tracks - |> Json.list Tracks.encodeTrack - |> Ports.updateSearchIndex - ) - -- Save with delay - |> andThen (saveHypaethralDataBitWithDebounce Tracks) - - - --- 🔱 ░░ DATA - HYPAETHRAL LENSES - - -hypaethralLenses = - { setFavourites = makeHypaethralLens (\h f -> { h | favourites = f }) - , setPlaylists = makeHypaethralLens (\h p -> { h | playlists = p }) - , setProgress = makeHypaethralLens (\h p -> { h | progress = p }) - , setSettings = makeHypaethralLens (\h s -> { h | settings = s }) - , setSources = makeHypaethralLens (\h s -> { h | sources = s }) - , setTracks = makeHypaethralLens (\h t -> { h | tracks = t }) - } - - -makeHypaethralLens : (HypaethralData -> a -> HypaethralData) -> Model -> a -> Model -makeHypaethralLens setter model value = - { model | hypaethralUserData = setter model.hypaethralUserData value } - - - --- 🔱 ░░ METHOD - - -saveMethod : Method -> Manager -saveMethod method model = - method - |> encodeMethod - |> Brain.Task.Ports.toCache Alien.SyncMethod - |> Common.attemptPortTask (always Brain.Bypass) - |> return { model | userSyncMethod = Just method } - - - --- 🔱 ░░ SECRET KEY - - -removeEncryptionKey : Manager -removeEncryptionKey model = - Alien.SecretKey - |> Brain.Task.Ports.removeCache - |> Task.mapError TaskPort.errorToStringCustom - |> Task.andThen (\_ -> Time.now) - |> Task.andThen - (\currentTime -> - case model.userSyncMethod of - Just method -> - let - data = - model.hypaethralUserData - in - saveAllHypaethralDataTask { data | modifiedAt = Just currentTime } method - - Nothing -> - Task.succeed () - ) - |> Common.attemptTask (always Brain.Bypass) - |> return model - - -updateEncryptionKey : Json.Value -> Manager -updateEncryptionKey json model = - case Decode.decodeValue Decode.string json of - Ok passphrase -> - passphrase - |> Brain.Task.Ports.fabricateSecretKey - |> Task.mapError TaskPort.errorToStringCustom - |> Task.andThen (\_ -> Time.now) - |> Task.andThen - (\currentTime -> - case model.userSyncMethod of - Just method -> - let - data = - model.hypaethralUserData - in - saveAllHypaethralDataTask { data | modifiedAt = Just currentTime } method - - Nothing -> - Task.succeed () - ) - |> Common.attemptTask (always Brain.Bypass) - |> return model - - Err _ -> - Return.singleton model - - - --- 📭 ░░ OTHER - - -refreshDropboxTokens : Time.Posix -> User.Msg -> Task.Task String a -> String -> Cmd Brain.Msg -refreshDropboxTokens currentTime msg initialTask refreshToken = - initialTask - |> Task.andThen - (\_ -> Dropbox.refreshAccessToken refreshToken) - |> Task.attempt - (\result -> - case result of - Ok tokens -> - msg - |> RefreshedDropboxTokens - { currentTime = Time.posixToMillis currentTime // 1000 - , refreshToken = refreshToken - } - tokens - |> UserMsg - - Err err -> - Common.reportUICmdMsg Alien.ReportError err - ) - - -refreshedDropboxTokens : - { currentTime : Int, refreshToken : String } - -> Dropbox.Tokens - -> User.Msg - -> Manager -refreshedDropboxTokens { currentTime, refreshToken } tokens msg model = - { accessToken = tokens.accessToken - , expiresAt = currentTime + tokens.expiresIn - , refreshToken = refreshToken - } - |> Dropbox - |> (\m -> saveMethod m model) - |> andThen (update msg) diff --git a/src/Core/Brain/User/Types.elm b/src/Core/Brain/User/Types.elm deleted file mode 100644 index a03a76db9..000000000 --- a/src/Core/Brain/User/Types.elm +++ /dev/null @@ -1,52 +0,0 @@ -module Brain.User.Types exposing (..) - -import Debouncer.Basic as Debouncer -import Json.Decode as Json -import Url exposing (Url) -import User.Layer as User exposing (HypaethralBit, HypaethralData) -import User.Layer.Methods.Dropbox as Dropbox - - - --- 📣 - - -type Msg - = Commence (Maybe User.Method) Url ( Json.Value, HypaethralData ) - ----------------------------------------- - -- Method - ----------------------------------------- - | SetSyncMethod Json.Value - | Sync - | UnsetSyncMethod - ----------------------------------------- - -- Enclosed Data - ----------------------------------------- - | RetrieveEnclosedData - | EnclosedDataRetrieved Json.Value - | SaveEnclosedData Json.Value - ----------------------------------------- - -- Hypaethral Data, pt. 1 - ----------------------------------------- - | SaveFavourites Json.Value - | SavePlaylists Json.Value - | SaveProgress Json.Value - | SaveSettings Json.Value - | SaveSources Json.Value - | SaveTracks Json.Value - ----------------------------------------- - -- Hypaethral Data, pt. 2 - ----------------------------------------- - | FinishedSyncing - | GotHypaethralData HypaethralData - | SaveHypaethralDataBits (List HypaethralBit) - | SaveHypaethralDataSlowly (Debouncer.Msg HypaethralBit) - ----------------------------------------- - -- Encryption - ----------------------------------------- - | RemoveEncryptionKey - | UpdateEncryptionKey Json.Value - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - | RefreshedDropboxTokens { currentTime : Int, refreshToken : String } Dropbox.Tokens Msg diff --git a/src/Core/Themes/Sunrise/Alfred/View.elm b/src/Core/Themes/Sunrise/Alfred/View.elm deleted file mode 100644 index 0c2bc804e..000000000 --- a/src/Core/Themes/Sunrise/Alfred/View.elm +++ /dev/null @@ -1,281 +0,0 @@ -module Themes.Sunrise.Alfred.View exposing (view) - -import Alfred exposing (..) -import Chunky exposing (..) -import Color exposing (Color) -import Conditional exposing (ifThenElse) -import Html exposing (Html, text) -import Html.Attributes exposing (attribute, autofocus, id, placeholder, style, type_) -import Html.Events exposing (onInput) -import Html.Ext exposing (onTapStopPropagation) -import Json.Decode -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import UI.Types as UI - - - --- 🗺 - - -view : Maybe (Alfred UI.Msg) -> Maybe Color -> Html UI.Msg -view maybeInstance extractedBackdropColor = - let - bgColor = - Maybe.unwrap "inherit" Color.toCssString extractedBackdropColor - in - case maybeInstance of - Just instance -> - let - hasResults = - List.sum (List.map (.items >> List.length) instance.results) > 0 - in - chunk - [ "inset-0" - , "flex" - , "flex-col" - , "fixed" - , "items-center" - , "px-3" - , "cursor-pointer" - , "z-50" - ] - [ ----------------------------------------- - -- Message - ----------------------------------------- - chunk - [ "italic" - , "leading-normal" - , "mt-12" - , "opacity-75" - , "text-center" - , "text-white" - - -- Dark mode - ------------ - , "dark:text-base07" - ] - [ text instance.message ] - - ----------------------------------------- - -- Search - ----------------------------------------- - , brick - [ Html.Events.custom - "tap" - (Json.Decode.succeed - { message = UI.Bypass - , stopPropagation = True - , preventDefault = True - } - ) - ] - [ "text-sm" - , "max-w-xl" - , "mt-8" - , "w-full" - ] - [ slab - Html.input - [ autofocus True - , id "diffuse__alfred" - , onInput UI.GotAlfredInput - , type_ "text" - - -- - , attribute "spellcheck" "false" - - -- - , case instance.operation of - Query -> - placeholder "Type to search" - - QueryOrMutation -> - placeholder "Type to search or create" - - Mutation -> - placeholder "Type to create" - ] - [ "border" - , "bg-white" - , "block" - , "leading-normal" - , "opacity-95" - , "outline-none" - , "p-4" - , "rounded-t" - , "shadow-md" - , "text-xl" - , "tracking-tad-closer" - , "w-full" - - -- - , if not hasResults then - "rounded-b" - - else - "" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:border-base00" - ] - [] - ] - - ----------------------------------------- - -- Results - ----------------------------------------- - , brick - [ id "alfred__results" ] - [ "bg-white" - , "border-t-0" - , "leading-tight" - , "max-w-xl" - , "mb-32" - , "opacity-95" - , "overflow-x-hidden" - , "overflow-y-auto" - , "rounded-b" - , "shadow-md" - , "smooth-scrolling" - , "text-nearly-sm" - , "w-full" - - -- - , ifThenElse hasResults "border" "" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:border-base00" - ] - (instance.results - |> List.foldl - (\group ( acc, indexBase ) -> - case List.length group.items of - 0 -> - ( acc, indexBase ) - - x -> - ( groupView bgColor instance group indexBase :: acc - , indexBase + x - ) - ) - ( [], 0 ) - |> Tuple.first - |> List.reverse - ) - ] - - Nothing -> - nothing - - -groupView bgColor instance group indexBase = - raw - [ case group.name of - Just name -> - chunk - [ "all-small-caps" - , "antialiased" - , "font-semibold" - , "leading-tight" - , "mb-2" - , "mx-2" - , "mt-5" - , "opacity-60" - , "px-3" - , "text-sm" - , "tracking-wider" - ] - [ Html.text name ] - - Nothing -> - Html.text "" - , raw - (List.indexedMap - (\i -> itemView bgColor instance <| indexBase + i) - group.items - ) - ] - - -itemView bgColor instance idx item = - brick - [ onTapStopPropagation (UI.SelectAlfredItem idx) - - -- - , if idx == instance.focus then - id "alfred__results__focus" - - else - id ("alfred__results__" ++ String.fromInt idx) - - -- - , if idx == instance.focus then - style "background-color" bgColor - - else - style "" "" - ] - (List.concat - [ [ "flex" - , "items-center" - , "m-2" - , "p-3" - , "relative" - , "rounded" - ] - - -- - , if idx == instance.focus then - [ "text-white" - , "dark:opacity-80" - , "dark:text-base07" - ] - - else - [ "text-inherit" ] - - -- - -- , if modBy 2 idx == 0 then - -- [] - -- else - -- [ "bg-gray-100", "dark:bg-base01-15" ] - ] - ) - [ case item.icon of - Just icon -> - slab - Html.span - [] - [ "inline-block" - , "mr-2" - , "w-5" - ] - [ icon Inherit - ] - - Nothing -> - text "" - - -- - , slab - Html.span - [] - [ "flex-1", "inline-block", "pt-px" ] - [ text item.title ] - - -- - , if idx == instance.focus then - chunk - [ "leading-0", "ml-2" ] - [ Icons.keyboard_return 13 Inherit - ] - - else - nothing - ] diff --git a/src/Core/Themes/Sunrise/Console.elm b/src/Core/Themes/Sunrise/Console.elm deleted file mode 100644 index 5629bccab..000000000 --- a/src/Core/Themes/Sunrise/Console.elm +++ /dev/null @@ -1,312 +0,0 @@ -module Themes.Sunrise.Console exposing (view) - -import Chunky exposing (..) -import Conditional exposing (..) -import Html exposing (Html, text) -import Html.Attributes exposing (style, title) -import Html.Events exposing (on, onClick) -import Json.Decode as Decode -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import UI.Audio.Types exposing (AudioLoadingState(..), NowPlaying, nowPlayingIdentifiedTrack) -import UI.Queue.Types as Queue -import UI.Tracks.Types as Tracks -import UI.Types exposing (Msg(..)) - - - --- 🗺 - - -view : - Maybe NowPlaying - -> Bool - -> Bool - -> Html Msg -view nowPlaying repeat shuffle = - chunk - [ "antialiased" - , "mt-1" - , "text-center" - , "w-full" - - -- - , "lg:max-w-insulation" - ] - [ ----------------------------------------- - -- Now Playing - ----------------------------------------- - chunk - [ "text-sm" - , "italic" - , "leading-normal" - , "py-4" - , "text-white" - ] - [ case Maybe.map .loadingState nowPlaying of - Nothing -> - text "Diffuse" - - Just Loading -> - text "Loading track ..." - - Just Loaded -> - case Maybe.map nowPlayingIdentifiedTrack nowPlaying of - Just ( _, { tags } ) -> - slab - Html.span - [ onClick (TracksMsg Tracks.ScrollToNowPlaying) - , title "Scroll to track" - ] - [ "cursor-pointer" ] - [ case tags.artist of - Just artist -> - text (artist ++ " - " ++ tags.title) - - Nothing -> - text tags.title - ] - - Nothing -> - text "Diffuse" - - ----------------------------------------- - -- Errors - ----------------------------------------- - Just DecodeError -> - text "(!) An error occurred while decoding the audio" - - Just NetworkError -> - text "Waiting until your internet connection comes back online ..." - - Just NotSupportedError -> - text "(!) Your browser does not support playing this type of audio" - - -- Just NotSupportedOrMissing -> - -- text "The audio is missing or is in a format not supported by your browser." - ] - - ----------------------------------------- - -- Progress Bar - ----------------------------------------- - , let - maybeDuration = - Maybe.andThen .duration nowPlaying - - maybePosition = - Maybe.map .playbackPosition nowPlaying - - progress = - case ( maybeDuration, maybePosition ) of - ( Just duration, Just position ) -> - if duration <= 0 then - 0 - - else - (position / duration) - |> (*) 100 - |> min 100 - |> max 0 - - _ -> - 0 - in - brick - (case nowPlaying of - Just { item } -> - item.identifiedTrack - |> Tuple.second - |> .id - |> (\id -> - \float -> Seek { progress = float, trackId = id } - ) - |> clickLocationDecoder - |> on "click" - |> List.singleton - - Nothing -> - [] - ) - [ "cursor-pointer" - , "py-1" - ] - [ brick - [ style "background-color" "rgba(255, 255, 255, 0.25)" - , style "height" "3px" - ] - [ "rounded-sm" - , "select-none" - ] - [ brick - [ style "background-color" "rgba(255, 255, 255, 0.325)" - , style "height" "3px" - , style "width" (String.fromFloat progress ++ "%") - ] - [ "progressBarValue" - , "rounded-sm" - ] - [] - ] - ] - - ----------------------------------------- - -- Buttons - ----------------------------------------- - , chunk - [ "flex" - , "justify-between" - , "mb-3" - , "mt-4" - , "select-none" - , "text-white-90" - - -- - , "sm:justify-center" - ] - [ button "Toggle repeat" - (smallLight repeat) - (icon Icons.repeat 18) - (QueueMsg Queue.ToggleRepeat) - - -- - , button - "Play previous track" - lightPlaceHolder - (icon Icons.fast_rewind 20) - (QueueMsg Queue.Rewind) - - -- - , let - isPlaying = - Maybe.unwrap False .isPlaying nowPlaying - in - button - "" - (largeLight isPlaying) - play - TogglePlay - - -- - , button - "Play next track" - lightPlaceHolder - (icon Icons.fast_forward 20) - (QueueMsg Queue.Shift) - - -- - , button - "Toggle shuffle" - (smallLight shuffle) - (icon Icons.shuffle 18) - (QueueMsg Queue.ToggleShuffle) - ] - ] - - -button : String -> Html msg -> Html msg -> msg -> Html msg -button t light content msg = - brick - [ onClick msg - , title t - ] - [ "cursor-pointer" - , "flex" - , "flex-col" - , "items-center" - , "px-1" - - -- - , "sm:mx-8" - ] - [ brick - [ style "height" "4px" ] - [] - [ light ] - , brick - [ style "height" "25px" ] - [ "flex" - , "items-center" - , "my-2" - ] - [ content ] - ] - - -smallLight : Bool -> Html msg -smallLight isOn = - brick - [ style "height" "4px" - , style "width" "4px" - - -- - , style "background-color" <| - ifThenElse - isOn - "rgb(157, 174, 255)" - "rgba(255, 255, 255, 0.25)" - ] - [ "rounded-full" ] - [] - - -largeLight : Bool -> Html msg -largeLight isOn = - brick - [ style "height" "4px" - , style "left" "-2px" - , style "width" "17px" - - -- - , style "background-color" <| - ifThenElse - isOn - "rgb(198, 254, 153)" - "rgba(255, 255, 255, 0.25)" - ] - [ "relative", "rounded-full" ] - [] - - -lightPlaceHolder : Html msg -lightPlaceHolder = - Html.div - [ style "height" "4px" ] - [] - - -play : Html msg -play = - brick - [ style "font-size" "11.25px" - , style "letter-spacing" "3.75px" - ] - [ "font-bold" - , "font-display" - , "relative" - , "whitespace-nowrap" - ] - [ text "PLAY" ] - - - --- ⚗️ - - -icon : (Int -> Coloring -> Html msg) -> Int -> Html msg -icon iconFunction int = - iconFunction int Inherit - - - --- EVENTS - - -clickLocationDecoder : (Float -> msg) -> Decode.Decoder msg -clickLocationDecoder message = - Decode.map message - (Decode.map2 - (\a b -> a / b) - (Decode.at [ "offsetX" ] Decode.float) - (Decode.at [ "currentTarget", "clientWidth" ] Decode.float) - ) diff --git a/src/Core/Themes/Sunrise/ContextMenu.elm b/src/Core/Themes/Sunrise/ContextMenu.elm deleted file mode 100644 index 777675e80..000000000 --- a/src/Core/Themes/Sunrise/ContextMenu.elm +++ /dev/null @@ -1,131 +0,0 @@ -module Themes.Sunrise.ContextMenu exposing (view) - -import Chunky exposing (..) -import Conditional exposing (..) -import ContextMenu exposing (..) -import Html exposing (Html, text) -import Html.Attributes exposing (style) -import Html.Events exposing (custom) -import Json.Decode -import Material.Icons.Types exposing (Coloring(..)) -import UI.Types as UI exposing (Msg) - - - --- 🗺 - - -view : Float -> Maybe (ContextMenu Msg) -> Html Msg -view viewportWidth m = - case m of - Just (ContextMenu items coordinates) -> - let - ( height, width ) = - ( 250, 170 ) - - left = - coordinates.x - |> max (width / 2 + 12) - |> min (viewportWidth - width / 2 - 12) - - top = - coordinates.y - |> max (height / 2 + 12) - in - brick - [ style "left" (String.fromFloat left ++ "px") - , style "top" (String.fromFloat top ++ "px") - - -- - , style "min-width" "170px" - ] - [ "absolute" - , "bg-white" - , "leading-loose" - , "opacity-95" - , "overflow-hidden" - , "-translate-x-1/2" - , "-translate-y-1/2" - , "rounded" - , "shadow-md" - , "select-none" - , "text-almost-sm" - , "transform" - , "z-50" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:border" - , "dark:border-base00" - ] - (List.map - (\item -> - case item of - Item i -> - itemView i - - Divider -> - -- NOTE: Not needed at the moment - nothing - ) - items - ) - - Nothing -> - nothing - - -itemView : ContextMenu.ItemProperties Msg -> Html Msg -itemView { icon, label, msg, active } = - brick - [ custom - "tap" - (Json.Decode.succeed - { message = UI.MsgViaContextMenu msg - , stopPropagation = True - , preventDefault = True - } - ) - ] - [ "border-b" - , "cursor-pointer" - , "pl-4" - , "pr-8" - , "py-3" - , "truncate" - - -- - , "last:border-transparent" - - -- - , ifThenElse active "antialiased" "subpixel-antialiased" - , ifThenElse active "border-transparent" "border-gray-200" - , ifThenElse active "bg-base00" "bg-transparent" - , ifThenElse active "text-white" "text-inherit" - , ifThenElse active "font-semibold" "font-normal" - - -- Dark mode - ------------ - , "dark:border-base00" - - -- - , ifThenElse active "dark:bg-base07" "dark:bg-transparent" - , ifThenElse active "dark:text-darkest-hour" "dark:text-inherit" - ] - [ inline - [ "align-middle" - , "inline-block" - , "leading-0" - ] - [ icon 14 Inherit ] - , inline - [ "align-middle" - , "inline-block" - , "leading-0" - , "ml-2" - , "pl-1" - , "relative" - ] - [ text label ] - ] diff --git a/src/Core/Themes/Sunrise/Kit.elm b/src/Core/Themes/Sunrise/Kit.elm deleted file mode 100644 index bf7e19961..000000000 --- a/src/Core/Themes/Sunrise/Kit.elm +++ /dev/null @@ -1,704 +0,0 @@ -module Themes.Sunrise.Kit exposing (..) - -import Chunky exposing (..) -import Color -import Conditional exposing (ifThenElse) -import Html exposing (Html) -import Html.Attributes as A exposing (href, style) -import Html.Events exposing (onClick, onInput) -import Icons exposing (Icon) -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Svg - - - --- COLORS - - -colorKit = - { base00 = rgb 45 45 45 - , base01 = rgb 63 63 63 - , base02 = rgb 79 79 79 - , base03 = rgb 119 119 119 - , base04 = rgb 140 140 140 - , base05 = rgb 163 163 163 - , base06 = rgb 186 186 186 - , base07 = rgb 232 232 232 - , base08 = rgb 239 97 85 - , base09 = rgb 249 155 21 - , base0A = rgb 254 196 24 - , base0B = rgb 72 182 133 - , base0C = rgb 91 196 191 - , base0D = rgb 6 182 239 - , base0E = rgb 129 91 164 - , base0F = rgb 233 107 168 - } - - -colors = - { -- States - success = colorKit.base0B - , error = colorKit.base08 - , warning = colorKit.base0A - - -- Gray - , gray_100 = Color.hsl 0 0 0.988 - , gray_200 = Color.hsl 0 0 0.973 - , gray_300 = Color.hsl 0 0 0.933 - , gray_400 = Color.hsl 0 0 0.882 - , gray_500 = Color.hsl 0 0 0.863 - , gray_600 = Color.hsl 0 0 0.776 - - -- Other - , background = rgb 2 7 14 - , selection = colorKit.base04 - , text = colorKit.base01 - } - - -rgb = - Color.rgb255 - - - --- 🍱 ░░ BUTTON - - -type ButtonColor - = Accent - | Blank - | Gray - - -type ButtonType - = Filled - | IconOnly - | Normal - - -button : ButtonType -> msg -> Html msg -> Html msg -button = - buttonWithColor Gray - - -buttonLink : String -> ButtonType -> Html msg -> Html msg -buttonLink theHref buttonType = - buttonWithOptions Html.a [ href theHref ] Accent buttonType Nothing - - -buttonLinkWithColor : ButtonColor -> String -> ButtonType -> Html msg -> Html msg -buttonLinkWithColor color theHref buttonType = - buttonWithOptions Html.a [ href theHref ] color buttonType Nothing - - -buttonWithColor : ButtonColor -> ButtonType -> msg -> Html msg -> Html msg -buttonWithColor color buttonType msg = - buttonWithOptions Html.button [] color buttonType (Just msg) - - -buttonWithOptions : - (List (Html.Attribute msg) -> List (Html msg) -> Html msg) - -> List (Html.Attribute msg) - -> ButtonColor - -> ButtonType - -> Maybe msg - -> Html msg - -> Html msg -buttonWithOptions tag attributes buttonColor buttonType maybeMsg child = - let - defaultClasses = - [ "antialiased" - , "border-2" - , "cursor-pointer" - , "font-semibold" - , "inline-block" - , "leading-relaxed" - , "no-underline" - , "py-2" - , "px-4" - , "rounded" - , "text-center" - , "text-sm" - - -- - , "fixate:bg-white" - , "fixate:border-black" - , "fixate:text-black" - ] - - specificClasses = - case buttonType of - Filled -> - case buttonColor of - Accent -> - [ "bg-accent-btn" - , "border-transparent" - , "text-white-90" - ] - - Blank -> - [ "bg-white" - , "border-transparent" - , "text-accent-light" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:text-accent-dark" - ] - - Gray -> - [ "bg-base04" - , "border-transparent" - , "text-white" - - -- Dark mode - ------------ - , "dark:bg-base05" - ] - - _ -> - case buttonColor of - Accent -> - [ "bg-transparent" - , "border-accent-btn" - , "text-accent-btn" - ] - - Blank -> - [ "bg-transparent" - , "border-white" - , "text-white" - ] - - Gray -> - [ "bg-transparent" - , "border-base04" - , "text-base04" - - -- Dark mode - ------------ - , "dark:border-base05" - , "dark:text-base05" - ] - in - slab - tag - (case maybeMsg of - Just msg -> - attributes ++ [ onClick msg ] - - Nothing -> - attributes - ) - (List.append - defaultClasses - specificClasses - ) - [ case buttonType of - IconOnly -> - inline - [ "align-middle" - , "inline-block" - , "leading-none" - , "pointer-events-none" - , "text-0" - ] - [ child ] - - _ -> - inline - [ "align-middle" - , "inline-block" - , "leading-none" - , "pointer-events-none" - ] - [ child ] - ] - - - --- 🍱 ░░ OTHER - - -askForInput : { question : String, info : List (Html msg) } -> Html msg -askForInput { question, info } = - Html.span - [] - [ chunk - [ "font-semibold", "pt-1" ] - [ Html.text question ] - , case info of - [] -> - Html.text "" - - _ -> - chunk - [ "italic", "mt-2", "text-sm" ] - info - ] - - -canister : List (Html msg) -> Html msg -canister children = - chunk - [ "mx-1", "px-4", "pb-4" ] - children - - -canisterForm : List (Html msg) -> Html msg -canisterForm children = - chunk - [ "mx-1", "px-4", "pb-4", "w-full" ] - children - - -centeredContent : List (Html msg) -> Html msg -centeredContent children = - chunk - [ "flex" - , "flex-grow" - , "items-stretch" - , "overflow-hidden" - , "relative" - ] - [ Html.map never logoBackdrop - , chunk - [ "flex" - , "flex-col" - , "flex-grow" - , "items-center" - , "justify-center" - , "max-w-full" - , "relative" - , "z-10" - ] - children - ] - - -checkbox : { checked : Bool, toggleMsg : msg } -> Html msg -checkbox opts = - brick - [ onClick opts.toggleMsg - , style "left" "-3px" - ] - [ "inline-block", "cursor-pointer", "relative" ] - [ if opts.checked then - Icons.check_box 22 Inherit - - else - Icons.check_box_outline_blank 22 Inherit - ] - - -focusScreen : { icon : Icon msg, iconHref : Maybe String, text : List (Html msg), textHref : Maybe String } -> List (Html msg) -> Html msg -focusScreen { icon, iconHref, text, textHref } nodes = - [ slab - (case iconHref of - Just _ -> - Html.a - - Nothing -> - Html.div - ) - (case iconHref of - Just h -> - [ href h ] - - Nothing -> - [] - ) - [ "block" - , "opacity-30" - , "text-inherit" - ] - [ icon 64 Inherit ] - , slab - (case iconHref of - Just _ -> - Html.a - - Nothing -> - Html.div - ) - (case textHref of - Just h -> - [ href h ] - - Nothing -> - [] - ) - [ "block" - , "leading-normal" - , "mt-2" - , "opacity-40" - , "text-center" - , "text-inherit" - ] - text - , chunk - [ "max-w-full" - , "mt-4" - ] - nodes - ] - |> chunk - [ "flex" - , "flex-col" - , "items-center" - , "max-h-full" - , "overflow-y-auto" - , "px-4" - , "py-8" - , "w-full" - ] - |> List.singleton - |> centeredContent - - -h1 : String -> Html msg -h1 text = - slab - Html.h1 - [ style "font-size" "13.5px" ] - [ "all-small-caps" - , "antialiased" - , "bg-base06" - , "inline-block" - , "font-semibold" - , "leading-tight" - , "m-0" - , "-top-px" - , "overflow-hidden" - , "pointer-events-none" - , "px-2" - , "py-1" - , "relative" - , "rounded-b" - , "uppercase" - , "text-sm" - , "text-white" - - -- Dark mode - ------------ - , "dark:bg-base01" - , "dark:text-base05" - ] - [ Html.text text ] - - -h2 : String -> Html msg -h2 text = - slab - Html.h2 - [] - [ "font-bold" - , "font-display" - , "leading-tight" - , "mb-8" - , "mt-4" - , "mx-auto" - , "text-2xl" - , "text-center" - ] - [ Html.text text ] - - -h3 : String -> Html msg -h3 text = - slab - Html.h2 - [] - [ "antialiased" - , "font-bold" - , "font-display" - , "leading-tight" - , "mb-8" - , "mt-4" - , "text-xl" - ] - [ Html.text text ] - - -inlineIcon : (Int -> Coloring -> Svg.Svg msg) -> Html msg -inlineIcon icon = - inline - [ "align-sub" - , "inline-block" - , "leading-0" - , "mr-1" - , "text-0" - ] - [ icon 14 Inherit ] - - -intro : Html msg -> Html msg -intro child = - slab - Html.p - [ style "line-height" "1.75" ] - [ "mb-6" - , "mt-3" - , "text-base05" - , "text-sm" - - -- Dark mode - ------------ - , "dark:text-base03" - ] - [ child ] - - -label : List (Html.Attribute msg) -> String -> Html msg -label attributes t = - slab - Html.label - (style "font-size" "11.25px" :: attributes) - [ "antialiased" - , "block" - , "font-bold" - , "leading-normal" - , "opacity-90" - , "uppercase" - ] - [ Html.text t ] - - -link : { label : String, url : String } -> Html msg -link params = - slab - Html.a - [ A.href params.url - , A.target "_blank" - ] - [ "border-b-2" - , "border-base04" - , "inline-block" - , "leading-none" - , "no-underline" - , "text-inherit" - ] - [ Html.text params.label ] - - -logoBackdrop : Html Never -logoBackdrop = - chunk - [ "logo-backdrop" - - -- - , "absolute" - , "bg-cover" - , "bg-no-repeat" - , "h-0" - , "left-full" - , "opacity-025" - , "pt-full" - , "top-0" - , "z-0" - - -- Dark mode - ------------ - , "dark:opacity-40" - ] - [] - - -receptacle : { scrolling : Bool } -> List (Html msg) -> Html msg -receptacle { scrolling } = - chunk - [ "absolute" - , "bg-white" - , "flex" - , "flex-col" - , "inset-0" - , "overflow-x-hidden" - , "scrolling-touch" - , "z-50" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - - -- - , ifThenElse scrolling "overflow-y-auto" "overflow-y-hidden" - ] - - -select : (String -> msg) -> List (Html msg) -> Html msg -select inputHandler options = - chunk - [ "max-w-md" - , "mx-auto" - , "relative" - , "text-base05" - , "w-full" - - -- - , "focus-within:text-black" - - -- Dark mode - ------------ - , "dark:text-gray-600" - , "dark:focus-within:text-base07" - ] - [ slab - Html.select - [ onInput inputHandler ] - [ "appearance-none" - , "border-b" - , "border-l-0" - , "border-r-0" - , "border-t-0" - , "border-gray-400" - , "bg-transparent" - , "block" - , "leading-normal" - , "m-0" - , "outline-none" - , "py-2" - , "px-0" - , "rounded-none" - , "text-base01" - , "text-lg" - , "w-full" - - -- - , "focus:border-black" - - -- Dark mode - ------------ - , "dark:border-base02" - , "dark:text-gray-600" - - -- - , "dark:focus:border-base07" - ] - options - , chunk - [ "absolute" - , "-translate-y-1/2" - , "mt-px" - , "right-0" - , "text-0" - , "top-1/2" - , "transform" - ] - [ Icons.keyboard_arrow_down 20 Inherit ] - ] - - -textArea : List (Html.Attribute msg) -> Html msg -textArea attributes = - slab - Html.textarea - attributes - [ "bg-white" - , "block" - , "leading-normal" - , "mb-4" - , "p-4" - , "resize-none" - , "rounded" - , "text-base01" - , "text-sm" - , "w-full" - - -- - , "placeholder:text-base01" - , "placeholder:text-opacity-40" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:text-gray-600" - - -- - , "dark:placeholder:text-gray-600" - , "dark:placeholder:text-opacity-30" - ] - [] - - -textButton : { label : String, onClick : msg } -> Html msg -textButton params = - slab - Html.button - [ onClick params.onClick ] - [ "appearance-none" - , "bg-transparent" - , "border-base04" - , "border-b-2" - , "text-inherit" - , "leading-tight" - , "m-0" - , "p-0" - , "cursor-pointer" - ] - [ Html.text params.label ] - - -textField : List (Html.Attribute msg) -> Html msg -textField attributes = - slab - Html.input - attributes - [ "appearance-none" - , "border-b" - , "border-l-0" - , "border-r-0" - , "border-t-0" - , "border-gray-400" - , "bg-transparent" - , "block" - , "leading-normal" - , "mt-1" - , "py-2" - , "rounded-none" - , "text-base01" - , "text-sm" - , "w-full" - - -- - , "focus:border-black" - , "focus:outline-none" - , "placeholder:text-base01" - , "placeholder:text-opacity-40" - - -- Dark mode - ------------ - , "dark:border-base02" - , "dark:text-gray-600" - - -- - , "dark:focus:border-base07" - , "dark:placeholder:text-gray-600" - , "dark:placeholder:text-opacity-30" - ] - [] - - -textFieldAlt : List (Html.Attribute msg) -> Html msg -textFieldAlt attributes = - slab - Html.input - attributes - [ "bg-white" - , "block" - , "leading-normal" - , "mb-3" - , "p-3" - , "resize-none" - , "rounded" - , "text-base01" - , "text-sm" - , "w-full" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:text-gray-600" - ] - [] diff --git a/src/Core/Themes/Sunrise/List.elm b/src/Core/Themes/Sunrise/List.elm deleted file mode 100644 index b0da73a07..000000000 --- a/src/Core/Themes/Sunrise/List.elm +++ /dev/null @@ -1,174 +0,0 @@ -module Themes.Sunrise.List exposing (Action, Item, Variant(..), view) - -import Chunky exposing (..) -import Conditional exposing (..) -import Html exposing (Html) -import Html.Attributes exposing (title) -import Html.Events exposing (onClick) -import Html.Events.Extra.Mouse as Mouse exposing (onWithOptions) -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import UI.DnD as DnD -import VirtualDom - - - --- 🌳 - - -type alias Action msg = - { icon : Int -> Coloring -> VirtualDom.Node msg - , msg : Maybe (Mouse.Event -> msg) - , title : String - } - - -type alias Item msg = - { label : Html msg - , actions : List (Action msg) - , msg : Maybe msg - , isSelected : Bool - } - - -type Variant context msg - = Normal - | Draggable (DnD.Environment context msg) - - - --- ⛩ - - -view : Variant Int msg -> List (Item msg) -> Html msg -view variant items = - chunk - [ "antialiased", "font-semibold", "leading-snug", "text-nearly-sm" ] - (List.indexedMap (item variant) items) - - - ------------------------------------------ --- ㊙️ ------------------------------------------ - - -item : Variant Int msg -> Int -> Item msg -> Html msg -item variant idx { label, actions, msg, isSelected } = - let - dragTarget = - case variant of - Normal -> - False - - Draggable env -> - DnD.isDraggingOver idx env.model - in - chunky - [ "border-t" - - -- - , if dragTarget then - "border-base03" - - else - "border-transparent" - - -- Dark mode - ------------ - , if dragTarget then - "dark:border-gray-300" - - else - "dark:border-transparent" - ] - <| - chunk - [ "border-b" - , "border-gray-200" - , "flex" - , "items-center" - - -- - , ifThenElse (Maybe.isJust msg) "cursor-pointer" "cursor-default" - , ifThenElse isSelected "text-base03" "text-inherit" - - -- Dark mode - ------------ - , "dark:border-base00" - , ifThenElse isSelected "dark:text-gray-300" "dark:text-inherit" - ] - [ -- Label - -------- - brick - (case variant of - Normal -> - case msg of - Just m -> - [ onClick m ] - - Nothing -> - [] - - Draggable env -> - List.append - (case ( isSelected, msg ) of - ( True, _ ) -> - [ DnD.listenToStart env idx ] - - ( False, Just m ) -> - [ onClick m ] - - ( False, Nothing ) -> - [] - ) - (DnD.listenToEnterLeave env idx) - ) - [ "flex-grow" - , "py-4" - , "overflow-hidden" - ] - [ label ] - - -- Actions - ---------- - , chunk - [ "flex" - , "items-center" - - -- - , case variant of - Normal -> - "pointer-events-auto" - - Draggable env -> - if DnD.isDragging env.model then - "pointer-events-none" - - else - "pointer-events-auto" - ] - (List.map actionView actions) - ] - - -actionView : Action msg -> Html msg -actionView action = - brick - (case action.msg of - Just msg -> - [ title action.title - - -- - , onWithOptions "click" { stopPropagation = True, preventDefault = True } msg - ] - - Nothing -> - [ title action.title ] - ) - [ "leading-0" - , "ml-1" - , "pl-1" - , ifThenElse (Maybe.isJust action.msg) "cursor-pointer" "cursor-default" - ] - [ action.icon 16 Inherit ] diff --git a/src/Core/Themes/Sunrise/Navigation.elm b/src/Core/Themes/Sunrise/Navigation.elm deleted file mode 100644 index 001a1a974..000000000 --- a/src/Core/Themes/Sunrise/Navigation.elm +++ /dev/null @@ -1,246 +0,0 @@ -module Themes.Sunrise.Navigation exposing (global, local, localWithTabindex) - -import Alfred exposing (Alfred) -import Chunky exposing (..) -import Common -import Conditional exposing (..) -import Html exposing (Html, text) -import Html.Attributes exposing (href, style, tabindex, target, title) -import Html.Events exposing (onClick) -import Html.Events.Extra.Mouse as Mouse -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import UI.Navigation exposing (..) -import UI.Page as Page exposing (Page) - - - --- GLOBAL - - -global : List ( Page, String ) -> Maybe (Alfred reply) -> Page -> Html msg -global items alfred activePage = - brick - [ style "font-size" "11.25px" ] - [ "antialiased" - , "font-semibold" - , "mb-16" - , "mt-8" - , "text-xs" - , "tracking-widest" - , "uppercase" - - -- - , ifThenElse (Maybe.isJust alfred) "opacity-0" "opacity-100" - ] - (List.indexedMap - (globalItem activePage <| List.length items) - items - ) - - -globalItem : Page -> Int -> Int -> ( Page, String ) -> Html msg -globalItem activePage totalItems idx ( page, label ) = - let - isActivePage = - Page.sameBase page activePage - - isLastItem = - idx + 1 == totalItems - in - chunk - [ "inline-block" - , ifThenElse isLastItem "mr-0" "mr-1" - ] - [ slab - Html.a - [ href (Page.toString page) ] - [ "inline-block" - , "leading-normal" - , "no-underline" - , "cursor-pointer" - , "pt-2" - - -- - , ifThenElse isActivePage "border-b" "border-b-0" - , ifThenElse isActivePage "border-base01-15" "border-transparent" - , ifThenElse isActivePage "text-base01" "text-base01-55" - , ifThenElse isLastItem "mr-0" "mr-8" - - -- - , "focus:border-black-50" - , "focus:outline-none" - , "focus:text-black" - ] - [ text label ] - ] - - - --- LOCAL - - -local : List ( Icon msg, Label, Action msg ) -> Html msg -local = - localWithTabindex 0 - - -localWithTabindex : Int -> List ( Icon msg, Label, Action msg ) -> Html msg -localWithTabindex tabindex_ items = - brick - [ style "font-size" "12.5px" ] - [ "antialiased" - , "border-b" - , "border-gray-300" - - -- Dark mode - ------------ - , "dark:border-base01" - ] - [ chunk - [ "flex" ] - (items - |> List.reverse - |> List.map (localItem tabindex_ { amount = List.length items }) - |> List.reverse - ) - ] - - -localItem : Int -> { amount : Int } -> ( Icon msg, Label, Action msg ) -> Html msg -localItem tabindex_ { amount } ( Icon icon, Label labelText labelType, action ) = - slab - (case action of - NavigateToPage _ -> - Html.a - - OpenLinkInNewPage _ -> - Html.a - - PerformMsg _ -> - Html.button - - PerformMsgWithMouseEvent _ -> - Html.button - ) - [ case action of - NavigateToPage page -> - href (Page.toString page) - - OpenLinkInNewPage link -> - href link - - PerformMsg msg -> - onClick msg - - PerformMsgWithMouseEvent msg -> - Mouse.onClick msg - - -- - , case labelType of - Hidden -> - title labelText - - Shown -> - title "" - - -- - , case action of - OpenLinkInNewPage _ -> - target "_blank" - - _ -> - target "_self" - - -- - , tabindex tabindex_ - ] - [ "bg-transparent" - , "border-gray-300" - , "border-r" - , "cursor-pointer" - , "flex-basis-0" - , "font-semibold" - , "leading-none" - , "no-underline" - , "px-4" - , "py-3" - , "text-base02" - - -- - , ifThenElse - (labelText == Common.backToIndex && labelType == Hidden && amount > 1) - "flex-shrink-0" - "flex-grow" - - -- - , ifThenElse - (labelText == Common.backToIndex && labelType == Hidden && amount > 1) - "overflow-visible" - "overflow-hidden" - - -- - , "fixate:text-black" - , "last:border-r-0" - - -- Responsive - ------------- - , "sm:overflow-visible" - - -- - , ifThenElse - (labelType == Hidden) - "sm:flex-shrink-0" - "sm:flex-grow" - - -- - , ifThenElse - (labelType == Hidden) - "sm:flex-grow-0" - "sm:flex-grow" - - -- Dark mode - ------------ - , "dark:border-base01" - , "dark:text-base06" - - -- - , "dark:fixate:text-base07" - ] - [ chunk - [ "border-b" - , "border-t" - , "border-transparent" - , "flex" - , "items-center" - , "justify-center" - , "mt-px" - , "pt-px" - ] - [ inline - [ "flex-shrink-0" ] - [ icon 16 Inherit ] - - -- - , case labelType of - Hidden -> - nothing - - Shown -> - slab - Html.span - [] - [ "hidden" - , "leading-tight" - , "ml-1" - , "transform" - , "translate-y-px" - , "truncate" - - -- Responsive - ------------- - , "sm:inline-block" - ] - [ text labelText ] - ] - ] diff --git a/src/Core/Themes/Sunrise/Notifications.elm b/src/Core/Themes/Sunrise/Notifications.elm deleted file mode 100644 index b28bf72e2..000000000 --- a/src/Core/Themes/Sunrise/Notifications.elm +++ /dev/null @@ -1,133 +0,0 @@ -module Themes.Sunrise.Notifications exposing (view) - -import Chunky exposing (..) -import Color exposing (Color) -import Color.Manipulate -import Conditional exposing (ifThenElse) -import Html exposing (Html, text) -import Html.Attributes exposing (class, rel, style) -import Html.Ext exposing (onDoubleTap, onTap) -import Html.Lazy -import Maybe.Extra as Maybe -import Notifications exposing (..) -import UI.Notifications exposing (Model) -import UI.Types exposing (Msg(..)) - - - --- 🗺 - - -view : Maybe Color -> Model -> Html Msg -view extractedBackdropColor collection = - let - manipulatedColor = - Maybe.map - (Color.Manipulate.darken 0.125) - extractedBackdropColor - in - collection - |> List.reverse - |> List.map (Html.Lazy.lazy2 notificationView manipulatedColor) - |> chunk - [ "notifications" - - -- - , "absolute" - , "break-all" - , "bottom-0" - , "flex" - , "flex-col" - , "items-end" - , "leading-snug" - , "mb-4" - , "mr-3" - , "right-0" - , "text-sm" - , "z-50" - ] - - -notificationView : Maybe Color -> Notification Msg -> Html Msg -notificationView extractedBackdropColor notification = - let - kind = - Notifications.kind notification - - options = - Notifications.options notification - - id = - Notifications.id notification - - dismissMsg = - DismissNotification { id = id } - in - brick - [ if options.sticky then - onDoubleTap dismissMsg - - else - onTap dismissMsg - - -- - , rel (String.fromInt id) - - -- - , case kind of - Casual -> - Maybe.unwrap - (class "bg-white-20") - (style "background-color" << Color.toCssString) - extractedBackdropColor - - Error -> - class "bg-base08" - - Success -> - class "bg-base0b" - ] - [ "duration-200" - , "max-w-xs" - , "mt-2" - , "p-4" - , "rounded" - , "text-white-90" - - -- - , ifThenElse options.sticky "cursor-pointer" "cursor-default" - , ifThenElse options.sticky "select-none" "select-auto" - - -- - , if options.wasDismissed then - "transition" - - else - "transition-colors" - - -- - , if options.wasDismissed then - "opacity-0" - - else - "opacity-100" - ] - [ chunk - [ "mt-px", "pt-px" ] - [ contents notification ] - - -- - , if options.sticky && kind /= Casual then - chunk - [ "cursor-pointer" - , "italic" - , "mt-2" - , "opacity-60" - , "select-none" - , "text-xs" - ] - [ text "Double click to dismiss" ] - - else - nothing - ] diff --git a/src/Core/Themes/Sunrise/Playlists/View.elm b/src/Core/Themes/Sunrise/Playlists/View.elm deleted file mode 100644 index bef64870c..000000000 --- a/src/Core/Themes/Sunrise/Playlists/View.elm +++ /dev/null @@ -1,473 +0,0 @@ -module Themes.Sunrise.Playlists.View exposing (view) - -import Chunky exposing (..) -import Color exposing (Color) -import Common -import Html exposing (Html, text) -import Html.Attributes exposing (href, placeholder, style, value) -import Html.Events exposing (onInput, onSubmit) -import List.Extra as List -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import Playlists exposing (..) -import Themes.Sunrise.Kit as Kit exposing (ButtonType(..)) -import Themes.Sunrise.List -import Themes.Sunrise.Navigation as Navigation -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Playlists.Page exposing (..) -import UI.Types exposing (..) -import Url - - - --- 🗺 - - -view : Page -> List Playlist -> Maybe Playlist -> Maybe { oldName : String, newName : String } -> Maybe Color -> Bool -> Html Msg -view page playlists selectedPlaylist editContext bgColor authMethodSupportsPublicData = - Kit.receptacle - { scrolling = True } - (case page of - Edit encodedName -> - let - filtered = - List.filter - (.autoGenerated >> Maybe.isNothing) - playlists - in - encodedName - |> Url.percentDecode - |> Maybe.andThen (\n -> List.find (.name >> (==) n) filtered) - |> Maybe.map (edit editContext) - |> Maybe.withDefault [ nothing ] - - Index -> - index playlists selectedPlaylist bgColor authMethodSupportsPublicData - - NewCollection -> - newCollection - - NewPlaylist -> - newPlaylist - ) - - - --- INDEX - - -index : List Playlist -> Maybe Playlist -> Maybe Color -> Bool -> List (Html Msg) -index playlists selectedPlaylist bgColor authMethodSupportsPublicData = - let - isSelected playlist = - Maybe.map (\s -> ( s.autoGenerated, s.name )) selectedPlaylist == Just ( playlist.autoGenerated, playlist.name ) - - ( customCollections, customPlaylists ) = - playlists - |> List.filterNot (.autoGenerated >> Maybe.isJust) - |> List.sortBy lowercaseName - |> List.partition .collection - - customPlaylistListItem playlist = - if isSelected playlist then - selectedPlaylistListItem playlist bgColor - - else - { label = text playlist.name - , actions = - List.append - (if authMethodSupportsPublicData then - [ { icon = - if playlist.public then - Icons.public - - else - Icons.public_off - , msg = - Just (\_ -> TogglePlaylistVisibility playlist) - , title = - if playlist.public then - "Make private" - - else - "Make public" - } - ] - - else - [] - ) - [ { icon = Icons.more_vert - , msg = Just (ShowPlaylistListMenu playlist) - , title = "Menu" - } - ] - , msg = Just (ActivatePlaylist playlist) - , isSelected = False - } - - directoryCollections = - playlists - |> List.filter (.autoGenerated >> Maybe.isJust) - |> List.sortBy lowercaseName - |> List.uniqueBy .name - - directoryPlaylistListItem playlist = - if isSelected playlist then - selectedPlaylistListItem playlist bgColor - - else - { label = text playlist.name - , actions = - [ { icon = Icons.more_vert - , msg = Just (ShowPlaylistListMenu playlist) - , title = "Menu" - } - ] - , msg = Just (ActivatePlaylist playlist) - , isSelected = False - } - in - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label Common.backToIndex Hidden - , NavigateToPage Page.Index - ) - , ( Icon Icons.add - , Label "Create a new collection" Shown - , NavigateToPage (Page.Playlists NewCollection) - ) - , ( Icon Icons.add - , Label "Create a new playlist" Shown - , NavigateToPage (Page.Playlists NewPlaylist) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , if List.isEmpty playlists then - chunk - [ "relative" ] - [ chunk - [ "absolute", "left-0", "top-0" ] - [ Kit.canister [ Kit.h1 "Playlists" ] ] - ] - - else - Kit.canister - [ Kit.h1 "Collections & Playlists" - - -- Intro - -------- - , intro - - -- Custom Collections - --------------------- - , if List.isEmpty customCollections then - nothing - - else - raw - [ category "Your Collections" - , Themes.Sunrise.List.view - Themes.Sunrise.List.Normal - (List.map customPlaylistListItem customCollections) - ] - - -- Custom Playlists - ------------------- - , if List.isEmpty customPlaylists then - nothing - - else - raw - [ category "Your Playlists" - , Themes.Sunrise.List.view - Themes.Sunrise.List.Normal - (List.map customPlaylistListItem customPlaylists) - ] - - -- Directory Collections - ------------------------ - , if List.isEmpty directoryCollections then - nothing - - else - raw - [ category "Autogenerated Directory Collections" - , Themes.Sunrise.List.view - Themes.Sunrise.List.Normal - (List.map directoryPlaylistListItem directoryCollections) - ] - ] - - -- - , if List.isEmpty playlists then - Kit.centeredContent - [ slab - Html.a - [ href (Page.toString <| Page.Playlists NewPlaylist) ] - [ "block" - , "opacity-30" - , "text-inherit" - ] - [ Icons.waves 64 Inherit ] - , slab - Html.a - [ href (Page.toString <| Page.Playlists NewPlaylist) ] - [ "block" - , "leading-normal" - , "mt-2" - , "opacity-40" - , "text-center" - , "text-inherit" - ] - [ text "No playlists found, create one" - , lineBreak - , text "or enable directory collections." - ] - ] - - else - nothing - ] - - -intro : Html Msg -intro = - [ text "Collections and playlists are not tied to the sources of its tracks, " - , text "same goes for favourites. " - , lineBreak - , text "There's also directory collections, which are derived from root directories." - ] - |> raw - |> Kit.intro - - -category : String -> Html Msg -category cat = - chunk - [ "antialiased" - , "font-display" - , "mb-3" - , "mt-10" - , "text-base05" - , "text-xxs" - , "truncate" - , "uppercase" - - -- Dark mode - ------------ - , "dark:text-base04" - ] - [ Kit.inlineIcon Icons.folder - , inline [ "font-bold", "ml-2" ] [ text cat ] - ] - - -selectedPlaylistListItem : Playlist -> Maybe Color -> Themes.Sunrise.List.Item Msg -selectedPlaylistListItem playlist bgColor = - let - selectionColor = - Maybe.withDefault Kit.colors.selection bgColor - in - { label = - brick - [ selectionColor - |> Color.toCssString - |> style "color" - ] - [] - [ text playlist.name ] - , actions = - [ { icon = \size _ -> Icons.check size (Color selectionColor) - , msg = Just (always DeactivatePlaylist) - , title = "Selected playlist" - } - , { icon = Icons.more_vert - , msg = Just (ShowPlaylistListMenu playlist) - , title = "Menu" - } - ] - , msg = Just DeactivatePlaylist - , isSelected = False - } - - - --- NEW - - -newCollection : List (Html Msg) -newCollection = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Back to list" Hidden - , NavigateToPage (Page.Playlists Index) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , [ Kit.h2 "Name your collection" - - -- - , [ onInput SetPlaylistCreationContext - , placeholder "The Classics" - ] - |> Kit.textField - |> chunky [ "max-w-md", "mx-auto" ] - - -- Button - --------- - , chunk - [ "mt-10" ] - [ Kit.button - Normal - Bypass - (text "Create collection") - ] - ] - |> Kit.canisterForm - |> List.singleton - |> Kit.centeredContent - |> List.singleton - |> slab - Html.form - [ onSubmit CreateCollection ] - [ "flex" - , "flex-grow" - , "text-center" - ] - ] - - -newPlaylist : List (Html Msg) -newPlaylist = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Back to list" Hidden - , NavigateToPage (Page.Playlists Index) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , [ Kit.h2 "Name your playlist" - - -- - , [ onInput SetPlaylistCreationContext - , placeholder "Sunset" - ] - |> Kit.textField - |> chunky [ "max-w-md", "mx-auto" ] - - -- Button - --------- - , chunk - [ "mt-10" ] - [ Kit.button - Normal - Bypass - (text "Create playlist") - ] - ] - |> Kit.canisterForm - |> List.singleton - |> Kit.centeredContent - |> List.singleton - |> slab - Html.form - [ onSubmit CreatePlaylist ] - [ "flex" - , "flex-grow" - , "text-center" - ] - ] - - - --- EDIT - - -edit : Maybe { oldName : String, newName : String } -> Playlist -> List (Html Msg) -edit editContext playlist = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Back to list" Hidden - , NavigateToPage (Page.Playlists Index) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , [ Kit.h2 "Name your playlist" - - -- - , [ onInput (SetPlaylistModificationContext playlist.name) - , placeholder "The Classics" - - -- - , case editContext of - Just { oldName, newName } -> - if playlist.name == oldName then - value newName - - else - value playlist.name - - Nothing -> - value playlist.name - ] - |> Kit.textField - |> chunky [ "max-w-md", "mx-auto" ] - - -- Button - --------- - , chunk - [ "mt-10" ] - [ Kit.button - Normal - Bypass - (text "Save") - ] - ] - |> Kit.canisterForm - |> List.singleton - |> Kit.centeredContent - |> List.singleton - |> slab - Html.form - [ onSubmit ModifyPlaylist ] - [ "flex" - , "flex-grow" - , "text-center" - ] - ] - - - --- 🛠 - - -lowercaseName : Playlist -> String -lowercaseName = - .name >> String.toLower diff --git a/src/Core/Themes/Sunrise/Queue/View.elm b/src/Core/Themes/Sunrise/Queue/View.elm deleted file mode 100644 index b6ac02ad8..000000000 --- a/src/Core/Themes/Sunrise/Queue/View.elm +++ /dev/null @@ -1,309 +0,0 @@ -module Themes.Sunrise.Queue.View exposing (view) - -import Chunky exposing (..) -import Common -import Conditional exposing (..) -import Html exposing (Html, text) -import Html.Attributes exposing (href) -import Html.Lazy as Lazy -import Icons -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Queue exposing (..) -import Themes.Sunrise.Kit as Kit -import Themes.Sunrise.List -import Themes.Sunrise.Navigation as Navigation -import UI.DnD as DnD -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Queue.Page as Queue exposing (Page(..)) -import UI.Queue.Types exposing (..) -import UI.Sources.Page -import UI.Types as UI exposing (..) - - - --- 🗺 - - -view : Queue.Page -> UI.Model -> Html UI.Msg -view page model = - case page of - History -> - Lazy.lazy2 - historyView - model.playedPreviously - model.dnd - - Index -> - Lazy.lazy3 - futureView - model.playingNext - model.selectedQueueItem - model.dnd - - - --- 🗺 ░░ FUTURE - - -futureView : List Queue.Item -> Maybe Queue.Item -> DnD.Model Int -> Html UI.Msg -futureView playingNext selectedQueueItem dnd = - Kit.receptacle - { scrolling = not (DnD.isDragging dnd) } - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label Common.backToIndex Hidden - , NavigateToPage Page.Index - ) - , ( Icon Icons.history - , Label "History" Shown - , NavigateToPage (Page.Queue History) - ) - , ( Icon Icons.clear - , Label "Clear" Shown - , PerformMsg (QueueMsg Clear) - ) - , ( Icon Icons.more_horiz - , Label "Menu" Hidden - , PerformMsgWithMouseEvent (QueueMsg << ShowFutureNavigationMenu) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , if List.isEmpty playingNext then - chunk - [ "relative" ] - [ chunk - [ "absolute", "left-0", "top-0" ] - [ Kit.canister [ Kit.h1 "Up next" ] ] - ] - - else - Kit.canister - [ Kit.h1 "Up next" - , playingNext - |> List.indexedMap (futureItem selectedQueueItem) - |> Themes.Sunrise.List.view - (Themes.Sunrise.List.Draggable - { model = dnd - , toMsg = UI.DnD - } - ) - |> chunky [ "mt-3" ] - ] - - -- - , if List.isEmpty playingNext then - Kit.centeredContent - [ slab - Html.a - [ href (Page.toString <| Page.Sources UI.Sources.Page.New) ] - [ "text-inherit", "block", "opacity-30" ] - [ Icons.music_note 64 Inherit ] - , slab - Html.a - [ href (Page.toString <| Page.Sources UI.Sources.Page.New) ] - [ "text-inherit", "block", "leading-normal", "mt-2", "opacity-40", "text-center" ] - [ text "Nothing here yet," - , lineBreak - , text "add some music first." - ] - ] - - else - nothing - ] - - -futureItem : Maybe Item -> Int -> Queue.Item -> Themes.Sunrise.List.Item UI.Msg -futureItem selectedQueueItem idx item = - let - ( identifiers, track ) = - item.identifiedTrack - - isSelected = - selectedQueueItem - |> Maybe.map (.identifiedTrack >> Tuple.first >> .indexInList) - |> (==) (Just identifiers.indexInList) - - iconFn = - if item.manualEntry then - identity - - else - Icons.wrapped subtleFutureIconClasses - in - { label = - inline - [ "block" - , "truncate" - - -- - , if item.manualEntry || isSelected then - "text-inherit" - - else - "text-base05" - - -- Dark mode - ------------ - , if item.manualEntry || isSelected then - "dark:text-inherit" - - else - "dark:text-base04" - ] - [ inline - [ "inline-block" - , "mr-2" - , "opacity-60" - , "text-xs" - ] - [ text (String.fromInt <| idx + 1), text "." ] - , case track.tags.artist of - Just artist -> - text (artist ++ " - " ++ track.tags.title) - - Nothing -> - text track.tags.title - ] - , actions = - [ -- Remove - --------- - { icon = - if item.manualEntry then - iconFn Icons.remove_circle_outline - - else - iconFn Icons.not_interested - , msg = - { index = idx, item = item } - |> RemoveItem - |> QueueMsg - |> always - |> Just - , title = - ifThenElse item.manualEntry "Remove" "Ignore" - } - - -- Menu - ------- - , { icon = - iconFn Icons.more_vert - , msg = - Just (QueueMsg << ShowFutureMenu item { index = idx }) - , title = - "Menu" - } - ] - , msg = Just (QueueMsg <| Select item) - , isSelected = isSelected - } - - -subtleFutureIconClasses : List String -subtleFutureIconClasses = - [ "text-gray-500" - - -- Dark mode - ------------ - , "dark:text-base02" - ] - - - --- 🗺 ░░ HISTORY - - -historyView : List Queue.Item -> DnD.Model Int -> Html UI.Msg -historyView playedPreviously dnd = - Kit.receptacle - { scrolling = not (DnD.isDragging dnd) } - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label Common.backToIndex Hidden - , NavigateToPage Page.Index - ) - , ( Icon Icons.update - , Label "Up next" Shown - , NavigateToPage (Page.Queue Index) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , if List.isEmpty playedPreviously then - chunk - [ "relative" ] - [ chunk - [ "absolute", "left-0", "top-0" ] - [ Kit.canister [ Kit.h1 "History" ] ] - ] - - else - Kit.canister - [ Kit.h1 "History" - , playedPreviously - |> List.reverse - |> List.indexedMap historyItem - |> Themes.Sunrise.List.view Themes.Sunrise.List.Normal - |> chunky [ "mt-3" ] - ] - - -- - , if List.isEmpty playedPreviously then - Kit.centeredContent - [ chunk - [ "opacity-30" ] - [ Icons.music_note 64 Inherit ] - , chunk - [ "leading-normal", "mt-2", "opacity-40", "text-center" ] - [ text "Nothing here yet," - , lineBreak - , text "play some music first." - ] - ] - - else - nothing - ] - - -historyItem : Int -> Queue.Item -> Themes.Sunrise.List.Item UI.Msg -historyItem idx ({ identifiedTrack } as item) = - let - ( _, track ) = - identifiedTrack - in - { label = - inline - [ "block", "truncate" ] - [ inline - [ "inline-block", "text-xs", "mr-2" ] - [ text (String.fromInt <| idx + 1), text "." ] - , case track.tags.artist of - Just artist -> - text (artist ++ " - " ++ track.tags.title) - - Nothing -> - text track.tags.title - ] - , actions = - [ { icon = Icons.more_vert - , msg = Just (QueueMsg << ShowHistoryMenu item) - , title = "Menu" - } - ] - , msg = Nothing - , isSelected = False - } diff --git a/src/Core/Themes/Sunrise/Settings.elm b/src/Core/Themes/Sunrise/Settings.elm deleted file mode 100644 index 6eaa3bc11..000000000 --- a/src/Core/Themes/Sunrise/Settings.elm +++ /dev/null @@ -1,450 +0,0 @@ -module Themes.Sunrise.Settings exposing (Dependencies, view) - -import Chunky exposing (..) -import Color exposing (Color) -import Common exposing (ServiceWorkerStatus(..)) -import Conditional exposing (ifThenElse) -import DateFormat as Date -import Html exposing (Html, text) -import Html.Attributes as A exposing (..) -import Html.Events as E exposing (onClick) -import Html.Lazy -import LastFm -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import Themes.Sunrise.Kit as Kit -import Themes.Sunrise.Navigation as Navigation -import Themes.Sunrise.Settings.Data -import Themes.Sunrise.Settings.Sync -import Time -import UI.Backdrop as Backdrop exposing (backgroundPositioning) -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Settings.Page as Settings exposing (..) -import UI.Sources.Types as Sources -import UI.Tracks.Types as Tracks -import UI.Types exposing (Msg(..)) -import User.Layer - - - --- 🗺 - - -type alias Dependencies = - { syncMethod : Maybe User.Layer.Method - , buildTimestamp : Int - , chosenBackgroundImage : Maybe String - , coverSelectionReducesPool : Bool - , currentTimeZone : Time.Zone - , extractedBackdropColor : Maybe Color - , hideDuplicateTracks : Bool - , lastFm : LastFm.Model - , processAutomatically : Bool - , rememberProgress : Bool - , serviceWorkerStatus : ServiceWorkerStatus - , version : String - } - - -view : Settings.Page -> Dependencies -> Html Msg -view page deps = - case page of - Data -> - Themes.Sunrise.Settings.Data.view deps.syncMethod - - Index -> - Kit.receptacle { scrolling = True } (index deps) - - Sync -> - Themes.Sunrise.Settings.Sync.view deps.syncMethod - - - --- INDEX - - -index : Dependencies -> List (Html Msg) -index deps = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.account_circle - , Label "Data & Sync" Shown - , NavigateToPage (Page.Settings Sync) - ) - , ( Icon Icons.brush - , Label "Change theme" Shown - , PerformMsg AssistWithChangingTheme - ) - , ( Icon Icons.help_outline - , Label "Help" Shown - , OpenLinkInNewPage "about/" - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , deps - |> content - |> chunk [ "pb-4" ] - |> List.singleton - |> Kit.canister - ] - - -content : Dependencies -> List (Html Msg) -content deps = - [ ----------------------------------------- - -- Title - ----------------------------------------- - Kit.h1 "Settings" - - ----------------------------------------- - -- Version - ----------------------------------------- - , chunk - [ "mt-6" ] - [ chunk - [ "flex" - , "flex-col" - , "items-center" - , "justify-center" - , "text-base05" - , "text-xs" - - -- Dark mode - ------------ - , "dark:text-base03" - ] - [ slab - Html.img - [ A.src "images/diffuse-dark.svg" - , A.width 160 - ] - [ "dark:hidden" ] - [] - - -- - , slab - Html.img - [ A.src "images/diffuse-light.svg" - , A.width 160 - ] - [ "hidden dark:block" ] - [] - - -- - , chunk - [ "italic", "mt-3", "text-center" ] - [ text "Version " - , text deps.version - , lineBreak - , text "Built on " - , deps.buildTimestamp - |> (*) 1000 - |> Time.millisToPosix - |> Date.format - [ Date.monthNameAbbreviated - , Date.text " " - , Date.dayOfMonthSuffix - , Date.text " " - , Date.yearNumber - , Date.text ", " - , Date.hourMilitaryFixed - , Date.text ":" - , Date.minuteFixed - , Date.text ":" - , Date.secondFixed - ] - deps.currentTimeZone - |> text - - -- - , chunk - [ "not-italic", "mt-3" ] - [ case deps.serviceWorkerStatus of - InstallingInitial -> - inline - [ "inline-flex", "items-center" ] - [ text "Setting up service worker" - , inline [ "ml-1" ] [ Icons.downloading 12 Inherit ] - ] - - InstallingNew -> - inline - [ "inline-flex", "items-center" ] - [ text "Installing new version" - , inline [ "ml-1" ] [ Icons.downloading 12 Inherit ] - ] - - WaitingForActivation -> - inline - [] - [ text "Update available" - , brick - [ Maybe.unwrap - (class "bg-white-20") - (style "background-color" << Color.toCssString) - deps.extractedBackdropColor - - -- - , E.onClick ReloadApp - ] - [ "bg-base06" - , "cursor-pointer" - , "inline-block" - , "leading-none" - , "ml-1" - , "p-1" - , "rounded" - , "text-white" - - -- Dark mode - ------------ - , "dark:bg-base01" - ] - [ text "Reload app" ] - ] - - Activated -> - nothing - ] - ] - ] - ] - - ----------------------------------------- - -- Background - ----------------------------------------- - , chunk - [ "mt-6" ] - [ label "Background Image" - , Html.Lazy.lazy backgroundImage deps.chosenBackgroundImage - ] - - ----------------------------------------- - -- Row 1 - ----------------------------------------- - , chunk - [ "flex", "flex-wrap", "pt-2" ] - [ chunk - [ "w-full", "md:w-1/2" ] - [ label "Downloaded tracks" - , Kit.buttonWithColor - Kit.Gray - Kit.Normal - (TracksMsg Tracks.ClearCache) - (text "Clear cache") - ] - - -- Last.fm - ---------- - , chunk - [ "w-1/2" ] - [ label "Last.fm scrobbling" - - -- - , case ( deps.lastFm.authenticating, deps.lastFm.sessionKey ) of - ( _, Just _ ) -> - Kit.checkbox - { checked = True - , toggleMsg = DisconnectLastFm - } - - ( True, Nothing ) -> - Kit.buttonWithColor - Kit.Gray - Kit.Normal - Bypass - (text "Connecting") - - ( False, Nothing ) -> - Kit.buttonWithColor - Kit.Gray - Kit.Normal - ConnectLastFm - (text "Connect") - ] - ] - - ----------------------------------------- - -- Row 2 - ----------------------------------------- - , chunk - [ "flex", "flex-wrap" ] - [ chunk - [ "w-full", "md:w-1/2" ] - [ label "Hide Duplicates" - , Kit.checkbox - { checked = deps.hideDuplicateTracks - , toggleMsg = TracksMsg Tracks.ToggleHideDuplicates - } - ] - , chunk - [ "w-full", "md:w-1/2" ] - [ label "Process sources automatically" - , Kit.checkbox - { checked = deps.processAutomatically - , toggleMsg = SourcesMsg Sources.ToggleProcessAutomatically - } - ] - ] - - ----------------------------------------- - -- Row 3 - ----------------------------------------- - , chunk - [ "flex", "flex-wrap" ] - [ chunk - [ "w-full", "md:w-1/2" ] - [ label "Remember position on long tracks" - , Kit.checkbox - { checked = deps.rememberProgress - , toggleMsg = ToggleRememberProgress - } - ] - , chunk - [ "w-full", "md:w-1/2" ] - [ label "Cover selection reduces track pool" - , Kit.checkbox - { checked = deps.coverSelectionReducesPool - , toggleMsg = TracksMsg Tracks.ToggleCoverSelectionReducesPool - } - ] - ] - ] - - -label : String -> Html msg -label l = - chunk - [ "mb-3", "mt-6", "pb-px" ] - [ Kit.label [] l ] - - - --- BACKGROUND IMAGE - - -backgroundImage : Maybe String -> Html Msg -backgroundImage chosenBackground = - chunk - [ "flex", "flex-wrap" ] - (List.map - (\( filename, _ ) -> - let - isActive = - chosenBackground == Just filename - in - brick - [ onClick (ChooseBackdrop filename) ] - [ "cursor-pointer" - , "h-0" - , "overflow-hidden" - , "pt-1/8" - , "relative" - , "w-1/5" - - -- - , "md:pt-1/16" - , "md:w-1/10" - ] - [ if isActive then - chunk - [ "absolute" - , "bg-base04" - , "inset-0" - , "mb-1" - , "mr-1" - , "rounded-sm" - , "z-10" - - -- - , "sm:mb-2" - , "sm:mr-2" - - -- - , "md:mb-1" - , "md:mr-1" - ] - [] - - else - nothing - - -- - , brick - [ backgroundPositioning filename - - -- - , ")" - |> String.append filename - |> String.append "url(images/Background/Thumbnails/" - |> style "background-image" - ] - [ "absolute" - , "bg-cover" - , "inset-0" - , "mb-1" - , "mr-1" - , "rounded-sm" - , "z-20" - - -- - , "sm:mb-2" - , "sm:mr-2" - - -- - , "md:mb-1" - , "md:mr-1" - - -- - , ifThenElse isActive "opacity-20" "opacity-100" - ] - [] - - -- - , if isActive then - chunk - [ "absolute" - , "inset-0" - , "flex" - , "font-semibold" - , "items-center" - , "justify-center" - , "leading-snug" - , "mb-1" - , "mr-1" - , "px-2" - , "text-center" - , "text-white" - , "text-xs" - , "z-30" - - -- - , "sm:mb-2" - , "sm:mr-2" - - -- - , "md:mb-1" - , "md:mr-1" - - -- Dark mode - ------------ - , "dark:text-base07" - ] - [ chunk - [ "mt-px" ] - [ Icons.check 16 Inherit ] - ] - - else - nothing - ] - ) - Backdrop.options - ) diff --git a/src/Core/Themes/Sunrise/Settings/Common.elm b/src/Core/Themes/Sunrise/Settings/Common.elm deleted file mode 100644 index 9c763cb26..000000000 --- a/src/Core/Themes/Sunrise/Settings/Common.elm +++ /dev/null @@ -1,20 +0,0 @@ -module Themes.Sunrise.Settings.Common exposing (..) - -import Material.Icons.Round as Icons -import UI.Navigation exposing (..) -import UI.Syncing.Types as Syncing -import UI.Types - - - --- SYNCING - - -changePassphrase method = - ( Icon Icons.lock - , Label "Change Passphrase" Shown - , method - |> Syncing.ShowUpdateEncryptionKeyScreen - |> UI.Types.SyncingMsg - |> PerformMsg - ) diff --git a/src/Core/Themes/Sunrise/Settings/Data.elm b/src/Core/Themes/Sunrise/Settings/Data.elm deleted file mode 100644 index 743d11427..000000000 --- a/src/Core/Themes/Sunrise/Settings/Data.elm +++ /dev/null @@ -1,89 +0,0 @@ -module Themes.Sunrise.Settings.Data exposing (view) - -import Chunky exposing (..) -import Html exposing (Html, text) -import Material.Icons.Round as Icons -import Themes.Sunrise.Kit as Kit exposing (ButtonColor(..), ButtonType(..)) -import Themes.Sunrise.Navigation as Navigation -import Themes.Sunrise.Settings.Common exposing (changePassphrase) -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Settings.Page exposing (Page(..)) -import UI.Types exposing (Msg(..)) -import User.Layer exposing (Method(..)) - - - --- 🗺 - - -view : Maybe Method -> Html Msg -view activeMethod = - Kit.receptacle - { scrolling = True } - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - (case activeMethod of - Just (Dropbox d) -> - [ changePassphrase (Dropbox d) ] - - Just (Ipfs i) -> - [ changePassphrase (Ipfs i) ] - - Just (RemoteStorage r) -> - [ changePassphrase (RemoteStorage r) ] - - Nothing -> - [] - ) - |> List.append - [ ( Icon Icons.arrow_back - , Label "Settings" Hidden - , NavigateToPage (Page.Settings Index) - ) - , ( Icon Icons.account_circle - , Label "Storage Service" Shown - , NavigateToPage (Page.Settings Sync) - ) - ] - |> Navigation.local - - ----------------------------------------- - -- Content - ----------------------------------------- - , chunk - [ "relative" ] - [ chunk - [ "absolute", "left-0", "top-0" ] - [ Kit.canister [ Kit.h1 "Data Backup" ] ] - ] - - -- - , Kit.focusScreen - { icon = Icons.archive - , iconHref = Nothing - , text = - "You can download a snapshot of your user data, or recover an account by uploading a snapshot." - |> text - |> List.singleton - |> chunk [ "max-w-sm" ] - |> List.singleton - , textHref = Nothing - } - [ chunk - [ "flex", "space-x-2.5" ] - [ Kit.button - Normal - RequestImport - (text "Import snapshot") - - -- - , Kit.buttonWithColor - Accent - Filled - Export - (text "Download snapshot") - ] - ] - ] diff --git a/src/Core/Themes/Sunrise/Settings/Sync.elm b/src/Core/Themes/Sunrise/Settings/Sync.elm deleted file mode 100644 index 28969f2b1..000000000 --- a/src/Core/Themes/Sunrise/Settings/Sync.elm +++ /dev/null @@ -1,190 +0,0 @@ -module Themes.Sunrise.Settings.Sync exposing (view) - -import Chunky exposing (..) -import Html exposing (Html, text) -import Material.Icons.Round as Icons -import Maybe.Extra as Maybe -import Themes.Sunrise.Kit as Kit -import Themes.Sunrise.List -import Themes.Sunrise.Navigation as Navigation -import Themes.Sunrise.Settings.Common exposing (changePassphrase) -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Settings.Page exposing (Page(..)) -import UI.Svg.Elements -import UI.Syncing.Common exposing (startDropbox, startIpfs, startRemoteStorage) -import UI.Syncing.Types as Syncing -import UI.Types exposing (Msg(..)) -import User.Layer exposing (Method(..), dropboxMethod, ipfsMethod, methodName, remoteStorageMethod) - - - --- 🗺 - - -view : Maybe Method -> Html Msg -view activeMethod = - Kit.receptacle - { scrolling = True } - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - (case activeMethod of - Just (Dropbox d) -> - [ changePassphrase (Dropbox d) ] - - Just (Ipfs i) -> - [ changePassphrase (Ipfs i) ] - - Just (RemoteStorage r) -> - [ changePassphrase (RemoteStorage r) ] - - Nothing -> - [] - ) - |> List.append - [ ( Icon Icons.arrow_back - , Label "Settings" Hidden - , NavigateToPage (Page.Settings Index) - ) - , ( Icon Icons.archive - , Label "Data Backup" Shown - , NavigateToPage (Page.Settings Data) - ) - ] - |> Navigation.local - - ----------------------------------------- - -- Content - ----------------------------------------- - , chunk - [ "relative" ] - [ chunk - [ "absolute", "left-0", "top-0" ] - [ Kit.canister [ Kit.h1 "Storage Service" ] ] - ] - - -- - , Kit.focusScreen - { icon = Icons.account_circle - , iconHref = Nothing - , text = - "By default, your playlists, favourites and other data are stored locally on your device. To ensure it is backed up, and to keep it in sync across all your connected devices, choose one of the following storage services. You can switch services at any point." - |> text - |> List.singleton - |> chunk [ "max-w-md" ] - |> List.singleton - , textHref = Nothing - } - [ [ dropboxMethod - , remoteStorageMethod - , ipfsMethod - ] - |> List.map (methodView activeMethod) - |> Themes.Sunrise.List.view Themes.Sunrise.List.Normal - |> List.singleton - |> chunk [ "max-w-full", "w-96" ] - ] - ] - - -methodInfoAction : Bool -> Maybe Method -> Method -> Themes.Sunrise.List.Action Msg -methodInfoAction isSelected activeMethod method = - { icon = - \a b -> - inline - [ opacity isSelected activeMethod ] - [ Icons.help a b ] - , msg = - case method of - Dropbox _ -> - Just (\_ -> OpenUrlOnNewPage "https://dropbox.com") - - RemoteStorage _ -> - Just (\_ -> OpenUrlOnNewPage "https://remotestorage.io") - - Ipfs _ -> - Just (\_ -> OpenUrlOnNewPage "https://ipfs.io") - , title = - "Learn more about " ++ methodName method - } - - -methodView activeMethod method = - let - isSelected = - case ( activeMethod, method ) of - ( Just (Dropbox _), Dropbox _ ) -> - True - - ( Just (RemoteStorage _), RemoteStorage _ ) -> - True - - ( Just (Ipfs _), Ipfs _ ) -> - True - - _ -> - False - - label = - methodLabel activeMethod method isSelected - in - { label = - case method of - Dropbox _ -> - label UI.Svg.Elements.dropboxLogo - - RemoteStorage _ -> - label UI.Svg.Elements.remoteStorageLogo - - Ipfs _ -> - label UI.Svg.Elements.ipfsLogo - , actions = - [ if isSelected then - { icon = Icons.cancel - , msg = Just (\_ -> SyncingMsg Syncing.StopSync) - , title = "Stop syncing with " ++ methodName method - } - - else - methodInfoAction isSelected activeMethod method - ] - , msg = - if isSelected then - Just (SyncingMsg Syncing.StopSync) - - else if Maybe.isJust activeMethod then - Nothing - - else - case method of - Dropbox _ -> - Just startDropbox - - RemoteStorage _ -> - Just startRemoteStorage - - Ipfs _ -> - Just startIpfs - , isSelected = - isSelected - } - - -methodLabel activeMethod method isSelected icon = - inline - [ "flex", "items-center", opacity isSelected activeMethod ] - [ inline [ "inline-block", "mr-3" ] [ Html.map never (icon 15) ] - , Html.text (methodName method) - ] - - -opacity isSelected activeMethod = - if isSelected then - "opacity-100" - - else if Maybe.isJust activeMethod then - "opacity-50" - - else - "opacity-100" diff --git a/src/Core/Themes/Sunrise/Sources/Form.elm b/src/Core/Themes/Sunrise/Sources/Form.elm deleted file mode 100644 index 2cf19ac45..000000000 --- a/src/Core/Themes/Sunrise/Sources/Form.elm +++ /dev/null @@ -1,536 +0,0 @@ -module Themes.Sunrise.Sources.Form exposing (..) - -import Chunky exposing (..) -import Common exposing (boolFromString, boolToString) -import Conditional exposing (..) -import Dict.Ext as Dict -import Html exposing (Html, text) -import Html.Attributes as A exposing (attribute, for, name, placeholder, required, selected, type_, value) -import Html.Events exposing (onInput, onSubmit) -import List.Extra as List -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Sources exposing (..) -import Sources.Services as Services -import Themes.Sunrise.Kit as Kit exposing (ButtonType(..), select) -import Themes.Sunrise.Navigation as Navigation -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Sources.Page as Sources -import UI.Sources.Types exposing (..) - - - --- NEW - - -type alias Arguments = - { onboarding : Bool } - - -new : Arguments -> Form -> List (Html Msg) -new args model = - case model.step of - Where -> - newWhere args model - - How -> - newHow model - - By -> - newBy model - - -newWhere : Arguments -> Form -> List (Html Msg) -newWhere { onboarding } { context } = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Back to list" Hidden - -- - , if onboarding then - NavigateToPage Page.Index - - else - NavigateToPage (Page.Sources Sources.Index) - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , (\h -> - form TakeStep - [ Kit.canisterForm h ] - ) - [ Kit.h2 "Where is your music stored?" - - -- Dropdown - ----------- - , let - contextServiceKey = - Services.typeToKey context.service - in - Services.labels - |> List.map - (\( k, l ) -> - Html.option - [ value k, selected (contextServiceKey == k) ] - [ text l ] - ) - |> select SelectService - - -- Button - --------- - , chunk - [ "mt-10" ] - [ Kit.button - IconOnly - Bypass - (Icons.arrow_forward 17 Inherit) - ] - ] - ] - - -newHow : Form -> List (Html Msg) -newHow { context } = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Take a step back" Shown - , PerformMsg TakeStepBackwards - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , (\h -> - form TakeStep - [ chunk - [ "text-left", "w-full" ] - [ Kit.canister h ] - ] - ) - [ Kit.h3 "Where exactly?" - - -- Note - ------- - , note context.service - - -- Fields - --------- - , let - properties = - Services.properties context.service - - dividingPoint = - toFloat (List.length properties) / 2 - - ( listA, listB ) = - List.splitAt (ceiling dividingPoint) properties - in - chunk - [ "flex", "pt-3" ] - [ chunk - [ "flex-grow", "pr-4" ] - (List.map (renderProperty context) listA) - , chunk - [ "flex-grow", "pl-4" ] - (List.map (renderProperty context) listB) - ] - - -- Button - --------- - , chunk - [ "mt-3", "text-center" ] - [ Kit.button - IconOnly - Bypass - (Icons.arrow_forward 17 Inherit) - ] - ] - ] - - -howNote : List (Html Msg) -> Html Msg -howNote = - chunk - [ "text-sm" - , "italic" - , "leading-normal" - , "max-w-lg" - , "mb-8" - ] - - -newBy : Form -> List (Html Msg) -newBy { context } = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Take a step back" Shown - , PerformMsg TakeStepBackwards - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , (\h -> - form AddSourceUsingForm - [ Kit.canisterForm h ] - ) - [ Kit.h2 "One last thing" - , Kit.label [] "What are we going to call this source?" - - -- Input - -------- - , let - nameValue = - Dict.fetch "name" "" context.data - in - chunk - [ "flex" - , "max-w-md" - , "mt-8" - , "mx-auto" - , "justify-center" - , "w-full" - ] - [ Kit.textField - [ name "name" - , onInput (SetFormData "name") - , value nameValue - ] - ] - - -- Note - ------- - , chunk - [ "mt-16" ] - (case context.service of - AmazonS3 -> - corsWarning "CORS__S3" - - AzureBlob -> - corsWarning "CORS__Azure" - - AzureFile -> - corsWarning "CORS__Azure" - - Dropbox -> - [] - - Google -> - [] - - Ipfs -> - corsWarning "CORS__IPFS" - - WebDav -> - corsWarning "CORS__WebDAV" - ) - - -- Button - --------- - , Kit.button - Normal - Bypass - (text "Add source") - ] - ] - - -corsWarning : String -> List (Html Msg) -corsWarning id = - [ chunk - [ "text-sm", "flex", "items-center", "justify-center", "leading-snug", "opacity-50" ] - [ Kit.inlineIcon Icons.warning - , inline - [ "font-semibold" ] - [ text "Make sure CORS is enabled" ] - ] - , chunk - [ "text-sm", "leading-snug", "mb-8", "mt-1", "opacity-50" ] - [ text "You can find the instructions over " - , Kit.link { label = "here", url = "about/cors/#" ++ id } - ] - ] - - - --- EDIT - - -edit : Form -> List (Html Msg) -edit { context } = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Go Back" Shown - , PerformMsg ReturnToIndex - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , (\h -> - form EditSourceUsingForm - [ chunk - [ "text-left", "w-full" ] - [ Kit.canister h ] - ] - ) - [ Kit.h3 "Edit source" - - -- Note - ------- - , note context.service - - -- Fields - --------- - , let - properties = - Services.properties context.service - - dividingPoint = - toFloat (List.length properties) / 2 - - ( listA, listB ) = - List.splitAt (ceiling dividingPoint) properties - in - chunk - [ "flex", "pt-3" ] - [ chunk - [ "flex-grow", "pr-4" ] - (List.map (renderProperty context) listA) - , chunk - [ "flex-grow", "pl-4" ] - (List.map (renderProperty context) listB) - ] - - -- Button - --------- - , chunk - [ "mt-3", "text-center" ] - [ Kit.button - Normal - Bypass - (text "Save") - ] - ] - ] - - - --- PROPERTIES - - -renderProperty : Source -> Property -> Html Msg -renderProperty context property = - chunk - [ "mb-8" ] - [ Kit.label - [ for property.key ] - property.label - - -- - , if - (property.placeholder == boolToString True) - || (property.placeholder == boolToString False) - then - let - bool = - context.data - |> Dict.fetch property.key property.placeholder - |> boolFromString - in - chunk - [ "mt-2", "pt-1" ] - [ Kit.checkbox - { checked = bool - , toggleMsg = - bool - |> not - |> boolToString - |> SetFormData property.key - } - ] - - else - Kit.textField - [ name property.key - , onInput (SetFormData property.key) - , placeholder property.placeholder - , required (property.label |> String.toLower |> String.contains "optional" |> not) - , type_ (ifThenElse property.password "password" "text") - , value (Dict.fetch property.key "" context.data) - - -- - , attribute "spellcheck" "false" - ] - ] - - - --- ⚗️ - - -form : Msg -> List (Html Msg) -> Html Msg -form msg html = - slab - Html.form - [ onSubmit msg ] - [ "flex" - , "flex-grow" - , "flex-shrink-0" - , "text-center" - ] - [ Kit.centeredContent html ] - - -note : Service -> Html Msg -note service = - case service of - AmazonS3 -> - nothing - - AzureBlob -> - nothing - - AzureFile -> - nothing - - Dropbox -> - howNote - [ inline - [ "font-semibold" ] - [ text "If you don't know what any of this is, " - , text "continue to the next screen." - ] - , text " Changing the app key allows you to use your own Dropbox app." - , text " Also, make sure you verified your email address on Dropbox," - , text " or this might not work." - ] - - Google -> - howNote - [ inline - [ "font-semibold" ] - [ text "If you don't know what any of this is, " - , text "continue to the next screen." - ] - , text " Changing the client stuff allows you to use your own Google OAuth client." - , text " Disclaimer: " - , text "The Google Drive API is fairly slow and limited, " - , text "consider using a different service." - ] - - Ipfs -> - howNote - [ inline - [ "font-semibold" ] - [ text "Diffuse will use the ipfs.io gateway by default" ] - , text "." - , lineBreak - , inline - [] - [ text "There are also " - , Html.a - [ A.href "https://ipfs.github.io/public-gateway-checker/" - , A.class "underline" - , A.target "_blank" - ] - [ text "other public gateways" ] - , text " you can choose from." - ] - , lineBreak - , text "If you would like to use another gateway, please provide it below." - ] - - WebDav -> - howNote - [ inline - [ "font-semibold" ] - [ Kit.inlineIcon Icons.warning - , text "This app requires a proper implementation of " - , Kit.link - { label = "CORS" - , url = "https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" - } - , text " on the server side." - ] - , lineBreak - , text " WebDAV servers usually don't implement" - , text " CORS properly, if at all." - , lineBreak - , text " Some servers, like " - , Kit.link - { label = "this one" - , url = "https://github.com/hacdias/webdav" - } - , text ", do. You can find the configuration for that server " - , Kit.link - { label = "here" - , url = "about/cors/#CORS__WebDAV" - } - , text "." - ] - - - --- RENAME - - -rename : Form -> List (Html Msg) -rename { context } = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - Navigation.local - [ ( Icon Icons.arrow_back - , Label "Go Back" Shown - , PerformMsg ReturnToIndex - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , (\h -> - form RenameSourceUsingForm - [ Kit.canisterForm h ] - ) - [ Kit.h2 "Name your source" - - -- Input - -------- - , [ name "name" - , onInput (SetFormData "name") - , value (Dict.fetch "name" "" context.data) - ] - |> Kit.textField - |> chunky [ "max-w-md", "mx-auto" ] - - -- Button - --------- - , chunk - [ "mt-10" ] - [ Kit.button - Normal - Bypass - (text "Save") - ] - ] - ] diff --git a/src/Core/Themes/Sunrise/Sources/View.elm b/src/Core/Themes/Sunrise/Sources/View.elm deleted file mode 100644 index 4c21f7ee2..000000000 --- a/src/Core/Themes/Sunrise/Sources/View.elm +++ /dev/null @@ -1,292 +0,0 @@ -module Themes.Sunrise.Sources.View exposing (view) - -import Chunky exposing (..) -import Conditional exposing (ifThenElse) -import Dict.Ext as Dict -import Html exposing (Html, text) -import Html.Attributes exposing (href) -import Html.Lazy as Lazy -import List.Extra as List -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Sources exposing (..) -import Themes.Sunrise.Kit as Kit -import Themes.Sunrise.List -import Themes.Sunrise.Navigation as Navigation -import Themes.Sunrise.Sources.Form as Form -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Sources.Page as Sources exposing (..) -import UI.Sources.Types exposing (Msg(..)) -import UI.Types as UI exposing (Model) - - - --- 🌳 - - -type alias PartialModel = - { processingContext : List ( String, Float ) - , processingError : Maybe { error : String, sourceId : String } - , sources : List Source - } - - - --- 🗺 - - -view : Sources.Page -> Model -> Html UI.Msg -view page model = - Html.map UI.SourcesMsg - (case page of - Index -> - Lazy.lazy2 - (\a b -> receptacle <| index a b) - (List.length model.tracks.untouched) - { processingContext = model.processingContext - , processingError = model.processingError - , sources = model.sources - } - - Edit _ -> - lazyForm model <| Form.edit - - New -> - lazyForm model <| Form.new { onboarding = False } - - NewOnboarding -> - lazyForm model <| Form.new { onboarding = True } - - NewThroughRedirect _ _ -> - lazyForm model <| Form.new { onboarding = False } - - Rename _ -> - lazyForm model <| Form.rename - ) - - -lazyForm model formView = - Lazy.lazy (formView >> receptacle) model.sourceForm - - -receptacle = - Kit.receptacle { scrolling = True } - - - --- INDEX - - -index : Int -> PartialModel -> List (Html Msg) -index amountOfTracks model = - [ ----------------------------------------- - -- Navigation - ----------------------------------------- - if List.isEmpty model.sources then - Navigation.local - [ ( Icon Icons.add - , Label "Add a new source" Shown - , NavigateToPage (Page.Sources New) - ) - ] - - else - Navigation.local - [ ( Icon Icons.add - , Label "Add a new source" Shown - , NavigateToPage (Page.Sources New) - ) - - -- Process - ---------- - , if List.isEmpty model.processingContext then - ( Icon Icons.sync - , Label "Process sources" Shown - , PerformMsg Process - ) - - else - ( Icon Icons.sync - , Label "Stop processing ..." Shown - , PerformMsg StopProcessing - ) - ] - - ----------------------------------------- - -- Content - ----------------------------------------- - , if List.isEmpty model.sources then - chunk - [ "relative" ] - [ chunk - [ "absolute", "left-0", "top-0" ] - [ Kit.canister [ Kit.h1 "Sources" ] ] - ] - - else - Kit.canister - [ Kit.h1 "Sources" - - -- Intro - -------- - , intro amountOfTracks - - -- List - ------- - , model.sources - |> List.sortBy - lowercaseName - |> List.map - (\source -> - { label = Html.text (Dict.fetch "name" "" source.data) - , actions = sourceActions model.processingContext model.processingError source - , msg = Nothing - , isSelected = False - } - ) - |> Themes.Sunrise.List.view Themes.Sunrise.List.Normal - ] - - -- - , if List.isEmpty model.sources then - Kit.centeredContent - [ slab - Html.a - [ href (Page.toString <| Page.Sources New) ] - [ "block" - , "opacity-30" - , "text-inherit" - ] - [ Icons.music_note 64 Inherit ] - , slab - Html.a - [ href (Page.toString <| Page.Sources New) ] - [ "block" - , "leading-normal" - , "mt-2" - , "opacity-40" - , "text-center" - , "text-inherit" - ] - [ text "A source is a place where music is stored," - , lineBreak - , text "add one so you can play some music " - , inline - [ "align-middle", "inline-block", "-mt-px" ] - [ Icons.add 14 Inherit ] - ] - ] - - else - nothing - ] - - -intro : Int -> Html Msg -intro amountOfTracks = - [ text "A source is a place where your music is stored." - , lineBreak - , text "By connecting a source, the application will scan it and keep a list of all the music in it." - , lineBreak - , text "You currently have " - , text (String.fromInt amountOfTracks) - , text " " - , text (ifThenElse (amountOfTracks == 1) "track" "tracks") - , text " in your collection." - ] - |> raw - |> Kit.intro - - -sourceActions : List ( String, Float ) -> Maybe { error : String, sourceId : String } -> Source -> List (Themes.Sunrise.List.Action Msg) -sourceActions processingContext processingError source = - let - processIndex = - List.findIndex (Tuple.first >> (==) source.id) processingContext - - process = - Maybe.andThen (\idx -> List.getAt idx processingContext) processIndex - in - List.append - (case ( process, processingError ) of - ( Just ( _, progress ), _ ) -> - [ { icon = - \_ _ -> - if progress < 0.05 then - inline - [ "inline-block", "opacity-70", "px-1" ] - [ case processIndex of - Just 0 -> - Html.text "Listing" - - _ -> - Html.text "Waiting" - ] - - else - progress - |> (*) 100 - |> round - |> String.fromInt - |> (\s -> s ++ "%") - |> Html.text - |> List.singleton - |> inline [ "inline-block", "opacity-70", "px-1" ] - , msg = Nothing - , title = "" - } - , { icon = Icons.sync - , msg = Nothing - , title = "Currently processing" - } - ] - - ( Nothing, Just { error, sourceId } ) -> - if sourceId == source.id then - [ { icon = \size _ -> Icons.error_outline size (Color Kit.colors.error) - , msg = Nothing - , title = error - } - ] - - else - [] - - _ -> - [] - ) - [ { icon = - if source.enabled then - Icons.check - - else - Icons.block - , msg = - { sourceId = source.id } - |> ToggleActivation - |> always - |> Just - , title = - if source.enabled then - "Enabled (click to disable)" - - else - "Disabled (click to enable)" - } - - -- - , { icon = Icons.more_vert - , msg = Just (SourceContextMenu source) - , title = "Menu" - } - ] - - - --- 🛠 - - -lowercaseName : Source -> String -lowercaseName = - .data >> Dict.fetch "name" "" >> String.toLower diff --git a/src/Core/Themes/Sunrise/Syncing/View.elm b/src/Core/Themes/Sunrise/Syncing/View.elm deleted file mode 100644 index b2843ca80..000000000 --- a/src/Core/Themes/Sunrise/Syncing/View.elm +++ /dev/null @@ -1,187 +0,0 @@ -module Themes.Sunrise.Syncing.View exposing (view) - -import Chunky exposing (..) -import Html exposing (Html, text) -import Html.Attributes as A exposing (attribute, placeholder, style, value) -import Html.Events as E exposing (onSubmit) -import Html.Events.Extra exposing (onClickStopPropagation) -import Html.Extra as Html -import Html.Lazy as Lazy -import Json.Decode -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Themes.Sunrise.Kit as Kit -import UI.Syncing.Types as Syncing exposing (..) -import UI.Types as UI exposing (..) - - - --- 🗺 - - -view : Model -> Html UI.Msg -view = - Html.map SyncingMsg << Lazy.lazy view_ << .syncing - - -view_ : State -> Html Syncing.Msg -view_ state = - case state of - InputScreen _ opts -> - Kit.receptacle - { scrolling = False } - [ inputScreen opts ] - - NewEncryptionKeyScreen method pass -> - Kit.receptacle - { scrolling = False } - [ encryptionKeyScreen - { ableToCancel = False - , withEncryption = ActivateSyncWithPassphrase method (Maybe.withDefault "" pass) - , withoutEncryption = ActivateSync method - } - ] - - UpdateEncryptionKeyScreen method pass -> - Kit.receptacle - { scrolling = False } - [ encryptionKeyScreen - { ableToCancel = True - , withEncryption = UpdateEncryptionKey method (Maybe.withDefault "" pass) - , withoutEncryption = RemoveEncryptionKey method - } - ] - - _ -> - Html.nothing - - - --- ENCRYPTION KEY - - -encryptionKeyScreen : { ableToCancel : Bool, withEncryption : Syncing.Msg, withoutEncryption : Syncing.Msg } -> Html Syncing.Msg -encryptionKeyScreen { ableToCancel, withEncryption, withoutEncryption } = - Kit.focusScreen - { icon = Icons.lock - , iconHref = Nothing - , text = [ text "Optional passphrase to encrypt/decrypt your data" ] - , textHref = Nothing - } - [ slab - Html.form - [ onSubmit withEncryption ] - [ "flex" - , "flex-col" - , "max-w-xs" - , "px-3" - , "w-screen" - - -- - , "sm:px-0" - ] - [ Kit.textArea - [ attribute "autocapitalize" "none" - , attribute "autocomplete" "off" - , attribute "autocorrect" "off" - , attribute "rows" "4" - , attribute "spellcheck" "false" - - -- - , placeholder "anQLS9Usw24gxUi11IgVBg76z8SCWZgLKkoWIeJ1ClVmBHLRlaiA0CtvONVAMGritbgd3U45cPTxrhFU0WXaOAa8pVt186KyEccfUNyAq97" - - -- - , style "-webkit-text-security" "disc" - - -- - , A.class "shadow" - , E.onInput KeepPassphraseInMemory - ] - , chunk - [ "flex" - , "items-stretch" - , "space-x-2.5" - ] - [ Kit.buttonWithOptions - Html.button - [ A.class "flex-1" ] - Kit.Gray - Kit.Filled - (Just Syncing.Bypass) - (text "Continue") - - -- - , if ableToCancel then - Kit.buttonWithOptions - Html.button - [ A.class "flex-1" - , E.stopPropagationOn "click" (Json.Decode.succeed ( CancelInput, True )) - ] - Kit.Gray - Kit.Normal - Nothing - (text "Cancel") - - else - nothing - ] - , brick - [ onClickStopPropagation withoutEncryption ] - [ "cursor-pointer" - , "flex" - , "items-center" - , "justify-center" - , "leading-snug" - , "mt-3" - , "opacity-50" - , "text-xs" - ] - [ inline [ "inline-block", "leading-none", "mr-2" ] [ Icons.warning 13 Inherit ] - , text "Continue without encryption" - ] - ] - ] - - - --- INPUT SCREEN - - -inputScreen : Question -> Html Syncing.Msg -inputScreen question = - Kit.focusScreen - { icon = question.icon - , iconHref = Nothing - , text = [ Kit.askForInput question.question ] - , textHref = Nothing - } - [ slab - Html.form - [ onSubmit ConfirmInput ] - [ "flex" - , "flex-col" - , "max-w-xs" - , "px-3" - , "w-screen" - - -- - , "sm:px-0" - ] - [ Kit.textFieldAlt - [ attribute "autocapitalize" "off" - , placeholder question.placeholder - , A.class "shadow" - , E.onInput Input - , value question.value - ] - , Kit.button - Kit.Filled - Syncing.Bypass - (text "Continue") - ] - ] - - - --- SPEECH BUBBLE --- 🖼 diff --git a/src/Core/Themes/Sunrise/Theme.elm b/src/Core/Themes/Sunrise/Theme.elm deleted file mode 100644 index 9bce3a782..000000000 --- a/src/Core/Themes/Sunrise/Theme.elm +++ /dev/null @@ -1,292 +0,0 @@ -module Themes.Sunrise.Theme exposing (theme) - -import Alfred exposing (Alfred) -import Chunky exposing (..) -import Common exposing (Switch(..)) -import Conditional exposing (..) -import ContextMenu exposing (ContextMenu) -import Html exposing (Html, section) -import Html.Attributes exposing (class, style) -import Html.Events exposing (on) -import Html.Lazy as Lazy -import Json.Decode -import Material.Icons as Icons -import Maybe.Extra as Maybe -import Theme exposing (Theme) -import Themes.Sunrise.Alfred.View as Alfred -import Themes.Sunrise.Console -import Themes.Sunrise.ContextMenu as ContextMenu -import Themes.Sunrise.Navigation as Navigation -import Themes.Sunrise.Notifications as Notifications -import Themes.Sunrise.Playlists.View as Playlists -import Themes.Sunrise.Queue.View as Queue -import Themes.Sunrise.Settings as Settings -import Themes.Sunrise.Sources.View as Sources -import Themes.Sunrise.Syncing.View as Syncing -import Themes.Sunrise.Tracks.View as Tracks -import UI.Backdrop as Backdrop -import UI.Page as Page -import UI.Settings.Page -import UI.Sources.Page -import UI.Syncing.Common as Syncing -import UI.Types exposing (..) -import User.Layer - - -theme : Theme Msg Model -theme = - { id = "sunrise" - , title = "Sunrise" - , icon = Icons.wb_sunny - , view = view - } - - - --- ㊙️ - - -view : Model -> Html Msg -view model = - section - (if Maybe.isJust model.contextMenu || Maybe.isJust model.alfred then - [ on "tap" (Json.Decode.succeed HideOverlay) ] - - else if model.showVolumeSlider then - [ on "tap" (Json.Decode.succeed <| ToggleVolumeSlider Off) ] - - else if model.isDragging then - [ class "dragging-something" - , on "mouseup" (Json.Decode.succeed StoppedDragging) - , on "touchcancel" (Json.Decode.succeed StoppedDragging) - , on "touchend" (Json.Decode.succeed StoppedDragging) - ] - - else if Maybe.isJust model.selectedQueueItem then - [ on "tap" (Json.Decode.succeed RemoveQueueSelection) ] - - else if not (List.isEmpty model.selectedTrackIndexes) then - [ on "tap" (Json.Decode.succeed RemoveTrackSelection) ] - - else - [] - ) - [ ----------------------------------------- - -- Alfred - ----------------------------------------- - Lazy.lazy2 Alfred.view model.alfred model.extractedBackdropColor - - ----------------------------------------- - -- Backdrop - ----------------------------------------- - , Lazy.lazy Backdrop.view model - - ----------------------------------------- - -- Context Menu - ----------------------------------------- - , Lazy.lazy2 ContextMenu.view model.viewport.width model.contextMenu - - ----------------------------------------- - -- Notifications - ----------------------------------------- - , Lazy.lazy2 Notifications.view model.extractedBackdropColor model.notifications - - ----------------------------------------- - -- Overlay - ----------------------------------------- - , Lazy.lazy2 overlay model.alfred model.contextMenu - - ----------------------------------------- - -- Content - ----------------------------------------- - , content - { justifyCenter = False - , scrolling = not model.isDragging - } - (defaultScreen model) - ] - - -defaultScreen : Model -> List (Html Msg) -defaultScreen model = - [ Lazy.lazy2 - (Navigation.global - [ ( Page.Index, "Tracks" ) - , ( Page.Sources UI.Sources.Page.Index, "Sources" ) - , ( Page.Settings UI.Settings.Page.Index, "Settings" ) - ] - ) - model.alfred - model.page - - ----------------------------------------- - -- Main - ----------------------------------------- - , vessel - [ Tracks.view model - - -- Pages - -------- - , case model.page of - Page.Index -> - nothing - - Page.Playlists subPage -> - Lazy.lazy6 - Playlists.view - subPage - model.playlists - model.selectedPlaylist - model.editPlaylistContext - model.extractedBackdropColor - (model.syncing - |> Syncing.extractMethod - |> Maybe.unwrap False User.Layer.methodSupportsPublicData - ) - - Page.Queue subPage -> - Queue.view subPage model - - Page.Settings subPage -> - Lazy.lazy2 Settings.view - subPage - { buildTimestamp = model.buildTimestamp - , chosenBackgroundImage = model.chosenBackdrop - , coverSelectionReducesPool = model.coverSelectionReducesPool - , currentTimeZone = model.currentTimeZone - , extractedBackdropColor = model.extractedBackdropColor - , hideDuplicateTracks = model.hideDuplicates - , lastFm = model.lastFm - , processAutomatically = model.processAutomatically - , rememberProgress = model.rememberProgress - , serviceWorkerStatus = model.serviceWorkerStatus - , syncMethod = Syncing.extractMethod model.syncing - , version = model.version - } - - Page.Sources subPage -> - Sources.view subPage model - - -- Syncing - ---------- - , Syncing.view model - ] - - ----------------------------------------- - -- Controls - ----------------------------------------- - , Themes.Sunrise.Console.view - model.nowPlaying - model.repeat - model.shuffle - ] - - - --- 🗺 ░░ BITS - - -content : { justifyCenter : Bool, scrolling : Bool } -> List (Html Msg) -> Html Msg -content { justifyCenter, scrolling } nodes = - brick - [ on "focusout" (Json.Decode.succeed Blur) - , on "focusin" inputFocusDecoder - ] - [ "overflow-x-hidden" - , "relative" - , "screen-height" - , "scrolling-touch" - , "w-screen" - , "z-10" - - -- - , ifThenElse scrolling "overflow-y-auto" "overflow-y-hidden" - ] - [ brick - [ style "min-width" "280px" ] - [ "flex" - , "flex-col" - , "items-center" - , "h-full" - , "px-3" - - -- - , "md:px-8" - , "lg:px-16" - - -- - , ifThenElse justifyCenter "justify-center" "justify-start" - ] - nodes - ] - - -inputFocusDecoder : Json.Decode.Decoder Msg -inputFocusDecoder = - Json.Decode.string - |> Json.Decode.at [ "target", "tagName" ] - |> Json.Decode.andThen - (\targetTagName -> - case targetTagName of - "INPUT" -> - Json.Decode.succeed FocusedOnInput - - "TEXTAREA" -> - Json.Decode.succeed FocusedOnInput - - _ -> - Json.Decode.fail "NOT_INPUT" - ) - - -overlay : Maybe (Alfred Msg) -> Maybe (ContextMenu Msg) -> Html Msg -overlay maybeAlfred maybeContextMenu = - let - isShown = - Maybe.isJust maybeAlfred || Maybe.isJust maybeContextMenu - in - brick - [] - [ "inset-0" - , "bg-darkest-hour" - , "duration-500" - , "ease-in-out" - , "fixed" - , "transition-opacity" - , "z-30" - - -- - , ifThenElse isShown "pointer-events-auto" "pointer-events-none" - , ifThenElse isShown "opacity-50" "opacity-0" - ] - [] - - -vessel : List (Html Msg) -> Html Msg -vessel = - brick - [ style "-webkit-mask-image" "-webkit-radial-gradient(white, black)" ] - [ "bg-white" - , "flex" - , "flex-col" - , "flex-grow" - , "overflow-hidden" - , "relative" - , "rounded" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - ] - >> bricky - [ style "min-height" "296px" ] - [ "flex" - , "flex-grow" - , "rounded" - , "shadow-lg" - , "w-full" - - -- - , "lg:max-w-insulation" - , "lg:min-w-3xl" - ] diff --git a/src/Core/Themes/Sunrise/Tracks/Scene.elm b/src/Core/Themes/Sunrise/Tracks/Scene.elm deleted file mode 100644 index ac2859411..000000000 --- a/src/Core/Themes/Sunrise/Tracks/Scene.elm +++ /dev/null @@ -1,75 +0,0 @@ -module Themes.Sunrise.Tracks.Scene exposing (..) - -import Chunky exposing (..) -import Conditional exposing (..) -import Html exposing (Html, text) -import Html.Attributes as A -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Tracks - - - --- 🗺 - - -group : { index : Int } -> Tracks.Identifiers -> Html msg -group { index } identifiers = - let - groupName = - identifiers.group - |> Maybe.map .name - |> Maybe.withDefault "Unknown" - in - brick - [ A.style "height" "18px" ] - [ "box-content" - , "font-display" - , "font-semibold" - , "leading-normal" - , "pb-3" - , "px-4" - , "text-base04" - , "text-xxs" - , "tracking-tad-further" - , "truncate" - - -- - , ifThenElse (0 == index) "pt-3" "pt-4" - ] - [ groupIcon - , inline [ "align-middle" ] [ text groupName ] - ] - - -shadow : Html msg -shadow = - chunk - [ "h-10" - , "left-0" - , "-mt-10" - , "-translate-y-full" - , "opacity-30" - , "right-0" - , "shadow-md" - , "sticky" - , "top-0" - , "transform" - , "z-10" - - -- Dark mode - ------------ - , "dark:shadow-md-darker" - ] - [] - - - --- ㊙️ - - -groupIcon : Html msg -groupIcon = - inline - [ "align-middle", "inline-block", "leading-0", "pr-2" ] - [ Icons.library_music 16 Inherit ] diff --git a/src/Core/Themes/Sunrise/Tracks/Scene/Covers.elm b/src/Core/Themes/Sunrise/Tracks/Scene/Covers.elm deleted file mode 100644 index d814c36b5..000000000 --- a/src/Core/Themes/Sunrise/Tracks/Scene/Covers.elm +++ /dev/null @@ -1,881 +0,0 @@ -module Themes.Sunrise.Tracks.Scene.Covers exposing (containerId, scrollToNowPlaying, scrollToTop, view) - -import Browser.Dom as Dom -import Chunky exposing (..) -import Color exposing (Color) -import Conditional exposing (ifThenElse) -import Coordinates -import Dict exposing (Dict) -import Html exposing (Html, text) -import Html.Attributes as A exposing (class, id, style, tabindex) -import Html.Events as E -import Html.Events.Extra.Mouse as Mouse -import Html.Lazy -import InfiniteList -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import Task -import Themes.Sunrise.Tracks.Scene as Scene -import Themes.Sunrise.Tracks.Scene.List -import Tracks exposing (..) -import UI.Tracks.Types exposing (Msg(..)) -import UI.Types as UI exposing (Msg(..)) - - - --- 🗺 - - -type alias Dependencies = - { bgColor : Maybe Color - , cachedCovers : Maybe (Dict String String) - , covers : List Cover - , darkMode : Bool - , favouritesOnly : Bool - , infiniteList : InfiniteList.Model - , isVisible : Bool - , nowPlaying : Maybe IdentifiedTrack - , selectedCover : Maybe Cover - , selectedTrackIndexes : List Int - , sortBy : SortBy - , sortDirection : SortDirection - , viewportHeight : Float - , viewportWidth : Float - } - - -type alias ItemDependencies = - { cachedCovers : Maybe (Dict String String) - , columns : Int - , containerWidth : Int - , nowPlaying : Maybe IdentifiedTrack - , sortBy : SortBy - } - - -view : Dependencies -> Html Msg -view deps = - Html.Lazy.lazy view_ deps - - -view_ : Dependencies -> Html Msg -view_ deps = - chunk - [ "flex" - , "flex-basis-0" - , "flex-col" - , "flex-grow" - , "relative" - ] - [ collectionView deps - , case deps.selectedCover of - Just cover -> - singleCoverView cover deps - - Nothing -> - nothing - ] - - - --- 🏞 ░░ COLLECTION - - -collectionView : Dependencies -> Html Msg -collectionView deps = - let - amountOfCovers = - List.length deps.covers - in - brick - (tabindex (ifThenElse deps.isVisible 0 -1) :: viewAttributes) - [ "flex-basis-0" - , "flex-grow" - , "outline-none" - , "overflow-x-hidden" - , "overflow-y-auto" - , "relative" - , "scrolling-touch" - , "text-almost-sm" - ] - [ Scene.shadow - , chunk - [ "bg-white" - , "flex" - , "items-center" - , "pt-5" - , "px-5" - , "relative" - , "z-20" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - ] - [ sortGroupButtons deps.sortBy - - -- - , chunk - [ "flex" - , "flex-auto" - , "items-center" - , "justify-end" - , "text-base05" - , "text-right" - , "text-xs" - ] - [ text (String.fromInt amountOfCovers) - , case deps.sortBy of - Album -> - text " albums" - - Artist -> - text " artists" - - _ -> - nothing - , text " " - , slab - Html.span - [ deps.sortBy - |> SortBy - |> TracksMsg - |> E.onClick - - -- - , case deps.sortDirection of - Asc -> - A.title "Sorted alphabetically ascending" - - Desc -> - A.title "Sorted alphabetically descending" - ] - [ "cursor-pointer" - , "ml-1" - , "opacity-60" - ] - [ case deps.sortDirection of - Asc -> - Icons.arrow_downward 16 Inherit - - Desc -> - Icons.arrow_upward 16 Inherit - ] - ] - ] - - -- - , infiniteListView deps - ] - - -containerId : String -containerId = - "diffuse__track-covers" - - -scrollToNowPlaying : Float -> List Cover -> IdentifiedTrack -> Cmd Msg -scrollToNowPlaying viewportWidth covers nowPlaying = - let - columns = - determineColumns viewportWidth - - containerWidth = - determineContainerWidth viewportWidth - - rowHeightArgs = - { columns = columns - , containerWidth = containerWidth - } - - { rows, nowPlayingRowIndex } = - coverRows (Just nowPlaying) columns covers - in - case nowPlayingRowIndex of - Just idx -> - rows - |> List.take idx - |> List.foldl (\a -> (+) <| dynamicRowHeight rowHeightArgs 0 a) 0 - |> toFloat - |> (+) 11 - |> Dom.setViewportOf containerId 0 - |> Task.attempt (always Bypass) - - Nothing -> - Cmd.none - - -scrollToTop : Cmd Msg -scrollToTop = - Task.attempt (always UI.Bypass) (Dom.setViewportOf containerId 0 0) - - -viewAttributes : List (Html.Attribute Msg) -viewAttributes = - [ InfiniteList.onScroll (InfiniteListMsg >> TracksMsg) - , id containerId - ] - - - --- 🏞 ░░ SINGLE COVER - - -singleCoverView : Cover -> Dependencies -> Html Msg -singleCoverView cover deps = - let - derivedColors = - Themes.Sunrise.Tracks.Scene.List.deriveColors - { bgColor = deps.bgColor - , darkMode = deps.darkMode - } - - columns = - determineColumns deps.viewportWidth - - condensedView = - columns < 4 - in - brick - [ tabindex (ifThenElse deps.isVisible 0 -1) ] - [ "absolute" - , "bg-white" - , "flex-basis-0" - , "flex-grow" - , "inset-0" - , "leading-tight" - , "outline-none" - , "overflow-x-hidden" - , "overflow-y-auto" - , "text-almost-sm" - , "z-30" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - ] - [ chunk - [ "flex" - , "font-semibold" - , "h-8" - , "items-center" - , "leading-none" - , "-ml-2" - , "mt-5" - , "px-5" - ] - [ headerButton - [ E.onClick (TracksMsg DeselectCover) ] - { active = False - , label = Icons.arrow_back 16 Inherit - } - - -- - , headerButton - [ Mouse.onClick (showCoverMenu cover) ] - { active = True - , label = Icons.more_horiz 16 Inherit - } - ] - - -- - , chunk - [ "mb-6" - , "-top-px" - , "mt-4" - , "relative" - - -- - , ifThenElse condensedView "block" "flex" - , ifThenElse condensedView "mx-5" "ml-5" - ] - [ itemView - { clickable = False, horizontal = condensedView } - (compileItemDependencies deps) - cover - - -- - , cover.tracks - |> List.indexedMap - (Themes.Sunrise.Tracks.Scene.List.defaultItemView - { derivedColors = derivedColors - , favouritesOnly = deps.favouritesOnly - , nowPlaying = deps.nowPlaying - , roundedCorners = True - , selectedTrackIndexes = deps.selectedTrackIndexes - , showAlbum = not cover.sameAlbum - , showArtist = deps.sortBy /= Artist && not cover.sameArtist - , showGroup = False - } - 0 - ) - |> chunk - [ ifThenElse condensedView "px-px" "px-0" ] - |> List.singleton - |> chunk - [ "flex-auto" - , "flex-basis-0" - , "overflow-hidden" - , "select-none" - - -- - , ifThenElse condensedView "-mx-5" "mx-5" - , ifThenElse condensedView "px-1" "px-0" - ] - ] - ] - - - --- 🧕 - - -headerButton attributes { active, label } = - brick - attributes - [ "cursor-pointer" - , "inline-flex" - , "h-8" - , "items-center" - , "overflow-hidden" - , "px-2" - , "rounded" - - -- - , ifThenElse active "bg-gray-300" "bg-transparent" - , ifThenElse active "dark:bg-base01" "dark:bg-transparent" - ] - [ chunk - [ "mt-px", "pt-px" ] - [ label ] - ] - - -showCoverMenu : Cover -> Mouse.Event -> Msg -showCoverMenu cover = - .clientPos - >> Coordinates.fromTuple - >> (TracksMsg << ShowCoverMenuWithSmallDelay cover) - - - --- SORTING - - -sortGroupButtons : SortBy -> Html Msg -sortGroupButtons sortBy = - chunk - [ "flex" - , "h-8" - , "items-center" - , "leading-none" - , "mr-3" - , "text-xs" - , "tracking-tad-further" - ] - [ sortGroupButton - { current = sortBy, btn = Artist } - (chunk - [ "inline-flex", "items-center" ] - [ inline [ "mr-px" ] [ Icons.people_alt 16 Inherit ] - , inline [ "ml-1", "mt-px", "pl-px", "pt-px" ] [ text "Artists" ] - ] - ) - - -- - , sortGroupButton - { current = sortBy, btn = Album } - (chunk - [ "inline-flex", "items-center" ] - [ inline [ "mr-px" ] [ Icons.album 16 Inherit ] - , inline [ "ml-1", "mt-px", "pt-px" ] [ text "Albums" ] - ] - ) - ] - - -sortGroupButton : { current : SortBy, btn : SortBy } -> Html Msg -> Html Msg -sortGroupButton { current, btn } label = - headerButton - [ btn - |> SortBy - |> TracksMsg - |> E.onClick - - -- - , class "mr-1" - ] - { active = current == btn - , label = label - } - - - --- INFINITE LIST - - -infiniteListView : Dependencies -> Html Msg -infiniteListView deps = - let - itemDeps = - compileItemDependencies deps - - rowHeightArgs = - { columns = itemDeps.columns - , containerWidth = itemDeps.containerWidth - } - in - { itemView = rowView itemDeps - , itemHeight = InfiniteList.withVariableHeight (dynamicRowHeight rowHeightArgs) - , containerHeight = round deps.viewportHeight - 262 - } - |> InfiniteList.config - |> InfiniteList.withCustomContainer infiniteListContainer - |> (\config -> - InfiniteList.view - config - deps.infiniteList - (deps.covers - |> coverRows Nothing itemDeps.columns - |> .rows - ) - ) - - -infiniteListContainer : - List ( String, String ) - -> List (Html msg) - -> Html msg -infiniteListContainer styles = - styles - |> List.filterMap - (\( k, v ) -> - if k == "padding" then - Nothing - - else - Just (style k v) - ) - |> List.append listStyles - |> Html.div - - -compileItemDependencies : Dependencies -> ItemDependencies -compileItemDependencies deps = - { cachedCovers = deps.cachedCovers - , columns = determineColumns deps.viewportWidth - , containerWidth = determineContainerWidth deps.viewportWidth - , nowPlaying = deps.nowPlaying - , sortBy = deps.sortBy - } - - -listStyles : List (Html.Attribute msg) -listStyles = - [ class "leading-tight" - , class "pl-5" - , class "pt-4" - ] - - - --- ROWS - - -determineContainerWidth : Float -> Int -determineContainerWidth viewportWidth = - min 768 (round viewportWidth - 32) - - -dynamicRowHeight : { columns : Int, containerWidth : Int } -> Int -> List Cover -> Int -dynamicRowHeight { columns, containerWidth } _ coverRow = - let - rowHeight = - (containerWidth - 16) // columns + (46 + 16) - in - let - shouldRenderGroup = - coverRow - |> List.head - |> Maybe.andThen (.tracks >> List.head) - |> Maybe.map (Tuple.first >> Tracks.shouldRenderGroup) - |> Maybe.withDefault False - in - if shouldRenderGroup then - 42 + rowHeight - - else - rowHeight - - -coverRows : - Maybe IdentifiedTrack - -> Int - -> List Cover - -> { nowPlayingRowIndex : Maybe Int, rows : List (List Cover) } -coverRows maybeNowPlaying columns covers = - covers - |> List.foldl - (\cover { collection, current, nowPlayingRowIdx, trackGroup } -> - let - trackGroupCurr = - cover.identifiedTrackCover - |> Tuple.first - |> .group - |> Maybe.map .name - - npr addition = - case ( maybeNowPlaying, nowPlayingRowIdx ) of - ( Just ( _, t ), Nothing ) -> - if List.member t.id cover.trackIds then - Just (List.length collection + ifThenElse addition 1 0) - - else - Nothing - - _ -> - nowPlayingRowIdx - in - if List.length current < columns && (Maybe.isNothing trackGroup || trackGroupCurr == trackGroup) then - { collection = collection - , current = current ++ [ cover ] - , nowPlayingRowIdx = npr False - , trackGroup = trackGroupCurr - } - - else - { collection = collection ++ [ current ] - , current = [ cover ] - , nowPlayingRowIdx = npr True - , trackGroup = trackGroupCurr - } - ) - { current = [] - , collection = [] - , nowPlayingRowIdx = Nothing - , trackGroup = Nothing - } - |> (\foldResult -> - { nowPlayingRowIndex = foldResult.nowPlayingRowIdx - , rows = foldResult.collection ++ [ foldResult.current ] - } - ) - - -rowView : - ItemDependencies - -> Int - -> Int - -> List Cover - -> Html Msg -rowView itemDeps _ idx row = - let - maybeIdentifiers = - row - |> List.head - |> Maybe.andThen (.tracks >> List.head) - |> Maybe.map Tuple.first - - shouldRenderGroup = - maybeIdentifiers - |> Maybe.map Tracks.shouldRenderGroup - |> Maybe.withDefault False - in - raw - [ case ( shouldRenderGroup, maybeIdentifiers ) of - ( True, Just identifiers ) -> - chunk - [ "-ml-4" ] - [ Scene.group { index = idx } identifiers ] - - _ -> - nothing - - -- - , chunk - [ "flex", "flex-wrap" ] - (List.map (itemView { clickable = True, horizontal = False } itemDeps) row) - ] - - - --- ITEMS / COLUMNS - - -determineColumns : Float -> Int -determineColumns viewportWidth = - let - containerWidth = - determineContainerWidth viewportWidth - in - if containerWidth < 260 then - 1 - - else if containerWidth < 480 then - 2 - - else if containerWidth <= 590 then - 3 - - else - 4 - - -type alias ItemViewOptions = - { clickable : Bool, horizontal : Bool } - - -itemView : ItemViewOptions -> ItemDependencies -> Cover -> Html Msg -itemView options deps cover = - chunk - [ "antialiased" - , "flex-shrink-0" - , "font-semibold" - - -- - , ifThenElse options.horizontal "flex" "block" - , ifThenElse options.horizontal "mb-0" "mb-5" - - -- - , case ( options.horizontal, deps.columns ) of - ( True, _ ) -> - "w-auto" - - ( False, 1 ) -> - "w-full" - - ( False, 2 ) -> - "w-1/2" - - ( False, 3 ) -> - "w-1/3" - - _ -> - "w-1/4" - ] - [ coverView options deps cover - , metadataView options deps cover - ] - - -coverView : ItemViewOptions -> ItemDependencies -> Cover -> Html Msg -coverView { clickable, horizontal } { cachedCovers, nowPlaying } cover = - let - nowPlayingId = - Maybe.unwrap "" (Tuple.second >> .id) nowPlaying - - missingTracks = - List.any - (Tuple.first >> .isMissing) - cover.tracks - - maybeBlobUrlFromCache = - cachedCovers - |> Maybe.withDefault Dict.empty - |> Dict.get cover.key - - hasBackgroundImage = - Maybe.isJust maybeBlobUrlFromCache && not missingTracks - - bgOrDataAttributes = - case ( missingTracks, maybeBlobUrlFromCache ) of - ( True, _ ) -> - [] - - ( False, Just blobUrl ) -> - [ A.style "background-image" ("url('" ++ blobUrl ++ "')") - ] - - ( False, Nothing ) -> - if Maybe.isJust cachedCovers then - let - ( identifiers, track ) = - cover.identifiedTrackCover - in - [ A.attribute "data-key" cover.key - , A.attribute "data-filename" identifiers.filename - , A.attribute "data-path" track.path - , A.attribute "data-source-id" track.sourceId - , A.attribute "data-various-artists" (ifThenElse cover.variousArtists "t" "f") - ] - - else - [] - in - chunk - [ "flex-shrink-0" - , "mr-5" - , "relative" - - -- - , ifThenElse clickable "cursor-pointer" "cursor-default" - , ifThenElse horizontal "h-32" "h-0" - , ifThenElse horizontal "mb-4" "pt-full" - , ifThenElse horizontal "w-32" "w-auto" - ] - [ brick - (List.append - bgOrDataAttributes - (if clickable then - [ E.onClick (TracksMsg <| SelectCover cover) - , Mouse.onContextMenu (showCoverMenu cover) - ] - - else - [] - ) - ) - [ "absolute" - , "bg-cover" - , "bg-gray-300" - , "mb-5" - , "inset-0" - , "rounded-md" - , "shadow" - - -- - , ifThenElse horizontal "h-32" "h-auto" - - -- Dark mode - ------------ - , "dark:bg-white-025" - ] - [ if not hasBackgroundImage then - chunk - [ "absolute" - , "left-1/2" - , "-translate-x-1/2" - , "-translate-y-1/2" - , "text-gray-400" - , "top-1/2" - , "transform" - - -- Dark mode - ------------ - , "dark:text-base01" - ] - [ Icons.album 26 Inherit ] - - else - nothing - - -- Now playing? - , if List.member nowPlayingId cover.trackIds then - let - dropShadow = - "drop-shadow(hsla(0, 0%, 0%, 0.275) 0px 0px 2.5px)" - in - brick - [ style "-webkit-filter" dropShadow - , style "filter" dropShadow - ] - [ "absolute" - , "bottom-0" - , "mb-3" - , "mr-3" - , "right-0" - , "text-white" - ] - [ Icons.headset 16 Inherit ] - - else - nothing - ] - ] - - -metadataView : ItemViewOptions -> ItemDependencies -> Cover -> Html Msg -metadataView { clickable, horizontal } { sortBy } cover = - let - { identifiedTrackCover } = - cover - - ( _, track ) = - identifiedTrackCover - - missingTracks = - List.any - (Tuple.first >> .isMissing) - cover.tracks - in - brick - (if clickable then - [ E.onClick (TracksMsg <| SelectCover cover) - , Mouse.onContextMenu (showCoverMenu cover) - ] - - else - [] - ) - [ "mr-5" - , "relative" - , "tracking-tad-closer" - , "z-10" - - -- - , ifThenElse clickable "cursor-pointer" "cursor-default" - , ifThenElse horizontal "mt-0" "-mt-5" - , ifThenElse horizontal "overflow-hidden" "overflow-auto" - , ifThenElse horizontal "pt-0" "pt-2" - ] - [ chunk - [ "mt-px" - , "pt-px" - , "truncate" - ] - [ case sortBy of - Album -> - if missingTracks then - text "Missing tracks" - - else - text (Maybe.withDefault "Unknown album" track.tags.album) - - Artist -> - if missingTracks then - text "Missing tracks" - - else - text (Maybe.withDefault "Unknown artist" track.tags.artist) - - _ -> - nothing - ] - - -- - , chunk - [ "mt-px" - , "pt-px" - , "text-base05" - , "text-xs" - , "truncate" - ] - [ case sortBy of - Album -> - if cover.variousArtists then - text "Various Artists" - - else if not missingTracks && Maybe.isJust track.tags.artist then - text (Maybe.withDefault "" track.tags.artist) - - else - case List.length cover.trackIds of - 1 -> - text "1 track" - - n -> - text (String.fromInt n ++ " tracks") - - Artist -> - case List.length cover.trackIds of - 1 -> - text "1 track" - - n -> - text (String.fromInt n ++ " tracks") - - _ -> - nothing - ] - ] diff --git a/src/Core/Themes/Sunrise/Tracks/Scene/List.elm b/src/Core/Themes/Sunrise/Tracks/Scene/List.elm deleted file mode 100644 index f3dd46eaf..000000000 --- a/src/Core/Themes/Sunrise/Tracks/Scene/List.elm +++ /dev/null @@ -1,851 +0,0 @@ -module Themes.Sunrise.Tracks.Scene.List exposing (Dependencies, DerivedColors, containerId, defaultItemView, deriveColors, scrollToNowPlaying, scrollToTop, view) - -import Browser.Dom as Dom -import Chunky exposing (..) -import Color exposing (Color) -import Color.Manipulate as Color -import Conditional exposing (ifThenElse) -import Coordinates -import Html exposing (Html, text) -import Html.Attributes exposing (class, id, style, tabindex) -import Html.Events -import Html.Events.Extra.Mouse as Mouse -import Html.Lazy -import InfiniteList -import Json.Decode as Decode -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import Task -import Themes.Sunrise.Kit as Kit -import Themes.Sunrise.Tracks.Scene as Scene -import Tracks exposing (..) -import UI.DnD as DnD -import UI.Queue.Types as Queue -import UI.Tracks.Types exposing (Msg(..)) -import UI.Types as UI exposing (Msg(..)) - - - --- 🗺 - - -type alias Dependencies = - { bgColor : Maybe Color - , darkMode : Bool - , height : Float - , isTouchDevice : Bool - , isVisible : Bool - , showAlbum : Bool - } - - -type alias DerivedColors = - { background : String - , subtle : String - , text : String - } - - -view : Dependencies -> List IdentifiedTrack -> InfiniteList.Model -> Bool -> Maybe IdentifiedTrack -> Maybe String -> SortBy -> SortDirection -> List Int -> Maybe (DnD.Model Int) -> Html Msg -view deps harvest infiniteList favouritesOnly nowPlaying searchTerm sortBy sortDirection selectedTrackIndexes maybeDnD = - brick - (tabindex (ifThenElse deps.isVisible 0 -1) :: viewAttributes) - [ "flex-basis-0" - , "flex-grow" - , "outline-none" - , "overflow-x-hidden" - , "relative" - , "select-none" - , "scrolling-touch" - , "text-xs" - - -- - , "md:text-almost-sm" - - -- - , case maybeDnD of - Just dnd -> - if deps.isTouchDevice && DnD.isDragging dnd then - "overflow-y-hidden" - - else - "overflow-y-auto" - - Nothing -> - "overflow-y-auto" - ] - [ Scene.shadow - - -- Header - --------- - , Html.Lazy.lazy4 - header - (Maybe.isJust maybeDnD) - deps.showAlbum - sortBy - sortDirection - - -- List - ------- - , Html.Lazy.lazy7 - infiniteListView - deps - harvest - infiniteList - favouritesOnly - searchTerm - ( nowPlaying, selectedTrackIndexes ) - maybeDnD - ] - - -containerId : String -containerId = - "diffuse__track-list" - - -scrollToNowPlaying : List IdentifiedTrack -> IdentifiedTrack -> Cmd Msg -scrollToNowPlaying harvest ( identifiers, _ ) = - harvest - |> List.take identifiers.indexInList - |> List.foldl (\a -> (+) <| dynamicRowHeight 0 a) 0 - |> (\n -> 22 - toFloat rowHeight / 2 + 2 + toFloat n) - |> Dom.setViewportOf containerId 0 - |> Task.attempt (always Bypass) - - -scrollToTop : Cmd Msg -scrollToTop = - Task.attempt (always UI.Bypass) (Dom.setViewportOf containerId 0 0) - - -viewAttributes : List (Html.Attribute Msg) -viewAttributes = - [ InfiniteList.onScroll (InfiniteListMsg >> TracksMsg) - , id containerId - , class "overscroll-none" - ] - - - --- HEADERS - - -header : Bool -> Bool -> SortBy -> SortDirection -> Html Msg -header isPlaylist showAlbum sortBy sortDirection = - let - sortIcon = - (if sortDirection == Desc then - Icons.expand_less - - else - Icons.expand_more - ) - 15 - Inherit - - maybeSortIcon s = - ifThenElse (sortBy == s) (Just sortIcon) Nothing - in - chunk - [ "antialiased" - , "bg-white" - , "border-b" - , "border-gray-300" - , "flex" - , "font-semibold" - , "relative" - , "text-base06" - , "text-xxs" - , "z-20" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:border-base01" - , "dark:text-base03" - ] - (if isPlaylist && showAlbum then - [ headerColumn "" 4.5 Nothing Bypass - , headerColumn "#" 4.5 Nothing Bypass - , headerColumn "Title" 36.0 Nothing Bypass - , headerColumn "Artist" 27.5 Nothing Bypass - , headerColumn "Album" 27.5 Nothing Bypass - ] - - else if isPlaylist then - [ headerColumn "" 4.5 Nothing Bypass - , headerColumn "#" 4.5 Nothing Bypass - , headerColumn "Title" 49.75 Nothing Bypass - , headerColumn "Artist" 41.25 Nothing Bypass - ] - - else if showAlbum then - [ headerColumn "" 4.5 Nothing Bypass - , headerColumn "Title" 37.5 (maybeSortIcon Title) (TracksMsg <| SortBy Title) - , headerColumn "Artist" 29.0 (maybeSortIcon Artist) (TracksMsg <| SortBy Artist) - , headerColumn "Album" 29.0 (maybeSortIcon Album) (TracksMsg <| SortBy Album) - ] - - else - [ headerColumn "" 5.75 Nothing Bypass - , headerColumn "Title" 51.25 (maybeSortIcon Title) (TracksMsg <| SortBy Title) - , headerColumn "Artist" 43 (maybeSortIcon Artist) (TracksMsg <| SortBy Artist) - ] - ) - - - --- HEADER COLUMN - - -headerColumn : String -> Float -> Maybe (Html Msg) -> Msg -> Html Msg -headerColumn text_ width maybeSortIcon msg = - brick - [ Html.Events.onClick msg - - -- - , style "min-width" columnMinWidth - , style "width" (String.fromFloat width ++ "%") - ] - [ "border-l" - , "border-gray-300" - , "leading-relaxed" - , "pl-2" - , "pr-2" - , "pt-px" - , "relative" - - -- - , case msg of - Bypass -> - "cursor-default" - - _ -> - "cursor-pointer" - - -- - , "first:border-l-0" - , "first:cursor-default" - , "first:pl-4" - , "last:pr-4" - - -- Dark mode - ------------ - , "dark:border-base01" - ] - [ chunk - [ "mt-px", "opacity-90", "pt-px" ] - [ Html.text text_ ] - , case maybeSortIcon of - Just sortIcon -> - chunk - [ "absolute" - , "-translate-y-1/2" - , "mr-1" - , "opacity-90" - , "right-0" - , "top-1/2" - , "transform" - ] - [ sortIcon ] - - Nothing -> - nothing - ] - - - --- INFINITE LIST - - -infiniteListView : Dependencies -> List IdentifiedTrack -> InfiniteList.Model -> Bool -> Maybe String -> ( Maybe IdentifiedTrack, List Int ) -> Maybe (DnD.Model Int) -> Html Msg -infiniteListView deps harvest infiniteList favouritesOnly searchTerm ( nowPlaying, selectedTrackIndexes ) maybeDnD = - let - derivedColors = - deriveColors { bgColor = deps.bgColor, darkMode = deps.darkMode } - in - { itemView = - case maybeDnD of - Just dnd -> - playlistItemView - favouritesOnly - nowPlaying - searchTerm - selectedTrackIndexes - dnd - deps.showAlbum - deps.darkMode - derivedColors - - _ -> - defaultItemView - { derivedColors = derivedColors - , favouritesOnly = favouritesOnly - , nowPlaying = nowPlaying - , roundedCorners = False - , selectedTrackIndexes = selectedTrackIndexes - , showAlbum = deps.showAlbum - , showArtist = True - , showGroup = True - } - - -- - , itemHeight = InfiniteList.withVariableHeight dynamicRowHeight - , containerHeight = round deps.height - } - |> InfiniteList.config - |> InfiniteList.withCustomContainer infiniteListContainer - |> (\config -> - InfiniteList.view - config - infiniteList - harvest - ) - - -infiniteListContainer : - List ( String, String ) - -> List (Html msg) - -> Html msg -infiniteListContainer styles = - styles - |> List.filterMap - (\( k, v ) -> - if k == "padding" then - Nothing - - else - Just (style k v) - ) - |> List.append listStyles - |> Html.div - - -deriveColors : { bgColor : Maybe Color, darkMode : Bool } -> DerivedColors -deriveColors { bgColor, darkMode } = - let - color = - Maybe.withDefault Kit.colors.text bgColor - in - if darkMode then - { background = Color.toCssString color - , subtle = Color.toCssString (Color.darken 0.1 color) - , text = Color.toCssString (Color.darken 0.475 color) - } - - else - { background = Color.toCssString (Color.fadeOut 0.625 color) - , subtle = Color.toCssString (Color.fadeOut 0.575 color) - , text = Color.toCssString (Color.darken 0.3 color) - } - - -listStyles : List (Html.Attribute msg) -listStyles = - [ class "pb-2 pt-1" ] - - -dynamicRowHeight : Int -> IdentifiedTrack -> Int -dynamicRowHeight _ ( i, t ) = - if Tracks.shouldRenderGroup i then - 16 + 18 + 12 + rowHeight - - else - rowHeight - - - --- INFINITE LIST ITEM - - -defaultItemView : - { derivedColors : DerivedColors - , favouritesOnly : Bool - , nowPlaying : Maybe IdentifiedTrack - , roundedCorners : Bool - , selectedTrackIndexes : List Int - , showAlbum : Bool - , showArtist : Bool - , showGroup : Bool - } - -> Int - -> Int - -> IdentifiedTrack - -> Html Msg -defaultItemView args _ idx identifiedTrack = - let - { derivedColors, favouritesOnly, nowPlaying, roundedCorners, selectedTrackIndexes, showAlbum, showArtist, showGroup } = - args - - ( identifiers, track ) = - identifiedTrack - - shouldRenderGroup = - showGroup && Tracks.shouldRenderGroup identifiers - - isSelected = - List.member idx selectedTrackIndexes - - isOddRow = - modBy 2 idx == 1 - - rowIdentifiers = - { isMissing = identifiers.isMissing - , isNowPlaying = Maybe.unwrap False (isNowPlaying identifiedTrack) nowPlaying - , isSelected = isSelected - } - - favIdentifiers = - { indexInList = identifiers.indexInList - , isFavourite = identifiers.isFavourite - , isNowPlaying = rowIdentifiers.isNowPlaying - , isSelected = isSelected - } - in - Html.div - [] - [ if shouldRenderGroup then - Scene.group { index = idx } identifiers - - else - nothing - - -- - , brick - (List.concat - [ rowStyles idx rowIdentifiers derivedColors - - -- - , List.append - (if isSelected then - [ touchContextMenuEvent identifiedTrack Nothing ] - - else - [] - ) - [ mouseContextMenuEvent identifiedTrack - , playEvent identifiedTrack - , selectEvent idx - ] - ] - ) - [ "flex" - , "items-center" - - -- - , ifThenElse identifiers.isMissing "cursor-default" "cursor-pointer" - , ifThenElse isSelected "font-semibold" "font-normal" - , ifThenElse roundedCorners "rounded" "border-r-0" - - -- - , ifThenElse - isOddRow - "bg-white" - "bg-gray-100" - - -- Dark mode - ------------ - , ifThenElse - isOddRow - "dark:bg-darkest-hour" - "dark:bg-near-darkest-hour" - ] - (if not showArtist && not showAlbum then - [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors - , otherColumn "94.25%" False track.tags.title - ] - - else if not showArtist && showAlbum then - [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors - , otherColumn "51.25%" False track.tags.title - , otherColumn "43%" False (Maybe.withDefault fallbackAlbum track.tags.album) - ] - - else if showArtist && not showAlbum then - [ favouriteColumn "5.75%" favouritesOnly favIdentifiers derivedColors - , otherColumn "51.25%" False track.tags.title - , otherColumn "43%" False (Maybe.withDefault fallbackArtist track.tags.artist) - ] - - else - [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors - , otherColumn "37.5%" False track.tags.title - , otherColumn "29.0%" False (Maybe.withDefault fallbackArtist track.tags.artist) - , otherColumn "29.0%" True (Maybe.withDefault fallbackAlbum track.tags.album) - ] - ) - ] - - -playlistItemView : Bool -> Maybe IdentifiedTrack -> Maybe String -> List Int -> DnD.Model Int -> Bool -> Bool -> DerivedColors -> Int -> Int -> IdentifiedTrack -> Html Msg -playlistItemView favouritesOnly nowPlaying _ selectedTrackIndexes dnd showAlbum darkMode derivedColors _ idx identifiedTrack = - let - ( identifiers, track ) = - identifiedTrack - - listIdx = - identifiers.indexInList - - dragEnv = - { model = dnd - , toMsg = DnD - } - - isSelected = - List.member idx selectedTrackIndexes - - isOddRow = - modBy 2 idx == 1 - - rowIdentifiers = - { isMissing = identifiers.isMissing - , isNowPlaying = Maybe.unwrap False (isNowPlaying identifiedTrack) nowPlaying - , isSelected = isSelected - } - - favIdentifiers = - { indexInList = identifiers.indexInList - , isFavourite = identifiers.isFavourite - , isNowPlaying = rowIdentifiers.isNowPlaying - , isSelected = isSelected - } - in - brick - (List.concat - [ rowStyles idx rowIdentifiers derivedColors - - -- - , List.append - (if isSelected then - [ touchContextMenuEvent identifiedTrack (Just dragEnv) - , DnD.listenToStart dragEnv listIdx - ] - - else - [] - ) - [ mouseContextMenuEvent identifiedTrack - , playEvent identifiedTrack - , selectEvent idx - ] - - -- - , DnD.listenToEnterLeave dragEnv listIdx - - -- - , if DnD.isBeingDraggedOver listIdx dnd then - [ dragIndicator darkMode ] - - else - [] - ] - ) - [ "flex" - , "items-center" - - -- - , ifThenElse identifiers.isMissing "cursor-default" "cursor-pointer" - , ifThenElse isSelected "font-semibold" "font-normal" - - -- - , ifThenElse - isOddRow - "bg-white" - "bg-gray-100" - - -- Dark mode - ------------ - , ifThenElse - isOddRow - "dark:bg-darkest-hour" - "dark:bg-near-darkest-hour" - ] - (if showAlbum then - [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors - , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) - , otherColumn "36.0%" False track.tags.title - , otherColumn "27.5%" False (Maybe.withDefault fallbackArtist track.tags.artist) - , otherColumn "27.5%" True (Maybe.withDefault fallbackAlbum track.tags.album) - ] - - else - [ favouriteColumn defFavColWidth favouritesOnly favIdentifiers derivedColors - , playlistIndexColumn (Maybe.withDefault 0 identifiers.indexInPlaylist) - , otherColumn "49.75%" False track.tags.title - , otherColumn "41.25%" False (Maybe.withDefault fallbackArtist track.tags.artist) - ] - ) - - -mouseContextMenuEvent : IdentifiedTrack -> Html.Attribute Msg -mouseContextMenuEvent ( i, _ ) = - Html.Events.custom - "contextmenu" - (Decode.map - (\event -> - { message = - if event.keys.shift then - Bypass - - else - event.clientPos - |> Coordinates.fromTuple - |> ShowTracksMenuWithSmallDelay - (Just i.indexInList) - { alt = event.keys.alt } - |> TracksMsg - - -- - , stopPropagation = True - , preventDefault = True - } - ) - Mouse.eventDecoder - ) - - -touchContextMenuEvent : IdentifiedTrack -> Maybe (DnD.Environment Int Msg) -> Html.Attribute Msg -touchContextMenuEvent ( i, _ ) maybeDragEnv = - Html.Events.custom - "longtap" - (Decode.map2 - (\x y -> - { message = - -- Only show menu when not dragging something - case Maybe.andThen (.model >> DnD.modelTarget) maybeDragEnv of - Just _ -> - Bypass - - Nothing -> - { x = x, y = y } - |> ShowTracksMenu - (Just i.indexInList) - { alt = False } - |> TracksMsg - - -- - , stopPropagation = False - , preventDefault = False - } - ) - (Decode.field "x" Decode.float) - (Decode.field "y" Decode.float) - ) - - -playEvent : IdentifiedTrack -> Html.Attribute Msg -playEvent ( i, t ) = - Html.Events.custom - "dbltap" - (Decode.succeed - { message = - if i.isMissing then - Bypass - - else - ( i, t ) - |> Queue.InjectFirstAndPlay - |> QueueMsg - - -- - , stopPropagation = True - , preventDefault = True - } - ) - - -selectEvent : Int -> Html.Attribute Msg -selectEvent idx = - Html.Events.custom - "tap" - (Decode.map2 - (\shiftKey button -> - { message = - case button of - 0 -> - { shiftKey = shiftKey } - |> MarkAsSelected idx - |> TracksMsg - - _ -> - Bypass - - -- - , stopPropagation = True - , preventDefault = False - } - ) - (Decode.at [ "originalEvent", "shiftKey" ] Decode.bool) - (Decode.oneOf - [ Decode.at [ "originalEvent", "button" ] Decode.int - , Decode.succeed 0 - ] - ) - ) - - - --- ROWS - - -rowHeight : Int -rowHeight = - 35 - - -rowStyles : Int -> { isMissing : Bool, isNowPlaying : Bool, isSelected : Bool } -> DerivedColors -> List (Html.Attribute msg) -rowStyles _ { isMissing, isNowPlaying } derivedColors = - let - bgColor = - if isNowPlaying then - derivedColors.background - - else - "" - - color = - if isNowPlaying then - derivedColors.text - - else if isMissing then - rowFontColors.gray - - else - "" - in - [ style "background-color" bgColor - , style "color" color - , style "height" (String.fromInt rowHeight ++ "px") - ] - - - --- COLUMNS - - -defFavColWidth = - "4.5%" - - -columnMinWidth = - "28px" - - -favouriteColumn : String -> Bool -> { isFavourite : Bool, indexInList : Int, isNowPlaying : Bool, isSelected : Bool } -> DerivedColors -> Html Msg -favouriteColumn columnWidth favouritesOnly identifiers derivedColors = - brick - (List.append - [ style "width" columnWidth - , identifiers.indexInList - |> ToggleFavourite - |> TracksMsg - |> Html.Events.onClick - ] - (favouriteColumnStyles favouritesOnly identifiers derivedColors) - ) - [ "flex-shrink-0" - , "font-normal" - , "pl-4" - , "text-gray-500" - - -- Dark mode - ------------ - , "dark:text-base02" - ] - [ if identifiers.isFavourite then - text "t" - - else - text "f" - ] - - -favouriteColumnStyles : Bool -> { isFavourite : Bool, indexInList : Int, isNowPlaying : Bool, isSelected : Bool } -> DerivedColors -> List (Html.Attribute msg) -favouriteColumnStyles favouritesOnly { isFavourite, isNowPlaying } derivedColors = - let - color = - if isNowPlaying && isFavourite then - derivedColors.text - - else if isNowPlaying then - derivedColors.subtle - - else if favouritesOnly || not isFavourite then - "" - - else - favColors.red - in - [ style "color" color - , style "font-family" "or-favourites" - , style "min-width" columnMinWidth - ] - - -playlistIndexColumn : Int -> Html msg -playlistIndexColumn indexInPlaylist = - brick - (otherColumnStyles "4.5%") - [ "pl-2" - , "pr-2" - , "pointer-events-none" - , "truncate" - ] - [ indexInPlaylist - |> (+) 1 - |> String.fromInt - |> text - ] - - -otherColumn : String -> Bool -> String -> Html msg -otherColumn width _ text_ = - brick - (otherColumnStyles width) - [ "pl-2" - , "pr-2" - , "pointer-events-none" - , "truncate" - - -- - , "last:pr-4" - ] - [ text text_ ] - - -otherColumnStyles : String -> List (Html.Attribute msg) -otherColumnStyles columnWidth = - [ style "min-width" columnMinWidth - , style "width" columnWidth - ] - - - --- 🖼 - - -favColors = - { gray = Color.toCssString (Color.rgb255 220 220 220) - , red = Color.toCssString Kit.colorKit.base08 - } - - -rowFontColors = - { gray = Color.toCssString Kit.colorKit.base04 - , white = Color.toCssString (Color.rgb 1 1 1) - } - - -dragIndicator : Bool -> Html.Attribute msg -dragIndicator darkMode = - let - color = - if darkMode then - Kit.colors.gray_300 - - else - Kit.colorKit.base03 - in - style "box-shadow" ("0 1px 0 0 " ++ Color.toCssString color ++ " inset") diff --git a/src/Core/Themes/Sunrise/Tracks/View.elm b/src/Core/Themes/Sunrise/Tracks/View.elm deleted file mode 100644 index 9ba7b00fd..000000000 --- a/src/Core/Themes/Sunrise/Tracks/View.elm +++ /dev/null @@ -1,582 +0,0 @@ -module Themes.Sunrise.Tracks.View exposing (view) - -import Chunky exposing (..) -import Color exposing (Color) -import Common exposing (Switch(..)) -import Conditional exposing (ifThenElse) -import Html exposing (Html, text) -import Html.Attributes as A exposing (attribute, placeholder, style, tabindex, title, value) -import Html.Events as E exposing (onClick, onInput) -import Html.Events.Extra.Mouse as Mouse -import Html.Lazy exposing (..) -import Keyboard exposing (Key(..)) -import Material.Icons.Round as Icons -import Material.Icons.Types exposing (Coloring(..)) -import Maybe.Extra as Maybe -import Playlists exposing (Playlist) -import Themes.Sunrise.Kit as Kit -import Themes.Sunrise.Navigation as Navigation -import Themes.Sunrise.Tracks.Scene.Covers -import Themes.Sunrise.Tracks.Scene.List -import Tracks exposing (..) -import UI.Audio.Types exposing (nowPlayingIdentifiedTrack) -import UI.Navigation exposing (..) -import UI.Page as Page -import UI.Playlists.Page -import UI.Queue.Page -import UI.Sources.Page as Sources -import UI.Syncing.Common as Syncing -import UI.Syncing.Types as Syncing -import UI.Tracks.Types exposing (..) -import UI.Types as UI exposing (..) -import User.Layer as User - - - --- 🌳 - - -type alias NavigationProperties = - { bgColor : Maybe Color - , favouritesOnly : Bool - , grouping : Maybe Grouping - , isOnIndexPage : Bool - , pressedShift : Bool - , scene : Scene - , searchTerm : Maybe String - , selectedPlaylist : Maybe Playlist - , showVolumeSlider : Bool - , volume : Float - } - - - --- 🗺 - - -view : Model -> Html UI.Msg -view model = - let - isOnIndexPage = - model.page == Page.Index - in - chunk - viewClasses - [ lazy - navigation - { bgColor = model.extractedBackdropColor - , favouritesOnly = model.favouritesOnly - , grouping = model.grouping - , isOnIndexPage = isOnIndexPage - , pressedShift = List.member Shift model.pressedKeys - , scene = model.scene - , searchTerm = model.searchTerm - , selectedPlaylist = model.selectedPlaylist - , showVolumeSlider = model.showVolumeSlider - , volume = model.eqSettings.volume - } - - -- - , if List.isEmpty model.tracks.harvested then - lazy5 - noTracksView - (List.map Tuple.first model.processingContext) - (List.length model.sources) - (List.length model.tracks.harvested) - (List.length model.favourites) - (Syncing.extractMethod model.syncing) - - else - case model.scene of - Covers -> - Themes.Sunrise.Tracks.Scene.Covers.view - { bgColor = model.extractedBackdropColor - , cachedCovers = model.cachedCovers - , covers = model.covers.harvested - , darkMode = model.darkMode - , favouritesOnly = model.favouritesOnly - , infiniteList = model.infiniteList - , isVisible = isOnIndexPage - , nowPlaying = Maybe.map nowPlayingIdentifiedTrack model.nowPlaying - , selectedCover = model.selectedCover - , selectedTrackIndexes = model.selectedTrackIndexes - , sortBy = model.sortBy - , sortDirection = model.sortDirection - , viewportHeight = model.viewport.height - , viewportWidth = model.viewport.width - } - - List -> - model.selectedPlaylist - |> Maybe.andThen - (\playlist -> - if playlist.collection || Maybe.isJust playlist.autoGenerated then - Nothing - - else - Just model.dnd - ) - |> Themes.Sunrise.Tracks.Scene.List.view - { bgColor = model.extractedBackdropColor - , darkMode = model.darkMode - , height = model.viewport.height - , isTouchDevice = model.isTouchDevice - , isVisible = isOnIndexPage - , showAlbum = model.viewport.width >= 720 - } - model.tracks.harvested - model.infiniteList - model.favouritesOnly - (Maybe.map nowPlayingIdentifiedTrack model.nowPlaying) - model.searchTerm - model.sortBy - model.sortDirection - model.selectedTrackIndexes - ] - - -viewClasses : List String -viewClasses = - [ "flex" - , "flex-col" - , "flex-grow" - , "relative" - ] - - -navigation : NavigationProperties -> Html UI.Msg -navigation { bgColor, favouritesOnly, grouping, isOnIndexPage, pressedShift, scene, searchTerm, selectedPlaylist, showVolumeSlider, volume } = - let - tabindex_ = - ifThenElse isOnIndexPage 0 -1 - in - chunk - [ "relative", "sm:flex" ] - [ ----------------------------------------- - -- Part 1 - ----------------------------------------- - slab - (Html.node "search") - [ attribute "role" "search" ] - [ "border-b" - , "border-r" - , "border-gray-300" - , "flex" - , "flex-grow" - , "h-12" - , "mt-px" - , "px-1" - , "overflow-hidden" - , "relative" - , "text-gray-600" - - -- Responsive - ------------- - , "sm:h-auto" - , "sm:px-0" - - -- Dark mode - ------------ - , "dark:border-base01" - , "dark:text-base04" - ] - [ -- Input - -------- - slab - Html.input - [ attribute "autocorrect" "off" - , attribute "autocapitalize" "none" - , attribute "spellcheck" "false" - , onInput (TracksMsg << SetSearchTerm) - , placeholder "Search" - , tabindex tabindex_ - , value (Maybe.withDefault "" searchTerm) - ] - [ "bg-transparent" - , "border-none" - , "flex-grow" - , "h-full" - , "min-w-0" - , "ml-1" - , "mt-px" - , "outline-none" - , "pl-8" - , "pr-2" - , "pt-px" - , "text-base02" - , "text-sm" - , "w-full" - - -- Dark mode - ------------ - , "dark:text-base06" - ] - [] - - -- Search icon - -------------- - , chunk - [ "absolute" - , "bottom-0" - , "flex" - , "items-center" - , "left-0" - , "ml-3" - , "mt-px" - , "pl-1" - , "top-0" - , "z-0" - - -- Responsive - ------------- - , "sm:pl-0" - ] - [ Icons.search 16 Inherit ] - - -- Actions - ---------- - , chunk - [ "flex" - , "items-center" - , "mr-3" - , "mt-px" - , "pt-px" - , "space-x-4" - - -- Responsive - ------------- - , "sm:space-x-2" - ] - [ -- 1 - case searchTerm of - Just _ -> - brick - [ onClick (TracksMsg ClearSearch) - , title "Clear search" - ] - [ "cursor-pointer" - , "mt-px" - ] - [ Icons.clear 16 Inherit ] - - Nothing -> - nothing - - -- 2 - , brick - [ onClick (TracksMsg ToggleFavouritesOnly) - , title "Toggle favourites-only" - ] - [ "cursor-pointer" ] - [ if favouritesOnly then - Icons.favorite 16 (Color Kit.colorKit.base08) - - else - Icons.favorite_border 16 Inherit - ] - - -- 3 - , case scene of - Covers -> - brick - [ attribute "title" "Switch to list view" - , List - |> ChangeScene - |> TracksMsg - |> onClick - ] - [ "ml-6" - , "mr-px" - , "cursor-pointer" - ] - [ chunk - [ "pl-1" ] - [ Icons.notes 18 Inherit ] - ] - - List -> - brick - [ attribute "title" "Switch to cover view" - , Covers - |> ChangeScene - |> TracksMsg - |> onClick - ] - [ "cursor-pointer" - , "mr-px" - ] - [ chunk - [ "pl-1" ] - [ Icons.burst_mode 20 Inherit ] - ] - - -- 4 - , brick - [ Mouse.onClick (TracksMsg << ShowViewMenu grouping) - , title "View settings" - ] - [ "cursor-pointer" ] - [ Icons.more_vert 16 Inherit ] - - -- 5 - , case selectedPlaylist of - Just playlist -> - brick - [ onClick DeselectPlaylist - , title "Deactivate playlist" - - -- - , bgColor - |> Maybe.withDefault Kit.colorKit.base01 - |> Color.toCssString - |> style "background-color" - ] - [ "antialiased" - , "cursor-pointer" - , "duration-500" - , "font-bold" - , "leading-none" - , "px-1" - , "py-1" - , "rounded" - , "truncate" - , "text-white-90" - , "text-xxs" - , "transition" - - -- Dark mode - ------------ - , "dark:text-white-60" - ] - [ chunk - [ "px-px", "pt-px" ] - [ text playlist.name ] - ] - - Nothing -> - nothing - ] - ] - , ----------------------------------------- - -- Part 2 - ----------------------------------------- - Navigation.localWithTabindex - tabindex_ - [ ( Icon Icons.waves - , Label "Collections & Playlists" Hidden - , if pressedShift then - PerformMsg AssistWithSelectingPlaylist - - else - NavigateToPage (Page.Playlists UI.Playlists.Page.Index) - ) - , ( Icon Icons.schedule - , Label "Queue" Hidden - , if pressedShift then - PerformMsg (ChangeUrlUsingPage <| Page.Queue UI.Queue.Page.History) - - else - NavigateToPage (Page.Queue UI.Queue.Page.Index) - ) - , ( if volume == 0 then - Icon Icons.volume_off - - else if volume < 0.5 then - Icon Icons.volume_down - - else - Icon Icons.volume_up - , Label "Volume" Hidden - , if pressedShift then - if volume == 0 then - PerformMsg (AdjustVolume 0.5) - - else - PerformMsg (AdjustVolume 0) - - else - PerformMsg (ToggleVolumeSlider <| ifThenElse showVolumeSlider Off On) - ) - ] - , ----------------------------------------- - -- Part 3 - ----------------------------------------- - if showVolumeSlider then - chunk - [ "absolute" - , "bg-white" - , "px-4" - , "py-3" - , "right-0" - , "rounded-bl" - , "shadow-lg" - , "top-full" - , "z-40" - - -- Dark mode - ------------ - , "dark:bg-darkest-hour" - , "dark:shadow-[rgba(0,0,0,.175)]" - ] - [ chunk - [ "leading-[0px]" - , "my-1" - , "pt-px" - , "text-[0px]" - ] - [ slab - Html.input - [ A.type_ "range" - , A.min "0" - , A.max "1" - , A.step "0.0125" - , A.value (String.fromFloat volume) - - -- - , E.onBlur SaveEnclosedUserData - , E.onInput (String.toFloat >> Maybe.unwrap Bypass AdjustVolume) - ] - [ "range-slider" ] - [] - ] - ] - - else - nothing - ] - - -noTracksView : List String -> Int -> Int -> Int -> Maybe User.Method -> Html UI.Msg -noTracksView processingContext amountOfSources amountOfTracks _ userLayerMethod = - chunk - [ "no-tracks-view" - - -- - , "flex" - , "flex-grow" - ] - [ Kit.centeredContent - [ if List.length processingContext > 0 then - message "Processing Tracks" - - else if amountOfSources == 0 then - chunk - [ "flex" - , "flex-col" - , "items-center" - , "justify-center" - , "px-3" - ] - [ slab - Html.img - [ A.src "images/diffuse-dark.svg" - , A.width 190 - ] - [ "dark:hidden" ] - [] - - -- - , slab - Html.img - [ A.src "images/diffuse-light.svg" - , A.width 190 - ] - [ "hidden dark:block" ] - [] - - -- - , chunk - [ "italic" - , "max-w-sm" - , "mt-6" - , "text-base05" - , "text-center" - , "text-sm" - - -- Dark mode - ------------ - , "dark:text-base03" - ] - [ Html.text "Play music" - , inline [ "not-italic", "font-normal", "inline-block", "mx-1", "pr-px" ] [ Html.text " ♫ " ] - , Html.text """from your Dropbox, -IPFS node, Amazon S3 bucket, or any other -cloud/distributed storage service you use. - """ - ] - - -- - , chunk - [ "flex", "mt-5", "space-x-3" ] - [ Kit.button - Kit.Normal - InsertDemo - (Html.text "Insert Demo") - , Kit.buttonWithColor - Kit.Accent - Kit.Filled - (ChangeUrlUsingPage <| Page.Sources Sources.New) - (Html.text "Add Music") - , case userLayerMethod of - Just method -> - Kit.buttonWithColor - Kit.Gray - Kit.Filled - (SyncingMsg Syncing.StopSync) - (text "Stop syncing") - - Nothing -> - Kit.buttonWithOptions - Html.button - [ Mouse.onClick (SyncingMsg << Syncing.ShowSyncDataMenu) ] - Kit.Gray - Kit.Filled - Nothing - (Html.text "Sync data") - ] - - -- - , chunk - [ "mt-4" ] - [ slab - Html.a - [ A.href "about/" - , A.target "_blank" - ] - [ "border-b" - , "border-current" - , "inline-block" - , "leading-snug" - , "text-base05" - , "text-xxs" - , "tracking-widest" - , "uppercase" - - -- Dark mode - ------------ - , "dark:text-base03" - ] - [ Html.text "Learn more" ] - ] - ] - - else if amountOfTracks == 0 then - message "No tracks found" - - else - message "No sources available" - ] - ] - - -message : String -> Html UI.Msg -message m = - chunk - [ "border-b-2" - , "border-current-color" - , "text-sm" - , "font-semibold" - , "leading-snug" - , "pb-1" - ] - [ text m ] diff --git a/src/Core/UI.elm b/src/Core/UI.elm deleted file mode 100644 index cbcf546d4..000000000 --- a/src/Core/UI.elm +++ /dev/null @@ -1,741 +0,0 @@ -module UI exposing (main) - -import Alien -import Browser -import Browser.Events -import Browser.Navigation as Nav -import Common exposing (ServiceWorkerStatus(..), Switch(..)) -import Debouncer.Basic as Debouncer -import Dict -import Equalizer -import InfiniteList -import Json.Decode as Json -import Keyboard -import LastFm -import Maybe.Extra as Maybe -import Notifications -import Random -import Return -import Task -import Time -import Tracks -import UI.Adjunct as Adjunct -import UI.Alfred.State as Alfred -import UI.Audio.State as Audio -import UI.Backdrop as Backdrop -import UI.Common.State as Common -import UI.DnD as DnD -import UI.Equalizer.State as Equalizer -import UI.Interface.State as Interface -import UI.Other.State as Other -import UI.Page as Page -import UI.Playlists.State as Playlists -import UI.Ports as Ports -import UI.Queue.State as Queue -import UI.Queue.Types as Queue -import UI.Routing.State as Routing -import UI.Services.State as Services -import UI.Sources.Form -import UI.Sources.State as Sources -import UI.Sources.Types as Sources -import UI.Syncing.State as Syncing -import UI.Syncing.Types as Syncing -import UI.Tracks.State as Tracks -import UI.Tracks.Types as Tracks -import UI.Types exposing (..) -import UI.User.State.Export as User -import UI.User.State.Import as User -import UI.View exposing (view) -import Url exposing (Url) -import Url.Ext as Url - - - --- ⛩ - - -main : Program Flags Model Msg -main = - Browser.application - { init = init - , view = view - , update = update - , subscriptions = subscriptions - , onUrlChange = UrlChanged - , onUrlRequest = LinkClicked - } - - - --- 🌳 - - -init : Flags -> Url -> Nav.Key -> ( Model, Cmd Msg ) -init flags url key = - let - rewrittenUrl = - Page.rewriteUrl url - - maybePage = - Page.fromUrl rewrittenUrl - - page = - Maybe.withDefault Page.Index maybePage - - serviceWorkerStatus = - if flags.isInstallingServiceWorker then - InstallingInitial - - else - Activated - in - { buildTimestamp = flags.buildTimestamp - , confirmation = Nothing - , currentTime = Time.millisToPosix flags.initialTime - , currentTimeZone = Time.utc - , darkMode = flags.darkMode - , downloading = Nothing - , dnd = DnD.initialModel - , focusedOnInput = False - , isDragging = False - , isLoading = True - , isOnline = flags.isOnline - , isTauri = flags.isTauri - , isTouchDevice = False - , lastFm = LastFm.initialModel - , navKey = key - , page = page - , pressedKeys = [] - , processAutomatically = True - , serviceWorkerStatus = serviceWorkerStatus - , theme = Nothing - , uuidSeed = Random.initialSeed flags.initialTime - , url = url - , version = flags.version - , viewport = flags.viewport - - ----------------------------------------- - -- Audio - ----------------------------------------- - , audioElements = [] - , nowPlaying = Nothing - , progress = Dict.empty - , rememberProgress = True - - ----------------------------------------- - -- Backdrop - ----------------------------------------- - , chosenBackdrop = Nothing - , extractedBackdropColor = Nothing - , fadeInBackdrop = True - , loadedBackdrops = [] - - ----------------------------------------- - -- Debouncing - ----------------------------------------- - , preloadDebouncer = - 30 - |> Debouncer.fromSeconds - |> Debouncer.debounce - |> Debouncer.toDebouncer - , progressDebouncer = - 30 - |> Debouncer.fromSeconds - |> Debouncer.throttle - |> Debouncer.emitWhenUnsettled Nothing - |> Debouncer.toDebouncer - , resizeDebouncer = - 0.25 - |> Debouncer.fromSeconds - |> Debouncer.debounce - |> Debouncer.toDebouncer - , searchDebouncer = - 0.5 - |> Debouncer.fromSeconds - |> Debouncer.debounce - |> Debouncer.toDebouncer - - ----------------------------------------- - -- Equalizer - ----------------------------------------- - , eqSettings = Equalizer.defaultSettings - , showVolumeSlider = False - - ----------------------------------------- - -- Instances - ----------------------------------------- - , alfred = Nothing - , contextMenu = Nothing - , notifications = [] - - ----------------------------------------- - -- Playlists - ----------------------------------------- - , editPlaylistContext = Nothing - , lastModifiedPlaylist = Nothing - , newPlaylistContext = Nothing - , playlists = [] - , playlistToActivate = Nothing - , selectedPlaylist = Nothing - - ----------------------------------------- - -- Queue - ----------------------------------------- - , dontPlay = [] - , playedPreviously = [] - , playingNext = [] - , selectedQueueItem = Nothing - - -- - , repeat = False - , shuffle = False - - ----------------------------------------- - -- Sources - ----------------------------------------- - , processingContext = [] - , processingError = Nothing - , processingNotificationId = Nothing - , sources = [] - , sourceForm = UI.Sources.Form.initialModel - - ----------------------------------------- - -- Tracks - ----------------------------------------- - , cachedCovers = Nothing - , cachedTracks = [] - , cachedTracksOnly = False - , cachingTracksInProgress = [] - , covers = { arranged = [], harvested = [] } - , coverSelectionReducesPool = True - , favourites = [] - , favouritesOnly = False - , grouping = Nothing - , hideDuplicates = False - , scene = Tracks.Covers - , searchResults = Nothing - , searchTerm = Nothing - , selectedCover = Nothing - , selectedTrackIndexes = [] - , sortBy = Tracks.Album - , sortDirection = Tracks.Asc - , tracks = Tracks.emptyCollection - - -- List scene - ------------- - , infiniteList = InfiniteList.init - - ----------------------------------------- - -- 🦉 Nested - ----------------------------------------- - , syncing = Syncing.initialModel url - } - |> Routing.transition - page - |> Return.command - (url - |> Syncing.initialCommand - |> Cmd.map SyncingMsg - ) - |> Return.command - (if Maybe.isNothing maybePage then - Routing.resetUrl key url page - - else - case Url.action url of - [ "authenticate", "dropbox" ] -> - Routing.resetUrl key url page - - _ -> - Cmd.none - ) - |> Return.command - (Task.perform SetCurrentTime Time.now) - |> Return.command - (Task.perform SetCurrentTimeZone Time.here) - - - --- 📣 - - -update : Msg -> Model -> ( Model, Cmd Msg ) -update msg = - case msg of - Bypass -> - Return.singleton - - ----------------------------------------- - -- Alfred - ----------------------------------------- - AssignAlfred a -> - Alfred.assign a - - GotAlfredInput a -> - Alfred.gotInput a - - SelectAlfredItem a -> - Alfred.runAction a - - ----------------------------------------- - -- Audio - ----------------------------------------- - AudioDurationChange a -> - Audio.durationChange a - - AudioEnded a -> - Audio.ended a - - AudioError a -> - Audio.error a - - AudioHasLoaded a -> - Audio.hasLoaded a - - AudioIsLoading a -> - Audio.isLoading a - - AudioPlaybackStateChanged a -> - Audio.playbackStateChanged a - - AudioPreloadDebounce a -> - Audio.preloadDebounce update a - - AudioTimeUpdated a -> - Audio.timeUpdated a - - NoteProgress a -> - Audio.noteProgress a - - NoteProgressDebounce a -> - Audio.noteProgressDebounce update a - - Pause -> - Audio.pause - - Play -> - Audio.play - - Seek a -> - Audio.seek a - - Stop -> - Audio.stop - - TogglePlay -> - Audio.playPause - - ToggleRememberProgress -> - Audio.toggleRememberProgress - - ----------------------------------------- - -- Backdrop - ----------------------------------------- - ExtractedBackdropColor a -> - Backdrop.extractedBackdropColor a - - ChooseBackdrop a -> - Backdrop.chooseBackdrop a - - LoadBackdrop a -> - Backdrop.loadBackdrop a - - ----------------------------------------- - -- Equalizer - ----------------------------------------- - AdjustVolume a -> - Equalizer.adjustVolume a - - ToggleVolumeSlider a -> - Equalizer.toggleVolumeSlider a - - ----------------------------------------- - -- Interface - ----------------------------------------- - AssistWithChangingTheme -> - Interface.assistWithChangingTheme - - Blur -> - Interface.blur - - ChangeTheme a -> - Interface.changeTheme a - - ContextMenuConfirmation a b -> - Interface.contextMenuConfirmation a b - - CopyToClipboard a -> - Interface.copyToClipboard a - - DismissNotification a -> - Common.dismissNotification a - - DnD a -> - Interface.dnd a - - FocusedOnInput -> - Interface.focusedOnInput - - HideOverlay -> - Interface.hideOverlay - - LostWindowFocus -> - Interface.lostWindowFocus - - MsgViaContextMenu a -> - Interface.msgViaContextMenu a - - PreferredColorSchemaChanged a -> - Interface.preferredColorSchemaChanged a - - RemoveNotification a -> - Interface.removeNotification a - - RemoveQueueSelection -> - Interface.removeQueueSelection - - RemoveTrackSelection -> - Interface.removeTrackSelection - - ResizeDebounce a -> - Interface.resizeDebounce update a - - ResizedWindow a -> - Interface.resizedWindow a - - SearchDebounce a -> - Interface.searchDebounce update a - - SetIsTouchDevice a -> - Interface.setIsTouchDevice a - - ShowNotification a -> - Common.showNotification a - - StoppedDragging -> - Interface.stoppedDragging - - ToggleLoadingScreen a -> - Common.toggleLoadingScreen a - - ----------------------------------------- - -- Playlists - ----------------------------------------- - ActivatePlaylist a -> - Playlists.activate a - - AddTracksToPlaylist a -> - Playlists.addTracksToPlaylist a - - AssistWithAddingTracksToCollection a -> - Playlists.assistWithAddingTracksToCollection a - - AssistWithAddingTracksToPlaylist a -> - Playlists.assistWithAddingTracksToPlaylist a - - AssistWithSelectingPlaylist -> - Playlists.assistWithSelectingPlaylist - - ConvertCollectionToPlaylist a -> - Playlists.convertCollectionToPlaylist a - - ConvertPlaylistToCollection a -> - Playlists.convertPlaylistToCollection a - - CreateCollection -> - Playlists.createCollection - - CreatePlaylist -> - Playlists.createPlaylist - - DeactivatePlaylist -> - Playlists.deactivate - - DeletePlaylist a -> - Playlists.delete a - - DeselectPlaylist -> - Playlists.deselect - - ModifyPlaylist -> - Playlists.modify - - MoveTrackInSelectedPlaylist a -> - Playlists.moveTrackInSelected a - - RemoveTracksFromPlaylist a b -> - Playlists.removeTracks a b - - SelectPlaylist a -> - Playlists.select a - - SetPlaylistCreationContext a -> - Playlists.setCreationContext a - - SetPlaylistModificationContext a b -> - Playlists.setModificationContext a b - - ShowPlaylistListMenu a b -> - Playlists.showListMenu a b - - TogglePlaylistVisibility a -> - Playlists.toggleVisibility a - - ----------------------------------------- - -- Routing - ----------------------------------------- - ChangeUrlUsingPage a -> - Common.changeUrlUsingPage a - - LinkClicked a -> - Routing.linkClicked a - - OpenUrlOnNewPage a -> - Routing.openUrlOnNewPage a - - PageChanged a -> - Routing.transition a - - UrlChanged a -> - Routing.urlChanged a - - ----------------------------------------- - -- Services - ----------------------------------------- - ConnectLastFm -> - Services.connectLastFm - - DisconnectLastFm -> - Services.disconnectLastFm - - GotLastFmSession a -> - Services.gotLastFmSession a - - Scrobble a -> - Services.scrobble a - - ----------------------------------------- - -- User - ----------------------------------------- - Export -> - User.export - - ImportFile a -> - User.importFile a - - ImportJson a -> - User.importJson a - - InsertDemo -> - User.insertDemo - - LoadEnclosedUserData a -> - User.loadEnclosedUserData a - - LoadHypaethralUserData a -> - User.loadHypaethralUserData a - - RequestImport -> - User.requestImport - - SaveEnclosedUserData -> - User.saveEnclosedUserData - - ----------------------------------------- - -- ⚗️ Adjunct - ----------------------------------------- - KeyboardMsg a -> - Adjunct.keyboardInput a - - ----------------------------------------- - -- 🦉 Nested - ----------------------------------------- - SyncingMsg a -> - Syncing.update a - - QueueMsg a -> - Queue.update a - - SourcesMsg a -> - Sources.update a - - TracksMsg a -> - Tracks.update a - - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - InstalledServiceWorker -> - Other.installedServiceWorker - - InstallingServiceWorker -> - Other.installingServiceWorker - - RedirectToBrain a -> - Other.redirectToBrain a - - ReloadApp -> - Other.reloadApp - - SetCurrentTime a -> - Other.setCurrentTime a - - SetCurrentTimeZone a -> - Other.setCurrentTimeZone a - - SetIsOnline a -> - Other.setIsOnline a - - - --- 📰 - - -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.batch - [ Ports.fromAlien alien - - ----------------------------------------- - -- Audio - ----------------------------------------- - , Ports.audioDurationChange AudioDurationChange - , Ports.audioEnded AudioEnded - , Ports.audioError AudioError - , Ports.audioPlaybackStateChanged AudioPlaybackStateChanged - , Ports.audioIsLoading AudioIsLoading - , Ports.audioHasLoaded AudioHasLoaded - , Ports.audioTimeUpdated AudioTimeUpdated - , Ports.requestPause (always Pause) - , Ports.requestPlay (always Play) - , Ports.requestPlayPause (always TogglePlay) - , Ports.requestStop (always Stop) - - ----------------------------------------- - -- Backdrop - ----------------------------------------- - , Ports.setAverageBackgroundColor ExtractedBackdropColor - - ----------------------------------------- - -- Interface - ----------------------------------------- - , Browser.Events.onResize Interface.onResize - , Ports.indicateTouchDevice (\_ -> SetIsTouchDevice True) - , Ports.lostWindowFocus (always LostWindowFocus) - , Ports.preferredColorSchemaChanged PreferredColorSchemaChanged - , Ports.showErrorNotification (Notifications.error >> ShowNotification) - , Ports.showStickyErrorNotification (Notifications.stickyError >> ShowNotification) - - ----------------------------------------- - -- Queue - ----------------------------------------- - , Ports.requestNext (\_ -> QueueMsg Queue.Shift) - , Ports.requestPrevious (\_ -> QueueMsg Queue.Rewind) - - ----------------------------------------- - -- Services - ----------------------------------------- - , Ports.scrobble Scrobble - - ----------------------------------------- - -- Tracks - ----------------------------------------- - , Ports.downloadTracksFinished (\_ -> TracksMsg Tracks.DownloadFinished) - , Ports.insertCoverCache (TracksMsg << Tracks.InsertCoverCache) - - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - , Ports.installedNewServiceWorker (\_ -> InstalledServiceWorker) - , Ports.installingNewServiceWorker (\_ -> InstallingServiceWorker) - , Ports.refreshedAccessToken (Alien.broadcast Alien.RefreshedAccessToken >> RedirectToBrain) - , Ports.setIsOnline SetIsOnline - , Sub.map KeyboardMsg Keyboard.subscriptions - , Time.every (60 * 1000) SetCurrentTime - ] - - - --- 👽 - - -alien : Alien.Event -> Msg -alien event = - case ( event.error, Alien.tagFromString event.tag ) of - ( Nothing, Just tag ) -> - translateAlienData tag event.data - - ( Just err, Just tag ) -> - translateAlienError tag event.data err - - _ -> - Bypass - - -translateAlienData : Alien.Tag -> Json.Value -> Msg -translateAlienData tag data = - case tag of - Alien.AddTracks -> - TracksMsg (Tracks.Add data) - - Alien.FinishedProcessingSource -> - SourcesMsg (Sources.FinishedProcessingSource data) - - Alien.FinishedProcessingSources -> - SourcesMsg Sources.FinishedProcessing - - Alien.GotCachedCover -> - TracksMsg (Tracks.GotCachedCover data) - - Alien.HideLoadingScreen -> - ToggleLoadingScreen Off - - Alien.LoadEnclosedUserData -> - LoadEnclosedUserData data - - Alien.LoadHypaethralUserData -> - LoadHypaethralUserData data - - Alien.ReloadTracks -> - TracksMsg (Tracks.Reload data) - - Alien.RemoveTracksByPath -> - TracksMsg (Tracks.RemoveByPaths data) - - Alien.ReportProcessingError -> - SourcesMsg (Sources.ReportProcessingError data) - - Alien.ReportProcessingProgress -> - SourcesMsg (Sources.ReportProcessingProgress data) - - Alien.SearchTracks -> - TracksMsg (Tracks.SetSearchResults data) - - Alien.StartedSyncing -> - SyncingMsg (Syncing.StartedSyncing data) - - Alien.StoreTracksInCache -> - TracksMsg (Tracks.StoredInCache data Nothing) - - Alien.SyncMethod -> - SyncingMsg (Syncing.GotSyncMethod data) - - Alien.UpdateSourceData -> - SourcesMsg (Sources.UpdateSourceData data) - - _ -> - Bypass - - -translateAlienError : Alien.Tag -> Json.Value -> String -> Msg -translateAlienError tag data err = - case tag of - Alien.StoreTracksInCache -> - TracksMsg (Tracks.StoredInCache data <| Just err) - - _ -> - if String.startsWith "There seems to be existing data that's encrypted, I will need the passphrase" err then - SyncingMsg (Syncing.NeedEncryptionKey { error = err }) - - else - ShowNotification (Notifications.stickyError err) diff --git a/src/Core/UI/Adjunct.elm b/src/Core/UI/Adjunct.elm deleted file mode 100644 index 9d8832c93..000000000 --- a/src/Core/UI/Adjunct.elm +++ /dev/null @@ -1,185 +0,0 @@ -module UI.Adjunct exposing (..) - -import Keyboard -import Maybe.Extra as Maybe -import Return -import UI.Alfred.State as Alfred -import UI.Audio.State as Audio -import UI.Commands.State as Commands -import UI.Common.State as Common -import UI.Interface.State exposing (hideOverlay) -import UI.Page as Page -import UI.Playlists.Page as Playlists -import UI.Playlists.State as Playlists -import UI.Queue.Page as Queue -import UI.Queue.State as Queue -import UI.Settings.Page as Settings -import UI.Sources.Page as Sources -import UI.Tracks.State as Tracks -import UI.Types exposing (..) - - - --- 📣 - - -keyboardInput : Keyboard.Msg -> Manager -keyboardInput msg model = - (\m -> - let - skip = - Return.singleton m - in - if m.focusedOnInput && Maybe.isNothing model.alfred then - case m.pressedKeys of - [ Keyboard.Escape ] -> - hideOverlay m - - _ -> - skip - - else if Maybe.isJust model.alfred then - case m.pressedKeys of - [ Keyboard.ArrowDown ] -> - Alfred.selectNext m - - [ Keyboard.ArrowUp ] -> - Alfred.selectPrevious m - - [ Keyboard.Enter ] -> - Alfred.runSelectedAction m - - [ Keyboard.Escape ] -> - hideOverlay m - - -- Meta key - -- - [ Keyboard.Character "K", Keyboard.Meta ] -> - Commands.showPalette m - - -- Ctrl key - -- - [ Keyboard.Character "K", Keyboard.Control ] -> - Commands.showPalette m - - [ Keyboard.Character "L", Keyboard.Control ] -> - Playlists.assistWithSelectingPlaylist m - - _ -> - skip - - else - case m.pressedKeys of - [ Keyboard.Character "[", Keyboard.Control ] -> - Queue.rewind m - - [ Keyboard.Character "]", Keyboard.Control ] -> - Queue.shift m - - [ Keyboard.Character "{", Keyboard.Shift, Keyboard.Control ] -> - case m.nowPlaying of - Just { duration, item, playbackPosition } -> - case duration of - Just d -> - Audio.seek - { trackId = (Tuple.second item.identifiedTrack).id - , progress = (playbackPosition - 10) / d - } - m - - Nothing -> - Return.singleton m - - Nothing -> - Return.singleton m - - [ Keyboard.Character "}", Keyboard.Shift, Keyboard.Control ] -> - case m.nowPlaying of - Just { duration, item, playbackPosition } -> - case duration of - Just d -> - Audio.seek - { trackId = (Tuple.second item.identifiedTrack).id - , progress = (playbackPosition + 10) / d - } - m - - Nothing -> - Return.singleton m - - Nothing -> - Return.singleton m - - -- Meta key - -- - [ Keyboard.Character "K", Keyboard.Meta ] -> - Commands.showPalette m - - -- Ctrl key - -- - [ Keyboard.Character "K", Keyboard.Control ] -> - Commands.showPalette m - - [ Keyboard.Character "L", Keyboard.Control ] -> - Playlists.assistWithSelectingPlaylist m - - [ Keyboard.Character "N", Keyboard.Control ] -> - Tracks.scrollToNowPlaying m - - [ Keyboard.Character "P", Keyboard.Control ] -> - Audio.playPause m - - [ Keyboard.Character "R", Keyboard.Control ] -> - Queue.toggleRepeat m - - [ Keyboard.Character "S", Keyboard.Control ] -> - Queue.toggleShuffle m - - -- - [ Keyboard.Character "1", Keyboard.Control ] -> - Common.changeUrlUsingPage Page.Index m - - [ Keyboard.Character "2", Keyboard.Control ] -> - Common.changeUrlUsingPage (Page.Playlists Playlists.Index) m - - [ Keyboard.Character "3", Keyboard.Control ] -> - Common.changeUrlUsingPage (Page.Queue Queue.Index) m - - [ Keyboard.Character "8", Keyboard.Control ] -> - Common.changeUrlUsingPage (Page.Sources Sources.Index) m - - [ Keyboard.Character "9", Keyboard.Control ] -> - Common.changeUrlUsingPage (Page.Settings Settings.Index) m - - -- - [ Keyboard.Escape ] -> - if Maybe.isJust m.contextMenu then - Return.singleton { m | contextMenu = Nothing } - - else if Maybe.isJust m.confirmation then - Return.singleton { m | confirmation = Nothing } - - else if Maybe.isJust m.alfred then - Return.singleton { m | alfred = Nothing } - - else if Maybe.isJust m.selectedCover then - Return.singleton { m | selectedCover = Nothing } - - else - case m.page of - Page.Playlists Playlists.Index -> - Return.singleton { m | page = Page.Index } - - Page.Playlists _ -> - Return.singleton { m | page = Page.Playlists Playlists.Index } - - Page.Queue _ -> - Return.singleton { m | page = Page.Index } - - _ -> - skip - - _ -> - skip - ) - { model | pressedKeys = Keyboard.update msg model.pressedKeys } diff --git a/src/Core/UI/Alfred/State.elm b/src/Core/UI/Alfred/State.elm deleted file mode 100644 index 0e646ebd4..000000000 --- a/src/Core/UI/Alfred/State.elm +++ /dev/null @@ -1,162 +0,0 @@ -module UI.Alfred.State exposing (..) - -import Alfred exposing (Alfred) -import Browser.Dom as Dom -import Keyboard -import Process -import Return exposing (return) -import Return.Ext as Return -import Task -import UI.Types as UI exposing (Manager) - - - --- 📣 - - -assign : Alfred UI.Msg -> Manager -assign instance model = - let - pressedKeys = - List.filter - (\k -> - case k of - Keyboard.Meta -> - True - - Keyboard.Control -> - True - - _ -> - False - ) - model.pressedKeys - in - 250 - |> Process.sleep - |> Task.andThen (\_ -> Dom.focus "diffuse__alfred") - |> Task.andThen (\_ -> Dom.setViewportOf "alfred__results" 0 0) - |> Task.attempt (\_ -> UI.Bypass) - -- The "K" key seems to stick when using CMD + K, - -- aka. Meta key + K, to show the command palette. - -- https://github.com/ohanhi/keyboard/issues/14 - |> return { model | alfred = Just instance, pressedKeys = pressedKeys } - - -gotInput : String -> Manager -gotInput searchTerm model = - model.alfred - |> Maybe.map (determineResults searchTerm) - |> (\a -> Return.singleton { model | alfred = a }) - - -runAction : Int -> Manager -runAction index model = - case model.alfred of - Just instance -> - { result = Alfred.getAt index instance - , searchTerm = instance.searchTerm - } - |> instance.action - |> List.map Return.task - |> Cmd.batch - |> return { model | alfred = Nothing } - - Nothing -> - Return.singleton { model | alfred = Nothing } - - -runSelectedAction : Manager -runSelectedAction model = - case model.alfred of - Just instance -> - runAction instance.focus model - - Nothing -> - Return.singleton model - - -scrollToFocus : Manager -scrollToFocus model = - let - task = - Task.map3 - (\innerE outerE outerV -> - outerV.viewport.y + innerE.element.y - outerE.element.y - 9 - ) - (Dom.getElement "alfred__results__focus") - (Dom.getElement "alfred__results") - (Dom.getViewportOf "alfred__results") - in - task - |> Task.andThen (\a -> Dom.setViewportOf "alfred__results" 0 a) - |> Task.attempt (\_ -> UI.Bypass) - |> return model - - -selectNext : Manager -selectNext model = - case model.alfred of - Just instance -> - let - total = - Alfred.length instance - in - instance - |> (\i -> { i | focus = min (i.focus + 1) (total - 1) }) - |> (\i -> { model | alfred = Just i }) - |> scrollToFocus - - Nothing -> - Return.singleton model - - -selectPrevious : Manager -selectPrevious model = - case model.alfred of - Just instance -> - instance - |> (\i -> { i | focus = max (i.focus - 1) 0 }) - |> (\i -> { model | alfred = Just i }) - |> scrollToFocus - - Nothing -> - Return.singleton model - - - --- ⚗️ - - -determineResults : String -> Alfred UI.Msg -> Alfred UI.Msg -determineResults searchTerm alfred = - let - lowerSearchTerm = - searchTerm - |> String.toLower - |> String.trim - in - if String.length lowerSearchTerm > 0 then - { alfred - | focus = 0 - , searchTerm = - Just searchTerm - , results = - List.map - (\group -> - group.items - |> List.filter - (.title >> String.toLower >> String.contains lowerSearchTerm) - |> (\items -> - { group | items = items } - ) - ) - alfred.index - } - - else - { alfred - | focus = 0 - , searchTerm = Nothing - , results = alfred.index - } diff --git a/src/Core/UI/Audio/State.elm b/src/Core/UI/Audio/State.elm deleted file mode 100644 index ffe0dfe78..000000000 --- a/src/Core/UI/Audio/State.elm +++ /dev/null @@ -1,374 +0,0 @@ -module UI.Audio.State exposing (..) - -import Base64 -import Common exposing (boolToString) -import Debouncer.Basic as Debouncer -import Dict -import LastFm -import List.Extra as List -import MediaSession -import Return exposing (return) -import Return.Ext as Return exposing (communicate) -import Tracks -import UI.Audio.Types exposing (..) -import UI.Common.State as Common -import UI.Common.Types exposing (DebounceManager) -import UI.Ports as Ports -import UI.Queue.State as Queue -import UI.Types as UI exposing (Manager, Msg(..)) -import UI.User.State.Export as User - - - --- 📣 ░░ EVENTS - - -durationChange : DurationChangeEvent -> Manager -durationChange { trackId, duration } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying -> - if nowPlaying.duration == Nothing || nowPlaying.duration /= Just duration then - durationChange_ { trackId = trackId, duration = duration } nowPlaying - - else - -- Ignore repeating events - Return.singleton - ) - - -durationChange_ : DurationChangeEvent -> NowPlaying -> Manager -durationChange_ { trackId, duration } nowPlaying model = - let - ( identifiers, track ) = - nowPlaying.item.identifiedTrack - - maybeCover = - List.find - (\c -> List.member trackId c.trackIds) - model.covers.arranged - - coverPrep = - Maybe.map - (\cover -> - { cacheKey = Base64.encode (Tracks.coverKey cover.variousArtists track) - , trackFilename = identifiers.filename - , trackPath = track.path - , trackSourceId = track.sourceId - , variousArtists = boolToString cover.variousArtists - } - ) - maybeCover - - coverLoaded = - case ( maybeCover, model.cachedCovers ) of - ( Just cover, Just cachedCovers ) -> - let - key = - Base64.encode (Tracks.coverKey cover.variousArtists track) - in - Dict.member key cachedCovers - - _ -> - False - - metadata = - { album = track.tags.album - , artist = track.tags.artist - , title = track.tags.title - - -- - , coverPrep = coverPrep - } - in - model - |> replaceNowPlaying { nowPlaying | coverLoaded = coverLoaded, duration = Just duration } - |> Return.command (Ports.setMediaSessionMetadata metadata) - |> Return.command (Ports.resetScrobbleTimer { duration = duration, trackId = trackId }) - |> Return.andThen (notifyScrobblersOfTrackPlaying { duration = duration }) - - -error : ErrorAudioEvent -> Manager -error { trackId, code } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying -> - replaceNowPlaying - (case code of - 2 -> - { nowPlaying | loadingState = NetworkError } - - 3 -> - { nowPlaying | loadingState = DecodeError } - - 4 -> - { nowPlaying | loadingState = NotSupportedError } - - _ -> - nowPlaying - ) - ) - - -ended : GenericAudioEvent -> Manager -ended { trackId } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying model -> - if model.repeat then - Return.command - (case nowPlaying.duration of - Just duration -> - Ports.resetScrobbleTimer { duration = duration, trackId = trackId } - - Nothing -> - Cmd.none - ) - (play model) - - else - Return.andThen - (if Maybe.map (\d -> Tracks.shouldNoteProgress { duration = d }) nowPlaying.duration == Just True then - noteProgress { trackId = trackId, progress = 1.0 } - - else - Return.singleton - ) - (Queue.shift model) - ) - - -hasLoaded : GenericAudioEvent -> Manager -hasLoaded { trackId } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying -> - replaceNowPlaying { nowPlaying | loadingState = Loaded } - ) - - -isLoading : GenericAudioEvent -> Manager -isLoading { trackId } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying -> - replaceNowPlaying { nowPlaying | loadingState = Loading } - ) - - -playbackStateChanged : PlaybackStateEvent -> Manager -playbackStateChanged { trackId, isPlaying } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying model -> - { model | nowPlaying = Just { nowPlaying | isPlaying = isPlaying } } - |> Return.singleton - |> Return.command - (if isPlaying then - Ports.startScrobbleTimer () - - else - Ports.pauseScrobbleTimer () - ) - |> Return.command - (Ports.setMediaSessionPlaybackState - (if isPlaying then - MediaSession.states.playing - - else - MediaSession.states.paused - ) - ) - ) - - -timeUpdated : TimeUpdatedEvent -> Manager -timeUpdated { trackId, currentTime, duration } = - onlyIfMatchesNowPlaying - { trackId = trackId } - (\nowPlaying model -> - let - dur = - Maybe.withDefault 0 duration - in - { model | nowPlaying = Just { nowPlaying | duration = duration, playbackPosition = currentTime } } - |> (if Tracks.shouldNoteProgress { duration = dur } then - { trackId = trackId - , progress = currentTime / dur - } - |> NoteProgress - |> Debouncer.provideInput - |> NoteProgressDebounce - |> Return.task - |> Return.communicate - - else - Return.singleton - ) - |> Return.command - (case duration of - Just d -> - Ports.setMediaSessionPositionState - { currentTime = currentTime - , duration = d - } - - Nothing -> - Cmd.none - ) - ) - - - --- 📣 ░░ COMMANDS - - -pause : Manager -pause model = - case model.nowPlaying of - Just { item } -> - communicate - (Ports.pause - { trackId = (Tuple.second item.identifiedTrack).id - } - ) - model - - Nothing -> - Return.singleton model - - -playPause : Manager -playPause model = - case model.nowPlaying of - Just { isPlaying } -> - if isPlaying then - pause model - - else - play model - - Nothing -> - play model - - -play : Manager -play model = - case model.nowPlaying of - Just { item } -> - communicate - (Ports.play - { trackId = (Tuple.second item.identifiedTrack).id - , volume = model.eqSettings.volume - } - ) - model - - Nothing -> - Queue.shift model - - -seek : { trackId : String, progress : Float } -> Manager -seek { trackId, progress } = - { percentage = progress, trackId = trackId } - |> Ports.seek - |> Return.communicate - - -stop : Manager -stop model = - model.audioElements - |> List.filter (.isPreload >> (==) True) - |> (\a -> { model | audioElements = a }) - |> Queue.changeActiveItem Nothing - |> Return.effect_ - (\m -> - Ports.renderAudioElements - { items = m.audioElements - , play = Nothing - , volume = m.eqSettings.volume - } - ) - - - --- 📣 - - -noteProgress : { trackId : String, progress : Float } -> Manager -noteProgress { trackId, progress } model = - let - updatedProgressTable = - if not model.rememberProgress then - model.progress - - else if progress > 0.975 then - Dict.remove trackId model.progress - - else - Dict.insert trackId progress model.progress - in - if model.rememberProgress then - User.saveProgress { model | progress = updatedProgressTable } - - else - Return.singleton model - - -noteProgressDebounce : DebounceManager -noteProgressDebounce = - Common.debounce - .progressDebouncer - (\d m -> { m | progressDebouncer = d }) - UI.NoteProgressDebounce - - -notifyScrobblersOfTrackPlaying : { duration : Float } -> Manager -notifyScrobblersOfTrackPlaying { duration } model = - case model.nowPlaying of - Just { item } -> - { duration = round duration - , msg = UI.Bypass - , track = Tuple.second item.identifiedTrack - } - |> LastFm.nowPlaying model.lastFm - |> return model - - Nothing -> - Return.singleton model - - -preloadDebounce : DebounceManager -preloadDebounce = - Common.debounce - .preloadDebouncer - (\d m -> { m | preloadDebouncer = d }) - UI.AudioPreloadDebounce - - -toggleRememberProgress : Manager -toggleRememberProgress model = - User.saveSettings { model | rememberProgress = not model.rememberProgress } - - - --- 🛠️ - - -onlyIfMatchesNowPlaying : { trackId : String } -> (NowPlaying -> Manager) -> Manager -onlyIfMatchesNowPlaying { trackId } fn model = - case model.nowPlaying of - Just ({ item } as nowPlaying) -> - if trackId == (Tuple.second item.identifiedTrack).id then - fn nowPlaying model - - else - Return.singleton model - - Nothing -> - Return.singleton model - - -replaceNowPlaying : NowPlaying -> Manager -replaceNowPlaying np model = - Return.singleton { model | nowPlaying = Just np } diff --git a/src/Core/UI/Audio/Types.elm b/src/Core/UI/Audio/Types.elm deleted file mode 100644 index 6b58a0174..000000000 --- a/src/Core/UI/Audio/Types.elm +++ /dev/null @@ -1,69 +0,0 @@ -module UI.Audio.Types exposing (..) - -import Queue -import Tracks exposing (IdentifiedTrack) - - - --- 🌳 - - -type AudioLoadingState - = Loading - | Loaded - -- Errors - | DecodeError - | NetworkError - | NotSupportedError - - -type alias CoverPrep = - { cacheKey : String - , trackFilename : String - , trackPath : String - , trackSourceId : String - , variousArtists : String - } - - -type alias NowPlaying = - { coverLoaded : Bool - , duration : Maybe Float - , isPlaying : Bool - , item : Queue.Item - , loadingState : AudioLoadingState - , playbackPosition : Float - } - - - --- 🌳 ░░ EVENTS - - -type alias DurationChangeEvent = - { trackId : String, duration : Float } - - -type alias ErrorAudioEvent = - { trackId : String, code : Int } - - -type alias GenericAudioEvent = - { trackId : String } - - -type alias PlaybackStateEvent = - { trackId : String, isPlaying : Bool } - - -type alias TimeUpdatedEvent = - { trackId : String, currentTime : Float, duration : Maybe Float } - - - --- 🛠️ - - -nowPlayingIdentifiedTrack : NowPlaying -> IdentifiedTrack -nowPlayingIdentifiedTrack { item } = - item.identifiedTrack diff --git a/src/Core/UI/Backdrop.elm b/src/Core/UI/Backdrop.elm deleted file mode 100644 index 2bc1481c4..000000000 --- a/src/Core/UI/Backdrop.elm +++ /dev/null @@ -1,251 +0,0 @@ -module UI.Backdrop exposing (..) - -import Chunky exposing (..) -import Color -import Html exposing (Html) -import Html.Attributes exposing (src, style) -import Html.Events exposing (on) -import Html.Lazy as Lazy -import Json.Decode -import Return exposing (return) -import UI.Ports as Ports -import UI.Types exposing (..) -import UI.User.State.Export as User - - - --- ⛩ - - -default : String -default = - "21.jpg" - - -options : List ( String, String ) -options = - [ ( "1.jpg", "Option 1" ) - , ( "2.jpg", "Option 2" ) - , ( "3.jpg", "Option 3" ) - , ( "4.jpg", "Option 4" ) - , ( "5.jpg", "Option 5" ) - , ( "6.jpg", "Option 6" ) - , ( "7.jpg", "Option 7" ) - , ( "8.jpg", "Option 8" ) - , ( "9.jpg", "Option 9" ) - , ( "10.jpg", "Option 10" ) - , ( "11.jpg", "Option 11" ) - , ( "12.jpg", "Option 12" ) - , ( "13.jpg", "Option 13" ) - , ( "14.jpg", "Option 14" ) - , ( "15.jpg", "Option 15" ) - , ( "16.jpg", "Option 16" ) - , ( "17.jpg", "Option 17" ) - , ( "18.jpg", "Option 18" ) - , ( "19.jpg", "Option 19" ) - , ( "20.jpg", "Option 20" ) - , ( "21.jpg", "Option 21 (default)" ) - , ( "22.jpg", "Option 22" ) - , ( "23.jpg", "Option 23" ) - , ( "24.jpg", "Option 24" ) - , ( "25.jpg", "Option 25" ) - , ( "26.jpg", "Option 26" ) - , ( "27.jpg", "Option 27" ) - , ( "28.jpg", "Option 28" ) - , ( "29.jpg", "Option 29" ) - , ( "30.jpg", "Option 30" ) - ] - - - --- 📣 - - -extractedBackdropColor : { r : Int, g : Int, b : Int } -> Manager -extractedBackdropColor { r, g, b } model = - Return.singleton { model | extractedBackdropColor = Just (Color.rgb255 r g b) } - - -chooseBackdrop : String -> Manager -chooseBackdrop backdrop model = - User.saveSettings { model | chosenBackdrop = Just backdrop } - - -loadBackdrop : String -> Manager -loadBackdrop backdrop model = - return - { model | loadedBackdrops = model.loadedBackdrops ++ [ backdrop ] } - (Ports.pickAverageBackgroundColor backdrop) - - -setDefault : Manager -setDefault model = - Return.singleton { model | chosenBackdrop = Just default } - - - --- 🗺 - - -view : Model -> Html Msg -view model = - chunk - [ "fixed" - , "-inset-px" - , "z-0" - ] - [ Lazy.lazy chosen model.chosenBackdrop - , Lazy.lazy2 loaded model.loadedBackdrops model.fadeInBackdrop - - -- Shadow - --------- - , brick - [ style "background" "linear-gradient(#0000, rgba(0, 0, 0, 0.175))" ] - [ "absolute" - , "bottom-0" - , "h-64" - , "inset-x-0" - , "z-10" - ] - [] - ] - - -backgroundImage : String -> Html.Attribute msg -backgroundImage backdrop = - style "background-image" ("url(images/Background/" ++ backdrop ++ ")") - - -backgroundPositioning : String -> Html.Attribute msg -backgroundPositioning filename = - case filename of - "2.jpg" -> - style "background-position" "center 68%" - - "3.jpg" -> - style "background-position" "center 30%" - - "4.jpg" -> - style "background-position" "center 96.125%" - - "6.jpg" -> - style "background-position" "center 40%" - - "11.jpg" -> - style "background-position" "center 67.25%" - - "19.jpg" -> - style "background-position" "center 13%" - - "20.jpg" -> - style "background-position" "center 39.75%" - - "21.jpg" -> - style "background-position" "center 52.5%" - - "22.jpg" -> - style "background-position" "center top" - - "23.jpg" -> - style "background-position" "center 92.5%" - - "24.jpg" -> - style "background-position" "center top" - - "25.jpg" -> - style "background-position" "center 50%" - - "27.jpg" -> - style "background-position" "center top" - - _ -> - style "background-position" "center bottom" - - - ------------------------------------------ --- ㊙️ ------------------------------------------ - - -chosen : Maybe String -> Html Msg -chosen maybeChosen = - case maybeChosen of - Just c -> - let - loadingDecoder = - c - |> LoadBackdrop - |> Json.Decode.succeed - in - slab - Html.img - [ on "load" loadingDecoder - , src ("images/Background/" ++ c) - , style "opacity" "0.00001" - ] - [ "fixed" - , "h-px" - , "left-full" - , "overflow-hidden" - , "top-full" - , "w-px" - ] - [] - - Nothing -> - nothing - - -loaded : List String -> Bool -> Html Msg -loaded list fadeIn = - let - amount = - List.length list - - indexedMapFn idx = - image fadeIn (idx + 1 < amount) - in - list - |> List.indexedMap indexedMapFn - |> raw - - -image : Bool -> Bool -> String -> Html msg -image fadeIn isPrevious loadedBackdrop = - let - defaultClasses = - [ "bg-cover" - , "fixed" - , "inset-0" - - -- Opacity - ---------- - , if isPrevious || not fadeIn then - "opacity-100" - - else - "opacity-0" - ] - - animationClasses = - if not isPrevious && fadeIn then - [ "animation-2s" - , "animation-delay-50ms" - , "animation-fadeIn" - , "animation-fill-forwards" - , "animation-once" - ] - - else - [] - in - brick - [ backgroundImage loadedBackdrop - , backgroundPositioning loadedBackdrop - ] - (List.append - defaultClasses - animationClasses - ) - [] diff --git a/src/Core/UI/Commands/Alfred.elm b/src/Core/UI/Commands/Alfred.elm deleted file mode 100644 index 1fab0dcd9..000000000 --- a/src/Core/UI/Commands/Alfred.elm +++ /dev/null @@ -1,492 +0,0 @@ -module UI.Commands.Alfred exposing (commands, palette) - -import Alfred exposing (..) -import Conditional exposing (ifThenElse) -import List.Extra as List -import Material.Icons.Round as Icons -import Playlists.Matching -import Tracks exposing (Grouping(..), SortBy(..)) -import UI.Page as Page -import UI.Queue.Types as Queue -import UI.Sources.Page as Sources -import UI.Sources.Types as Sources -import UI.Tracks.Types as Tracks -import UI.Types as UI - - -palette : UI.Model -> Alfred UI.Msg -palette model = - Alfred.create - { action = action - , index = commands model - , message = "Run a command." - , operation = Query - } - - - --- ⛰ - - -commands : UI.Model -> List (Alfred.Group UI.Msg) -commands model = - [ { name = Just "Currently playing", items = nowPlayingCommands model } - , { name = Just "Track selection", items = selectionCommands model } - , { name = Just "Collection / Playlist", items = playlistCommands model } - , { name = Just "Tracks", items = tracksCommands model } - , { name = Just "View", items = viewCommands model } - , { name = Just "Playback", items = playbackCommands model } - , { name = Just "Sources", items = sourcesCommands model } - , { name = Just "Data", items = dataCommands model } - , { name = Just "Misc", items = miscCommands model } - ] - - - --- - - -dataCommands model = - [ { icon = Just (Icons.offline_bolt 16) - , title = "Clear tracks cache" - , value = Command (UI.TracksMsg Tracks.ClearCache) - } - , { icon = Just (Icons.save 16) - , title = "Download data snapshot" - , value = Command UI.Export - } - , { icon = Just (Icons.save 16) - , title = "Import data snapshot (⚠️ will override current data)" - , value = Command UI.RequestImport - } - ] - - -miscCommands model = - [ { icon = Just (Icons.help 16) - , title = "Open help" - , value = Command (UI.OpenUrlOnNewPage "./about/#UI") - } - ] - - -nowPlayingCommands : UI.Model -> List (Item UI.Msg) -nowPlayingCommands model = - case model.nowPlaying of - Just { item } -> - let - ( queueItemIdentifiers, _ ) = - item.identifiedTrack - - identifiedTrack = - model.tracks.harvested - |> List.getAt queueItemIdentifiers.indexInList - |> Maybe.withDefault item.identifiedTrack - - ( identifiers, track ) = - identifiedTrack - in - [ { icon = Just (Icons.search 16) - , title = "Show current track in list" - , value = Command (UI.TracksMsg Tracks.ScrollToNowPlaying) - } - - -- - , { icon = Just (Icons.favorite 14) - , title = ifThenElse identifiers.isFavourite "Remove favourite" "Mark as favourite" - , value = Command (UI.TracksMsg <| Tracks.ToggleFavourite identifiers.indexInList) - } - - -- - , { icon = Just (Icons.queue_music 16) - , title = "Add current track to collection" - , value = Command (UI.AssistWithAddingTracksToCollection <| [ identifiedTrack ]) - } - - -- - , { icon = Just (Icons.queue_music 16) - , title = "Add current track to playlist" - , value = Command (UI.AssistWithAddingTracksToPlaylist <| [ identifiedTrack ]) - } - - -- - , { icon = Just (Icons.offline_bolt 16) - , title = "Add current track to cache" - , value = - [ track ] - |> Tracks.StoreInCache - |> UI.TracksMsg - |> Command - } - ] - - Nothing -> - [] - - -playbackCommands model = - [ if Maybe.map .isPlaying model.nowPlaying == Just True then - { icon = Just (Icons.pause 16) - , title = "Pause" - , value = Command UI.TogglePlay - } - - else - { icon = Just (Icons.play_arrow 16) - , title = "Play" - , value = Command UI.TogglePlay - } - - -- - , { icon = Just (Icons.fast_rewind 18) - , title = "Previous track" - , value = Command (UI.QueueMsg Queue.Rewind) - } - , { icon = Just (Icons.fast_forward 18) - , title = "Next track" - , value = Command (UI.QueueMsg Queue.Shift) - } - , { icon = Just (Icons.repeat 16) - , title = toggle model.repeat "repeat" - , value = Command (UI.QueueMsg Queue.ToggleRepeat) - } - , { icon = Just (Icons.shuffle 16) - , title = toggle model.shuffle "shuffle" - , value = Command (UI.QueueMsg Queue.ToggleShuffle) - } - ] - - -playlistCommands model = - let - selection = - case model.selectedPlaylist of - Just playlist -> - let - identifiedTracksFromPlaylist = - model.tracks.identified - |> Playlists.Matching.match playlist - |> Tuple.first - - tracksFromPlaylist = - identifiedTracksFromPlaylist - |> (if playlist.collection then - identity - - else - Tracks.sortByIndexInPlaylist - ) - |> List.map Tuple.second - in - [ { icon = Just (Icons.waves 16) - , title = "Deactivate " ++ ifThenElse playlist.collection "collection" "playlist" - , value = Command UI.DeselectPlaylist - } - - -- - , { icon = Just (Icons.update 16) - , title = "Add to queue" - , value = - { inFront = False, tracks = identifiedTracksFromPlaylist } - |> Queue.AddTracks - |> UI.QueueMsg - |> Command - } - - -- - , { icon = Just (Icons.offline_bolt 16) - , title = "Store in cache" - , value = - tracksFromPlaylist - |> Tracks.StoreInCache - |> UI.TracksMsg - |> Command - } - - -- - , { icon = Just (Icons.archive 16) - , title = "Download as zip file" - , value = - tracksFromPlaylist - |> Tracks.Download - { prefixTrackNumber = not playlist.collection - , zipName = playlist.name - } - |> UI.TracksMsg - |> Command - } - - -- - , { icon = Just (Icons.waves 16) - , title = - if playlist.collection then - "Convert to playlist" - - else - "Convert to collection" - , value = - if playlist.collection then - { name = playlist.name } - |> UI.ConvertCollectionToPlaylist - |> Command - - else - { name = playlist.name } - |> UI.ConvertPlaylistToCollection - |> Command - } - ] - - Nothing -> - [] - in - [ { icon = Just (Icons.waves 16) - , title = - case model.selectedPlaylist of - Just _ -> - "Select other collection or playlist" - - Nothing -> - "Select collection or playlist" - , value = Command UI.AssistWithSelectingPlaylist - } - ] - ++ selection - - -selectionCommands model = - let - ( selection, _, amountOfFavs ) = - List.foldr - (\( i, t ) ( acc, selected, favouriteCounter ) -> - case List.findIndex ((==) i.indexInList) selected of - Just s -> - ( ( i, t ) :: acc - , List.removeAt s selected - , ifThenElse i.isFavourite (favouriteCounter + 1) favouriteCounter - ) - - Nothing -> - ( acc, selected, favouriteCounter ) - ) - ( [] - , model.selectedTrackIndexes - , 0 - ) - model.tracks.harvested - in - case selection of - [] -> - [] - - tracks -> - List.concat - [ [ { icon = Just (Icons.queue_music 16) - , title = "Add current selection to collection" - , value = Command (UI.AssistWithAddingTracksToCollection tracks) - } - , { icon = Just (Icons.queue_music 16) - , title = "Add current selection to playlist" - , value = Command (UI.AssistWithAddingTracksToPlaylist tracks) - } - ] - - -- - , if amountOfFavs > 0 then - [ { icon = Just (Icons.favorite 14) - , title = "Remove current selection from favourites" - , value = Command (UI.TracksMsg <| Tracks.RemoveFavourites tracks) - } - ] - - else - [] - - -- - , if amountOfFavs < List.length selection then - [ { icon = Just (Icons.favorite 14) - , title = "Add current selection to favourites" - , value = Command (UI.TracksMsg <| Tracks.AddFavourites tracks) - } - ] - - else - [] - ] - - -sourcesCommands model = - [ { icon = Just (Icons.sync 16) - , title = "Process sources" - , value = Command (UI.SourcesMsg Sources.Process) - } - - -- - , { icon = Just (Icons.add 16) - , title = "Add new source" - , value = Command (UI.ChangeUrlUsingPage <| Page.Sources Sources.New) - } - ] - - -tracksCommands model = - let - groupCommands = - [ AddedOn, Directory, FirstAlphaCharacter, TrackYear ] - |> (case model.grouping of - Just group -> - List.remove group - - Nothing -> - identity - ) - |> List.map - (\group -> - { icon = - Just (Icons.library_music 16) - , title = - case group of - AddedOn -> - "Group by processing date" - - Directory -> - "Group by directory" - - FirstAlphaCharacter -> - "Group by first letter" - - TrackYear -> - "Group by track year" - , value = - Command (UI.TracksMsg <| Tracks.GroupBy group) - } - ) - |> (\list -> - case model.grouping of - Just _ -> - { icon = Just (Icons.library_music 16) - , title = "Disable grouping" - , value = Command (UI.TracksMsg Tracks.DisableGrouping) - } - :: list - - Nothing -> - list - ) - in - [ { icon = Just (Icons.favorite 14) - , title = toggle model.favouritesOnly "favourites-only mode" - , value = Command (UI.TracksMsg Tracks.ToggleFavouritesOnly) - } - - -- - , { icon = Just (Icons.filter_list 16) - , title = toggle model.cachedTracksOnly "cached-tracks-only mode" - , value = Command (UI.TracksMsg Tracks.ToggleCachedOnly) - } - ] - ++ groupCommands - ++ [ { icon = Just (Icons.filter_list 16) - , title = - if model.hideDuplicates then - "Allow duplicates" - - else - "Remove duplicates" - , value = Command (UI.TracksMsg Tracks.ToggleHideDuplicates) - } - - -- - , { icon = Just (Icons.photo 16) - , title = - if model.coverSelectionReducesPool then - "Track pool is limited to selected cover (Select to disable)" - - else - "Track pool is not restricted by selected cover (Select to enable)" - , value = Command (UI.TracksMsg Tracks.ToggleCoverSelectionReducesPool) - } - ] - - -viewCommands model = - let - sortCommands = - (case Maybe.andThen .autoGenerated model.selectedPlaylist of - Nothing -> - [] - - _ -> - case model.scene of - Tracks.Covers -> - [ Album, Artist ] - - Tracks.List -> - [ Album, Artist, Title ] - ) - |> List.remove - model.sortBy - |> List.map - (\sortBy -> - { icon = - Just (Icons.sort 16) - , title = - case sortBy of - Artist -> - "Sort tracks by artist" - - Album -> - "Sort tracks by album" - - PlaylistIndex -> - "Sort tracks by playlist index" - - Title -> - "Sort tracks by title" - , value = - Command (UI.TracksMsg <| Tracks.SortBy sortBy) - } - ) - in - [ case model.scene of - Tracks.Covers -> - { icon = Just (Icons.notes 16) - , title = "Switch to list view" - , value = Command (UI.TracksMsg <| Tracks.ChangeScene Tracks.List) - } - - Tracks.List -> - { icon = Just (Icons.burst_mode 18) - , title = "Switch to cover view" - , value = Command (UI.TracksMsg <| Tracks.ChangeScene Tracks.Covers) - } - - -- - , { icon = Just (Icons.sort 16) - , title = "Change sort direction" - , value = Command (UI.TracksMsg <| Tracks.SortBy model.sortBy) - } - ] - ++ sortCommands - ++ [ { icon = Just (Icons.brush 14) - , title = "Change application theme" - , value = Command UI.AssistWithChangingTheme - } - ] - - - --- ㊙️ - - -action { result } = - case Maybe.andThen (.value >> Alfred.command) result of - Just msg -> - [ msg ] - - Nothing -> - [] - - -toggle bool suffix = - ifThenElse bool "Disable" "Enable" ++ " " ++ suffix diff --git a/src/Core/UI/Commands/State.elm b/src/Core/UI/Commands/State.elm deleted file mode 100644 index 3e6237811..000000000 --- a/src/Core/UI/Commands/State.elm +++ /dev/null @@ -1,16 +0,0 @@ -module UI.Commands.State exposing (..) - -import UI.Alfred.State as Alfred -import UI.Commands.Alfred -import UI.Types exposing (Manager) - - - --- 📣 - - -showPalette : Manager -showPalette model = - Alfred.assign - (UI.Commands.Alfred.palette model) - model diff --git a/src/Core/UI/Common/State.elm b/src/Core/UI/Common/State.elm deleted file mode 100644 index 7774a1ff1..000000000 --- a/src/Core/UI/Common/State.elm +++ /dev/null @@ -1,149 +0,0 @@ -module UI.Common.State exposing (..) - -import Browser.Navigation as Nav -import Common exposing (..) -import ContextMenu exposing (ContextMenu) -import Debouncer.Basic as Debouncer exposing (Debouncer) -import List.Extra as List -import Maybe.Extra as Maybe -import Monocle.Lens as Lens exposing (Lens) -import Notifications exposing (Notification) -import Return exposing (return) -import UI.Notifications -import UI.Page as Page exposing (Page) -import UI.Playlists.Directory -import UI.Syncing.Types as Syncing -import UI.Types as UI exposing (Manager, Model, Msg) -import User.Layer exposing (Method) - - - --- 📣 - - -changeUrlUsingPage : Page -> Manager -changeUrlUsingPage page model = - page - |> Page.toString - |> Nav.pushUrl model.navKey - |> return model - - -debounce : (Model -> Debouncer Msg Msg) -> (Debouncer Msg Msg -> Model -> Model) -> (Debouncer.Msg Msg -> Msg) -> (Msg -> Model -> ( Model, Cmd Msg )) -> Debouncer.Msg Msg -> Manager -debounce getter setter debouncerMsgContainer update debouncerMsg model = - let - ( subModel, subCmd, emittedMsg ) = - Debouncer.update debouncerMsg (getter model) - - mappedCmd = - Cmd.map debouncerMsgContainer subCmd - - updatedModel = - setter subModel model - in - case emittedMsg of - Just emitted -> - updatedModel - |> update emitted - |> Return.command mappedCmd - - Nothing -> - return updatedModel mappedCmd - - -dismissNotification : { id : Int } -> Manager -dismissNotification options model = - options - |> UI.Notifications.dismiss model.notifications - |> Return.map (\n -> { model | notifications = n }) - - -forceTracksRerender : Manager -forceTracksRerender model = - -- - -- TODO: - -- - -- let - -- containerId = - -- case model.scene of - -- Tracks.Covers -> - -- UI.Tracks.Scene.Covers.containerId - -- Tracks.List -> - -- UI.Tracks.Scene.List.containerId - -- in - -- Browser.Dom.setViewportOf containerId 0 1 - -- |> Task.attempt (always UI.Bypass) - -- |> return model - -- - Return.singleton model - - -generateDirectoryPlaylists : Manager -generateDirectoryPlaylists model = - let - nonDirectoryPlaylists = - List.filterNot - (.autoGenerated >> Maybe.isJust) - model.playlists - - directoryPlaylists = - UI.Playlists.Directory.generate - model.sources - model.tracks.untouched - in - [ nonDirectoryPlaylists - , directoryPlaylists - ] - |> List.concat - |> (\c -> { model | playlists = c }) - |> Return.singleton - - -showContextMenuWithModel : UI.Model -> ContextMenu Msg -> ( UI.Model, Cmd UI.Msg ) -showContextMenuWithModel model contextMenu = - Return.singleton { model | contextMenu = Just contextMenu } - - -showNotification : Notification Msg -> Manager -showNotification notification model = - model.notifications - |> UI.Notifications.show notification - |> Return.map (\n -> { model | notifications = n }) - - -showNotificationWithModel : UI.Model -> Notification Msg -> ( UI.Model, Cmd UI.Msg ) -showNotificationWithModel model notification = - showNotification notification model - - -showSyncingNotification : Method -> Manager -showSyncingNotification method model = - let - notification = - Notifications.stickyCasual "Syncing user data ..." - - syncing = - Syncing.Syncing { method = method, notificationId = Notifications.id notification } - in - showNotification - notification - { model | syncing = syncing } - - -toggleLoadingScreen : Switch -> Manager -toggleLoadingScreen switch model = - case switch of - On -> - Return.singleton { model | isLoading = True } - - Off -> - Return.singleton { model | isLoading = False } - - - --- 🛠 - - -modifySingleton : Lens a b -> (b -> b) -> a -> ( a, Cmd msg ) -modifySingleton lens modifier = - Lens.modify lens modifier >> Return.singleton diff --git a/src/Core/UI/Common/Types.elm b/src/Core/UI/Common/Types.elm deleted file mode 100644 index 4853e7a43..000000000 --- a/src/Core/UI/Common/Types.elm +++ /dev/null @@ -1,12 +0,0 @@ -module UI.Common.Types exposing (..) - -import Debouncer.Basic as Debouncer -import UI.Types exposing (Manager, Model, Msg) - - - --- 🌳 - - -type alias DebounceManager = - (Msg -> Model -> ( Model, Cmd Msg )) -> Debouncer.Msg Msg -> Manager diff --git a/src/Core/UI/Demo.elm b/src/Core/UI/Demo.elm deleted file mode 100644 index 2b1c8b799..000000000 --- a/src/Core/UI/Demo.elm +++ /dev/null @@ -1,203 +0,0 @@ -module UI.Demo exposing (tape) - -import Base64 -import Dict -import Json.Encode as Json -import Sources exposing (Service(..), Source) -import Sources.Encoding as Sources -import Time -import Tracks exposing (Favourite, Track) -import Tracks.Encoding as Tracks - - - --- ⛩ - - -tape : Time.Posix -> Json.Value -tape currentTime = - Json.object - [ ( "favourites", Json.list Tracks.encodeFavourite favourites ) - , ( "sources", Json.list Sources.encode sources ) - , ( "tracks", Json.list Tracks.encodeTrack <| tracks currentTime ) - ] - - - --- ㊙️ - - -favourites : List Favourite -favourites = - [ { artist = Just "James Blake" - , title = "Essential Mix (09-17-2011)" - } - ] - - -sources : List Source -sources = - let - key = - "QUtJQTZPUTNFVk1BWFZDRFFINkI=" - |> Base64.decode - |> Result.withDefault "" - - secret = - "Z0hPQkdHRzU1aXc0a0RDbjdjWlRJYTVTUDRZWnpERkRzQnFCYWI4Mg==" - |> Base64.decode - |> Result.withDefault "" - in - [ { id = "15076402187342" - , data = - Dict.fromList - [ ( "accessKey", key ) - , ( "bucketName", "ongaku-ryoho-demo" ) - , ( "directoryPath", "/" ) - , ( "name", "Demo" ) - , ( "region", "us-east-1" ) - , ( "secretKey", secret ) - ] - , directoryPlaylists = True - , enabled = True - , service = AmazonS3 - } - ] - - -tracks : Time.Posix -> List Track -tracks insertedAt = - [ { id = "MTUwNzY0MDIxODczNDIvL0ZyZWUgbXVzaWMvKFNXTDAxMyktb3JpSmFudXMtV0VCLTIwMTQtRlJFRS8wMS1ib25pdGEubXAz" - , path = "Free music/(SWL013)-oriJanus-WEB-2014-FREE/01-bonita.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 1 - - -- - , album = Just "Soulection White Label: 013" - , artist = Just "oriJanus" - , title = "Bonita" - - -- - , genre = Just "Soulection" - , picture = Nothing - , year = Nothing - } - } - , { id = "MTUwNzY0MDIxODczNDIvL0ZyZWUgbXVzaWMvKFNXTDAxMyktb3JpSmFudXMtV0VCLTIwMTQtRlJFRS8wMi02Lm1wMw" - , path = "Free music/(SWL013)-oriJanus-WEB-2014-FREE/02-6.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 2 - - -- - , album = Just "Soulection White Label: 013" - , artist = Just "oriJanus" - , title = "6" - - -- - , genre = Just "Soulection" - , picture = Nothing - , year = Nothing - } - } - , { id = "MTUwNzY0MDIxODczNDIvL0ZyZWUgbXVzaWMvKFNXTDAxMyktb3JpSmFudXMtV0VCLTIwMTQtRlJFRS8wMy1ob3RfcmVtaXhfZnQuX3Rlay5sdW5fJl96aWtvbW8ubXAz" - , path = "Free music/(SWL013)-oriJanus-WEB-2014-FREE/03-hot_remix_ft._tek.lun_&_zikomo.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 3 - - -- - , album = Just "Soulection White Label: 013" - , artist = Just "oriJanus" - , title = "Hot Remix ft. Tek.Lun & Zikomo" - - -- - , genre = Just "Soulection" - , picture = Nothing - , year = Nothing - } - } - , { id = "MTUwNzY0MDIxODczNDIvL0ZyZWUgbXVzaWMvQ29tX1RydWlzZS1DaGVtaWNhbF9MZWdzLTIwMTItRlJFRS8wMS1jb21fdHJ1aXNlLWNoZW1pY2FsX2xlZ3MubXAz" - , path = "Free music/Com_Truise-Chemical_Legs-2012-FREE/01-com_truise-chemical_legs.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 9 - - -- - , album = Just "Adult Swim Singles Project 2012" - , artist = Just "Com Truise" - , title = "Chemical Legs" - - -- - , genre = Nothing - , picture = Nothing - , year = Just 2012 - } - } - , { id = "MTUwNzY0MDIxODczNDIvL0ZyZWUgbXVzaWMvTWFudWVsZV9BdHplbmlfLV8wNF8tX0xpdHRsZV9TdGFyLm1wMw" - , path = "Free music/Manuele_Atzeni_-_04_-_Little_Star.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 4 - - -- - , album = Just "The Miyazaki Tour EP" - , artist = Just "Manuele Atzeni" - , title = "Little Star" - - -- - , genre = Just "Funk" - , picture = Nothing - , year = Nothing - } - } - , { id = "MTUwNzY0MDIxODczNDIvL0ZyZWUgbXVzaWMvUGF0cmlja19MZWVfLV8wMl8tX1F1aXR0aW5fVGltZS5tcDM" - , path = "Free music/Patrick_Lee_-_02_-_Quittin_Time.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 2 - - -- - , album = Just "The Last Thing" - , artist = Just "Patrick Lee" - , title = "Quittin' Time" - - -- - , genre = Just "Electronic" - , picture = Nothing - , year = Nothing - } - } - , { id = "MTUwNzY0MDIxODczNDIvL1JhZGlvL2phbWVzX2JsYWtlLWVzc2VudGlhbF9taXgtc2F0LTA5LTE3LTIwMTEubXAz" - , path = "Radio/james_blake-essential_mix-sat-09-17-2011.mp3" - , sourceId = "15076402187342" - , insertedAt = insertedAt - , tags = - { disc = 1 - , nr = 1 - - -- - , album = Just "Essential Mix-SAT-09-17" - , artist = Just "James Blake" - , title = "Essential Mix (09-17-2011)" - - -- - , genre = Just "Electronic" - , picture = Nothing - , year = Nothing - } - } - ] diff --git a/src/Core/UI/DnD.elm b/src/Core/UI/DnD.elm deleted file mode 100644 index 4ae11ed29..000000000 --- a/src/Core/UI/DnD.elm +++ /dev/null @@ -1,245 +0,0 @@ -module UI.DnD exposing (Environment, Model, Msg, hasDropped, initialModel, isBeingDraggedOver, isDragging, isDraggingOver, listenToEnterLeave, listenToStart, modelSubject, modelTarget, startDragging, stoppedDragging, update) - -import Html exposing (Attribute) -import Html.Events.Extra.Mouse as Mouse -import Html.Events.Extra.Pointer as Pointer - - - --- 🌳 - - -type Model context - = NotDragging - | Dragging { subject : context } - | DraggingOver { subject : context, target : context } - | Dropped { subject : context, target : context } - - -type Msg context - = Start context - | Enter context - | Leave context - | Stop - - -type alias Environment context msg = - { model : Model context - , toMsg : Msg context -> msg - } - - -type alias Response = - { initiated : Bool } - - -initialModel : Model context -initialModel = - NotDragging - - - --- 📣 - - -update : Msg context -> Model context -> ( Model context, Response ) -update msg model = - ( ------------------------------------ - -- Model - ------------------------------------ - case msg of - Start context -> - Dragging { subject = context } - - Enter context -> - case model of - NotDragging -> - NotDragging - - Dragging { subject } -> - DraggingOver { subject = subject, target = context } - - DraggingOver { subject } -> - DraggingOver { subject = subject, target = context } - - Dropped _ -> - NotDragging - - Leave context -> - case model of - NotDragging -> - NotDragging - - Dragging env -> - Dragging env - - DraggingOver { subject, target } -> - if context == target then - Dragging { subject = subject } - - else - model - - Dropped _ -> - NotDragging - - Stop -> - case model of - DraggingOver { subject, target } -> - if subject /= target then - Dropped { subject = subject, target = target } - - else - NotDragging - - _ -> - NotDragging - ------------------------------------ - -- Response - ------------------------------------ - , case msg of - Start _ -> - { initiated = True } - - _ -> - { initiated = False } - ) - - - --- 🔱 ░░ EVENTS & MESSAGES - - -listenToStart : Environment context msg -> context -> Attribute msg -listenToStart { toMsg } context = - Pointer.onWithOptions - "pointerdown" - { stopPropagation = True - , preventDefault = False - } - (\event -> - case ( event.pointer.button, event.isPrimary ) of - ( Mouse.MainButton, True ) -> - toMsg (Start context) - - _ -> - toMsg Stop - ) - - -listenToEnterLeave : Environment context msg -> context -> List (Attribute msg) -listenToEnterLeave { model, toMsg } context = - case model of - NotDragging -> - [] - - _ -> - [ context - |> Enter - |> toMsg - |> always - |> Pointer.onEnter - , context - |> Leave - |> toMsg - |> always - |> Pointer.onLeave - ] - - -startDragging : context -> Msg context -startDragging = - Start - - -stoppedDragging : Msg context -stoppedDragging = - Stop - - - --- 🔱 ░░ MODEL - - -isBeingDraggedOver : context -> Model context -> Bool -isBeingDraggedOver context model = - case model of - DraggingOver { target } -> - context == target - - _ -> - False - - -isDragging : Model context -> Bool -isDragging model = - case model of - NotDragging -> - False - - Dragging _ -> - True - - DraggingOver _ -> - True - - Dropped _ -> - False - - -isDraggingOver : context -> Model context -> Bool -isDraggingOver context model = - case model of - NotDragging -> - False - - Dragging _ -> - False - - DraggingOver { target } -> - target == context - - Dropped _ -> - False - - -hasDropped : Model context -> Bool -hasDropped model = - case model of - Dropped _ -> - True - - _ -> - False - - -modelSubject : Model context -> Maybe context -modelSubject model = - case model of - NotDragging -> - Nothing - - Dragging { subject } -> - Just subject - - DraggingOver { subject } -> - Just subject - - Dropped { subject } -> - Just subject - - -modelTarget : Model context -> Maybe context -modelTarget model = - case model of - NotDragging -> - Nothing - - Dragging _ -> - Nothing - - DraggingOver { target } -> - Just target - - Dropped { target } -> - Just target diff --git a/src/Core/UI/Equalizer/State.elm b/src/Core/UI/Equalizer/State.elm deleted file mode 100644 index d5425338d..000000000 --- a/src/Core/UI/Equalizer/State.elm +++ /dev/null @@ -1,61 +0,0 @@ -module UI.Equalizer.State exposing (..) - -import Common exposing (Switch(..)) -import Equalizer exposing (..) -import Return exposing (return) -import UI.Ports as Ports -import UI.Types exposing (..) - - - --- 📣 - - -adjustVolume : Float -> Manager -adjustVolume volume model = - let - settings = - model.eqSettings - in - return - { model | eqSettings = { settings | volume = volume } } - (adjustKnobUsingPort Volume volume) - - -toggleVolumeSlider : Switch -> Manager -toggleVolumeSlider switch model = - case switch of - On -> - Return.singleton { model | showVolumeSlider = True } - - Off -> - Return.singleton { model | showVolumeSlider = False } - - - --- ⚗️ - - -adjustKnobUsingPort : Knob -> Float -> Cmd Msg -adjustKnobUsingPort knobType value = - Ports.adjustEqualizerSetting - { value = value - , knob = - case knobType of - Low -> - "LOW" - - Mid -> - "MID" - - High -> - "HIGH" - - Volume -> - "VOLUME" - } - - -adjustAllKnobs : Settings -> Cmd Msg -adjustAllKnobs eqSettings = - adjustKnobUsingPort Volume eqSettings.volume diff --git a/src/Core/UI/Interface/State.elm b/src/Core/UI/Interface/State.elm deleted file mode 100644 index ac80ec940..000000000 --- a/src/Core/UI/Interface/State.elm +++ /dev/null @@ -1,261 +0,0 @@ -module UI.Interface.State exposing (..) - -import Alfred -import Debouncer.Basic as Debouncer -import Maybe.Extra as Maybe -import Notifications -import Return exposing (return) -import Return.Ext as Return -import Theme -import Tracks -import UI.Alfred.State as Alfred -import UI.Common.State as Common -import UI.Common.Types exposing (DebounceManager) -import UI.DnD as DnD -import UI.Page as Page -import UI.Playlists.State as Playlists -import UI.Ports as Ports -import UI.Queue.State as Queue -import UI.Theme -import UI.Types exposing (..) -import UI.User.State.Export exposing (saveEnclosedUserData) - - - --- 🔱 - - -assistWithChangingTheme : Manager -assistWithChangingTheme model = - { action = - \{ result } -> - case result of - Just { value } -> - value - |> Alfred.command - |> Maybe.map List.singleton - |> Maybe.withDefault [] - - Nothing -> - [] - , index = - [ { name = Just "Themes" - , items = - List.map - (\theme -> - { icon = Just (theme.icon 16) - , title = theme.title - , value = Alfred.Command (ChangeTheme { id = theme.id }) - } - ) - UI.Theme.list - } - ] - , message = "Choose a theme." - , operation = Alfred.Query - } - |> Alfred.create - |> (\a -> Alfred.assign a model) - - -blur : Manager -blur model = - Return.singleton { model | focusedOnInput = False, pressedKeys = [] } - - -changeTheme : Theme.Id -> Manager -changeTheme id model = - saveEnclosedUserData { model | theme = Just id } - - -contextMenuConfirmation : String -> Msg -> Manager -contextMenuConfirmation conf msg model = - return - { model | confirmation = Just conf } - (Return.task msg) - - -copyToClipboard : String -> Manager -copyToClipboard string = - string - |> Ports.copyToClipboard - |> Return.communicate - - -resizeDebounce : DebounceManager -resizeDebounce = - Common.debounce - .resizeDebouncer - (\d m -> { m | resizeDebouncer = d }) - ResizeDebounce - - -dnd : DnD.Msg Int -> Manager -dnd dragMsg model = - let - ( d, { initiated } ) = - DnD.update dragMsg model.dnd - - m = - if initiated then - { model | dnd = d, isDragging = True } - - else - { model | dnd = d } - in - if DnD.hasDropped d then - case m.page of - Page.Queue _ -> - let - ( from, to ) = - ( Maybe.withDefault 0 <| DnD.modelSubject d - , Maybe.withDefault 0 <| DnD.modelTarget d - ) - - newFuture = - Queue.moveItem - { from = from, to = to, shuffle = m.shuffle } - m.playingNext - in - Queue.fill { m | playingNext = newFuture } - - Page.Index -> - let - trackCanBeMoved = - not m.favouritesOnly && Maybe.isNothing m.searchTerm - in - case m.scene of - Tracks.Covers -> - -- TODO - Return.singleton m - - Tracks.List -> - if trackCanBeMoved then - Playlists.moveTrackInSelected - { to = Maybe.withDefault 0 (DnD.modelTarget d) } - m - - else - "Can't move tracks in a playlist whilst using favourites-only mode, or while searching." - |> Notifications.casual - |> Common.showNotificationWithModel m - - _ -> - Return.singleton m - - else - Return.singleton m - - -focusedOnInput : Manager -focusedOnInput model = - Return.singleton { model | focusedOnInput = True } - - -hideOverlay : Manager -hideOverlay model = - if Maybe.isJust model.contextMenu then - Return.singleton { model | contextMenu = Nothing } - - else if Maybe.isJust model.confirmation then - Return.singleton { model | confirmation = Nothing } - - else if Maybe.isJust model.alfred then - Return.singleton { model | alfred = Nothing } - - else - Return.singleton model - - -lostWindowFocus : Manager -lostWindowFocus model = - Return.singleton { model | focusedOnInput = False, pressedKeys = [] } - - -preferredColorSchemaChanged : { dark : Bool } -> Manager -preferredColorSchemaChanged { dark } model = - Return.singleton { model | darkMode = dark } - - -msgViaContextMenu : Msg -> Manager -msgViaContextMenu msg model = - return - (case msg of - ContextMenuConfirmation _ _ -> - model - - _ -> - { model | confirmation = Nothing, contextMenu = Nothing } - ) - (Return.task msg) - - -removeNotification : { id : Int } -> Manager -removeNotification { id } model = - model.notifications - |> List.filter (Notifications.id >> (/=) id) - |> (\n -> { model | notifications = n }) - |> Return.singleton - - -removeQueueSelection : Manager -removeQueueSelection model = - Return.singleton { model | selectedQueueItem = Nothing } - - -removeTrackSelection : Manager -removeTrackSelection model = - Return.singleton { model | selectedTrackIndexes = [] } - - -resizedWindow : ( Int, Int ) -> Manager -resizedWindow ( width, height ) model = - Return.singleton - { model - | contextMenu = Nothing - , viewport = { height = toFloat height, width = toFloat width } - } - - -searchDebounce : DebounceManager -searchDebounce = - Common.debounce - .searchDebouncer - (\d m -> { m | searchDebouncer = d }) - SearchDebounce - - -setIsTouchDevice : Bool -> Manager -setIsTouchDevice bool model = - Return.singleton { model | isTouchDevice = bool } - - -stoppedDragging : Manager -stoppedDragging model = - let - notDragging = - { model | isDragging = False } - in - -- Depending on where we stopped dragging something, - -- do the appropriate thing. - case model.page of - Page.Queue _ -> - dnd DnD.stoppedDragging notDragging - - Page.Index -> - dnd DnD.stoppedDragging notDragging - - _ -> - Return.singleton notDragging - - - --- MESSAGES - - -onResize : Int -> Int -> Msg -onResize w h = - ( w, h ) - |> ResizedWindow - |> Debouncer.provideInput - |> ResizeDebounce diff --git a/src/Core/UI/Navigation.elm b/src/Core/UI/Navigation.elm deleted file mode 100644 index 28c80194e..000000000 --- a/src/Core/UI/Navigation.elm +++ /dev/null @@ -1,30 +0,0 @@ -module UI.Navigation exposing (Action(..), Icon(..), Label(..), LabelType(..)) - -import Html.Events.Extra.Mouse as Mouse -import Material.Icons.Types exposing (Coloring) -import Svg exposing (Svg) -import UI.Page exposing (Page) - - - --- 🌳 - - -type Action msg - = NavigateToPage Page - | OpenLinkInNewPage String - | PerformMsg msg - | PerformMsgWithMouseEvent (Mouse.Event -> msg) - - -type Icon msg - = Icon (Int -> Coloring -> Svg msg) - - -type Label - = Label String LabelType - - -type LabelType - = Hidden - | Shown diff --git a/src/Core/UI/Notifications.elm b/src/Core/UI/Notifications.elm deleted file mode 100644 index 106df8c5b..000000000 --- a/src/Core/UI/Notifications.elm +++ /dev/null @@ -1,66 +0,0 @@ -module UI.Notifications exposing (Model, dismiss, show, showWithModel) - -import Notifications exposing (..) -import Process -import Task -import UI.Types exposing (Msg(..)) - - - --- 🌳 - - -type alias Model = - List (Notification Msg) - - - --- 📣 - - -dismiss : Model -> { id : Int } -> ( Model, Cmd Msg ) -dismiss collection { id } = - ( List.map - (\notification -> - if Notifications.id notification == id then - Notifications.dismiss notification - - else - notification - ) - collection - , Task.perform - (\_ -> RemoveNotification { id = id }) - (Process.sleep 500) - ) - - -show : Notification Msg -> Model -> ( Model, Cmd Msg ) -show notification collection = - let - existingNotificationIds = - List.map Notifications.id collection - in - if List.member (Notifications.id notification) existingNotificationIds then - -- Don't show duplicate notifications - ( collection - , Cmd.none - ) - - else - ( notification :: collection - -- Hide notification after a certain amount of time, - -- unless it's a sticky notification. - , if (Notifications.options notification).sticky then - Cmd.none - - else - Task.perform - (\_ -> DismissNotification { id = Notifications.id notification }) - (Process.sleep 7500) - ) - - -showWithModel : Model -> Notification Msg -> ( Model, Cmd Msg ) -showWithModel model notification = - show notification model diff --git a/src/Core/UI/Other/State.elm b/src/Core/UI/Other/State.elm deleted file mode 100644 index 72e8c9098..000000000 --- a/src/Core/UI/Other/State.elm +++ /dev/null @@ -1,96 +0,0 @@ -module UI.Other.State exposing (..) - -import Alien -import Common exposing (ServiceWorkerStatus(..)) -import Dict -import Notifications -import Return exposing (return) -import Time -import UI.Common.State as Common -import UI.Ports as Ports -import UI.Types exposing (..) - - - --- 🔱 - - -installedServiceWorker : Manager -installedServiceWorker model = - case model.serviceWorkerStatus of - InstallingNew -> - Return.singleton { model | serviceWorkerStatus = WaitingForActivation } - - _ -> - Return.singleton { model | serviceWorkerStatus = Activated } - - -installingServiceWorker : Manager -installingServiceWorker model = - Return.singleton { model | serviceWorkerStatus = InstallingNew } - - -redirectToBrain : Alien.Event -> Manager -redirectToBrain event model = - return model (Ports.toBrain event) - - -reloadApp : Manager -reloadApp model = - return model (Ports.reloadApp ()) - - -setIsOnline : Bool -> Manager -setIsOnline bool model = - { model | isOnline = bool } - |> Return.singleton - |> Return.command - (case model.nowPlaying of - Just { isPlaying, item } -> - let - trackId = - (Tuple.second item.identifiedTrack).id - in - Ports.reloadAudioNodeIfNeeded - { play = isPlaying - , progress = - if model.rememberProgress then - Dict.get trackId model.progress - - else - Nothing - , trackId = trackId - } - - Nothing -> - Cmd.none - ) - |> Return.andThen - (case ( model.isOnline, bool ) of - ( False, True ) -> - syncHypaethralData - - _ -> - Return.singleton - ) - - -setCurrentTime : Time.Posix -> Manager -setCurrentTime time model = - Return.singleton { model | currentTime = time } - - -setCurrentTimeZone : Time.Zone -> Manager -setCurrentTimeZone zone model = - Return.singleton { model | currentTimeZone = zone } - - - --- ⚗️ - - -syncHypaethralData : Manager -syncHypaethralData model = - model - |> Common.showNotification (Notifications.casual "Syncing") - |> Return.command (Ports.toBrain <| Alien.trigger Alien.SyncHypaethralData) diff --git a/src/Core/UI/Page.elm b/src/Core/UI/Page.elm deleted file mode 100644 index 8ebb0a062..000000000 --- a/src/Core/UI/Page.elm +++ /dev/null @@ -1,245 +0,0 @@ -module UI.Page exposing (Page(..), fromUrl, rewriteUrl, sameBase, sources, toString) - -import Maybe.Extra as Maybe -import Sources exposing (Service(..)) -import UI.Playlists.Page as Playlists -import UI.Queue.Page as Queue -import UI.Settings.Page as Settings -import UI.Sources.Page as Sources -import Url exposing (Url) -import Url.Ext as Url -import Url.Parser exposing (..) -import Url.Parser.Query as Query - - - --- 🌳 - - -type Page - = Index - | Queue Queue.Page - | Playlists Playlists.Page - | Settings Settings.Page - | Sources Sources.Page - - - --- 🔱 - - -fromUrl : Url -> Maybe Page -fromUrl = - parse route - - -rewriteUrl : Url -> Url -rewriteUrl url = - if Maybe.unwrap False (String.contains "path=") url.query then - -- Sometimes we have to use this kind of routing when doing redirections - let - maybePath = - Url.extractQueryParam "path" url - - path = - Maybe.withDefault "" maybePath - in - if - Maybe.unwrap - False - (\f -> String.contains "token=" f || String.contains "code=" f) - url.fragment - then - -- For some oauth stuff, replace the query with the fragment - { url | path = path, query = url.fragment } - - else - { url | path = path } - - else - -- Otherwise do hash-based routing and replace the path with the fragment - { url | path = Maybe.withDefault "" url.fragment } - - -toString : Page -> String -toString = - toString_ >> (++) "#/" - - -toString_ : Page -> String -toString_ page = - case page of - Index -> - "" - - ----------------------------------------- - -- Playlists - ----------------------------------------- - Playlists Playlists.Index -> - "playlists" - - Playlists Playlists.NewCollection -> - "playlists/new/collection" - - Playlists Playlists.NewPlaylist -> - "playlists/new/playlist" - - Playlists (Playlists.Edit playlistName) -> - "playlists/edit/" ++ playlistName - - ----------------------------------------- - -- Queue - ----------------------------------------- - Queue Queue.History -> - "queue/history" - - Queue Queue.Index -> - "queue" - - ----------------------------------------- - -- Settings - ----------------------------------------- - Settings Settings.Data -> - "settings/data" - - Settings Settings.Index -> - "settings" - - Settings Settings.Sync -> - "settings/sync" - - ----------------------------------------- - -- Sources - ----------------------------------------- - Sources (Sources.Edit sourceId) -> - "sources/edit/" ++ sourceId - - Sources Sources.Index -> - "sources" - - Sources Sources.New -> - "sources/new" - - Sources Sources.NewOnboarding -> - "sources/welcome" - - Sources (Sources.NewThroughRedirect Dropbox _) -> - "sources/new/dropbox" - - Sources (Sources.NewThroughRedirect Google _) -> - "sources/new/google" - - Sources (Sources.NewThroughRedirect _ _) -> - "sources/new" - - Sources (Sources.Rename sourceId) -> - "sources/rename/" ++ sourceId - - -{-| Are the bases of these two pages the same? --} -sameBase : Page -> Page -> Bool -sameBase a b = - case ( a, b ) of - ( Playlists _, Playlists _ ) -> - True - - ( Queue _, Queue _ ) -> - True - - ( Settings _, Settings _ ) -> - True - - ( Sources _, Sources _ ) -> - True - - ( Index, Playlists _ ) -> - True - - ( Index, Queue _ ) -> - True - - _ -> - a == b - - - --- 🔱 ░░ SPECIFIC - - -sources : Page -> Maybe Sources.Page -sources page = - case page of - Sources s -> - Just s - - _ -> - Nothing - - - --- ⚗️ - - -route : Parser (Page -> a) a -route = - oneOf - [ map Index top - - ----------------------------------------- - -- Playlists - ----------------------------------------- - , map (Playlists Playlists.Index) (s "playlists") - , map (Playlists << Playlists.Edit) (s "playlists" s "edit" string) - , map (Playlists Playlists.NewCollection) (s "playlists" s "new" s "collection") - , map (Playlists Playlists.NewPlaylist) (s "playlists" s "new" s "playlist") - - ----------------------------------------- - -- Queue - ----------------------------------------- - , map (Queue Queue.Index) (s "queue") - , map (Queue Queue.History) (s "queue" s "history") - - ----------------------------------------- - -- Settings - ----------------------------------------- - , map (Settings Settings.Data) (s "settings" s "data") - , map (Settings Settings.Sync) (s "settings" s "sync") - , map (Settings Settings.Index) (s "settings") - - ----------------------------------------- - -- Sources - ----------------------------------------- - , map (Sources Sources.Index) (s "sources") - , map (Sources << Sources.Edit) (s "sources" s "edit" string) - , map (Sources Sources.New) (s "sources" s "new") - , map (Sources Sources.NewOnboarding) (s "sources" s "welcome") - , map (Sources << Sources.Rename) (s "sources" s "rename" string) - - -- Oauth - -------- - , map - (\token state -> - { codeOrToken = token, state = state } - |> Sources.NewThroughRedirect Dropbox - |> Sources - ) - (s "sources" - s "new" - s "dropbox" - Query.string "access_token" - Query.string "state" - ) - , map - (\code state -> - { codeOrToken = code, state = state } - |> Sources.NewThroughRedirect Google - |> Sources - ) - (s "sources" - s "new" - s "google" - Query.string "code" - Query.string "state" - ) - ] diff --git a/src/Core/UI/Playlists/Alfred.elm b/src/Core/UI/Playlists/Alfred.elm deleted file mode 100644 index f14130b86..000000000 --- a/src/Core/UI/Playlists/Alfred.elm +++ /dev/null @@ -1,144 +0,0 @@ -module UI.Playlists.Alfred exposing (create, select) - -import Alfred exposing (..) -import Conditional exposing (ifThenElse) -import Dict -import Dict.Extra as Dict -import List.Extra as List -import Material.Icons.Round as Icons -import Playlists exposing (..) -import Tracks exposing (IdentifiedTrack) -import UI.Types as UI - - - --- CREATE - - -create : { collectionMode : Bool } -> List IdentifiedTrack -> List Playlist -> Alfred UI.Msg -create { collectionMode } tracks playlists = - let - index = - makeIndex playlists - - subject = - ifThenElse collectionMode "collection" "playlist" - in - Alfred.create - { action = createAction collectionMode tracks - , index = index - , message = - if List.length tracks == 1 then - "Choose or create a " ++ subject ++ " to add this track to." - - else - "Choose or create a " ++ subject ++ " to add these tracks to." - , operation = QueryOrMutation - } - - -createAction : Bool -> List IdentifiedTrack -> Alfred.Action UI.Msg -createAction collectionMode tracks ctx = - let - playlistTracks = - Tracks.toPlaylistTracks tracks - in - case ctx.result of - Just result -> - -- Add to playlist - -- - case Alfred.stringValue result.value of - Just playlistName -> - [ UI.AddTracksToPlaylist - { collection = collectionMode - , playlistName = playlistName - , tracks = playlistTracks - } - ] - - Nothing -> - [] - - Nothing -> - -- Create playlist, - -- if given a search term. - -- - case ctx.searchTerm of - Just searchTerm -> - [ UI.AddTracksToPlaylist - { collection = collectionMode - , playlistName = searchTerm - , tracks = playlistTracks - } - ] - - Nothing -> - [] - - - --- SELECT - - -select : List Playlist -> Alfred UI.Msg -select playlists = - let - index = - makeIndex playlists - in - Alfred.create - { action = selectAction playlists - , index = index - , message = "Select a playlist to play tracks from." - , operation = Query - } - - -selectAction : List Playlist -> Alfred.Action UI.Msg -selectAction playlists { result } = - case Maybe.andThen (\r -> List.find (.name >> Just >> (==) (stringValue r.value)) playlists) result of - Just playlist -> - [ UI.SelectPlaylist playlist ] - - Nothing -> - [] - - - --- ㊙️ - - -makeIndex playlists = - playlists - |> Dict.groupBy - (\p -> - case ( p.autoGenerated, p.collection ) of - ( Just _, _ ) -> - "9 - AutoGenerated Directory Playlists" - - ( Nothing, True ) -> - "1 - Your Collections" - - ( Nothing, False ) -> - "2 - Your Playlists" - ) - |> Dict.toList - |> List.map - (\( k, v ) -> - ( String.dropLeft 4 k - , v - |> List.uniqueBy .name - |> List.map - (\playlist -> - { icon = Just (Icons.queue_music 16) - , title = playlist.name - , value = Alfred.StringValue playlist.name - } - ) - |> List.sortBy (.title >> String.toLower) - ) - ) - |> List.map - (\( k, v ) -> - { name = Just k, items = v } - ) diff --git a/src/Core/UI/Playlists/ContextMenu.elm b/src/Core/UI/Playlists/ContextMenu.elm deleted file mode 100644 index 989544c23..000000000 --- a/src/Core/UI/Playlists/ContextMenu.elm +++ /dev/null @@ -1,201 +0,0 @@ -module UI.Playlists.ContextMenu exposing (listMenu) - -import ContextMenu exposing (..) -import Coordinates exposing (Coordinates) -import Html.Events.Extra.Mouse -import Material.Icons.Round as Icons -import Playlists exposing (Playlist) -import Playlists.Matching -import Tracks exposing (IdentifiedTrack) -import UI.Page -import UI.Playlists.Page -import UI.Queue.Types as Queue -import UI.Tracks.Types as Tracks -import UI.Types exposing (Msg(..)) -import Url - - - --- 🔱 - - -listMenu : Playlist -> List IdentifiedTrack -> Maybe String -> Coordinates -> ContextMenu Msg -listMenu playlist allTracks confirmation coordinates = - let - identifiedTracksFromPlaylist = - case playlist.autoGenerated of - Just _ -> - List.filter - (Tuple.second >> Tracks.matchesAutoGeneratedPlaylist playlist) - allTracks - - Nothing -> - allTracks - |> Playlists.Matching.match playlist - |> Tuple.first - - tracksFromPlaylist = - identifiedTracksFromPlaylist - |> (if playlist.collection then - identity - - else - Tracks.sortByIndexInPlaylist - ) - |> List.map Tuple.second - - menuMsg = - ShowPlaylistListMenu - playlist - { button = Html.Events.Extra.Mouse.MainButton - , clientPos = Coordinates.toTuple coordinates - , keys = { alt = False, ctrl = False, shift = False } - , offsetPos = ( 0, 0 ) - , pagePos = ( 0, 0 ) - , screenPos = ( 0, 0 ) - } - in - case playlist.autoGenerated of - Just _ -> - ContextMenu - [ addToQueue identifiedTracksFromPlaylist - , convertToRegularCollection tracksFromPlaylist playlist - , downloadAsZip tracksFromPlaylist playlist - , storeInCache tracksFromPlaylist - ] - coordinates - - Nothing -> - ContextMenu - [ addToQueue identifiedTracksFromPlaylist - , downloadAsZip tracksFromPlaylist playlist - , removePlaylist menuMsg confirmation playlist - , renamePlaylist playlist - , storeInCache tracksFromPlaylist - , convert playlist - ] - coordinates - - - --- ITEMS - - -addToQueue identifiedTracks = - Item - { icon = Icons.update - , label = "Add to queue" - , msg = - { inFront = False, tracks = identifiedTracks } - |> Queue.AddTracks - |> QueueMsg - - -- - , active = False - } - - -convert playlist = - Item - { icon = Icons.waves - , label = - if playlist.collection then - "Convert to playlist" - - else - "Convert to collection" - , msg = - if playlist.collection then - ConvertCollectionToPlaylist { name = playlist.name } - - else - ConvertPlaylistToCollection { name = playlist.name } - - -- - , active = False - } - - -convertToRegularCollection tracksFromPlaylist playlist = - Item - { icon = Icons.waves - , label = "Save as regular collection" - , msg = - AddTracksToPlaylist - { collection = True - , playlistName = playlist.name - , tracks = List.map Tracks.playlistTrackFromTrack tracksFromPlaylist - } - - -- - , active = False - } - - -downloadAsZip tracksFromPlaylist playlist = - Item - { icon = Icons.archive - , label = "Download as zip file" - , msg = - tracksFromPlaylist - |> Tracks.Download - { prefixTrackNumber = not playlist.collection - , zipName = playlist.name - } - |> TracksMsg - - -- - , active = False - } - - -removePlaylist menuMsg confirmation playlist = - let - playlistId = - "Playlist - " ++ playlist.name - - askForConfirmation = - confirmation == Just playlistId - in - Item - { icon = Icons.delete - , label = - if askForConfirmation then - "Are you sure?" - - else - "Remove playlist" - , msg = - if askForConfirmation then - DeletePlaylist { playlistName = playlist.name } - - else - ContextMenuConfirmation playlistId menuMsg - , active = - askForConfirmation - } - - -renamePlaylist playlist = - Item - { icon = Icons.font_download - , label = "Rename playlist" - , msg = - playlist.name - |> Url.percentEncode - |> UI.Playlists.Page.Edit - |> UI.Page.Playlists - |> ChangeUrlUsingPage - - -- - , active = False - } - - -storeInCache tracksFromPlaylist = - Item - { icon = Icons.offline_bolt - , label = "Store in cache" - , msg = TracksMsg (Tracks.StoreInCache tracksFromPlaylist) - , active = False - } diff --git a/src/Core/UI/Playlists/Directory.elm b/src/Core/UI/Playlists/Directory.elm deleted file mode 100644 index addc860c0..000000000 --- a/src/Core/UI/Playlists/Directory.elm +++ /dev/null @@ -1,99 +0,0 @@ -module UI.Playlists.Directory exposing (generate) - -import Dict exposing (Dict) -import List.Extra as List -import Playlists exposing (..) -import Set exposing (Set) -import Sources exposing (Source) -import String.Ext as String -import Tracks exposing (Track) - - - --- 🔱 - - -generate : List Source -> List Track -> List Playlist -generate sources tracks = - let - sourceDirectories = - List.foldl - (\s -> - if s.enabled && s.directoryPlaylists then - s.data - |> Dict.get "directoryPath" - |> Maybe.map fixPath - |> Maybe.withDefault "" - |> Dict.insert s.id - - else - identity - ) - Dict.empty - sources - - playlistNames = - List.foldr - (reducer sourceDirectories) - Set.empty - tracks - in - playlistNames - |> Set.toList - |> List.map - (\n -> - let - s = - String.split "/" n - in - { autoGenerated = Just { level = List.length s - 1 } - , collection = True - , name = Maybe.withDefault n (List.last s) - , public = False - , tracks = [] - } - ) - - -fixPath : String -> String -fixPath string = - string - |> String.chopStart "/" - |> (\s -> - if String.isEmpty s || String.endsWith "/" s then - s - - else - s ++ "/" - ) - - - --- ㊙️ - - -reducer : Dict String String -> Track -> Set String -> Set String -reducer sourceDirectories track = - case Dict.get track.sourceId sourceDirectories of - Just prefix -> - let - path = - String.dropLeft (String.length prefix) track.path - in - case String.split "/" path of - "" :: _ :: _ -> - identity - - a :: _ :: _ -> - case prefix of - "" -> - Set.insert a - - _ -> - Set.insert (prefix ++ "/" ++ a) - - _ -> - identity - - Nothing -> - identity diff --git a/src/Core/UI/Playlists/Page.elm b/src/Core/UI/Playlists/Page.elm deleted file mode 100644 index b7b2264af..000000000 --- a/src/Core/UI/Playlists/Page.elm +++ /dev/null @@ -1,10 +0,0 @@ -module UI.Playlists.Page exposing (Page(..)) - --- 🌳 - - -type Page - = Edit String - | Index - | NewCollection - | NewPlaylist diff --git a/src/Core/UI/Playlists/State.elm b/src/Core/UI/Playlists/State.elm deleted file mode 100644 index 65345db60..000000000 --- a/src/Core/UI/Playlists/State.elm +++ /dev/null @@ -1,539 +0,0 @@ -module UI.Playlists.State exposing (..) - -import Conditional exposing (ifThenElse) -import Coordinates -import Html.Events.Extra.Mouse as Mouse -import List.Ext as List -import List.Extra as List -import Maybe.Extra as Maybe -import Notifications -import Playlists exposing (..) -import Return exposing (andThen) -import Tracks exposing (IdentifiedTrack) -import Tracks.Collection -import UI.Alfred.State as Alfred -import UI.Common.State as Common -import UI.Page as Page -import UI.Playlists.Alfred -import UI.Playlists.ContextMenu as Playlists -import UI.Playlists.Page exposing (..) -import UI.Tracks.State as Tracks -import UI.Types exposing (..) -import UI.User.State.Export as User - - - --- 🔱 - - -activate : Playlist -> Manager -activate playlist model = - model - |> select playlist - |> andThen (Common.changeUrlUsingPage Page.Index) - - -addTracksToPlaylist : { collection : Bool, playlistName : String, tracks : List PlaylistTrackWithoutMetadata } -> Manager -addTracksToPlaylist { collection, playlistName, tracks } model = - let - properPlaylistName = - String.trim playlistName - - playlistIndex = - List.findIndex - (\p -> Maybe.isNothing p.autoGenerated && p.name == properPlaylistName) - model.playlists - - ( tracksAlreadyInPlaylist, newTracks ) = - playlistIndex - |> Maybe.andThen - (\a -> - if collection then - Just a - - else - Nothing - ) - |> Maybe.andThen (\idx -> List.getAt idx model.playlists) - |> Maybe.map - (\p -> - List.foldl - (\track ( a, b, c ) -> - case - List.findIndex - (\x -> - track.title == x.title && track.album == x.album && track.artist == x.artist - ) - c - of - Just idx -> - ( track :: a, b, List.removeAt idx c ) - - Nothing -> - ( a, track :: b, c ) - ) - ( [], [], p.tracks ) - tracks - ) - |> Maybe.map (\( a, b, _ ) -> ( a, b )) - |> Maybe.withDefault ( [], tracks ) - |> Tuple.mapSecond - (List.map - (\track -> - let - newTrack : PlaylistTrack - newTrack = - { album = track.album - , artist = track.artist - , title = track.title - - -- - , insertedAt = model.currentTime - } - in - newTrack - ) - ) - - newInventory = - case playlistIndex of - Just idx -> - List.updateAt - idx - (\p -> { p | tracks = p.tracks ++ newTracks }) - model.playlists - - Nothing -> - { autoGenerated = Nothing - , collection = collection - , name = properPlaylistName - , public = False - , tracks = newTracks - } - :: model.playlists - - newModel = - { model - | playlists = newInventory - , lastModifiedPlaylist = - Just - { collection = collection - , name = properPlaylistName - } - } - - subject = - ifThenElse collection "collection" "playlist" - in - case newTracks of - [] -> - if collection then - (case tracksAlreadyInPlaylist of - [ t ] -> - "__" ++ t.title ++ "__ was" - - l -> - "__" ++ String.fromInt (List.length l) ++ " tracks__ were" - ) - |> (\s -> s ++ " already added to the __" ++ properPlaylistName ++ "__ collection") - |> Notifications.casual - |> Common.showNotificationWithModel model - - else - Return.singleton model - - _ -> - (case newTracks of - [ t ] -> - "Added __" ++ t.title ++ "__" - - l -> - "Added __" ++ String.fromInt (List.length l) ++ " tracks__" - ) - |> (\s -> s ++ " to the __" ++ properPlaylistName ++ "__ " ++ subject) - |> Notifications.success - |> Common.showNotificationWithModel newModel - |> andThen User.savePlaylists - - -assistWithAddingTracksToCollection : List IdentifiedTrack -> Manager -assistWithAddingTracksToCollection tracks model = - model.playlists - |> List.filter (\p -> p.autoGenerated == Nothing && p.collection == True) - |> UI.Playlists.Alfred.create { collectionMode = True } tracks - |> (\a -> Alfred.assign a model) - - -assistWithAddingTracksToPlaylist : List IdentifiedTrack -> Manager -assistWithAddingTracksToPlaylist tracks model = - model.playlists - |> List.filter (\p -> p.autoGenerated == Nothing && p.collection == False) - |> UI.Playlists.Alfred.create { collectionMode = False } tracks - |> (\a -> Alfred.assign a model) - - -assistWithSelectingPlaylist : Manager -assistWithSelectingPlaylist model = - model.playlists - |> UI.Playlists.Alfred.select - |> (\a -> Alfred.assign a model) - - -convertCollectionToPlaylist : { name : String } -> Manager -convertCollectionToPlaylist { name } model = - case - List.findIndex - (\p -> Maybe.isNothing p.autoGenerated && p.name == name) - model.playlists - of - Just playlistIndex -> - model.playlists - |> List.updateAt - playlistIndex - (\p -> { p | collection = False }) - |> (\newInventory -> - { model - | playlists = newInventory - , selectedPlaylist = - Maybe.map - (\p -> - if p.name == name then - { p | collection = False } - - else - p - ) - model.selectedPlaylist - } - ) - |> Return.singleton - |> andThen User.savePlaylists - - Nothing -> - Return.singleton model - - -convertPlaylistToCollection : { name : String } -> Manager -convertPlaylistToCollection { name } model = - case - List.findIndex - (\p -> Maybe.isNothing p.autoGenerated && p.name == name) - model.playlists - of - Just playlistIndex -> - model.playlists - |> List.updateAt - playlistIndex - (\p -> { p | collection = True }) - |> (\newInventory -> - { model - | playlists = newInventory - , selectedPlaylist = - Maybe.map - (\p -> - if p.name == name then - { p | collection = True } - - else - p - ) - model.selectedPlaylist - } - ) - |> Return.singleton - |> andThen User.savePlaylists - - Nothing -> - Return.singleton model - - -create : { collection : Bool } -> Manager -create { collection } model = - case model.newPlaylistContext of - Just playlistName -> - let - alreadyExists = - List.find - (.name >> (==) playlistName) - (List.filterNot (.autoGenerated >> Maybe.isJust) model.playlists) - - playlist = - { autoGenerated = Nothing - , collection = collection - , name = playlistName - , public = False - , tracks = [] - } - in - case alreadyExists of - Just existingPlaylist -> - (if existingPlaylist.collection then - "There's already a collection using this name" - - else - "There's already a playlist using this name" - ) - |> Notifications.error - |> Common.showNotificationWithModel model - - Nothing -> - { model - | lastModifiedPlaylist = - Just - { collection = playlist.collection - , name = playlist.name - } - , newPlaylistContext = Nothing - , playlists = playlist :: model.playlists - } - |> User.savePlaylists - |> andThen redirectToPlaylistIndexPage - - Nothing -> - Return.singleton model - - -createCollection : Manager -createCollection = - create { collection = True } - - -createPlaylist : Manager -createPlaylist = - create { collection = False } - - -deactivate : Manager -deactivate = - deselect - - -deselect : Manager -deselect model = - { model | selectedPlaylist = Nothing } - |> Tracks.reviseCollection Tracks.Collection.arrange - |> andThen User.saveEnclosedUserData - - -delete : { playlistName : String } -> Manager -delete { playlistName } model = - let - selectedPlaylist = - Maybe.map - (\p -> ( p.autoGenerated, p.name )) - model.selectedPlaylist - - ( selectedPlaylistChanged, newSelectedPlaylist ) = - if selectedPlaylist == Just ( Nothing, playlistName ) then - ( True, Nothing ) - - else - ( False, model.selectedPlaylist ) - in - model.playlists - |> List.filter - (\p -> - if Maybe.isJust p.autoGenerated then - True - - else - p.name /= playlistName - ) - |> (\col -> - { model - | playlists = col - , selectedPlaylist = newSelectedPlaylist - } - ) - |> (if selectedPlaylistChanged then - Tracks.reviseCollection Tracks.Collection.arrange - - else - Return.singleton - ) - |> andThen User.savePlaylists - - -modify : Manager -modify model = - case model.editPlaylistContext of - Just { oldName, newName } -> - let - properName = - String.trim newName - - validName = - String.isEmpty properName == False - - ( autoGenerated, notAutoGenerated ) = - List.partition (.autoGenerated >> Maybe.isJust) model.playlists - - alreadyExists = - List.find - (.name >> (==) properName) - notAutoGenerated - - newCollection = - List.map - (\p -> ifThenElse (p.name == oldName) { p | name = properName } p) - notAutoGenerated - in - case alreadyExists of - Just existingPlaylist -> - (if existingPlaylist.collection then - "There's already a collection using this name" - - else - "There's already a playlist using this name" - ) - |> Notifications.error - |> Common.showNotificationWithModel - { model | editPlaylistContext = Nothing } - - Nothing -> - if validName then - { model - | editPlaylistContext = Nothing - , lastModifiedPlaylist = - case model.lastModifiedPlaylist of - Just l -> - if l.name == oldName then - Just { l | name = newName } - - else - Just l - - Nothing -> - Nothing - , playlists = newCollection ++ autoGenerated - } - |> User.savePlaylists - |> andThen redirectToPlaylistIndexPage - - else - redirectToPlaylistIndexPage model - - Nothing -> - redirectToPlaylistIndexPage model - - -moveTrackInSelected : { to : Int } -> Manager -moveTrackInSelected { to } model = - case model.selectedPlaylist of - Just playlist -> - let - moveParams = - { from = Maybe.withDefault 0 (List.head model.selectedTrackIndexes) - , to = to - , amount = List.length model.selectedTrackIndexes - } - - updatedPlaylist = - { playlist | tracks = List.move moveParams playlist.tracks } - - updatedPlaylistCollection = - List.map - (\p -> - ifThenElse - (p.autoGenerated == Nothing && p.name == updatedPlaylist.name) - updatedPlaylist - p - ) - model.playlists - in - { model - | playlists = updatedPlaylistCollection - , selectedPlaylist = Just updatedPlaylist - } - |> Tracks.reviseCollection Tracks.Collection.arrange - |> andThen User.savePlaylists - - Nothing -> - Return.singleton model - - -removeTracks : Playlist -> List IdentifiedTrack -> Manager -removeTracks playlist tracks model = - let - updatedPlaylist = - Tracks.removeFromPlaylist tracks playlist - in - model.playlists - |> List.map - (\p -> - if p.name == playlist.name then - updatedPlaylist - - else - p - ) - |> (\c -> { model | playlists = c }) - |> select updatedPlaylist - |> andThen User.savePlaylists - - -select : Playlist -> Manager -select playlist model = - { model | page = Page.Index, selectedPlaylist = Just playlist } - |> Tracks.reviseCollection Tracks.Collection.arrange - |> andThen User.saveEnclosedUserData - - -setCreationContext : String -> Manager -setCreationContext playlistName model = - Return.singleton { model | newPlaylistContext = Just playlistName } - - -setModificationContext : String -> String -> Manager -setModificationContext oldName newName model = - let - context = - { oldName = oldName - , newName = newName - } - in - Return.singleton { model | editPlaylistContext = Just context } - - -showListMenu : Playlist -> Mouse.Event -> Manager -showListMenu playlist mouseEvent model = - let - coordinates = - Coordinates.fromTuple mouseEvent.clientPos - - contextMenu = - Playlists.listMenu - playlist - model.tracks.identified - model.confirmation - coordinates - in - Return.singleton { model | contextMenu = Just contextMenu } - - -toggleVisibility : Playlist -> Manager -toggleVisibility playlist model = - let - updatedPlaylist = - { playlist | public = not playlist.public } - in - model.playlists - |> List.map - (\p -> - if p.name == playlist.name then - updatedPlaylist - - else - p - ) - |> (\c -> { model | playlists = c }) - |> User.savePlaylists - - - --- ㊙️ - - -redirectToPlaylistIndexPage : Manager -redirectToPlaylistIndexPage = - Common.changeUrlUsingPage (Page.Playlists Index) diff --git a/src/Core/UI/Ports.elm b/src/Core/UI/Ports.elm deleted file mode 100644 index ab535ea07..000000000 --- a/src/Core/UI/Ports.elm +++ /dev/null @@ -1,181 +0,0 @@ -port module UI.Ports exposing (..) - -import Alien -import Json.Encode as Json -import Queue -import UI.Audio.Types as Audio - - - --- 📣 - - -port activeQueueItemChanged : Maybe Queue.EngineItem -> Cmd msg - - -port adjustEqualizerSetting : { knob : String, value : Float } -> Cmd msg - - -port copyToClipboard : String -> Cmd msg - - -port downloadJsonUsingTauri : { filename : String, json : String } -> Cmd msg - - -port loadAlbumCovers : { list : Bool, coverView : Bool } -> Cmd msg - - -port openUrlOnNewPage : String -> Cmd msg - - -port pause : { trackId : String } -> Cmd msg - - -port pauseScrobbleTimer : () -> Cmd msg - - -port pickAverageBackgroundColor : String -> Cmd msg - - -port play : { trackId : String, volume : Float } -> Cmd msg - - -port reloadAudioNodeIfNeeded : { play : Bool, progress : Maybe Float, trackId : String } -> Cmd msg - - -port preloadAudio : Queue.EngineItem -> Cmd msg - - -port reloadApp : () -> Cmd msg - - -port renderAudioElements : { items : List Queue.EngineItem, play : Maybe String, volume : Float } -> Cmd msg - - -port resetScrobbleTimer : { duration : Float, trackId : String } -> Cmd msg - - -port seek : { percentage : Float, trackId : String } -> Cmd msg - - -port sendTask : Json.Value -> Cmd msg - - -port setMediaSessionArtwork : { blobUrl : String, imageType : String } -> Cmd msg - - -port setMediaSessionMetadata : { album : Maybe String, artist : Maybe String, title : String, coverPrep : Maybe Audio.CoverPrep } -> Cmd msg - - -port setMediaSessionPlaybackState : String -> Cmd msg - - -port setMediaSessionPositionState : { currentTime : Float, duration : Float } -> Cmd msg - - -port startScrobbleTimer : () -> Cmd msg - - -port toBrain : Alien.Event -> Cmd msg - - - --- 📰 - - -port audioDurationChange : (Audio.DurationChangeEvent -> msg) -> Sub msg - - -port audioEnded : (Audio.GenericAudioEvent -> msg) -> Sub msg - - -port audioError : (Audio.ErrorAudioEvent -> msg) -> Sub msg - - -port audioPlaybackStateChanged : (Audio.PlaybackStateEvent -> msg) -> Sub msg - - -port audioIsLoading : (Audio.GenericAudioEvent -> msg) -> Sub msg - - -port audioHasLoaded : (Audio.GenericAudioEvent -> msg) -> Sub msg - - -port audioTimeUpdated : (Audio.TimeUpdatedEvent -> msg) -> Sub msg - - -port downloadTracksFinished : (() -> msg) -> Sub msg - - -port fromAlien : (Alien.Event -> msg) -> Sub msg - - -port lostWindowFocus : (() -> msg) -> Sub msg - - -port indicateTouchDevice : (() -> msg) -> Sub msg - - -port insertCoverCache : (Json.Value -> msg) -> Sub msg - - -port installedNewServiceWorker : (() -> msg) -> Sub msg - - -port installingNewServiceWorker : (() -> msg) -> Sub msg - - -port refreshedAccessToken : (Json.Value -> msg) -> Sub msg - - -port preferredColorSchemaChanged : ({ dark : Bool } -> msg) -> Sub msg - - -port receiveTask : (Json.Value -> msg) -> Sub msg - - -port requestNext : (() -> msg) -> Sub msg - - -port requestPause : (() -> msg) -> Sub msg - - -port requestPlay : (() -> msg) -> Sub msg - - -port requestPlayPause : (() -> msg) -> Sub msg - - -port requestPrevious : (() -> msg) -> Sub msg - - -port requestStop : (() -> msg) -> Sub msg - - -port scrobble : ({ duration : Int, timestamp : Int, trackId : String } -> msg) -> Sub msg - - -port setAverageBackgroundColor : ({ r : Int, g : Int, b : Int } -> msg) -> Sub msg - - -port setIsOnline : (Bool -> msg) -> Sub msg - - -port showErrorNotification : (String -> msg) -> Sub msg - - -port showStickyErrorNotification : (String -> msg) -> Sub msg - - - --- 🔱 - - -giveBrain : Alien.Tag -> Json.Value -> Cmd msg -giveBrain tag data = - toBrain (Alien.broadcast tag data) - - -nudgeBrain : Alien.Tag -> Cmd msg -nudgeBrain tag = - toBrain (Alien.trigger tag) diff --git a/src/Core/UI/Queue/ContextMenu.elm b/src/Core/UI/Queue/ContextMenu.elm deleted file mode 100644 index 864df73ae..000000000 --- a/src/Core/UI/Queue/ContextMenu.elm +++ /dev/null @@ -1,155 +0,0 @@ -module UI.Queue.ContextMenu exposing (futureMenu, futureNavigationMenu, historyMenu) - -import ContextMenu exposing (..) -import Coordinates exposing (Coordinates) -import Material.Icons.Round as Icons -import Queue -import UI.Queue.Types as Queue -import UI.Tracks.ContextMenu -import UI.Types exposing (Msg(..)) - - - --- 🔱 - - -futureMenu : - { cached : List String, cachingInProgress : List String, itemIndex : Int } - -> Queue.Item - -> Coordinates - -> ContextMenu Msg -futureMenu { cached, cachingInProgress, itemIndex } item = - let - tracks = - [ item.identifiedTrack ] - in - ContextMenu - [ Item - { icon = Icons.update - , label = "Move to the top" - , msg = - { index = itemIndex } - |> Queue.MoveItemToFirst - |> QueueMsg - - -- - , active = False - } - , Item - { icon = Icons.update - , label = "Move to the end of my picks" - , msg = - { index = itemIndex } - |> Queue.MoveItemToLast - |> QueueMsg - - -- - , active = False - } - , Item - { icon = Icons.waves - , label = "Add to collection" - , msg = AssistWithAddingTracksToCollection tracks - , active = False - } - , Item - { icon = Icons.waves - , label = "Add to playlist" - , msg = AssistWithAddingTracksToPlaylist tracks - , active = False - } - , UI.Tracks.ContextMenu.cacheAction - { cached = cached, cachingInProgress = cachingInProgress } - tracks - ] - - -futureNavigationMenu : { manualEntries : List Queue.Item } -> Coordinates -> ContextMenu Msg -futureNavigationMenu { manualEntries } = - [ [ Item - { icon = Icons.not_interested - , label = "Reset ignored" - , msg = QueueMsg Queue.ResetIgnored - - -- - , active = False - } - ] - , -- - if List.isEmpty manualEntries then - [] - - else - [ Item - { icon = Icons.waves - , label = "Add queue picks to collection" - , msg = - manualEntries - |> List.map .identifiedTrack - |> AssistWithAddingTracksToCollection - , active = False - } - , Item - { icon = Icons.waves - , label = "Add queue picks to playlist" - , msg = - manualEntries - |> List.map .identifiedTrack - |> AssistWithAddingTracksToPlaylist - , active = False - } - ] - ] - |> List.concat - |> ContextMenu - - -historyMenu : - { cached : List String, cachingInProgress : List String } - -> Queue.Item - -> Coordinates - -> ContextMenu Msg -historyMenu { cached, cachingInProgress } item = - let - tracks = - [ item.identifiedTrack ] - in - ContextMenu - [ Item - { icon = Icons.update - , label = "Play next" - , msg = - { inFront = True, tracks = tracks } - |> Queue.AddTracks - |> QueueMsg - - -- - , active = False - } - , Item - { icon = Icons.update - , label = "Add to queue" - , msg = - { inFront = False, tracks = tracks } - |> Queue.AddTracks - |> QueueMsg - - -- - , active = False - } - , Item - { icon = Icons.waves - , label = "Add to collection" - , msg = AssistWithAddingTracksToCollection tracks - , active = False - } - , Item - { icon = Icons.waves - , label = "Add to playlist" - , msg = AssistWithAddingTracksToPlaylist tracks - , active = False - } - , UI.Tracks.ContextMenu.cacheAction - { cached = cached, cachingInProgress = cachingInProgress } - tracks - ] diff --git a/src/Core/UI/Queue/Fill.elm b/src/Core/UI/Queue/Fill.elm deleted file mode 100644 index 6fb44e6b0..000000000 --- a/src/Core/UI/Queue/Fill.elm +++ /dev/null @@ -1,251 +0,0 @@ -module UI.Queue.Fill exposing (State, cleanAutoGenerated, ordered, queueLength, shuffled) - -{-| These functions will return a new list for the `future` property. --} - -import Array -import List.Extra as List -import Maybe.Ext as Maybe -import Maybe.Extra as Maybe -import Queue exposing (Item, makeItem) -import Random exposing (Generator, Seed) -import Time -import Tracks exposing (IdentifiedTrack) - - - --- ⛩ - - -queueLength : Int -queueLength = - 30 - - - --- 🌳 - - -type alias State = - { activeItem : Maybe Item - , future : List Item - , ignored : List Item - , past : List Item - } - - - --- 🔱 ░░ ORDERED - - -ordered : Time.Posix -> List IdentifiedTrack -> State -> List Item -ordered _ unfilteredTracks state = - let - tracks = - state.ignored - |> List.map itemTrackId - |> Tuple.pair [] - |> purifier unfilteredTracks - |> Tuple.first - - manualEntries = - List.filter (.manualEntry >> (==) True) state.future - - remaining = - max (queueLength - List.length manualEntries) 0 - - focus = - Maybe.preferFirst (List.last manualEntries) state.activeItem - in - case focus of - Just item -> - let - maybeNowPlayingIndex = - List.findIndex - (Tracks.isNowPlaying item.identifiedTrack) - tracks - in - maybeNowPlayingIndex - |> Maybe.map (\idx -> List.drop (idx + 1) tracks) - |> Maybe.withDefault tracks - |> List.take remaining - |> (\a -> - let - actualRemaining = - remaining - List.length a - - n = - Maybe.withDefault (List.length tracks) maybeNowPlayingIndex - in - a ++ List.take (min n actualRemaining) tracks - ) - |> List.map (makeItem False) - |> List.append manualEntries - - Nothing -> - tracks - |> List.take remaining - |> List.map (makeItem False) - |> List.append manualEntries - - - --- 🔱 ░░ SHUFFLED - - -shuffled : Time.Posix -> List IdentifiedTrack -> State -> List Item -shuffled timestamp unfilteredTracks state = - let - idsToIgnoreWithoutPast = - [ state.ignored - , Maybe.unwrap [] List.singleton state.activeItem - ] - |> List.map (List.map itemTrackId) - |> List.concat - |> List.unique - - ( tracksWithPast, idsToIgnoreWithoutPastAfterFilter ) = - purifier unfilteredTracks ( [], idsToIgnoreWithoutPast ) - - idsToIgnoreWithPast = - List.unique (idsToIgnoreWithoutPastAfterFilter ++ List.map itemTrackId state.past) - - ( tracksWithoutPast, idsToIgnoreWithPastAfterFilter ) = - purifier tracksWithPast ( [], idsToIgnoreWithPast ) - - idsToIgnoreWithFuture = - List.unique (idsToIgnoreWithoutPastAfterFilter ++ List.map itemTrackId state.future) - - ( tracksList, _ ) = - purifier - (case tracksWithoutPast of - [] -> - tracksWithPast - - t -> - t - ) - ( [], idsToIgnoreWithFuture ) - - tracks = - Array.fromList tracksList - - amountOfTracks = - Array.length tracks - - generator = - Random.int 0 (amountOfTracks - 1) - - toAmount = - max (queueLength - List.length state.future) 0 - - howMany = - min toAmount amountOfTracks - in - if howMany > 0 then - timestamp - |> Time.posixToMillis - |> Random.initialSeed - |> generateIndexes generator howMany [] - |> List.foldl - (\idx acc -> - case Array.get idx tracks of - Just track -> - makeItem False track :: acc - - Nothing -> - acc - ) - [] - |> List.append state.future - - else - state.future - - - --- 🔱 - - -cleanAutoGenerated : Bool -> String -> List Item -> List Item -cleanAutoGenerated shuffle trackId future = - if shuffle then - List.filterNot - (\i -> i.manualEntry == False && itemTrackId i == trackId) - future - - else - future - - - --- ㊙️ - - -{-| Generated random indexes. - - `squirrel` = accumulator, ie. collected indexes - --} -generateIndexes : Generator Int -> Int -> List Int -> Seed -> List Int -generateIndexes generator howMany squirrel seed = - let - ( index, newSeed ) = - Random.step generator seed - in - if List.member index squirrel then - generateIndexes generator howMany squirrel newSeed - - else if howMany - 1 > 0 then - generateIndexes generator (howMany - 1) (index :: squirrel) newSeed - - else - index :: squirrel - - - --- PURIFY - - -purifier : - List IdentifiedTrack - -> ( List IdentifiedTrack, List String ) - -> ( List IdentifiedTrack, List String ) -purifier tracks ( acc, idsToIgnore ) = - case idsToIgnore of - [] -> - -- Nothing more to ignore, - -- stop here. - ( acc ++ tracks, [] ) - - _ -> - case tracks of - [] -> - -- No more tracks left, - -- end of the road. - ( acc, idsToIgnore ) - - (( _, track ) as identifiedTrack) :: rest -> - case List.elemIndex track.id idsToIgnore of - Just ignoreIdx -> - -- It's a track to ignore, - -- remove it from the ignore list and carry on. - purifier - rest - ( acc, List.removeAt ignoreIdx idsToIgnore ) - - Nothing -> - -- It's not a track to ignore, - -- add it to the to-keep list and carry on. - purifier - rest - ( identifiedTrack :: acc, idsToIgnore ) - - - --- COMMON - - -itemTrackId : Item -> String -itemTrackId = - .identifiedTrack >> Tuple.second >> .id diff --git a/src/Core/UI/Queue/Page.elm b/src/Core/UI/Queue/Page.elm deleted file mode 100644 index c641eb1a8..000000000 --- a/src/Core/UI/Queue/Page.elm +++ /dev/null @@ -1,8 +0,0 @@ -module UI.Queue.Page exposing (Page(..)) - --- 🌳 - - -type Page - = Index - | History diff --git a/src/Core/UI/Queue/State.elm b/src/Core/UI/Queue/State.elm deleted file mode 100644 index 2dc2f7ed8..000000000 --- a/src/Core/UI/Queue/State.elm +++ /dev/null @@ -1,584 +0,0 @@ -module UI.Queue.State exposing (..) - -import Coordinates -import Debouncer.Basic as Debouncer -import Dict -import Html.Events.Extra.Mouse as Mouse -import List.Extra as List -import Notifications -import Queue exposing (..) -import Return exposing (andThen) -import Return.Ext as Return -import Tracks exposing (..) -import UI.Audio.Types exposing (AudioLoadingState(..)) -import UI.Common.State as Common -import UI.Ports as Ports -import UI.Queue.ContextMenu as Queue -import UI.Queue.Fill as Fill -import UI.Queue.Types as Queue exposing (..) -import UI.Types exposing (..) -import UI.User.State.Export exposing (..) - - - --- 📣 - - -update : Queue.Msg -> Manager -update msg = - case msg of - Clear -> - clear - - PreloadNext -> - preloadNext - - Reset -> - reset - - ResetIgnored -> - resetIgnored - - Rewind -> - rewind - - Shift -> - shift - - Select a -> - select a - - ShowFutureMenu a b c -> - showFutureMenu a b c - - ShowFutureNavigationMenu a -> - showFutureNavigationMenu a - - ShowHistoryMenu a b -> - showHistoryMenu a b - - ToggleRepeat -> - toggleRepeat - - ToggleShuffle -> - toggleShuffle - - ------------------------------------ - -- Future - ------------------------------------ - AddTracks a -> - addTracks a - - InjectFirst a b -> - injectFirst a b - - InjectLast a b -> - injectLast a b - - InjectFirstAndPlay a -> - injectFirstAndPlay a - - MoveItemToFirst a -> - moveItemToFirst a - - MoveItemToLast a -> - moveItemToLast a - - RemoveItem a -> - removeItem a - - - --- 🛠 - - -changeActiveItem : Maybe Item -> Manager -changeActiveItem maybeItem model = - let - maybeNowPlaying = - Maybe.map - (\item -> - { coverLoaded = False - , duration = Nothing - , isPlaying = False - , item = item - , loadingState = Loading - , playbackPosition = 0 - } - ) - maybeItem - in - maybeItem - |> Maybe.map (.identifiedTrack >> Tuple.second) - |> Maybe.map - (Queue.makeEngineItem - False - model.currentTime - model.sources - model.cachedTracks - (if model.rememberProgress then - model.progress - - else - Dict.empty - ) - ) - |> Maybe.map insertTrack - |> Maybe.withDefault Return.singleton - |> (\fn -> fn { model | nowPlaying = maybeNowPlaying }) - |> andThen fill - - -clear : Manager -clear model = - fill { model | playingNext = [] } - - -fill : Manager -fill model = - let - ( availableTracks, timestamp ) = - ( case ( model.selectedCover, model.coverSelectionReducesPool ) of - ( Just cover, True ) -> - Tuple.first <| List.foldl coverTracksHarvester ( [], cover.trackIds ) model.tracks.harvested - - _ -> - model.tracks.harvested - -- - , model.currentTime - ) - - nonMissingTracks = - List.filter - (Tuple.second >> .id >> (/=) Tracks.missingId) - availableTracks - in - model - |> (\m -> - -- Empty the ignored list when we are ignoring all the tracks - if List.length model.dontPlay == List.length nonMissingTracks then - { m | dontPlay = [] } - - else - m - ) - |> (\m -> - if m.shuffle && List.length model.playingNext >= Fill.queueLength then - m - - else - let - fillState = - { activeItem = Maybe.map .item m.nowPlaying - , future = m.playingNext - , ignored = m.dontPlay - , past = m.playedPreviously - } - in - -- Fill using the appropiate method - if m.shuffle then - { m | playingNext = Fill.shuffled timestamp nonMissingTracks fillState } - - else - { m | playingNext = Fill.ordered timestamp nonMissingTracks fillState } - ) - |> Return.communicate - (Queue.PreloadNext - |> QueueMsg - |> Debouncer.provideInput - |> AudioPreloadDebounce - |> Return.task - ) - - -insertTrack : EngineItem -> Manager -insertTrack item model = - item - |> (\engineItem -> - if - List.any - (\a -> engineItem.trackId == a.trackId) - model.audioElements - then - List.map - (\a -> - if engineItem.trackId == a.trackId then - { a | isPreload = False } - - else - a - ) - model.audioElements - - else - model.audioElements ++ [ engineItem ] - ) - |> List.filter - (\a -> - if item.isPreload then - True - - else if a.trackId /= item.trackId && not a.isPreload then - False - - else - True - ) - |> (\a -> { model | audioElements = a }) - |> Return.singleton - |> Return.effect_ - (\m -> - Ports.renderAudioElements - { items = m.audioElements - , play = - if item.isPreload then - Nothing - - else - Just item.trackId - , volume = m.eqSettings.volume - } - ) - - -preloadNext : Manager -preloadNext model = - case List.head model.playingNext of - Just item -> - item - |> .identifiedTrack - |> Tuple.second - |> Queue.makeEngineItem - True - model.currentTime - model.sources - model.cachedTracks - (if model.rememberProgress then - model.progress - - else - Dict.empty - ) - |> (\engineItem -> - insertTrack engineItem model - ) - - Nothing -> - Return.singleton model - - -rewind : Manager -rewind model = - changeActiveItem - (List.last model.playedPreviously) - { model - | playingNext = - model.nowPlaying - |> Maybe.map (\{ item } -> item :: model.playingNext) - |> Maybe.withDefault model.playingNext - , playedPreviously = - model.playedPreviously - |> List.init - |> Maybe.withDefault [] - } - - -{-| Renew the queue, meaning that the auto-generated items in the queue are removed and new items are added. --} -reset : Manager -reset model = - model.playingNext - |> List.filter (.manualEntry >> (==) True) - |> (\f -> { model | playingNext = f }) - |> fill - - -resetIgnored : Manager -resetIgnored model = - fill { model | dontPlay = [] } - - -select : Item -> Manager -select item model = - Return.singleton { model | selectedQueueItem = Just item } - - -shift : Manager -shift model = - changeActiveItem - (List.head model.playingNext) - { model - | playingNext = - model.playingNext - |> List.drop 1 - , playedPreviously = - model.nowPlaying - |> Maybe.map (.item >> List.singleton) - |> Maybe.map (List.append model.playedPreviously) - |> Maybe.withDefault model.playedPreviously - } - - -showFutureMenu : Item -> { index : Int } -> Mouse.Event -> Manager -showFutureMenu item { index } mouseEvent model = - mouseEvent.clientPos - |> Coordinates.fromTuple - |> Queue.futureMenu - { cached = model.cachedTracks - , cachingInProgress = model.cachingTracksInProgress - , itemIndex = index - } - item - |> Just - |> (\c -> { model | contextMenu = c }) - |> Return.singleton - - -showFutureNavigationMenu : Mouse.Event -> Manager -showFutureNavigationMenu mouseEvent model = - mouseEvent.clientPos - |> Coordinates.fromTuple - |> Queue.futureNavigationMenu { manualEntries = List.filter .manualEntry model.playingNext } - |> Just - |> (\c -> { model | contextMenu = c }) - |> Return.singleton - - -showHistoryMenu : Item -> Mouse.Event -> Manager -showHistoryMenu item mouseEvent model = - mouseEvent.clientPos - |> Coordinates.fromTuple - |> Queue.historyMenu - { cached = model.cachedTracks - , cachingInProgress = model.cachingTracksInProgress - } - item - |> Just - |> (\c -> { model | contextMenu = c }) - |> Return.singleton - - -toggleRepeat : Manager -toggleRepeat model = - saveEnclosedUserData { model | repeat = not model.repeat } - - -toggleShuffle : Manager -toggleShuffle model = - { model | shuffle = not model.shuffle } - |> reset - |> andThen saveEnclosedUserData - - - --- 🛠 ░░ FUTURE - - -addTracks : { inFront : Bool, tracks : List IdentifiedTrack } -> Manager -addTracks { inFront, tracks } = - (if inFront then - injectFirst - - else - injectLast - ) - { showNotification = True } - tracks - - -{-| Add an item in front of the queue. --} -injectFirst : { showNotification : Bool } -> List IdentifiedTrack -> Manager -injectFirst { showNotification } identifiedTracks model = - let - ( items, tracks ) = - ( List.map (makeItem True) identifiedTracks - , List.map Tuple.second identifiedTracks - ) - - cleanedFuture = - List.foldl - (.id >> Fill.cleanAutoGenerated model.shuffle) - model.playingNext - tracks - - notification = - case tracks of - [ t ] -> - ("__" ++ t.tags.title ++ "__ will be played next") - |> Notifications.casual - - list -> - list - |> List.length - |> String.fromInt - |> (\s -> "__" ++ s ++ " tracks__ will be played next") - |> Notifications.casual - in - { model | playingNext = items ++ cleanedFuture } - |> (if showNotification then - Common.showNotification notification - - else - Return.singleton - ) - |> andThen fill - - -injectFirstAndPlay : IdentifiedTrack -> Manager -injectFirstAndPlay identifiedTrack model = - model - |> injectFirst { showNotification = False } [ identifiedTrack ] - |> andThen shift - - -{-| Add an item after the last manual entry -(ie. after the last injected item). --} -injectLast : { showNotification : Bool } -> List IdentifiedTrack -> Manager -injectLast { showNotification } identifiedTracks model = - let - ( items, tracks ) = - ( List.map (makeItem True) identifiedTracks - , List.map Tuple.second identifiedTracks - ) - - cleanedFuture = - List.foldl - (.id >> Fill.cleanAutoGenerated model.shuffle) - model.playingNext - tracks - - manualItems = - cleanedFuture - |> List.filter (.manualEntry >> (==) True) - |> List.length - - newFuture = - [] - ++ List.take manualItems cleanedFuture - ++ items - ++ List.drop manualItems cleanedFuture - - notification = - case tracks of - [ t ] -> - ("__" ++ t.tags.title ++ "__ was added to the queue") - |> Notifications.casual - - list -> - list - |> List.length - |> String.fromInt - |> (\s -> "__" ++ s ++ " tracks__ were added to the queue") - |> Notifications.casual - in - { model | playingNext = newFuture } - |> (if showNotification then - Common.showNotification notification - - else - Return.singleton - ) - |> andThen fill - - -moveItemToFirst : { index : Int } -> Manager -moveItemToFirst { index } model = - model.playingNext - |> moveItem { from = index, to = 0, shuffle = model.shuffle } - |> (\f -> { model | playingNext = f }) - |> fill - - -moveItemToLast : { index : Int } -> Manager -moveItemToLast { index } model = - let - to = - model.playingNext - |> List.filter (.manualEntry >> (==) True) - |> List.length - in - model.playingNext - |> moveItem { from = index, to = to, shuffle = model.shuffle } - |> (\f -> { model | playingNext = f }) - |> fill - - -removeItem : { index : Int, item : Item } -> Manager -removeItem { index, item } model = - let - newFuture = - List.removeAt index model.playingNext - - newIgnored = - if item.manualEntry then - model.dontPlay - - else - item :: model.dontPlay - in - fill { model | playingNext = newFuture, dontPlay = newIgnored } - - - --- ⚗️ - - -coverTracksHarvester : - IdentifiedTrack - -> ( List IdentifiedTrack, List String ) - -> ( List IdentifiedTrack, List String ) -coverTracksHarvester ( i, t ) ( acc, coverTrackIds ) = - case List.findIndex ((==) t.id) coverTrackIds of - Just idx -> - ( acc ++ [ ( i, t ) ] - , List.removeAt idx coverTrackIds - ) - - Nothing -> - ( acc - , coverTrackIds - ) - - -moveItem : { from : Int, to : Int, shuffle : Bool } -> List Item -> List Item -moveItem { from, to, shuffle } collection = - let - subjectItem = - collection - |> List.getAt from - |> Maybe.map (\s -> { s | manualEntry = True }) - - fixedTarget = - if to > from then - to - 1 - - else - to - in - collection - |> List.removeAt from - |> List.indexedFoldr - (\idx existingItem acc -> - if idx == fixedTarget then - case subjectItem of - Just itemToInsert -> - List.append [ itemToInsert, existingItem ] acc - - Nothing -> - existingItem :: acc - - else if idx < fixedTarget then - { existingItem | manualEntry = True } :: acc - - else - existingItem :: acc - ) - [] - |> (if shuffle then - identity - - else - List.filter (.manualEntry >> (==) True) - ) diff --git a/src/Core/UI/Queue/Types.elm b/src/Core/UI/Queue/Types.elm deleted file mode 100644 index 9cc99e02e..000000000 --- a/src/Core/UI/Queue/Types.elm +++ /dev/null @@ -1,34 +0,0 @@ -module UI.Queue.Types exposing (..) - -import Html.Events.Extra.Mouse as Mouse -import Queue exposing (Item) -import Tracks exposing (IdentifiedTrack) - - - --- 📣 - - -type Msg - = Clear - | PreloadNext - | Reset - | ResetIgnored - | Rewind - | Select Item - | Shift - | ShowFutureMenu Item { index : Int } Mouse.Event - | ShowFutureNavigationMenu Mouse.Event - | ShowHistoryMenu Item Mouse.Event - | ToggleRepeat - | ToggleShuffle - ------------------------------------ - -- Future - ------------------------------------ - | AddTracks { inFront : Bool, tracks : List IdentifiedTrack } - | InjectFirst { showNotification : Bool } (List IdentifiedTrack) - | InjectLast { showNotification : Bool } (List IdentifiedTrack) - | InjectFirstAndPlay IdentifiedTrack - | MoveItemToFirst { index : Int } - | MoveItemToLast { index : Int } - | RemoveItem { index : Int, item : Item } diff --git a/src/Core/UI/Routing/State.elm b/src/Core/UI/Routing/State.elm deleted file mode 100644 index b8b512278..000000000 --- a/src/Core/UI/Routing/State.elm +++ /dev/null @@ -1,161 +0,0 @@ -module UI.Routing.State exposing (linkClicked, openUrlOnNewPage, resetUrl, transition, urlChanged) - -import Browser exposing (UrlRequest) -import Browser.Navigation as Nav -import List.Extra as List -import Monocle.Lens as Lens -import Return exposing (return) -import Sources -import Sources.Services.Dropbox -import Sources.Services.Google -import UI.Common.State as Common -import UI.Page as Page exposing (Page) -import UI.Ports as Ports -import UI.Sources.Form -import UI.Sources.Page -import UI.Sources.State as Sources -import UI.Sources.Types as Sources -import UI.Types as UI exposing (Manager) -import Url exposing (Url) - - - --- 🔱 - - -linkClicked : UrlRequest -> Manager -linkClicked urlRequest model = - case urlRequest of - Browser.Internal urlWithFragment -> - let - url = - if urlWithFragment.fragment == Just "/" then - { urlWithFragment | fragment = Nothing } - - else - urlWithFragment - in - if url.path /= model.url.path then - return model (Nav.load url.path) - - else - return model (Nav.pushUrl model.navKey <| Url.toString url) - - Browser.External href -> - return model (Nav.load href) - - -openUrlOnNewPage : String -> Manager -openUrlOnNewPage url model = - url - |> Ports.openUrlOnNewPage - |> return model - - -urlChanged : Url -> Manager -urlChanged url model = - let - rewrittenUrl = - Page.rewriteUrl { url | query = Nothing } - in - case ( url.query, Page.fromUrl rewrittenUrl ) of - ( Nothing, Just page ) -> - transition page { model | page = page, url = url } - - ( Just _, Just page ) -> - return model (resetUrl model.navKey url page) - - _ -> - return model (resetUrl model.navKey url Page.Index) - - - --- TRANSITIONING - - -transition : Page -> Manager -transition page model = - case page of - ----------------------------------------- - -- Sources.NewThroughRedirect - ----------------------------------------- - Page.Sources (UI.Sources.Page.NewThroughRedirect service args) -> - let - ( form, defaultContext ) = - ( model.sourceForm - , UI.Sources.Form.defaultContext - ) - in - { defaultContext - | data = - case service of - Sources.Dropbox -> - Sources.Services.Dropbox.authorizationSourceData args - - Sources.Google -> - Sources.Services.Google.authorizationSourceData args - - _ -> - defaultContext.data - , service = - service - } - |> (\c -> { form | context = c, step = Sources.By }) - |> (\f -> { model | sourceForm = f }) - |> Return.singleton - - ----------------------------------------- - -- Sources.Edit - ----------------------------------------- - Page.Sources (UI.Sources.Page.Edit sourceId) -> - loadSourceForForm sourceId model - - ----------------------------------------- - -- Sources.Rename - ----------------------------------------- - Page.Sources (UI.Sources.Page.Rename sourceId) -> - loadSourceForForm sourceId model - - ----------------------------------------- - -- 📭 - ----------------------------------------- - _ -> - Return.singleton model - - - --- 🚀 - - -resetUrl : Nav.Key -> Url -> Page.Page -> Cmd UI.Msg -resetUrl key url page = - Nav.replaceUrl key (url.path ++ Page.toString page) - - - --- ㊙️ - - -loadSourceForForm : String -> Manager -loadSourceForForm sourceId model = - let - isLoading = - model.isLoading - - maybeSource = - List.find (.id >> (==) sourceId) model.sources - in - case ( isLoading, maybeSource ) of - ( False, Just source ) -> - model - |> Lens.modify Sources.formLens (\m -> { m | context = source }) - |> Return.singleton - - ( False, Nothing ) -> - Return.singleton model - - ( True, _ ) -> - -- Redirect away from edit-source page - Common.changeUrlUsingPage - (Page.Sources UI.Sources.Page.Index) - model diff --git a/src/Core/UI/Services/State.elm b/src/Core/UI/Services/State.elm deleted file mode 100644 index b0c7cdc04..000000000 --- a/src/Core/UI/Services/State.elm +++ /dev/null @@ -1,75 +0,0 @@ -module UI.Services.State exposing (..) - -import Browser.Navigation as Nav -import Common -import Http -import LastFm -import Notifications -import Return exposing (andThen, return) -import String.Ext as String -import UI.Common.State exposing (showNotification) -import UI.Types exposing (Manager, Msg(..)) -import UI.User.State.Export as User -import Url - - - --- 🔱 - - -connectLastFm : Manager -connectLastFm model = - model.url - |> Common.urlOrigin - |> String.addSuffix "?action=authenticate/lastfm" - |> Url.percentEncode - |> String.append "&cb=" - |> String.append - (String.append - "http://www.last.fm/api/auth/?api_key=" - LastFm.apiKey - ) - |> Nav.load - |> return model - - -disconnectLastFm : Manager -disconnectLastFm model = - User.saveSettings { model | lastFm = LastFm.disconnect model.lastFm } - - -gotLastFmSession : Result Http.Error String -> Manager -gotLastFmSession result model = - case result of - Err _ -> - showNotification - (Notifications.stickyError "Could not connect with Last.fm") - { model | lastFm = LastFm.failedToAuthenticate model.lastFm } - - Ok sessionKey -> - { model | lastFm = LastFm.gotSessionKey sessionKey model.lastFm } - |> showNotification - (Notifications.success "Connected successfully with Last.fm") - |> andThen - User.saveSettings - - -scrobble : { duration : Int, timestamp : Int, trackId : String } -> Manager -scrobble { duration, timestamp, trackId } model = - case Maybe.map (.item >> .identifiedTrack) model.nowPlaying of - Just ( _, track ) -> - if trackId == track.id then - ( model - , LastFm.scrobble model.lastFm - { duration = duration - , msg = Bypass - , timestamp = timestamp - , track = track - } - ) - - else - Return.singleton model - - Nothing -> - Return.singleton model diff --git a/src/Core/UI/Settings/Page.elm b/src/Core/UI/Settings/Page.elm deleted file mode 100644 index b0a94c940..000000000 --- a/src/Core/UI/Settings/Page.elm +++ /dev/null @@ -1,9 +0,0 @@ -module UI.Settings.Page exposing (Page(..)) - --- 🌳 - - -type Page - = Data - | Index - | Sync diff --git a/src/Core/UI/Sources/ContextMenu.elm b/src/Core/UI/Sources/ContextMenu.elm deleted file mode 100644 index 15dd745ec..000000000 --- a/src/Core/UI/Sources/ContextMenu.elm +++ /dev/null @@ -1,84 +0,0 @@ -module UI.Sources.ContextMenu exposing (sourceMenu) - -import Conditional exposing (ifThenElse) -import ContextMenu exposing (..) -import Coordinates exposing (Coordinates) -import Material.Icons.Round as Icons -import Sources exposing (Source) -import UI.Page -import UI.Sources.Page -import UI.Sources.Types as Sources -import UI.Types exposing (Msg(..)) - - - --- 🔱 - - -sourceMenu : Source -> Coordinates -> ContextMenu Msg -sourceMenu source = - ContextMenu - [ Item - { icon = ifThenElse source.directoryPlaylists Icons.folder Icons.folder_open - , label = ifThenElse source.directoryPlaylists "Disable Directory Playlists" "Enable Directory Playlists" - , msg = - { sourceId = source.id } - |> Sources.ToggleDirectoryPlaylists - |> SourcesMsg - - -- - , active = False - } - - -- - , Item - { icon = Icons.edit - , label = "Edit source" - , msg = - source.id - |> UI.Sources.Page.Edit - |> UI.Page.Sources - |> ChangeUrlUsingPage - - -- - , active = False - } - - -- - , Item - { icon = Icons.sync - , label = "Process source" - , msg = - [ source ] - |> Sources.ProcessSpecific - |> SourcesMsg - - -- - , active = False - } - - -- - , Item - { icon = Icons.delete - , label = "Remove source" - , msg = - { sourceId = source.id } - |> Sources.RemoveFromCollection - |> SourcesMsg - , active = False - } - - -- - , Item - { icon = Icons.font_download - , label = "Rename source" - , msg = - source.id - |> UI.Sources.Page.Rename - |> UI.Page.Sources - |> ChangeUrlUsingPage - - -- - , active = False - } - ] diff --git a/src/Core/UI/Sources/Form.elm b/src/Core/UI/Sources/Form.elm deleted file mode 100644 index 9f675e4a9..000000000 --- a/src/Core/UI/Sources/Form.elm +++ /dev/null @@ -1,31 +0,0 @@ -module UI.Sources.Form exposing (..) - -import Sources exposing (..) -import Sources.Services as Services -import UI.Sources.Types exposing (..) - - - --- 🌳 - - -initialModel : Form -initialModel = - { step = Where - , context = defaultContext - } - - -defaultContext : Source -defaultContext = - { id = "CHANGE_ME_PLEASE" - , data = Services.initialData defaultService - , directoryPlaylists = True - , enabled = True - , service = defaultService - } - - -defaultService : Service -defaultService = - Dropbox diff --git a/src/Core/UI/Sources/Page.elm b/src/Core/UI/Sources/Page.elm deleted file mode 100644 index 47c35bf57..000000000 --- a/src/Core/UI/Sources/Page.elm +++ /dev/null @@ -1,16 +0,0 @@ -module UI.Sources.Page exposing (Page(..)) - -import Sources exposing (Service) - - - --- 🌳 - - -type Page - = Index - | Edit String - | New - | NewOnboarding - | NewThroughRedirect Service { codeOrToken : Maybe String, state : Maybe String } - | Rename String diff --git a/src/Core/UI/Sources/Query.elm b/src/Core/UI/Sources/Query.elm deleted file mode 100644 index 00f8993ce..000000000 --- a/src/Core/UI/Sources/Query.elm +++ /dev/null @@ -1,68 +0,0 @@ -module UI.Sources.Query exposing (..) - -import Dict -import Json.Decode as Decode -import Sources exposing (Source) -import Url exposing (Url) -import Url.Parser as Url -import Url.Parser.Query as Query - - -requestedAddition : Url -> Bool -requestedAddition url = - case Url.parse (urlParser identity) url of - Nothing -> - False - - Just [] -> - False - - Just (_ :: _) -> - True - - -sourcesFromUrl : Url -> List Source -sourcesFromUrl url = - url - |> Url.parse (urlParser <| List.filterMap fromUrl) - |> Maybe.withDefault [] - - - --- 🔬 - - -fromUrl : String -> Maybe Source -fromUrl json = - json - |> Decode.decodeString sourceParser - |> Result.toMaybe - - -urlParser individualParser = - individualParser - |> Query.custom "source" - |> Url.query - - -sourceParser : Decode.Decoder Source -sourceParser = - Decode.andThen - (\{ service, data } -> - if Dict.member "name" data then - Decode.succeed - { id = "FILL_IN_LATER" - , data = data - , directoryPlaylists = True - , enabled = True - , service = service - } - - else - Decode.fail "Missing `name` in `data` dictionary" - ) - <| - Decode.map2 - (\s d -> { service = s, data = d }) - (Decode.field "kind" Sources.serviceDecoder) - (Decode.field "data" <| Decode.dict Decode.string) diff --git a/src/Core/UI/Sources/State.elm b/src/Core/UI/Sources/State.elm deleted file mode 100644 index 10c8f592c..000000000 --- a/src/Core/UI/Sources/State.elm +++ /dev/null @@ -1,581 +0,0 @@ -module UI.Sources.State exposing (..) - -import Alien -import Browser.Navigation as Nav -import Common -import Conditional exposing (ifThenElse) -import Coordinates -import Dict -import Dict.Ext as Dict -import Html.Events.Extra.Mouse as Mouse -import Json.Decode as Json -import Json.Encode -import Monocle.Lens as Lens -import Notifications -import Return exposing (andThen, return) -import Sources exposing (..) -import Sources.Encoding as Sources -import Sources.Services as Services -import Sources.Services.Dropbox -import Sources.Services.Google -import Tracks.Collection -import UI.Common.State as Common -import UI.Page as Page -import UI.Ports as Ports -import UI.Sources.ContextMenu as Sources -import UI.Sources.Form as Form -import UI.Sources.Page as Sources -import UI.Sources.Query -import UI.Sources.Types exposing (..) -import UI.Tracks.State as Tracks -import UI.Types as UI exposing (Manager, Model) -import UI.User.State.Export as User - - - --- 🌳 - - -formLens = - { get = .sourceForm - , set = \form m -> { m | sourceForm = form } - } - - -formContextLens = - Lens.compose - formLens - { get = .context - , set = \context m -> { m | context = context } - } - - -formStepLens = - Lens.compose - formLens - { get = .step - , set = \step m -> { m | step = step } - } - - - --- 📣 - - -update : Msg -> Manager -update msg = - case msg of - Bypass -> - Return.singleton - - -- - FinishedProcessingSource a -> - finishedProcessingSource a - - FinishedProcessing -> - finishedProcessing - - Process -> - process - - ProcessSpecific a -> - processSpecific a - - ReportProcessingError a -> - reportProcessingError a - - ReportProcessingProgress a -> - reportProcessingProgress a - - StopProcessing -> - stopProcessing - - ----------------------------------------- - -- Collection - ----------------------------------------- - AddToCollection a -> - addToCollection a - - RemoveFromCollection a -> - removeFromCollection a - - UpdateSourceData a -> - updateSourceData a - - ----------------------------------------- - -- Form - ----------------------------------------- - AddSourceUsingForm -> - addSourceUsingForm - - EditSourceUsingForm -> - editSourceUsingForm - - RenameSourceUsingForm -> - renameSourceUsingForm - - ReturnToIndex -> - returnToIndex - - SelectService a -> - selectService a - - SetFormData a b -> - setFormData a b - - TakeStep -> - takeStep - - TakeStepBackwards -> - takeStepBackwards - - ----------------------------------------- - -- Individual - ----------------------------------------- - SourceContextMenu a b -> - sourceContextMenu a b - - ToggleActivation a -> - toggleActivation a - - ToggleDirectoryPlaylists a -> - toggleDirectoryPlaylists a - - ToggleProcessAutomatically -> - toggleProcessAutomatically - - - --- 🔱 - - -addSourcesFromUrl : Manager -addSourcesFromUrl model = - case UI.Sources.Query.sourcesFromUrl model.url of - [] -> - Return.singleton model - - sources -> - sources - |> List.foldl - (\s -> andThen <| addToCollection s) - (Return.singleton model) - |> Return.command - (Nav.replaceUrl - model.navKey - (model.url.path ++ Page.toString model.page) - ) - - -finishedProcessing : Manager -finishedProcessing model = - (case model.processingNotificationId of - Just id -> - Common.dismissNotification { id = id } - - Nothing -> - Return.singleton - ) - { model | processingContext = [] } - - -finishedProcessingSource : Json.Value -> Manager -finishedProcessingSource json model = - case Json.decodeValue Json.string json of - Ok sourceId -> - model.processingContext - |> List.filter (Tuple.first >> (/=) sourceId) - |> (\newContext -> { model | processingContext = newContext }) - |> Return.singleton - - Err _ -> - Return.singleton model - - -process : Manager -process model = - case sourcesToProcess model of - [] -> - Return.singleton model - - toProcess -> - if model.isOnline then - processSpecific toProcess model - - else - toProcess - |> List.filter Sources.worksOffline - |> (\s -> - case s of - [] -> - Return.singleton model - - _ -> - processSpecific s model - ) - - -processSpecific : List Source -> Manager -processSpecific toProcess model = - let - notification = - Notifications.stickyCasual "Processing sources ..." - - notificationId = - Notifications.id notification - - newNotifications = - List.filter - (\n -> Notifications.kind n /= Notifications.Error) - model.notifications - - processingContext = - toProcess - |> List.sortBy (.data >> Dict.fetch "name" "") - |> List.map (\{ id } -> ( id, 0 )) - - newModel = - { model - | notifications = newNotifications - , processingContext = processingContext - , processingError = Nothing - , processingNotificationId = Just notificationId - } - in - [ ( "origin" - , Json.Encode.string (Common.urlOrigin model.url) - ) - , ( "sources" - , Json.Encode.list Sources.encode toProcess - ) - ] - |> Json.Encode.object - |> Alien.broadcast Alien.ProcessSources - |> Ports.toBrain - |> return newModel - |> andThen (Common.showNotification notification) - - -reportProcessingError : Json.Value -> Manager -reportProcessingError json model = - case Json.decodeValue (Json.dict Json.string) json of - Ok dict -> - let - args = - { error = Dict.fetch "error" "" dict - , sourceId = Dict.fetch "sourceId" "" dict - } - in - [] - |> Notifications.errorWithCode - ("Could not process the _" - ++ Dict.fetch "sourceName" "" dict - ++ "_ source. I got the following response from the source:" - ) - (Dict.fetch "error" "missingError" dict) - |> Common.showNotificationWithModel - { model | processingError = Just args } - - Err _ -> - "Could not decode processing error" - |> Notifications.stickyError - |> Common.showNotificationWithModel model - - -reportProcessingProgress : Json.Value -> Manager -reportProcessingProgress json model = - case - Json.decodeValue - (Json.map2 - (\p s -> - { progress = p - , sourceId = s - } - ) - (Json.field "progress" Json.float) - (Json.field "sourceId" Json.string) - ) - json - of - Ok { progress, sourceId } -> - model.processingContext - |> List.map - (\( sid, pro ) -> - ifThenElse (sid == sourceId) - ( sid, progress ) - ( sid, pro ) - ) - |> (\processingContext -> - { model | processingContext = processingContext } - ) - |> Return.singleton - - Err _ -> - "Could not decode processing progress" - |> Notifications.stickyError - |> Common.showNotificationWithModel model - - -stopProcessing : Manager -stopProcessing model = - case model.processingNotificationId of - Just notificationId -> - Alien.StopProcessing - |> Alien.trigger - |> Ports.toBrain - |> return - { model - | processingContext = [] - , processingNotificationId = Nothing - } - |> andThen (Common.dismissNotification { id = notificationId }) - - Nothing -> - Return.singleton model - - - --- COLLECTION - - -addToCollection : Source -> Manager -addToCollection unsuitableSource model = - let - source = - setProperId - (List.length model.sources + 1) - model.currentTime - unsuitableSource - in - { model | sources = model.sources ++ [ source ] } - |> User.saveSources - |> andThen (processSpecific [ source ]) - - -removeFromCollection : { sourceId : String } -> Manager -removeFromCollection { sourceId } model = - model.sources - |> List.filter (.id >> (/=) sourceId) - |> (\c -> { model | sources = c }) - |> Return.singleton - |> andThen User.saveSources - |> andThen (Tracks.removeBySourceId sourceId) - - -updateSourceData : Json.Value -> Manager -updateSourceData json model = - json - |> Sources.decode - |> Maybe.map - (\source -> - List.map - (\s -> - if s.id == source.id then - source - - else - s - ) - model.sources - ) - |> Maybe.map (\col -> { model | sources = col }) - |> Maybe.withDefault model - |> User.saveSources - - - --- FORM - - -addSourceUsingForm : Manager -addSourceUsingForm model = - let - context = - model.sourceForm.context - - cleanContext = - { context | data = Dict.map (always String.trim) context.data } - in - model - |> formLens.set Form.initialModel - |> addToCollection cleanContext - |> andThen returnToIndex - - -editSourceUsingForm : Manager -editSourceUsingForm model = - model - |> formLens.set Form.initialModel - |> replaceSourceInCollection model.sourceForm.context - |> andThen process - |> andThen returnToIndex - - -renameSourceUsingForm : Manager -renameSourceUsingForm model = - model - |> formLens.set Form.initialModel - |> replaceSourceInCollection model.sourceForm.context - |> andThen returnToIndex - - -returnToIndex : Manager -returnToIndex = - Common.changeUrlUsingPage (Page.Sources Sources.Index) - - -selectService : String -> Manager -selectService serviceKey model = - case Services.keyToType serviceKey of - Just service -> - model - |> Lens.modify - formContextLens - (\c -> - { c - | data = Services.initialData service - , service = service - } - ) - |> Return.singleton - - Nothing -> - Return.singleton model - - -setFormData : String -> String -> Manager -setFormData key value model = - model - |> Lens.modify - formContextLens - (\context -> - context.data - |> Dict.insert key value - |> (\data -> { context | data = data }) - ) - |> Return.singleton - - -takeStep : Manager -takeStep model = - let - form = - formLens.get model - in - case ( form.step, form.context.service ) of - ( How, Dropbox ) -> - form.context.data - |> Sources.Services.Dropbox.authorizationUrl - |> externalAuthorization model - - ( How, Google ) -> - form.context.data - |> Sources.Services.Google.authorizationUrl - |> externalAuthorization model - - _ -> - model - |> Lens.modify formStepLens takeStepForwards - |> Return.singleton - - -takeStepBackwards : Manager -takeStepBackwards = - Lens.modify formStepLens takeStepBackwards_ >> Return.singleton - - - --- INDIVIDUAL - - -sourceContextMenu : Source -> Mouse.Event -> Manager -sourceContextMenu source mouseEvent model = - mouseEvent.clientPos - |> Coordinates.fromTuple - |> Sources.sourceMenu source - |> Common.showContextMenuWithModel model - - -toggleActivation : { sourceId : String } -> Manager -toggleActivation { sourceId } model = - model.sources - |> List.map - (\source -> - if source.id == sourceId then - { source | enabled = not source.enabled } - - else - source - ) - |> (\collection -> { model | sources = collection }) - |> Tracks.reviseCollection Tracks.Collection.identify - |> andThen Common.forceTracksRerender - |> andThen Common.generateDirectoryPlaylists - |> andThen User.saveSources - - -toggleDirectoryPlaylists : { sourceId : String } -> Manager -toggleDirectoryPlaylists { sourceId } model = - model.sources - |> List.map - (\source -> - if source.id == sourceId then - { source | directoryPlaylists = not source.directoryPlaylists } - - else - source - ) - |> (\collection -> { model | sources = collection }) - |> User.saveSources - |> andThen Common.generateDirectoryPlaylists - - -toggleProcessAutomatically : Manager -toggleProcessAutomatically model = - User.saveSettings { model | processAutomatically = not model.processAutomatically } - - - --- ⚗️ - - -externalAuthorization : Model -> (String -> String) -> ( Model, Cmd UI.Msg ) -externalAuthorization model urlBuilder = - model.url - |> Common.urlOrigin - |> urlBuilder - |> Nav.load - |> return model - - -replaceSourceInCollection : Source -> Manager -replaceSourceInCollection source model = - model.sources - |> List.map (\s -> ifThenElse (s.id == source.id) source s) - |> (\s -> { model | sources = s }) - |> User.saveSources - - -sourcesToProcess : Model -> List Source -sourcesToProcess model = - List.filter (.enabled >> (==) True) model.sources - - -takeStepForwards : FormStep -> FormStep -takeStepForwards currentStep = - case currentStep of - Where -> - How - - _ -> - By - - -takeStepBackwards_ : FormStep -> FormStep -takeStepBackwards_ currentStep = - case currentStep of - By -> - How - - _ -> - Where diff --git a/src/Core/UI/Sources/Types.elm b/src/Core/UI/Sources/Types.elm deleted file mode 100644 index f3d6e515b..000000000 --- a/src/Core/UI/Sources/Types.elm +++ /dev/null @@ -1,61 +0,0 @@ -module UI.Sources.Types exposing (..) - -import Html.Events.Extra.Mouse as Mouse -import Json.Decode as Json -import Sources exposing (..) - - - --- 🌳 - - -type alias Form = - { context : Source - , step : FormStep - } - - -type FormStep - = Where - | How - | By - - - --- 📣 - - -type Msg - = Bypass - -- - | FinishedProcessingSource Json.Value - | FinishedProcessing - | Process - | ProcessSpecific (List Source) - | ReportProcessingError Json.Value - | ReportProcessingProgress Json.Value - | StopProcessing - ----------------------------------------- - -- Collection - ----------------------------------------- - | AddToCollection Source - | RemoveFromCollection { sourceId : String } - | UpdateSourceData Json.Value - ----------------------------------------- - -- Form - ----------------------------------------- - | AddSourceUsingForm - | EditSourceUsingForm - | RenameSourceUsingForm - | ReturnToIndex - | SelectService String - | SetFormData String String - | TakeStep - | TakeStepBackwards - ----------------------------------------- - -- Individual - ----------------------------------------- - | SourceContextMenu Source Mouse.Event - | ToggleActivation { sourceId : String } - | ToggleDirectoryPlaylists { sourceId : String } - | ToggleProcessAutomatically diff --git a/src/Core/UI/Svg/Elements.elm b/src/Core/UI/Svg/Elements.elm deleted file mode 100644 index 359ef4799..000000000 --- a/src/Core/UI/Svg/Elements.elm +++ /dev/null @@ -1,118 +0,0 @@ -module UI.Svg.Elements exposing (dropboxLogo, ipfsLogo, loading, loadingWithSize, remoteStorageLogo) - -import Svg exposing (..) -import Svg.Attributes exposing (..) - - - --- LOGOS - - -ipfsLogo : Int -> Svg Never -ipfsLogo size = - svg - [ height (String.fromInt size) - , viewBox "0 0 511.99999 511.99998" - , width (String.fromInt size) - ] - [ -- Group 1 - ---------- - g - [ transform "translate(-50.017 -515.51)" ] - [ Svg.path - [ d "m283.13 546.35-160.74 92.806c0.32126 2.8543 0.32125 5.7352 0 8.5894l160.75 92.806c13.554-10.001 32.043-10.001 45.597 0l160.75-92.807c-0.32126-2.8543-0.32293-5.7338-0.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03-160.92 93.84c1.884 16.739-7.3611 32.751-22.799 39.489l0.18062 184.58c2.6325 1.1489 5.1267 2.5886 7.438 4.294l160.75-92.805c-1.884-16.739 7.3611-32.752 22.799-39.49v-185.61c-2.6325-1.1489-5.1281-2.5886-7.4394-4.294zm-397.81 1.0315c-2.3112 1.7054-4.8054 3.1465-7.438 4.2954v185.61c15.438 6.7378 24.683 22.75 22.799 39.489l160.74 92.806c2.3112-1.7054 4.8069-3.1465 7.4394-4.2954v-185.61c-15.438-6.7378-24.683-22.75-22.799-39.489l-160.74-92.81z" - , fill "currentColor" - ] - [] - ] - - -- Group 2 - ---------- - , g - [ fill "currentColor" - , transform "translate(0 -196.66)" - ] - [ Svg.path - [ d "m256 708.66 221.7-128v-256l-221.7 128v256z" - , fillOpacity "1" - ] - [] - , Svg.path - [ d "m256 708.66v-256l-221.7-128v256l221.7 128z" - , fillOpacity ".75" - ] - [] - , Svg.path - [ d "m34.298 324.66 221.7 128 221.7-128-221.7-128-221.7 128z" - , fillOpacity ".5" - ] - [] - ] - ] - - -dropboxLogo : Int -> Svg Never -dropboxLogo size = - svg - [ height (String.fromInt size) - , viewBox "0 0 43 40" - , width (String.fromInt size) - ] - [ Svg.path - [ d "m12.5 0l-12.5 8.1 8.7 7 12.5-7.8-8.7-7.3zm-12.5 21.9l12.5 8.2 8.7-7.3-12.5-7.7-8.7 6.8zm21.2 0.9l8.8 7.3 12.4-8.1-8.6-6.9-12.6 7.7zm21.2-14.7l-12.4-8.1-8.8 7.3 12.6 7.8 8.6-7zm-21.1 16.3l-8.8 7.3-3.7-2.5v2.8l12.5 7.5 12.5-7.5v-2.8l-3.8 2.5-8.7-7.3z" - - -- - , fill "currentColor" - ] - [] - ] - - -remoteStorageLogo : Int -> Svg Never -remoteStorageLogo size = - svg - [ clipRule "evenodd" - , fillRule "evenodd" - , height (String.fromInt size) - , imageRendering "optimizeQuality" - , shapeRendering "geometricPrecision" - , textRendering "geometricPrecision" - , viewBox "0 0 739 853" - , width (String.fromInt size) - ] - [ polygon - [ points "370,754 0,542 0,640 185,747 370,853 554,747 739,640 739,525 739,525 739,476 739,427 739,378 653,427 370,589 86,427 86,427 86,361 185,418 370,524 554,418 653,361 739,311 739,213 739,213 554,107 370,0 185,107 58,180 144,230 228,181 370,100 511,181 652,263 370,425 87,263 87,263 0,213 0,213 0,311 0,378 0,427 0,476 86,525 185,582 370,689 554,582 653,525 653,590 653,592" - , fill "currentColor" - ] - [] - ] - - - --- LOADING ANIMATION - - -loading : Svg Never -loading = - loadingWithSize 29 - - -loadingWithSize : Int -> Svg Never -loadingWithSize size = - svg - [ class "loading-animation" - , height (String.fromInt size) - , viewBox "0 0 30 30" - , width (String.fromInt size) - ] - [ circle - [ class "loading-animation__circle" - , cx "15" - , cy "15" - , fill "none" - , r "14" - , strokeLinecap "round" - , strokeWidth "2" - ] - [] - ] diff --git a/src/Core/UI/Syncing/Common.elm b/src/Core/UI/Syncing/Common.elm deleted file mode 100644 index 6eab02541..000000000 --- a/src/Core/UI/Syncing/Common.elm +++ /dev/null @@ -1,69 +0,0 @@ -module UI.Syncing.Common exposing (..) - -import Chunky exposing (..) -import Html -import Svg -import UI.Svg.Elements -import UI.Syncing.Types exposing (..) -import UI.Types exposing (Msg(..)) -import User.Layer exposing (Method, dropboxMethod, remoteStorageMethod) - - - --- 🚀 - - -startDropbox : Msg -startDropbox = - SyncingMsg (TriggerExternalAuth dropboxMethod "") - - -startIpfs : Msg -startIpfs = - SyncingMsg PingIpfs - - -startRemoteStorage : Msg -startRemoteStorage = - { icon = \size _ -> Svg.map never (UI.Svg.Elements.remoteStorageLogo size) - , placeholder = "example@5apps.com" - , question = - { question = - "What's your user address?" - , info = - [ Html.text "The format is " - , inline - [] - [ Html.text "username@server.domain" ] - ] - } - , value = "" - } - |> AskForInput remoteStorageMethod - |> SyncingMsg - - - --- 🛠 - - -extractMethod : State -> Maybe Method -extractMethod state = - case state of - Synced method -> - Just method - - Syncing { method } -> - Just method - - InputScreen method _ -> - Just method - - NewEncryptionKeyScreen method _ -> - Just method - - UpdateEncryptionKeyScreen method _ -> - Just method - - NotSynced -> - Nothing diff --git a/src/Core/UI/Syncing/ContextMenu.elm b/src/Core/UI/Syncing/ContextMenu.elm deleted file mode 100644 index aa32f896b..000000000 --- a/src/Core/UI/Syncing/ContextMenu.elm +++ /dev/null @@ -1,37 +0,0 @@ -module UI.Syncing.ContextMenu exposing (syncDataMenu) - -import ContextMenu exposing (..) -import Coordinates exposing (Coordinates) -import Svg -import UI.Svg.Elements -import UI.Syncing.Common exposing (startDropbox, startIpfs, startRemoteStorage) -import UI.Types exposing (Msg) -import User.Layer exposing (dropboxMethod, ipfsMethod, methodName, remoteStorageMethod) - - - --- 🔱 - - -syncDataMenu : Coordinates -> ContextMenu Msg -syncDataMenu = - ContextMenu - [ Item - { icon = \_ _ -> Svg.map never (UI.Svg.Elements.dropboxLogo 16) - , label = methodName dropboxMethod - , msg = startDropbox - , active = False - } - , Item - { icon = \_ _ -> Svg.map never (UI.Svg.Elements.remoteStorageLogo 16) - , label = methodName remoteStorageMethod - , msg = startRemoteStorage - , active = False - } - , Item - { icon = \_ _ -> Svg.map never (UI.Svg.Elements.ipfsLogo 16) - , label = methodName ipfsMethod - , msg = startIpfs - , active = False - } - ] diff --git a/src/Core/UI/Syncing/State.elm b/src/Core/UI/Syncing/State.elm deleted file mode 100644 index c8de179ec..000000000 --- a/src/Core/UI/Syncing/State.elm +++ /dev/null @@ -1,642 +0,0 @@ -module UI.Syncing.State exposing (..) - -import Alien -import Base64 -import Binary -import Browser.Navigation as Nav -import Common -import Coordinates -import Dict -import Html -import Html.Attributes -import Html.Events.Extra.Mouse as Mouse -import Http -import Http.Ext as Http -import Json.Decode as Json -import Json.Encode -import Lens.Ext as Lens -import Management -import Maybe.Extra as Maybe -import Monocle.Lens exposing (Lens) -import Notifications -import Return exposing (andThen, return) -import SHA -import String.Ext as String -import Svg -import Time -import UI.Backdrop as Backdrop -import UI.Common.State as Common exposing (showNotification, showNotificationWithModel) -import UI.Ports as Ports -import UI.Sources.State as Sources -import UI.Svg.Elements -import UI.Syncing.ContextMenu as Syncing -import UI.Syncing.Types as Syncing exposing (..) -import UI.Types as UI exposing (..) -import Url exposing (Protocol(..), Url) -import Url.Ext as Url -import UrlBase64 -import User.Layer exposing (..) -import User.Layer.Methods.Dropbox as Dropbox -import User.Layer.Methods.RemoteStorage as RemoteStorage - - - --- ⛩ - - -minimumPassphraseLength : Int -minimumPassphraseLength = - 16 - - -passphraseLengthErrorMessage : String -passphraseLengthErrorMessage = - "Your passphrase should be atleast *16 characters* long." - - - --- 🌳 - - -initialModel : Url -> Syncing.State -initialModel url = - case Url.action url of - [ "authenticate", "remotestorage", encodedUserAddress ] -> - let - dict = - Url.queryDictionary { url | query = url.fragment } - - userAddress = - encodedUserAddress - |> Url.percentDecode - |> Maybe.andThen (UrlBase64.decode Base64.decode >> Result.toMaybe) - |> Maybe.withDefault encodedUserAddress - in - case Dict.get "access_token" dict of - Just t -> - NewEncryptionKeyScreen - (RemoteStorage - { userAddress = userAddress - , token = t - } - ) - Nothing - - Nothing -> - NotSynced - - _ -> - NotSynced - - -initialCommand : Url -> Cmd Syncing.Msg -initialCommand url = - case Url.action url of - [ "authenticate", "dropbox" ] -> - case Dict.get "code" (Url.queryDictionary url) of - Just code -> - Dropbox.exchangeAuthCode - ExchangeDropboxAuthCode - url - code - - _ -> - Cmd.none - - _ -> - Cmd.none - - -lens : Lens UI.Model Syncing.State -lens = - { get = .syncing - , set = \a m -> { m | syncing = a } - } - - - --- 📣 - - -update : Syncing.Msg -> Manager -update msg = - case msg of - Syncing.Bypass -> - Return.singleton - - ActivateSync a -> - activateSync a - - ActivateSyncWithPassphrase a b -> - activateSyncWithPassphrase a b - - BootFailure a -> - bootFailure a - - ExchangeDropboxAuthCode a -> - exchangeDropboxAuthCode a - - GotSyncMethod a -> - gotSyncMethod a - - RemoteStorageWebfinger a b -> - remoteStorageWebfinger a b - - ShowSyncDataMenu a -> - showSyncDataMenu a - - StartedSyncing a -> - startedSyncing a - - StopSync -> - stopSync - - TriggerExternalAuth a b -> - externalAuth a b - - ----------------------------------------- - -- Encryption - ----------------------------------------- - KeepPassphraseInMemory a -> - keepPassphraseInMemory a - - NeedEncryptionKey a -> - needEncryptionKey a - - RemoveEncryptionKey a -> - removeEncryptionKey a - - ShowNewEncryptionKeyScreen a -> - showNewEncryptionKeyScreen a - - ShowUpdateEncryptionKeyScreen a -> - showUpdateEncryptionKeyScreen a - - UpdateEncryptionKey a b -> - updateEncryptionKey a b - - ----------------------------------------- - -- IPFS - ----------------------------------------- - PingIpfs -> - pingIpfs - - PingIpfsCallback a -> - pingIpfsCallback a - - PingOtherIpfs a -> - pingOtherIpfs a - - PingOtherIpfsCallback a b -> - pingOtherIpfsCallback a b - - ----------------------------------------- - -- More Input - ----------------------------------------- - AskForInput a b -> - askForInput a b - - CancelInput -> - cancelInput - - ConfirmInput -> - confirmInput - - Input a -> - input a - - -organize : Organizer Syncing.State -> Manager -organize = - Management.organize lens - - -replaceState : Syncing.State -> Manager -replaceState state = - lens.set state >> Return.singleton - - - --- 🔱 - - -activateSync : Method -> Manager -activateSync method model = - [ ( "method", encodeMethod method ) - , ( "passphrase", Json.Encode.null ) - ] - |> Json.Encode.object - |> Alien.broadcast Alien.SetSyncMethod - |> Ports.toBrain - -- - |> return model - - -activateSyncWithPassphrase : Method -> String -> Manager -activateSyncWithPassphrase method passphrase model = - if String.length passphrase < minimumPassphraseLength then - passphraseLengthErrorMessage - |> Notifications.error - |> Common.showNotificationWithModel model - - else - [ ( "method", encodeMethod method ) - , ( "passphrase", Json.Encode.string <| hashPassphrase passphrase ) - ] - |> Json.Encode.object - |> Alien.broadcast Alien.SetSyncMethod - |> Ports.toBrain - -- - |> return model - - -bootFailure : String -> Manager -bootFailure err model = - model - |> showNotification (Notifications.error err) - |> andThen Backdrop.setDefault - - -externalAuth : Method -> String -> Manager -externalAuth method string model = - case method of - Dropbox _ -> - [ ( "client_id", Dropbox.clientId ) - , ( "redirect_uri", Dropbox.redirectUri model.url ) - , ( "response_type", "code" ) - , ( "token_access_type", "offline" ) - ] - |> Common.queryString - |> String.append "https://www.dropbox.com/oauth2/authorize" - |> Nav.load - |> return model - - RemoteStorage _ -> - string - |> RemoteStorage.parseUserAddress - |> Maybe.map (RemoteStorage.webfingerRequest RemoteStorageWebfinger model.url.protocol) - |> Maybe.map (Cmd.map SyncingMsg) - |> Maybe.unwrap - (RemoteStorage.userAddressError - |> Notifications.error - |> Common.showNotificationWithModel model - ) - (return model) - - _ -> - Return.singleton model - - -exchangeDropboxAuthCode : Result Http.Error Dropbox.Tokens -> Manager -exchangeDropboxAuthCode result model = - case result of - Ok tokens -> - case tokens.refreshToken of - Just refreshToken -> - Nothing - |> NewEncryptionKeyScreen - (Dropbox - { accessToken = tokens.accessToken - , expiresAt = Time.posixToMillis model.currentTime // 1000 + tokens.expiresIn - , refreshToken = refreshToken - } - ) - |> Lens.replace lens model - |> Return.singleton - - Nothing -> - "Missing refresh token in Dropbox code exchange flow." - |> Notifications.stickyError - |> showNotificationWithModel - (Lens.replace lens model NotSynced) - - Err err -> - [] - |> Notifications.errorWithCode - "Failed to authenticate with Dropbox" - (Http.errorToString err) - |> showNotificationWithModel - (Lens.replace lens model NotSynced) - - -gotSyncMethod : Json.Value -> Manager -gotSyncMethod json model = - let - afterwards a = - andThen - (\m -> - if m.processAutomatically then - Sources.process m - - else - Return.singleton m - ) - (case model.syncing of - Syncing { notificationId } -> - Common.dismissNotification { id = notificationId } a - - _ -> - Return.singleton a - ) - in - -- 🧠 told me which auth method we're using, - -- so we can tell the user in the UI. - case decodeMethod json of - Just method -> - model - |> replaceState (Synced method) - |> andThen afterwards - - Nothing -> - afterwards model - - -remoteStorageWebfinger : RemoteStorage.Attributes -> Result Http.Error String -> Manager -remoteStorageWebfinger remoteStorage result model = - case result of - Ok oauthOrigin -> - let - origin = - Common.urlOrigin model.url - in - remoteStorage - |> RemoteStorage.oauthAddress - { oauthOrigin = oauthOrigin - , origin = origin - } - |> Nav.load - |> return model - - Err _ -> - RemoteStorage.webfingerError - |> Notifications.error - |> showNotificationWithModel model - - -showSyncDataMenu : Mouse.Event -> Manager -showSyncDataMenu mouseEvent model = - mouseEvent.clientPos - |> Coordinates.fromTuple - |> Syncing.syncDataMenu - |> Common.showContextMenuWithModel model - - -startedSyncing : Json.Value -> Manager -startedSyncing json = - -- 🧠 started syncing - case decodeMethod json of - Just method -> - Common.showSyncingNotification method - - Nothing -> - Return.singleton - - -stopSync : Manager -stopSync model = - Alien.UnsetSyncMethod - |> Alien.trigger - |> Ports.toBrain - |> return model - |> andThen (replaceState NotSynced) - - - --- ENCRYPTION - - -keepPassphraseInMemory : String -> Manager -keepPassphraseInMemory passphrase model = - (\state -> - case state of - NewEncryptionKeyScreen method _ -> - NewEncryptionKeyScreen method (Just passphrase) - - UpdateEncryptionKeyScreen method _ -> - UpdateEncryptionKeyScreen method (Just passphrase) - - s -> - s - ) - |> Lens.adjust lens model - |> Return.singleton - - -needEncryptionKey : { error : String } -> Manager -needEncryptionKey { error } model = - (case lens.get model of - Syncing { notificationId } -> - Common.dismissNotification { id = notificationId } model - - m -> - replaceState m model - ) - |> andThen - (error - |> Notifications.stickyError - |> Common.showNotification - ) - |> andThen - stopSync - - -removeEncryptionKey : Method -> Manager -removeEncryptionKey method model = - Alien.RemoveEncryptionKey - |> Alien.trigger - |> Ports.toBrain - -- - |> return - (lens.set (Synced method) model) - |> andThen - ("Saving data without encryption ..." - |> Notifications.success - |> Common.showNotification - ) - |> andThen - Common.forceTracksRerender - - -showNewEncryptionKeyScreen : Method -> Manager -showNewEncryptionKeyScreen method = - replaceState (NewEncryptionKeyScreen method Nothing) - - -showUpdateEncryptionKeyScreen : Method -> Manager -showUpdateEncryptionKeyScreen method = - replaceState (UpdateEncryptionKeyScreen method Nothing) - - -updateEncryptionKey : Method -> String -> Manager -updateEncryptionKey method passphrase model = - if String.length passphrase < minimumPassphraseLength then - passphraseLengthErrorMessage - |> Notifications.error - |> Common.showNotificationWithModel model - - else - passphrase - |> hashPassphrase - |> Json.Encode.string - |> Alien.broadcast Alien.UpdateEncryptionKey - |> Ports.toBrain - -- - |> return - (lens.set (Synced method) model) - |> andThen - ("Encrypting data with new passphrase ..." - |> Notifications.success - |> Common.showNotification - ) - |> andThen - Common.forceTracksRerender - - - --- IPFS - - -pingIpfs : Manager -pingIpfs model = - case model.url.protocol of - Https -> - """ - Unfortunately the local IPFS API doesn't work with HTTPS. - Install the [IPFS Companion](https://github.com/ipfs-shipyard/ipfs-companion#release-channel) browser extension to get around this issue - (and make sure it redirects to the local gateway). - """ - |> Notifications.error - |> Common.showNotificationWithModel model - - Http -> - { url = "//localhost:5001/api/v0/id" - , expect = Http.expectWhatever (SyncingMsg << PingIpfsCallback) - , body = Http.emptyBody - } - |> Http.post - |> return model - - -pingIpfsCallback : Result Http.Error () -> Manager -pingIpfsCallback result = - case result of - Ok _ -> - { apiOrigin = "//localhost:5001" } - |> Ipfs - |> showNewEncryptionKeyScreen - - Err _ -> - askForInput - (Ipfs { apiOrigin = "" }) - { icon = \size _ -> Svg.map never (UI.Svg.Elements.ipfsLogo size) - , placeholder = "//localhost:5001" - , question = - { question = - "Where's your IPFS API located?" - , info = - [ Html.text "You can find this address on the IPFS Web UI." - , Html.br [] [] - , Html.text "Most likely you'll also need to setup CORS." - , Html.br [] [] - , Html.text "You can find the instructions for that " - , Html.a - [ Html.Attributes.class "border-b border-current-color font-semibold inline-block leading-tight" - , Html.Attributes.href "about/cors/#CORS__IPFS" - , Html.Attributes.target "_blank" - ] - [ Html.text "here" ] - ] - } - , value = "//localhost:5001" - } - - -pingOtherIpfs : String -> Manager -pingOtherIpfs origin model = - { url = origin ++ "/api/v0/id" - , expect = Http.expectWhatever (SyncingMsg << PingOtherIpfsCallback origin) - , body = Http.emptyBody - } - |> Http.post - |> return model - - -pingOtherIpfsCallback : String -> Result Http.Error () -> Manager -pingOtherIpfsCallback origin result = - case result of - Ok _ -> - { apiOrigin = origin } - |> Ipfs - |> showNewEncryptionKeyScreen - - Err _ -> - "Can't reach this IPFS API, maybe it's offline? Or I don't have access?" - |> Notifications.error - |> Common.showNotification - - - --- MORE INPUT - - -askForInput : Method -> Question -> Manager -askForInput method question = - question - |> InputScreen method - |> replaceState - - -cancelInput : Manager -cancelInput model = - case lens.get model of - InputScreen _ _ -> - replaceState NotSynced model - - NewEncryptionKeyScreen _ _ -> - replaceState NotSynced model - - UpdateEncryptionKeyScreen method _ -> - replaceState (Synced method) model - - m -> - replaceState m model - - -confirmInput : Manager -confirmInput model = - case lens.get model of - InputScreen (Ipfs _) { value } -> - pingOtherIpfs (String.chopEnd "/" value) model - - InputScreen (RemoteStorage r) { value } -> - externalAuth (RemoteStorage r) value model - - _ -> - Return.singleton model - - -input : String -> Manager -input string model = - (\state -> - case state of - InputScreen method opts -> - InputScreen method { opts | value = string } - - s -> - s - ) - |> Lens.adjust lens model - |> Return.singleton - - - --- 🛠 - - -hashPassphrase : String -> String -hashPassphrase phrase = - phrase - |> Binary.fromStringAsUtf8 - |> SHA.sha256 - |> Binary.toHex - |> String.toLower diff --git a/src/Core/UI/Syncing/Types.elm b/src/Core/UI/Syncing/Types.elm deleted file mode 100644 index ba5431af8..000000000 --- a/src/Core/UI/Syncing/Types.elm +++ /dev/null @@ -1,74 +0,0 @@ -module UI.Syncing.Types exposing (Msg(..), Question, State(..)) - -import Html exposing (Html) -import Html.Events.Extra.Mouse as Mouse -import Http -import Json.Decode as Json -import Material.Icons.Types exposing (Coloring) -import Svg exposing (Svg) -import User.Layer exposing (Method) -import User.Layer.Methods.Dropbox as Dropbox -import User.Layer.Methods.RemoteStorage as RemoteStorage - - - --- 🌳 - - -type State - = NotSynced - | Synced Method - | Syncing { method : Method, notificationId : Int } - | InputScreen Method Question - | NewEncryptionKeyScreen Method (Maybe String) - | UpdateEncryptionKeyScreen Method (Maybe String) - - -type alias Question = - { icon : Int -> Coloring -> Svg Msg - , placeholder : String - , question : { question : String, info : List (Html Msg) } - , value : String - } - - - --- 📣 - - -type Msg - = Bypass - -- - | ActivateSync Method - | ActivateSyncWithPassphrase Method String - | BootFailure String - | ExchangeDropboxAuthCode (Result Http.Error Dropbox.Tokens) - | GotSyncMethod Json.Value - | RemoteStorageWebfinger RemoteStorage.Attributes (Result Http.Error String) - | ShowSyncDataMenu Mouse.Event - | StartedSyncing Json.Value - | StopSync - | TriggerExternalAuth Method String - ----------------------------------------- - -- Encryption - ----------------------------------------- - | KeepPassphraseInMemory String - | NeedEncryptionKey { error : String } - | RemoveEncryptionKey Method - | ShowNewEncryptionKeyScreen Method - | ShowUpdateEncryptionKeyScreen Method - | UpdateEncryptionKey Method String - ----------------------------------------- - -- IPFS - ----------------------------------------- - | PingIpfs - | PingIpfsCallback (Result Http.Error ()) - | PingOtherIpfs String - | PingOtherIpfsCallback String (Result Http.Error ()) - ----------------------------------------- - -- More Input - ----------------------------------------- - | AskForInput Method Question - | CancelInput - | ConfirmInput - | Input String diff --git a/src/Core/UI/Theme.elm b/src/Core/UI/Theme.elm deleted file mode 100644 index 7a43d0220..000000000 --- a/src/Core/UI/Theme.elm +++ /dev/null @@ -1,113 +0,0 @@ -module UI.Theme exposing (..) - -import Chunky exposing (..) -import Dict exposing (Dict) -import Html exposing (Html) -import Theme exposing (Theme) -import Themes.Sunrise.Theme as Sunrise -import Themes.Sunrise.Tracks.Scene.Covers -import Themes.Sunrise.Tracks.Scene.List -import Tracks exposing (IdentifiedTrack, Scene) -import UI.Svg.Elements -import UI.Types exposing (Model, Msg) - - - --- 🔮 - - -list : List (Theme Msg Model) -list = - [ Sunrise.theme - ] - - -default : Theme Msg Model -default = - Sunrise.theme - - - --- 🚧 - - -dict : Dict String (Theme Msg Model) -dict = - list - |> List.map - (\theme -> - ( theme.id, theme ) - ) - |> Dict.fromList - - -view : Model -> Html Msg -view model = - if model.isLoading then - loadingAnimation - - else - case model.theme of - Just { id } -> - case Dict.get id dict of - Just theme -> - theme.view model - - Nothing -> - default.view model - - Nothing -> - default.view model - - -loadingAnimation = - chunk - [ "flex" - , "flex-col" - , "items-center" - , "justify-center" - , "screen-height" - , "w-screen" - ] - [ loadingAnimationSvg - , chunk - [ "italic" - , "mt-5" - , "text-white" - , "text-opacity-30" - ] - [ Html.text "Transmitting particles" ] - ] - - -loadingAnimationSvg = - Html.map never UI.Svg.Elements.loading - - - --- TODO - - -scrollTracksToTop : Scene -> Cmd Msg -scrollTracksToTop scene = - case scene of - Tracks.Covers -> - Themes.Sunrise.Tracks.Scene.List.scrollToTop - - Tracks.List -> - Themes.Sunrise.Tracks.Scene.Covers.scrollToTop - - -scrollToNowPlaying : Scene -> IdentifiedTrack -> Model -> Cmd Msg -scrollToNowPlaying scene ( identifiers, track ) model = - case scene of - Tracks.Covers -> - Themes.Sunrise.Tracks.Scene.Covers.scrollToNowPlaying - model.viewport.width - model.covers.harvested - ( identifiers, track ) - - Tracks.List -> - Themes.Sunrise.Tracks.Scene.List.scrollToNowPlaying - model.tracks.harvested - ( identifiers, track ) diff --git a/src/Core/UI/Tracks/ContextMenu.elm b/src/Core/UI/Tracks/ContextMenu.elm deleted file mode 100644 index d9d37d5a6..000000000 --- a/src/Core/UI/Tracks/ContextMenu.elm +++ /dev/null @@ -1,377 +0,0 @@ -module UI.Tracks.ContextMenu exposing (cacheAction, trackMenu, viewMenu) - -import Conditional exposing (ifThenElse) -import ContextMenu exposing (..) -import Coordinates exposing (Coordinates) -import Material.Icons.Round as Icons -import Maybe.Extra as Maybe -import Playlists exposing (Playlist) -import Queue -import Sources exposing (Source) -import Time -import Tracks exposing (Grouping(..), IdentifiedTrack) -import UI.Queue.Types as Queue -import UI.Tracks.Types as Tracks -import UI.Types exposing (Msg(..)) - - - --- TRACK MENU - - -trackMenu : - { cached : List String - , cachingInProgress : List String - , currentTime : Time.Posix - , lastModifiedPlaylistName : Maybe { collection : Bool, name : String } - , selectedPlaylist : Maybe Playlist - , showAlternativeMenu : Bool - , sources : List Source - } - -> List IdentifiedTrack - -> Coordinates - -> ContextMenu Msg -trackMenu { cached, cachingInProgress, currentTime, selectedPlaylist, lastModifiedPlaylistName, showAlternativeMenu, sources } tracks = - if showAlternativeMenu then - [ alternativeMenuActions - currentTime - sources - tracks - ] - |> List.concat - |> ContextMenu - - else - [ queueActions - tracks - - -- - , playlistActions - { selectedPlaylist = selectedPlaylist - , lastModifiedPlaylistName = lastModifiedPlaylistName - } - tracks - - -- - , cacheAction - { cached = cached - , cachingInProgress = cachingInProgress - } - tracks - |> List.singleton - ] - |> List.concat - |> ContextMenu - - -alternativeMenuActions : - Time.Posix - -> List Source - -> List IdentifiedTrack - -> List (ContextMenu.Item Msg) -alternativeMenuActions timestamp sources tracks = - case tracks of - [ ( _, t ) ] -> - [ Item - { icon = Icons.link - , label = "Copy temporary url" - , msg = CopyToClipboard (Queue.makeTrackUrl timestamp sources t) - , active = False - } - - -- - , Item - { icon = Icons.sync - , label = "Sync tags" - , msg = TracksMsg (Tracks.SyncTags [ t ]) - , active = False - } - ] - - _ -> - [] - - -cacheAction : - { cached : List String, cachingInProgress : List String } - -> List IdentifiedTrack - -> ContextMenu.Item Msg -cacheAction { cached, cachingInProgress } tracks = - case tracks of - [ ( _, t ) ] -> - if List.member t.id cached then - Item - { icon = Icons.offline_bolt - , label = "Remove from cache" - , msg = - tracks - |> List.map Tuple.second - |> Tracks.RemoveFromCache - |> TracksMsg - - -- - , active = False - } - - else if List.member t.id cachingInProgress then - Item - { icon = Icons.offline_bolt - , label = "Downloading ..." - , msg = Bypass - , active = True - } - - else - Item - { icon = Icons.offline_bolt - , label = "Store in cache" - , msg = - tracks - |> List.map Tuple.second - |> Tracks.StoreInCache - |> TracksMsg - - -- - , active = False - } - - _ -> - Item - { icon = Icons.offline_bolt - , label = "Store in cache" - , msg = - tracks - |> List.map Tuple.second - |> Tracks.StoreInCache - |> TracksMsg - - -- - , active = False - } - - -playlistActions : - { selectedPlaylist : Maybe Playlist - , lastModifiedPlaylistName : Maybe { collection : Bool, name : String } - } - -> List IdentifiedTrack - -> List (ContextMenu.Item Msg) -playlistActions { selectedPlaylist, lastModifiedPlaylistName } tracks = - let - maybeCustomPlaylist = - Maybe.andThen - (\p -> - case p.autoGenerated of - Just _ -> - Nothing - - Nothing -> - Just p - ) - selectedPlaylist - - maybeAddToLastModifiedPlaylist { collection } = - Maybe.andThen - (\l -> - if Maybe.map .name selectedPlaylist /= Just l.name && l.collection == collection then - justAnItem - { icon = Icons.waves - , label = "Add to \"" ++ l.name ++ "\"" - , msg = - AddTracksToPlaylist - { collection = collection - , playlistName = l.name - , tracks = Tracks.toPlaylistTracks tracks - } - - -- - , active = False - } - - else - Nothing - ) - lastModifiedPlaylistName - in - case maybeCustomPlaylist of - ----------------------------------------- - -- In a custom playlist - ----------------------------------------- - Just playlist -> - Maybe.values - [ maybeAddToLastModifiedPlaylist { collection = True } - , justAnItem - { icon = Icons.waves - , label = - if playlist.collection then - "Remove from collection" - - else - "Remove from playlist" - , msg = RemoveTracksFromPlaylist playlist tracks - - -- - , active = False - } - , justAnItem - { icon = Icons.waves - , label = - if playlist.collection then - "Add to another collection" - - else - "Add to collection" - , msg = AssistWithAddingTracksToCollection tracks - - -- - , active = False - } - , maybeAddToLastModifiedPlaylist { collection = False } - , justAnItem - { icon = Icons.waves - , label = - if playlist.collection then - "Add to playlist" - - else - "Add to another playlist" - , msg = AssistWithAddingTracksToPlaylist tracks - - -- - , active = False - } - ] - - ----------------------------------------- - -- Otherwise - ----------------------------------------- - _ -> - Maybe.values - [ maybeAddToLastModifiedPlaylist { collection = True } - , justAnItem - { icon = Icons.waves - , label = "Add to collection" - , msg = AssistWithAddingTracksToCollection tracks - , active = False - } - , maybeAddToLastModifiedPlaylist { collection = False } - , justAnItem - { icon = Icons.waves - , label = "Add to playlist" - , msg = AssistWithAddingTracksToPlaylist tracks - , active = False - } - ] - - -queueActions : List IdentifiedTrack -> List (ContextMenu.Item Msg) -queueActions identifiedTracks = - [ Item - { icon = Icons.update - , label = "Play next" - , msg = - { inFront = True, tracks = identifiedTracks } - |> Queue.AddTracks - |> QueueMsg - - -- - , active = False - } - , Item - { icon = Icons.update - , label = "Add to queue" - , msg = - { inFront = False, tracks = identifiedTracks } - |> Queue.AddTracks - |> QueueMsg - - -- - , active = False - } - ] - - - --- VIEW MENU - - -viewMenu : Bool -> Maybe Grouping -> Coordinates -> ContextMenu Msg -viewMenu onlyCachedTracks maybeGrouping = - ContextMenu - [ groupByDirectory (maybeGrouping == Just Directory) - , groupByFirstAlphaCharacter (maybeGrouping == Just FirstAlphaCharacter) - , groupByProcessingDate (maybeGrouping == Just AddedOn) - , groupByTrackYear (maybeGrouping == Just TrackYear) - - -- - , Item - { icon = Icons.filter_list - , label = "Cached tracks only" - , active = onlyCachedTracks - , msg = TracksMsg Tracks.ToggleCachedOnly - } - ] - - -groupByDirectory isActive = - Item - { icon = ifThenElse isActive Icons.clear Icons.library_music - , label = "Group by directory" - , active = isActive - - -- - , msg = - if isActive then - TracksMsg Tracks.DisableGrouping - - else - TracksMsg (Tracks.GroupBy Directory) - } - - -groupByFirstAlphaCharacter isActive = - Item - { icon = ifThenElse isActive Icons.clear Icons.library_music - , label = "Group by first letter" - , active = isActive - - -- - , msg = - if isActive then - TracksMsg Tracks.DisableGrouping - - else - TracksMsg (Tracks.GroupBy FirstAlphaCharacter) - } - - -groupByProcessingDate isActive = - Item - { icon = ifThenElse isActive Icons.clear Icons.library_music - , label = "Group by processing date" - , active = isActive - - -- - , msg = - if isActive then - TracksMsg Tracks.DisableGrouping - - else - TracksMsg (Tracks.GroupBy AddedOn) - } - - -groupByTrackYear isActive = - Item - { icon = ifThenElse isActive Icons.clear Icons.library_music - , label = "Group by track year" - , active = isActive - - -- - , msg = - if isActive then - TracksMsg Tracks.DisableGrouping - - else - TracksMsg (Tracks.GroupBy TrackYear) - } diff --git a/src/Core/UI/Tracks/Covers.elm b/src/Core/UI/Tracks/Covers.elm deleted file mode 100644 index 31fec7a83..000000000 --- a/src/Core/UI/Tracks/Covers.elm +++ /dev/null @@ -1,344 +0,0 @@ -module UI.Tracks.Covers exposing (..) - -import Base64 -import Conditional exposing (ifThenElse) -import Dict -import Maybe.Extra as Maybe -import Tracks exposing (..) - - - --- 🔱 - - -generate : - SortBy - -> Tracks.Collection - -> CoverCollection -generate sortBy tracks = - let - groupFn = - coverGroup sortBy - - makeCoverFn = - makeCover sortBy - in - tracks.arranged - |> List.foldr - (\identifiedTrack { covers, gathering } -> - let - group = - groupFn identifiedTrack - - ( identifiers, track ) = - identifiedTrack - - { artist, album } = - track.tags - in - if group /= gathering.previousGroup then - -- New group, make cover for previous group - let - collection = - makeCoverFn gathering covers - in - { gathering = - { acc = [ identifiedTrack ] - , accIds = [ track.id ] - , previousGroup = group - , previousTrack = track - - -- - , currentAlbumSequence = Just ( identifiedTrack, 1 ) - , largestAlbumSequence = Nothing - - -- - , currentAlbumFavsSequence = Just ( identifiedTrack, ifThenElse identifiers.isFavourite 1 0 ) - , largestAlbumFavsSequence = Nothing - - -- - , currentArtistSequence = Just ( identifiedTrack, 1 ) - , largestArtistSequence = Nothing - } - , covers = - collection - } - - else - -- Same group - { gathering = - { acc = identifiedTrack :: gathering.acc - , accIds = track.id :: gathering.accIds - , previousGroup = group - , previousTrack = track - - -- Album sequence - ----------------- - , currentAlbumSequence = - if album /= gathering.previousTrack.tags.album then - Just ( identifiedTrack, 1 ) - - else - increaseSequence gathering.currentAlbumSequence - - -- - , largestAlbumSequence = - if album /= gathering.previousTrack.tags.album then - resolveLargestSequence - gathering.currentAlbumSequence - gathering.largestAlbumSequence - - else - gathering.largestAlbumSequence - - -- Album favourites sequence - ---------------------------- - , currentAlbumFavsSequence = - if album /= gathering.previousTrack.tags.album then - Just ( identifiedTrack, ifThenElse identifiers.isFavourite 1 0 ) - - else if identifiers.isFavourite then - increaseSequence gathering.currentAlbumFavsSequence - - else - gathering.currentAlbumFavsSequence - - -- - , largestAlbumFavsSequence = - if album /= gathering.previousTrack.tags.album then - resolveLargestSequence - gathering.currentAlbumFavsSequence - gathering.largestAlbumFavsSequence - - else - gathering.largestAlbumFavsSequence - - -- Artist sequence - ------------------ - , currentArtistSequence = - if artist /= gathering.previousTrack.tags.artist then - Just ( identifiedTrack, 1 ) - - else - increaseSequence gathering.currentArtistSequence - - -- - , largestArtistSequence = - if artist /= gathering.previousTrack.tags.artist then - resolveLargestSequence - gathering.currentArtistSequence - gathering.largestArtistSequence - - else - gathering.largestArtistSequence - } - , covers = - covers - } - ) - { covers = - [] - , gathering = - { acc = [] - , accIds = [] - , previousGroup = "" - , previousTrack = emptyTrack - - -- - , currentAlbumSequence = Nothing - , largestAlbumSequence = Nothing - , currentAlbumFavsSequence = Nothing - , largestAlbumFavsSequence = Nothing - , currentArtistSequence = Nothing - , largestArtistSequence = Nothing - } - } - |> (\{ covers, gathering } -> - makeCoverFn gathering covers - ) - |> (\collection -> - { arranged = collection, harvested = [] } - ) - - -harvest : - Maybe Cover - -> SortBy - -> Tracks.Collection - -> CoverCollection - -> ( CoverCollection, Maybe Cover ) -harvest previouslySelectedCover sortBy tracks covers = - let - groupFn = - coverGroup sortBy - - ( groups, tracksPerGroup ) = - List.foldr - (\identifiedTrack ( acc, dict ) -> - let - group = - groupFn identifiedTrack - in - ( if Dict.member group dict == False then - group :: acc - - else - acc - -- - , Dict.update group - (Maybe.unwrap [ identifiedTrack ] ((::) identifiedTrack) >> Just) - dict - ) - ) - ( [], Dict.empty ) - tracks.harvested - in - covers.arranged - |> List.foldr - (\cover ( acc, sel ) -> - if List.member cover.group groups then - let - groupTracks = - Maybe.withDefault [] (Dict.get cover.group tracksPerGroup) - - trackIds = - List.map (Tuple.second >> .id) groupTracks - - harvestedCover = - { cover | tracks = groupTracks, trackIds = trackIds } - in - case ( previouslySelectedCover, sel ) of - ( Just pre, Nothing ) -> - ( harvestedCover :: acc - , if pre.key == harvestedCover.key then - Just harvestedCover - - else - Nothing - ) - - ( Just _, Just s ) -> - ( harvestedCover :: acc - , Just s - ) - - ( Nothing, _ ) -> - ( harvestedCover :: acc - , Nothing - ) - - else - ( acc - , sel - ) - ) - ( [] - , Nothing - ) - |> Tuple.mapFirst - (\h -> { covers | harvested = h }) - - - --- ⚗️ - - -makeCover sortBy_ gathering collection = - let - closedGathering = - { gathering - | largestAlbumSequence = - resolveLargestSequence - gathering.currentAlbumSequence - gathering.largestAlbumSequence - - -- - , largestAlbumFavsSequence = - resolveLargestSequence - gathering.currentAlbumFavsSequence - gathering.largestAlbumFavsSequence - - -- - , largestArtistSequence = - resolveLargestSequence - gathering.currentArtistSequence - gathering.largestArtistSequence - } - in - case closedGathering.acc of - [] -> - collection - - fallback :: _ -> - makeCoverWithFallback sortBy_ closedGathering fallback :: collection - - -makeCoverWithFallback _ gathering fallback = - let - amountOfTracks = - List.length gathering.accIds - - group = - gathering.previousGroup - - identifiedTrack : IdentifiedTrack - identifiedTrack = - gathering.largestAlbumFavsSequence - |> Maybe.orElse gathering.largestAlbumSequence - |> Maybe.map Tuple.first - |> Maybe.withDefault fallback - - ( _, track ) = - identifiedTrack - - ( largestAlbumSequence, largestArtistSequence ) = - ( Maybe.unwrap 0 Tuple.second gathering.largestAlbumSequence - , Maybe.unwrap 0 Tuple.second gathering.largestArtistSequence - ) - - ( sameAlbum, sameArtist ) = - ( largestAlbumSequence == amountOfTracks - , largestArtistSequence == amountOfTracks - ) - - isVariousArtists = - False - || (amountOfTracks > 4 && largestArtistSequence < 3) - || (Maybe.map String.toLower track.tags.artist == Just "va") - in - { key = Base64.encode (coverKey isVariousArtists track) - , identifiedTrackCover = identifiedTrack - - -- - , group = group - , sameAlbum = sameAlbum - , sameArtist = sameArtist - - -- - , trackIds = gathering.accIds - , tracks = gathering.acc - , variousArtists = isVariousArtists - } - - - --- ⚗️ ░░ SEQUENCES - - -increaseSequence = - Maybe.map (Tuple.mapSecond ((+) 1)) - - -resolveLargestSequence curr state = - case ( curr, state ) of - ( Just ( _, c ), Just ( _, s ) ) -> - ifThenElse (c > s) curr state - - ( Just _, Nothing ) -> - curr - - ( Nothing, Just _ ) -> - state - - ( Nothing, Nothing ) -> - Nothing diff --git a/src/Core/UI/Tracks/State.elm b/src/Core/UI/Tracks/State.elm deleted file mode 100644 index 4b9a8863a..000000000 --- a/src/Core/UI/Tracks/State.elm +++ /dev/null @@ -1,1122 +0,0 @@ -module UI.Tracks.State exposing (..) - -import Alien -import Base64 -import Common exposing (..) -import ContextMenu -import Coordinates exposing (Coordinates) -import Debouncer.Basic as Debouncer -import Dict -import Html.Events.Extra.Mouse as Mouse -import InfiniteList -import Json.Decode as Json -import Json.Encode -import Keyboard -import List.Ext as List -import List.Extra as List -import Maybe.Extra as Maybe -import Notifications -import Playlists exposing (Playlist) -import Queue -import Return exposing (andThen, return) -import Return.Ext as Return -import Sources -import Task.Extra as Task -import Tracks exposing (..) -import Tracks.Collection as Collection -import Tracks.Encoding as Encoding -import Tracks.Favourites as Favourites -import UI.Common.State as Common exposing (showNotification) -import UI.DnD as DnD -import UI.Page -import UI.Ports as Ports -import UI.Queue.State as Queue -import UI.Theme -import UI.Tracks.ContextMenu as Tracks -import UI.Tracks.Covers as Covers -import UI.Tracks.Types as Tracks exposing (..) -import UI.Types exposing (Manager, Model, Msg(..)) -import UI.User.State.Export as User -import User.Layer exposing (HypaethralData) - - - --- 📣 - - -update : Tracks.Msg -> Manager -update msg = - case msg of - Download a b -> - download a b - - DownloadFinished -> - downloadFinished - - Harvest -> - harvest - - MarkAsSelected a b -> - markAsSelected a b - - ScrollToNowPlaying -> - scrollToNowPlaying - - SyncTags a -> - syncTags a - - ToggleCachedOnly -> - toggleCachedOnly - - ToggleCoverSelectionReducesPool -> - toggleCoverSelectionReducesPool - - ToggleFavouritesOnly -> - toggleFavouritesOnly - - ToggleHideDuplicates -> - toggleHideDuplicates - - ----------------------------------------- - -- Cache - ----------------------------------------- - ClearCache -> - clearCache - - RemoveFromCache a -> - removeFromCache a - - StoreInCache a -> - storeInCache a - - StoredInCache a b -> - storedInCache a b - - --------- - -- Covers - --------- - GotCachedCover a -> - gotCachedCover a - - InsertCoverCache a -> - insertCoverCache a - - ----------------------------------------- - -- Collection - ----------------------------------------- - Add a -> - add a - - AddFavourites a -> - addFavourites a - - Reload a -> - reload a - - RemoveByPaths a -> - removeByPaths a - - RemoveBySourceId a -> - removeBySourceId a - - RemoveFavourites a -> - removeFavourites a - - SortBy a -> - sortBy a - - ToggleFavourite a -> - toggleFavourite a - - ----------------------------------------- - -- Groups - ----------------------------------------- - DisableGrouping -> - disableGrouping - - GroupBy a -> - groupBy a - - ----------------------------------------- - -- Menus - ----------------------------------------- - ShowCoverMenu a b -> - showCoverMenu a b - - ShowCoverMenuWithSmallDelay a b -> - showCoverMenuWithDelay a b - - ShowTracksMenu a b c -> - showTracksMenu a b c - - ShowTracksMenuWithSmallDelay a b c -> - showTracksMenuWithDelay a b c - - ShowViewMenu a b -> - showViewMenu a b - - ----------------------------------------- - -- Scenes - ----------------------------------------- - ChangeScene a -> - changeScene a - - DeselectCover -> - deselectCover - - InfiniteListMsg a -> - infiniteListMsg a - - SelectCover a -> - selectCover a - - ----------------------------------------- - -- Search - ----------------------------------------- - ClearSearch -> - clearSearch - - Search -> - search - - SetSearchResults a -> - setSearchResults a - - SetSearchTerm a -> - setSearchTerm a - - - --- 🔱 - - -add : Json.Value -> Manager -add encodedTracks model = - reviseCollection - (encodedTracks - |> Json.decodeValue (Json.list Encoding.trackDecoder) - |> Result.withDefault [] - |> Collection.add - ) - model - - -addFavourites : List IdentifiedTrack -> Manager -addFavourites = - manageFavourites AddToFavourites - - -afterInitialLoad : Manager -afterInitialLoad model = - Common.toggleLoadingScreen Off model - - -changeScene : Scene -> Manager -changeScene scene model = - (case scene of - Covers -> - Ports.loadAlbumCovers { list = True, coverView = True } - - List -> - Cmd.none - ) - |> return { model | scene = scene, selectedCover = Nothing } - |> andThen - (if model.coverSelectionReducesPool then - Queue.reset - - else - Return.singleton - ) - |> andThen Common.forceTracksRerender - |> andThen User.saveEnclosedUserData - - -clearCache : Manager -clearCache model = - model.cachedTracks - |> Json.Encode.list Json.Encode.string - |> Alien.broadcast Alien.RemoveTracksFromCache - |> Ports.toBrain - |> return { model | cachedTracks = [] } - |> andThen harvest - |> andThen User.saveEnclosedUserData - |> andThen - ("Tracks cache was cleared" - |> Notifications.casual - |> Common.showNotification - ) - - -clearSearch : Manager -clearSearch model = - { model | searchResults = Nothing, searchTerm = Nothing } - |> reviseCollection Collection.harvest - |> andThen User.saveEnclosedUserData - - -deselectCover : Manager -deselectCover model = - (if model.coverSelectionReducesPool then - Queue.reset - - else - Return.singleton - ) - { model | selectedCover = Nothing } - - -download : { prefixTrackNumber : Bool, zipName : String } -> List Track -> Manager -download { prefixTrackNumber, zipName } tracks model = - let - notification = - Notifications.stickyCasual "Downloading tracks ..." - - downloading = - Just { notificationId = Notifications.id notification } - in - [ ( "prefixTrackNumber", Json.Encode.bool prefixTrackNumber ) - , ( "trackIds" - , tracks - |> List.map .id - |> Json.Encode.list Json.Encode.string - ) - , ( "zipName", Json.Encode.string zipName ) - ] - |> Json.Encode.object - |> Alien.broadcast Alien.DownloadTracks - |> Ports.toBrain - |> return { model | downloading = downloading } - |> andThen (Common.showNotification notification) - - -downloadFinished : Manager -downloadFinished model = - case model.downloading of - Just { notificationId } -> - Common.dismissNotification - { id = notificationId } - { model | downloading = Nothing } - - Nothing -> - Return.singleton model - - -disableGrouping : Manager -disableGrouping model = - { model | grouping = Nothing } - |> reviseCollection Collection.arrange - |> andThen User.saveEnclosedUserData - - -failedToStoreInCache : List String -> Manager -failedToStoreInCache trackIds m = - showNotification - (Notifications.error "Failed to store track in cache") - { m | cachingTracksInProgress = List.without trackIds m.cachingTracksInProgress } - - -finishedStoringInCache : List String -> Manager -finishedStoringInCache trackIds model = - { model - | cachedTracks = model.cachedTracks ++ trackIds - , cachingTracksInProgress = List.without trackIds model.cachingTracksInProgress - } - |> (\m -> - -- When a context menu of a track is open, - -- it should be "rerendered" in case - -- the track is no longer being downloaded. - case m.contextMenu of - Just contextMenu -> - let - isTrackContextMenu = - ContextMenu.anyItem - (.label >> (==) "Downloading ...") - contextMenu - - coordinates = - ContextMenu.coordinates contextMenu - in - if isTrackContextMenu then - showTracksMenu Nothing { alt = False } coordinates m - - else - Return.singleton m - - Nothing -> - Return.singleton m - ) - |> andThen harvest - |> andThen User.saveEnclosedUserData - - -generateCovers : Manager -generateCovers model = - model.tracks - |> Covers.generate model.sortBy - |> (\c -> { model | covers = c }) - |> Return.singleton - - -gotCachedCover : Json.Value -> Manager -gotCachedCover json model = - let - cachedCovers = - Maybe.withDefault Dict.empty model.cachedCovers - - decodedValue = - Json.decodeValue - (Json.map3 - (\i k u -> ( i, k, u )) - (Json.field "imageType" Json.string) - (Json.field "key" Json.string) - (Json.field "url" Json.string) - ) - json - in - decodedValue - |> Result.map (\( _, key, url ) -> Dict.insert key url cachedCovers) - |> Result.map (\dict -> { model | cachedCovers = Just dict }) - |> Result.withDefault model - |> (\m -> - case ( m.nowPlaying, decodedValue ) of - ( Just nowPlaying, Ok val ) -> - let - ( imageType, key, url ) = - val - - ( _, track ) = - nowPlaying.item.identifiedTrack - - hasntLoadedYet = - nowPlaying.coverLoaded == False - - ( keyA, keyB ) = - ( Base64.encode (Tracks.coverKey False track) - , Base64.encode (Tracks.coverKey True track) - ) - - keyMatches = - keyA == key || keyB == key - in - if hasntLoadedYet && keyMatches then - ( m, Ports.setMediaSessionArtwork { blobUrl = url, imageType = imageType } ) - - else - Return.singleton m - - _ -> - Return.singleton m - ) - - -groupBy : Tracks.Grouping -> Manager -groupBy grouping model = - { model | grouping = Just grouping } - |> reviseCollection Collection.arrange - |> andThen User.saveEnclosedUserData - - -harvest : Manager -harvest = - reviseCollection Collection.harvest - - -harvestCovers : Manager -harvestCovers model = - model.covers - |> Covers.harvest model.selectedCover model.sortBy model.tracks - |> (\( c, s ) -> { model | covers = c, selectedCover = s }) - |> Return.communicate (Ports.loadAlbumCovers { list = True, coverView = True }) - - -infiniteListMsg : InfiniteList.Model -> Manager -infiniteListMsg infiniteList model = - return - { model | infiniteList = infiniteList } - (Ports.loadAlbumCovers { list = True, coverView = False }) - - -insertCoverCache : Json.Value -> Manager -insertCoverCache json model = - json - |> Json.decodeValue (Json.dict Json.string) - |> Result.map (\dict -> { model | cachedCovers = Just dict }) - |> Result.withDefault model - |> Return.singleton - - -manageFavourites : FavouritesManagementAction -> List IdentifiedTrack -> Manager -manageFavourites action tracks model = - let - newFavourites = - (case action of - AddToFavourites -> - Favourites.completeFavouritesList - - RemoveFromFavourites -> - Favourites.removeFromFavouritesList - ) - tracks - model.favourites - - effect collection = - collection - |> Collection.map - (case action of - AddToFavourites -> - Favourites.completeTracksList tracks - - RemoveFromFavourites -> - Favourites.removeFromTracksList tracks - ) - |> (if model.favouritesOnly then - Collection.harvest - - else - identity - ) - - selectedCover = - Maybe.map - (\cover -> - cover.tracks - |> (case action of - AddToFavourites -> - Favourites.completeTracksList tracks - - RemoveFromFavourites -> - Favourites.removeFromTracksList tracks - ) - |> (\a -> { cover | tracks = a }) - ) - model.selectedCover - in - { model | favourites = newFavourites, selectedCover = selectedCover } - |> reviseCollection effect - |> andThen User.saveFavourites - |> (if model.scene == Covers then - andThen generateCovers >> andThen harvestCovers - - else - identity - ) - - -markAsSelected : Int -> { shiftKey : Bool } -> Manager -markAsSelected indexInList { shiftKey } model = - let - selection = - if shiftKey then - model.selectedTrackIndexes - |> List.head - |> Maybe.map - (\n -> - if n > indexInList then - List.range indexInList n - - else - List.range n indexInList - ) - |> Maybe.withDefault [ indexInList ] - - else - [ indexInList ] - in - Return.singleton { model | selectedTrackIndexes = selection } - - -reload : Json.Value -> Manager -reload encodedTracks model = - reviseCollection - (encodedTracks - |> Json.decodeValue (Json.list Encoding.trackDecoder) - |> Result.withDefault model.tracks.untouched - |> Collection.replace - ) - model - - -removeByPaths : Json.Value -> Manager -removeByPaths encodedParams model = - let - decoder = - Json.map2 - Tuple.pair - (Json.field "filePaths" <| Json.list Json.string) - (Json.field "sourceId" Json.string) - - ( paths, sourceId ) = - encodedParams - |> Json.decodeValue decoder - |> Result.withDefault ( [], missingId ) - - { kept, removed } = - Tracks.removeByPaths - { sourceId = sourceId, paths = paths } - model.tracks.untouched - - newCollection = - { emptyCollection | untouched = kept } - in - { model | tracks = newCollection } - |> reviseCollection Collection.identify - |> andThen (removeFromCache removed) - - -removeBySourceId : String -> Manager -removeBySourceId sourceId model = - let - { kept, removed } = - Tracks.removeBySourceId sourceId model.tracks.untouched - - newCollection = - { emptyCollection | untouched = kept } - in - sourceId - |> Json.Encode.string - |> Alien.broadcast Alien.RemoveTracksBySourceId - |> Ports.toBrain - |> return { model | tracks = newCollection } - |> andThen (reviseCollection Collection.identify) - |> andThen (removeFromCache removed) - - -removeFavourites : List IdentifiedTrack -> Manager -removeFavourites = - manageFavourites RemoveFromFavourites - - -removeFromCache : List Track -> Manager -removeFromCache tracks model = - let - trackIds = - List.map .id tracks - in - trackIds - |> Json.Encode.list Json.Encode.string - |> Alien.broadcast Alien.RemoveTracksFromCache - |> Ports.toBrain - |> return { model | cachedTracks = List.without trackIds model.cachedTracks } - |> andThen harvest - |> andThen User.saveEnclosedUserData - - -reviseCollection : (Parcel -> Parcel) -> Manager -reviseCollection collector model = - resolveParcel - (model - |> makeParcel - |> collector - ) - model - - -search : Manager -search model = - case ( model.searchTerm, model.searchResults ) of - ( Just term, _ ) -> - term - |> String.trim - |> Json.Encode.string - |> Ports.giveBrain Alien.SearchTracks - |> return model - - ( Nothing, Just _ ) -> - reviseCollection Collection.harvest { model | searchResults = Nothing } - - ( Nothing, Nothing ) -> - Return.singleton model - - -selectCover : Cover -> Manager -selectCover cover model = - { model | selectedCover = Just cover } - |> (if model.coverSelectionReducesPool then - Queue.reset - - else - Return.singleton - ) - |> Return.command (Ports.loadAlbumCovers { list = False, coverView = True }) - - -setSearchResults : Json.Value -> Manager -setSearchResults json model = - case model.searchTerm of - Just _ -> - json - |> Json.decodeValue (Json.list Json.string) - |> Result.withDefault [] - |> (\results -> { model | searchResults = Just results }) - |> reviseCollection Collection.harvest - |> andThen afterInitialLoad - - Nothing -> - Return.singleton model - - -setSearchTerm : String -> Manager -setSearchTerm term model = - (case String.trim term of - "" -> - { model | searchTerm = Nothing } - - _ -> - { model | searchTerm = Just term } - ) - |> Return.communicate - (Search - |> TracksMsg - |> Debouncer.provideInput - |> SearchDebounce - |> Task.do - ) - |> Return.andThen User.saveEnclosedUserData - - -showCoverMenu : Cover -> Coordinates -> Manager -showCoverMenu cover coordinates model = - let - menuDependencies = - { cached = model.cachedTracks - , cachingInProgress = model.cachingTracksInProgress - , currentTime = model.currentTime - , selectedPlaylist = model.selectedPlaylist - , lastModifiedPlaylistName = model.lastModifiedPlaylist - , showAlternativeMenu = False - , sources = model.sources - } - in - coordinates - |> Tracks.trackMenu menuDependencies cover.tracks - |> Common.showContextMenuWithModel model - - -showCoverMenuWithDelay : Cover -> Coordinates -> Manager -showCoverMenuWithDelay a b model = - Tracks.ShowCoverMenu a b - |> TracksMsg - |> Task.doDelayed 250 - |> return model - - -showTracksMenu : Maybe Int -> { alt : Bool } -> Coordinates -> Manager -showTracksMenu maybeTrackIndex { alt } coordinates model = - let - selection = - case maybeTrackIndex of - Just trackIndex -> - if List.isEmpty model.selectedTrackIndexes then - [ trackIndex ] - - else if List.member trackIndex model.selectedTrackIndexes == False then - [ trackIndex ] - - else - model.selectedTrackIndexes - - Nothing -> - model.selectedTrackIndexes - - menuDependencies = - { cached = model.cachedTracks - , cachingInProgress = model.cachingTracksInProgress - , currentTime = model.currentTime - , selectedPlaylist = model.selectedPlaylist - , lastModifiedPlaylistName = model.lastModifiedPlaylist - , showAlternativeMenu = alt - , sources = model.sources - } - - tracks = - List.pickIndexes selection model.tracks.harvested - in - coordinates - |> Tracks.trackMenu menuDependencies tracks - |> Common.showContextMenuWithModel - { model - | dnd = DnD.initialModel - , selectedTrackIndexes = selection - } - - -showTracksMenuWithDelay : Maybe Int -> { alt : Bool } -> Coordinates -> Manager -showTracksMenuWithDelay a b c model = - Tracks.ShowTracksMenu a b c - |> TracksMsg - |> Task.doDelayed 250 - |> return model - - -showViewMenu : Maybe Grouping -> Mouse.Event -> Manager -showViewMenu maybeGrouping mouseEvent model = - mouseEvent.clientPos - |> Coordinates.fromTuple - |> Tracks.viewMenu model.cachedTracksOnly maybeGrouping - |> Common.showContextMenuWithModel model - - -scrollToNowPlaying : Manager -scrollToNowPlaying model = - model.nowPlaying - |> Maybe.map - (.item >> .identifiedTrack >> Tuple.second >> .id) - |> Maybe.andThen - (\id -> - List.find - (Tuple.second >> .id >> (==) id) - model.tracks.harvested - ) - |> Maybe.map - (\( identifiers, track ) -> - case model.scene of - Covers -> - if List.member Keyboard.Shift model.pressedKeys then - return - { model | selectedCover = Nothing } - (UI.Theme.scrollToNowPlaying Covers ( identifiers, track ) model) - - else - model.covers.harvested - |> List.find (\cover -> List.member track.id cover.trackIds) - |> Maybe.unwrap model (\cover -> { model | selectedCover = Just cover }) - |> Return.communicate (Ports.loadAlbumCovers { list = True, coverView = True }) - - List -> - return - { model | selectedCover = Nothing } - (UI.Theme.scrollToNowPlaying List ( identifiers, track ) model) - ) - |> Maybe.map - (UI.Page.Index - |> Common.changeUrlUsingPage - |> andThen - ) - |> Maybe.withDefault - (Return.singleton model) - - -sortBy : SortBy -> Manager -sortBy property model = - let - sortDir = - if model.sortBy /= property then - Asc - - else if model.sortDirection == Asc then - Desc - - else - Asc - in - { model | sortBy = property, sortDirection = sortDir } - |> reviseCollection Collection.arrange - |> andThen User.saveEnclosedUserData - - -storeInCache : List Track -> Manager -storeInCache tracks model = - let - trackIds = - List.map .id tracks - - notification = - case tracks of - [ t ] -> - ("__" ++ t.tags.title ++ "__ will be stored in the cache") - |> Notifications.casual - - list -> - list - |> List.length - |> String.fromInt - |> (\s -> "__" ++ s ++ " tracks__ will be stored in the cache") - |> Notifications.casual - in - tracks - |> Json.Encode.list - (\track -> - Json.Encode.object - [ ( "trackId" - , Json.Encode.string track.id - ) - , ( "url" - , track - |> Queue.makeTrackUrl - model.currentTime - model.sources - |> Json.Encode.string - ) - ] - ) - |> Alien.broadcast Alien.StoreTracksInCache - |> Ports.toBrain - |> return { model | cachingTracksInProgress = model.cachingTracksInProgress ++ trackIds } - |> andThen (Common.showNotification notification) - - -storedInCache : Json.Value -> Maybe String -> Manager -storedInCache json maybeError = - case - ( maybeError - , Json.decodeValue (Json.list Json.string) json - ) - of - ( Nothing, Ok list ) -> - finishedStoringInCache list - - ( Nothing, Err err ) -> - err - |> Json.errorToString - |> Notifications.error - |> Common.showNotification - - ( Just _, Ok trackIds ) -> - failedToStoreInCache trackIds - - ( Just err, Err _ ) -> - err - |> Notifications.error - |> Common.showNotification - - -syncTags : List Track -> Manager -syncTags tracks = - tracks - |> Json.Encode.list - (\track -> - Json.Encode.object - [ ( "path", Json.Encode.string track.path ) - , ( "sourceId", Json.Encode.string track.sourceId ) - , ( "trackId", Json.Encode.string track.id ) - ] - ) - |> Alien.broadcast Alien.SyncTrackTags - |> Ports.toBrain - |> Return.communicate - - -toggleCachedOnly : Manager -toggleCachedOnly model = - { model | cachedTracksOnly = not model.cachedTracksOnly } - |> reviseCollection Collection.harvest - |> andThen User.saveEnclosedUserData - |> andThen Common.forceTracksRerender - - -toggleCoverSelectionReducesPool : Manager -toggleCoverSelectionReducesPool model = - { model | coverSelectionReducesPool = not model.coverSelectionReducesPool } - |> Queue.reset - |> andThen User.saveSettings - - -toggleFavourite : Int -> Manager -toggleFavourite index model = - case List.getAt index model.tracks.harvested of - Just ( i, t ) -> - let - newFavourites = - Favourites.toggleInFavouritesList ( i, t ) model.favourites - - effect collection = - collection - |> Collection.map (Favourites.toggleInTracksList t) - |> (if model.favouritesOnly then - Collection.harvest - - else - identity - ) - - selectedCover = - Maybe.map - (\cover -> - cover.tracks - |> Favourites.toggleInTracksList t - |> (\a -> { cover | tracks = a }) - ) - model.selectedCover - in - { model | favourites = newFavourites, selectedCover = selectedCover } - |> reviseCollection effect - |> andThen User.saveFavourites - |> (if model.scene == Covers then - andThen generateCovers >> andThen harvestCovers - - else - identity - ) - - Nothing -> - Return.singleton model - - -toggleFavouritesOnly : Manager -toggleFavouritesOnly model = - { model | favouritesOnly = not model.favouritesOnly } - |> reviseCollection Collection.harvest - |> andThen User.saveEnclosedUserData - - -toggleHideDuplicates : Manager -toggleHideDuplicates model = - { model | hideDuplicates = not model.hideDuplicates } - |> reviseCollection Collection.arrange - |> andThen User.saveSettings - - - --- 📣 ░░ PARCEL - - -makeParcel : Model -> Parcel -makeParcel model = - ( { cached = model.cachedTracks - , cachedOnly = model.cachedTracksOnly - , enabledSourceIds = Sources.enabledSourceIds model.sources - , favourites = model.favourites - , favouritesOnly = model.favouritesOnly - , grouping = model.grouping - , hideDuplicates = model.hideDuplicates - , searchResults = model.searchResults - , selectedPlaylist = model.selectedPlaylist - , sortBy = model.sortBy - , sortDirection = model.sortDirection - } - , model.tracks - ) - - -resolveParcel : Parcel -> Manager -resolveParcel ( deps, newCollection ) model = - let - scrollObj = - Json.Encode.object - [ ( "scrollTop", Json.Encode.int 0 ) ] - - scrollEvent = - Json.Encode.object - [ ( "target", scrollObj ) ] - - newScrollContext = - scrollContext model - - collectionChanged = - Collection.tracksChanged - model.tracks.untouched - newCollection.untouched - - arrangementChanged = - if collectionChanged then - True - - else - Collection.identifiedTracksChanged - model.tracks.arranged - newCollection.arranged - - harvestChanged = - if arrangementChanged then - True - - else - Collection.identifiedTracksChanged - model.tracks.harvested - newCollection.harvested - - scrollContextChanged = - newScrollContext /= model.tracks.scrollContext - - modelWithNewCollection = - (if model.scene == List && scrollContextChanged then - \m -> { m | infiniteList = InfiniteList.updateScroll scrollEvent m.infiniteList } - - else - identity - ) - { model - | tracks = - { newCollection | scrollContext = newScrollContext } - , selectedTrackIndexes = - if collectionChanged || harvestChanged then - [] - - else - model.selectedTrackIndexes - } - in - (if collectionChanged then - whenCollectionChanges - - else if arrangementChanged then - whenArrangementChanges - - else if harvestChanged then - whenHarvestChanges - - else - identity - ) - ( modelWithNewCollection - ----------------------------------------- - -- Command - ----------------------------------------- - , if scrollContextChanged then - UI.Theme.scrollTracksToTop model.scene - - else - Cmd.none - ) - - -whenHarvestChanges = - andThen harvestCovers >> andThen Queue.reset - - -whenArrangementChanges = - andThen generateCovers >> whenHarvestChanges - - -whenCollectionChanges = - andThen search >> andThen Common.generateDirectoryPlaylists >> whenArrangementChanges - - -scrollContext : Model -> String -scrollContext model = - String.concat - [ Maybe.withDefault "" <| model.searchTerm - , Maybe.withDefault "" <| Maybe.map .name model.selectedPlaylist - ] - - - --- 📣 ░░ USER DATA - - -importHypaethral : HypaethralData -> Maybe Playlist -> Manager -importHypaethral data selectedPlaylist model = - { model - | favourites = data.favourites - , selectedPlaylist = selectedPlaylist - , tracks = { emptyCollection | untouched = data.tracks } - } - |> reviseCollection Collection.identify - |> andThen search - |> (case model.searchTerm of - Just _ -> - identity - - Nothing -> - andThen afterInitialLoad - ) - - - --- ㊙️ - - -type FavouritesManagementAction - = AddToFavourites - | RemoveFromFavourites diff --git a/src/Core/UI/Tracks/Types.elm b/src/Core/UI/Tracks/Types.elm deleted file mode 100644 index eecaf6e86..000000000 --- a/src/Core/UI/Tracks/Types.elm +++ /dev/null @@ -1,74 +0,0 @@ -module UI.Tracks.Types exposing (..) - -import Coordinates exposing (Coordinates) -import Html.Events.Extra.Mouse as Mouse -import InfiniteList -import Json.Decode as Json -import Tracks exposing (..) - - - --- 📣 - - -type Msg - = Download { prefixTrackNumber : Bool, zipName : String } (List Track) - | DownloadFinished - | Harvest - | MarkAsSelected Int { shiftKey : Bool } - | ScrollToNowPlaying - | SyncTags (List Track) - | ToggleCachedOnly - | ToggleFavouritesOnly - | ToggleHideDuplicates - ----------------------------------------- - -- Cache - ----------------------------------------- - | ClearCache - | RemoveFromCache (List Track) - | StoreInCache (List Track) - | StoredInCache Json.Value (Maybe String) - --------- - -- Covers - --------- - | GotCachedCover Json.Value - | InsertCoverCache Json.Value - ----------------------------------------- - -- Collection - ----------------------------------------- - | Add Json.Value - | AddFavourites (List IdentifiedTrack) - | Reload Json.Value - | RemoveByPaths Json.Value - | RemoveBySourceId String - | RemoveFavourites (List IdentifiedTrack) - | SortBy SortBy - | ToggleFavourite Int - | ToggleCoverSelectionReducesPool - ----------------------------------------- - -- Groups - ----------------------------------------- - | DisableGrouping - | GroupBy Grouping - ----------------------------------------- - -- Menus - ----------------------------------------- - | ShowCoverMenu Cover Coordinates - | ShowCoverMenuWithSmallDelay Cover Coordinates - | ShowTracksMenu (Maybe Int) { alt : Bool } Coordinates - | ShowTracksMenuWithSmallDelay (Maybe Int) { alt : Bool } Coordinates - | ShowViewMenu (Maybe Grouping) Mouse.Event - ----------------------------------------- - -- Scenes - ----------------------------------------- - | ChangeScene Scene - | DeselectCover - | InfiniteListMsg InfiniteList.Model - | SelectCover Cover - ----------------------------------------- - -- Search - ----------------------------------------- - | ClearSearch - | Search - | SetSearchResults Json.Value - | SetSearchTerm String diff --git a/src/Core/UI/Types.elm b/src/Core/UI/Types.elm deleted file mode 100644 index a48bfe630..000000000 --- a/src/Core/UI/Types.elm +++ /dev/null @@ -1,332 +0,0 @@ -module UI.Types exposing (..) - -import Alfred exposing (Alfred) -import Alien -import Browser -import Browser.Navigation as Nav -import Color exposing (Color) -import Common exposing (ServiceWorkerStatus, Switch) -import ContextMenu exposing (ContextMenu) -import Coordinates exposing (Viewport) -import Debouncer.Basic as Debouncer exposing (Debouncer) -import Dict exposing (Dict) -import Equalizer -import File exposing (File) -import Html.Events.Extra.Mouse as Mouse -import Http -import InfiniteList -import Json.Decode -import Keyboard -import LastFm -import Management -import Notifications exposing (Notification) -import Playlists exposing (Playlist, PlaylistTrackWithoutMetadata) -import Queue -import Random -import Sources exposing (Source) -import Theme -import Time -import Tracks exposing (..) -import UI.Audio.Types exposing (DurationChangeEvent, ErrorAudioEvent, GenericAudioEvent, NowPlaying, PlaybackStateEvent, TimeUpdatedEvent) -import UI.DnD as DnD -import UI.Page exposing (Page) -import UI.Queue.Types as Queue -import UI.Sources.Types as Sources -import UI.Syncing.Types as Syncing -import UI.Tracks.Types as Tracks -import Url exposing (Url) - - - --- ⛩ - - -type alias Flags = - { buildTimestamp : Int - , darkMode : Bool - , initialTime : Int - , isInstallingServiceWorker : Bool -- ie. Installing SW for the first time - , isOnline : Bool - , isTauri : Bool - , version : String - , viewport : Viewport - } - - - --- 🌳 - - -type alias Model = - { buildTimestamp : Int - , confirmation : Maybe String - , currentTime : Time.Posix - , currentTimeZone : Time.Zone - , darkMode : Bool - , downloading : Maybe { notificationId : Int } - , dnd : DnD.Model Int - , focusedOnInput : Bool - , isDragging : Bool - , isLoading : Bool - , isOnline : Bool - , isTauri : Bool - , isTouchDevice : Bool - , lastFm : LastFm.Model - , navKey : Nav.Key - , page : Page - , pressedKeys : List Keyboard.Key - , processAutomatically : Bool - , serviceWorkerStatus : ServiceWorkerStatus - , theme : Maybe Theme.Id - , uuidSeed : Random.Seed - , url : Url - , version : String - , viewport : Viewport - - ----------------------------------------- - -- Audio - ----------------------------------------- - , audioElements : List Queue.EngineItem - , nowPlaying : Maybe NowPlaying - , progress : Dict String Float - , rememberProgress : Bool - - ----------------------------------------- - -- Backdrop - ----------------------------------------- - , chosenBackdrop : Maybe String - , extractedBackdropColor : Maybe Color - , fadeInBackdrop : Bool - , loadedBackdrops : List String - - ----------------------------------------- - -- Debouncing - ----------------------------------------- - , preloadDebouncer : Debouncer Msg Msg - , progressDebouncer : Debouncer Msg Msg - , resizeDebouncer : Debouncer Msg Msg - , searchDebouncer : Debouncer Msg Msg - - ----------------------------------------- - -- Equalizer - ----------------------------------------- - , eqSettings : Equalizer.Settings - , showVolumeSlider : Bool - - ----------------------------------------- - -- Instances - ----------------------------------------- - , alfred : Maybe (Alfred Msg) - , contextMenu : Maybe (ContextMenu Msg) - , notifications : List (Notification Msg) - - ----------------------------------------- - -- Playlists - ----------------------------------------- - , editPlaylistContext : Maybe { oldName : String, newName : String } - , lastModifiedPlaylist : Maybe { collection : Bool, name : String } - , newPlaylistContext : Maybe String - , playlists : List Playlist - , playlistToActivate : Maybe String - , selectedPlaylist : Maybe Playlist - - ----------------------------------------- - -- Queue - ----------------------------------------- - , dontPlay : List Queue.Item - , playedPreviously : List Queue.Item - , playingNext : List Queue.Item - , selectedQueueItem : Maybe Queue.Item - - -- Settings - ----------- - , repeat : Bool - , shuffle : Bool - - ----------------------------------------- - -- Sources - ----------------------------------------- - , processingContext : List ( String, Float ) - , processingError : Maybe { error : String, sourceId : String } - , processingNotificationId : Maybe Int - , sourceForm : Sources.Form - , sources : List Source - - ----------------------------------------- - -- Tracks - ----------------------------------------- - , cachedCovers : Maybe (Dict String String) - , cachedTracks : List String - , cachedTracksOnly : Bool - , cachingTracksInProgress : List String - , covers : { arranged : List Tracks.Cover, harvested : List Tracks.Cover } - , coverSelectionReducesPool : Bool - , favourites : List Favourite - , favouritesOnly : Bool - , grouping : Maybe Grouping - , hideDuplicates : Bool - , scene : Scene - , searchResults : Maybe (List String) - , searchTerm : Maybe String - , selectedCover : Maybe Cover - , selectedTrackIndexes : List Int - , sortBy : SortBy - , sortDirection : SortDirection - , tracks : Tracks.Collection - - -- List scene - ------------- - , infiniteList : InfiniteList.Model - - ----------------------------------------- - -- 🦉 Nested - ----------------------------------------- - , syncing : Syncing.State - } - - - --- 📣 - - -type Msg - = Bypass - ----------------------------------------- - -- Alfred - ----------------------------------------- - | AssignAlfred (Alfred Msg) - | GotAlfredInput String - | SelectAlfredItem Int - ----------------------------------------- - -- Audio - ----------------------------------------- - | AudioDurationChange DurationChangeEvent - | AudioError ErrorAudioEvent - | AudioEnded GenericAudioEvent - | AudioHasLoaded GenericAudioEvent - | AudioIsLoading GenericAudioEvent - | AudioPlaybackStateChanged PlaybackStateEvent - | AudioPreloadDebounce (Debouncer.Msg Msg) - | AudioTimeUpdated TimeUpdatedEvent - | NoteProgress { trackId : String, progress : Float } - | NoteProgressDebounce (Debouncer.Msg Msg) - | Pause - | Play - | Seek { trackId : String, progress : Float } - | Stop - | TogglePlay - | ToggleRememberProgress - ----------------------------------------- - -- Backdrop - ----------------------------------------- - | ExtractedBackdropColor { r : Int, g : Int, b : Int } - | ChooseBackdrop String - | LoadBackdrop String - ----------------------------------------- - -- Equalizer - ----------------------------------------- - | AdjustVolume Float - | ToggleVolumeSlider Switch - ----------------------------------------- - -- Interface - ----------------------------------------- - | AssistWithChangingTheme - | Blur - | ChangeTheme Theme.Id - | ContextMenuConfirmation String Msg - | CopyToClipboard String - | DismissNotification { id : Int } - | DnD (DnD.Msg Int) - | FocusedOnInput - | HideOverlay - | LostWindowFocus - | MsgViaContextMenu Msg - | PreferredColorSchemaChanged { dark : Bool } - | RemoveNotification { id : Int } - | RemoveQueueSelection - | RemoveTrackSelection - | ResizeDebounce (Debouncer.Msg Msg) - | ResizedWindow ( Int, Int ) - | SearchDebounce (Debouncer.Msg Msg) - | ShowNotification (Notification Msg) - | SetIsTouchDevice Bool - | StoppedDragging - | ToggleLoadingScreen Switch - ----------------------------------------- - -- Playlists - ----------------------------------------- - | ActivatePlaylist Playlist - | AddTracksToPlaylist { collection : Bool, playlistName : String, tracks : List PlaylistTrackWithoutMetadata } - | AssistWithAddingTracksToCollection (List IdentifiedTrack) - | AssistWithAddingTracksToPlaylist (List IdentifiedTrack) - | AssistWithSelectingPlaylist - | ConvertCollectionToPlaylist { name : String } - | ConvertPlaylistToCollection { name : String } - | CreateCollection - | CreatePlaylist - | DeactivatePlaylist - | DeletePlaylist { playlistName : String } - | DeselectPlaylist - | ModifyPlaylist - | MoveTrackInSelectedPlaylist { to : Int } - | RemoveTracksFromPlaylist Playlist (List IdentifiedTrack) - | SelectPlaylist Playlist - | SetPlaylistCreationContext String - | SetPlaylistModificationContext String String - | ShowPlaylistListMenu Playlist Mouse.Event - | TogglePlaylistVisibility Playlist - ----------------------------------------- - -- Routing - ----------------------------------------- - | ChangeUrlUsingPage Page - | LinkClicked Browser.UrlRequest - | OpenUrlOnNewPage String - | PageChanged Page - | UrlChanged Url - ----------------------------------------- - -- Services - ----------------------------------------- - | ConnectLastFm - | DisconnectLastFm - | GotLastFmSession (Result Http.Error String) - | Scrobble { duration : Int, timestamp : Int, trackId : String } - ----------------------------------------- - -- User - ----------------------------------------- - | Export - | ImportFile File - | ImportJson String - | InsertDemo - | LoadEnclosedUserData Json.Decode.Value - | LoadHypaethralUserData Json.Decode.Value - | RequestImport - | SaveEnclosedUserData - ----------------------------------------- - -- ⚗️ Adjunct - ----------------------------------------- - | KeyboardMsg Keyboard.Msg - ----------------------------------------- - -- 🦉 Nested - ----------------------------------------- - | SyncingMsg Syncing.Msg - | QueueMsg Queue.Msg - | SourcesMsg Sources.Msg - | TracksMsg Tracks.Msg - ----------------------------------------- - -- 📭 Other - ----------------------------------------- - | InstalledServiceWorker - | InstallingServiceWorker - | RedirectToBrain Alien.Event - | ReloadApp - | SetCurrentTime Time.Posix - | SetCurrentTimeZone Time.Zone - | SetIsOnline Bool - - -type alias Organizer model = - Management.Manager Msg model - - -type alias Manager = - Organizer Model diff --git a/src/Core/UI/User/State/Export.elm b/src/Core/UI/User/State/Export.elm deleted file mode 100644 index 5154319d5..000000000 --- a/src/Core/UI/User/State/Export.elm +++ /dev/null @@ -1,136 +0,0 @@ -module UI.User.State.Export exposing (..) - -import Alien -import File.Download -import Json.Encode -import List.Extra as List -import Maybe.Extra as Maybe -import Playlists.Encoding as Playlists -import Return exposing (return) -import Settings exposing (Settings) -import Sources.Encoding as Sources -import Tracks.Encoding as Tracks -import UI.Ports as Ports -import UI.Types exposing (..) -import User.Layer exposing (..) - - - --- 🔱 - - -export model = - { favourites = model.favourites - , playlists = List.filterNot (.autoGenerated >> Maybe.isJust) model.playlists - , progress = model.progress - , settings = Just (gatherSettings model) - , sources = model.sources - , tracks = model.tracks.untouched - - -- - , modifiedAt = Just model.currentTime - } - |> encodeHypaethralData - |> Json.Encode.encode 2 - |> (if model.isTauri then - \json -> Ports.downloadJsonUsingTauri { filename = "diffuse.json", json = json } - - else - File.Download.string "diffuse.json" "application/json" - ) - |> return model - - -gatherSettings : Model -> Settings -gatherSettings { chosenBackdrop, coverSelectionReducesPool, hideDuplicates, lastFm, processAutomatically, rememberProgress } = - { backgroundImage = chosenBackdrop - , coverSelectionReducesPool = coverSelectionReducesPool - , hideDuplicates = hideDuplicates - , lastFm = lastFm.sessionKey - , processAutomatically = processAutomatically - , rememberProgress = rememberProgress - } - - -saveEnclosedUserData : Manager -saveEnclosedUserData model = - { cachedTracks = model.cachedTracks - , equalizerSettings = model.eqSettings - , grouping = model.grouping - , onlyShowCachedTracks = model.cachedTracksOnly - , onlyShowFavourites = model.favouritesOnly - , repeat = model.repeat - , scene = model.scene - , searchTerm = model.searchTerm - , selectedPlaylist = Maybe.map .name model.selectedPlaylist - , shuffle = model.shuffle - , sortBy = model.sortBy - , sortDirection = model.sortDirection - , theme = model.theme - } - |> encodeEnclosedData - |> Alien.broadcast Alien.SaveEnclosedUserData - |> Ports.toBrain - |> Return.return model - - -saveFavourites : Manager -saveFavourites model = - model.favourites - |> Json.Encode.list Tracks.encodeFavourite - |> Alien.broadcast Alien.SaveFavourites - |> Ports.toBrain - |> return model - - -saveModifiedAt : Manager -saveModifiedAt = - -- Handled by 🧠 - Return.singleton - - -savePlaylists : Manager -savePlaylists model = - model.playlists - |> List.filterNot (.autoGenerated >> Maybe.isJust) - |> Json.Encode.list Playlists.encode - |> Alien.broadcast Alien.SavePlaylists - |> Ports.toBrain - |> return model - - -saveProgress : Manager -saveProgress model = - model.progress - |> Json.Encode.dict identity Json.Encode.float - |> Alien.broadcast Alien.SaveProgress - |> Ports.toBrain - |> return model - - -saveSettings : Manager -saveSettings model = - model - |> gatherSettings - |> Settings.encode - |> Alien.broadcast Alien.SaveSettings - |> Ports.toBrain - |> return model - - -saveSources : Manager -saveSources model = - model.sources - |> Json.Encode.list Sources.encode - |> Alien.broadcast Alien.SaveSources - |> Ports.toBrain - |> Return.return model - - -saveTracks : Manager -saveTracks model = - model.tracks.untouched - |> Json.Encode.list Tracks.encodeTrack - |> Alien.broadcast Alien.SaveTracks - |> Ports.toBrain - |> return model diff --git a/src/Core/UI/User/State/Import.elm b/src/Core/UI/User/State/Import.elm deleted file mode 100644 index 5905d71a8..000000000 --- a/src/Core/UI/User/State/Import.elm +++ /dev/null @@ -1,232 +0,0 @@ -module UI.User.State.Import exposing (..) - -import File exposing (File) -import File.Select -import Json.Decode -import Json.Encode -import LastFm -import List.Extra as List -import Maybe.Extra as Maybe -import Notifications -import Process -import Return exposing (andThen, return) -import Return.Ext exposing (communicate) -import Task -import UI.Backdrop as Backdrop -import UI.Common.State as Common exposing (showNotification) -import UI.Demo as Demo -import UI.Equalizer.State as Equalizer -import UI.Page as Page -import UI.Playlists.Directory -import UI.Sources.State as Sources -import UI.Tracks.State as Tracks -import UI.Types as UI exposing (..) -import UI.User.State.Export as User -import Url.Ext as Url -import User.Layer exposing (..) - - - --- 🔱 - - -importFile : File -> Manager -importFile file model = - 250 - |> Process.sleep - |> Task.andThen (\_ -> File.toString file) - |> Task.perform UI.ImportJson - |> return { model | isLoading = True } - - -importJson : String -> Manager -importJson json model = - json - -- Load data on main thread (this app) - |> Json.Decode.decodeString Json.Decode.value - |> Result.withDefault Json.Encode.null - |> (\j -> importHypaethral j model) - -- Show notification - |> andThen - ("Imported data successfully!" - |> Notifications.success - |> showNotification - ) - -- Clear tracks cache - |> andThen Tracks.clearCache - -- Redirect to index page - |> andThen Common.forceTracksRerender - |> andThen (Common.changeUrlUsingPage Page.Index) - ----------------------------- - -- Save all the imported data - ----------------------------- - |> saveAllHypaethralData - - -insertDemo : Manager -insertDemo model = - model - |> loadHypaethralUserData (Demo.tape model.currentTime) - |> saveAllHypaethralData - - -loadEnclosedUserData : Json.Decode.Value -> Manager -loadEnclosedUserData = - importEnclosed - - -loadHypaethralUserData : Json.Decode.Value -> Manager -loadHypaethralUserData json model = - model - |> importHypaethral json - |> andThen - (\m -> - case Url.action m.url of - [ "authenticate", "lastfm" ] -> - { authenticating = True - , sessionKey = Nothing - } - |> (\n -> { m | lastFm = n }) - |> communicate (LastFm.authenticationCommand GotLastFmSession m.url) - - _ -> - Return.singleton m - ) - |> andThen - Sources.addSourcesFromUrl - - -requestImport : Manager -requestImport model = - ImportFile - |> File.Select.file [ "application/json" ] - |> return model - - - --- ⚗️ ░░ HYPAETHRAL DATA - - -importHypaethral : Json.Decode.Value -> Manager -importHypaethral value model = - case decodeHypaethralData value of - Ok data -> - let - chosenBackdrop = - data.settings - |> Maybe.andThen .backgroundImage - |> Maybe.withDefault Backdrop.default - |> Just - - newPlaylistsCollection = - List.append - data.playlists - (UI.Playlists.Directory.generate data.sources data.tracks) - - selectedPlaylist = - Maybe.andThen - (\n -> List.find (.name >> (==) n) newPlaylistsCollection) - model.playlistToActivate - - lastFmModel = - model.lastFm - in - Tracks.importHypaethral - data - selectedPlaylist - { model - | chosenBackdrop = chosenBackdrop - , coverSelectionReducesPool = Maybe.unwrap True .coverSelectionReducesPool data.settings - , hideDuplicates = Maybe.unwrap False .hideDuplicates data.settings - , lastFm = { lastFmModel | sessionKey = Maybe.andThen .lastFm data.settings } - , playlists = newPlaylistsCollection - , playlistToActivate = Nothing - , processAutomatically = Maybe.unwrap True .processAutomatically data.settings - , progress = data.progress - , rememberProgress = Maybe.unwrap True .rememberProgress data.settings - , sources = data.sources - } - - Err err -> - err - |> Json.Decode.errorToString - |> Notifications.error - |> Common.showNotificationWithModel model - - -saveAllHypaethralData : ( Model, Cmd Msg ) -> ( Model, Cmd Msg ) -saveAllHypaethralData return = - List.foldl - (\( _, bit ) -> - case bit of - Favourites -> - andThen User.saveFavourites - - ModifiedAt -> - andThen User.saveModifiedAt - - Playlists -> - andThen User.savePlaylists - - Progress -> - andThen User.saveProgress - - Settings -> - andThen User.saveSettings - - Sources -> - andThen User.saveSources - - Tracks -> - andThen User.saveTracks - ) - return - hypaethralBit.list - - - --- ⚗️ ░░ ENCLOSED DATA - - -importEnclosed : Json.Decode.Value -> Manager -importEnclosed value model = - let - equalizerSettings = - model.eqSettings - in - case decodeEnclosedData value of - Ok data -> - let - newEqualizerSettings = - { equalizerSettings - | low = data.equalizerSettings.low - , mid = data.equalizerSettings.mid - , high = data.equalizerSettings.high - , volume = data.equalizerSettings.volume - } - in - ( { model - | eqSettings = newEqualizerSettings - , playlistToActivate = data.selectedPlaylist - , repeat = data.repeat - , shuffle = data.shuffle - - -- Tracks - , cachedTracks = data.cachedTracks - , cachedTracksOnly = data.onlyShowCachedTracks - , favouritesOnly = data.onlyShowFavourites - , grouping = data.grouping - , scene = data.scene - , searchTerm = data.searchTerm - , sortBy = data.sortBy - , sortDirection = data.sortDirection - , theme = data.theme - } - -- - , Equalizer.adjustAllKnobs newEqualizerSettings - ) - - Err err -> - ("Failed to decode enclosed data: " ++ Json.Decode.errorToString err) - |> Notifications.error - |> Common.showNotificationWithModel model diff --git a/src/Core/UI/View.elm b/src/Core/UI/View.elm deleted file mode 100644 index 1f3cefd3c..000000000 --- a/src/Core/UI/View.elm +++ /dev/null @@ -1,16 +0,0 @@ -module UI.View exposing (view) - -import Browser -import UI.Theme -import UI.Types exposing (Model, Msg) - - - --- 🗺 - - -view : Model -> Browser.Document Msg -view model = - { title = "Diffuse" - , body = [ UI.Theme.view model ] - } diff --git a/src/Css/About.css b/src/Css/About.css deleted file mode 100644 index 066df2cf9..000000000 --- a/src/Css/About.css +++ /dev/null @@ -1,146 +0,0 @@ -@charset "UTF-8"; - -/* Imports - ------- */ - -@import "tailwindcss/base"; -@import "tailwindcss/components"; -@import "tailwindcss/utilities"; - -@import "Fonts.css"; -@import "Logo.css"; - -/* Basic - ----- */ - -p a, -ul a, -ol a { - @apply underline; - text-underline-offset: 2px; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - @apply font-bold leading-tight antialiased; - font-family: "Playfair Display", serif; - letter-spacing: -0.005em; -} - -h1 { - display: none; -} - -h2 { - @apply mb-6 mt-12 text-2xl; -} - -h3 { - @apply mb-5 mt-8 text-xl; -} - -h4 { - @apply mb-4 mt-6 text-lg; -} - -h5 { - @apply mb-5 mt-6 text-base; -} - -p { - @apply my-3 leading-relaxed; -} - -strong { - @apply font-semibold; -} - -/* Blockquote - ---------- */ - -blockquote { - @apply font-display mb-12 ml-0 mt-12 max-w-xl pl-0 font-bold tracking-tight; -} - -blockquote p { - @apply text-5xl leading-tight; - background: url(images/Background/21.jpg); - background-position: center 33%; - background-size: cover; - color: #b7c2d4; - - background-clip: text; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; -} - -/* Code - ---- */ - -pre { - @apply overflow-x-auto overflow-y-hidden rounded border-2 border-gray-400 p-6 text-sm leading-relaxed; -} - -code { - @apply font-mono; -} - -@screen dark { - pre { - @apply border-base01; - } -} - -.hljs-comment, -.language-shell .hljs-meta, -.language-shell .hljs-meta + .bash { - opacity: 0.5; -} - -.hljs-string { - @apply text-base0b; -} - -/* Links - ----- */ - -h5 + p a { - @apply mb-2 inline-block; -} - -/* Lists - ----- */ - -ul, -ol { - @apply ml-3 leading-relaxed; -} - -ul li, -ol li { - @apply mb-1; -} - -ol { - counter-reset: ol; -} - -ol li::before { - @apply text-base06 inline-block pr-3; - counter-increment: ol; - content: counters(ol, ".") "."; -} - -ul li::before { - @apply text-base06 inline-block pr-3; - content: "•"; -} - -ul p, -ol p { - @apply my-0 inline; -} diff --git a/src/Css/Application.css b/src/Css/Application.css deleted file mode 100644 index cb70cee67..000000000 --- a/src/Css/Application.css +++ /dev/null @@ -1,257 +0,0 @@ -@charset "UTF-8"; - -/* Imports - ------- */ - -@import "tailwindcss/base"; -@import "tailwindcss/components"; -@import "tailwindcss/utilities"; - -@import "Fonts.css"; -@import "Logo.css"; -@import "Notifications.css"; - -/* 🛠 - ----- */ - -@layer utilities { - .scrolling-touch { - -webkit-overflow-scrolling: touch; - } - - .scrolling-auto { - -webkit-overflow-scrolling: auto; - } -} - -/* Base - ---- */ - -:root { - color-scheme: light dark; -} - -html, -body { - overflow: hidden; - overscroll-behavior: none; -} - -html, -body, -.screen-height { - height: 100dvh; -} - -body { - @apply text-base01; - - background-color: rgb(29, 29, 29); - background-image: url(images/ocean.jpg); - font-feature-settings: kern, liga; - font-weight: 400; - min-width: 300px; - text-rendering: optimizeLegibility; -} - -*:active { - outline: none; -} - -.align-sub { - vertical-align: sub; -} - -.all-small-caps { - font-variant-caps: all-small-caps; -} - -.flex-basis-0 { - flex-basis: 0; -} - -.smooth-scrolling { - scroll-behavior: smooth; -} - -@screen dark { - body { - @apply text-gray-600; - } -} - -/* Buttons - ------- */ - -button { - color: inherit; - font-family: inherit; -} - -/* Dragging - -------- */ - -.dragging-something { - @apply select-none; - cursor: grabbing; -} - -.dragging-something * { - cursor: grabbing !important; -} - -/* Forms - ----- */ - -input::placeholder, -textarea::placeholder { - color: rgba(0, 0, 0, 0.275); - opacity: 1; -} - -input:user-invalid, -textarea:user-invalid { - @apply border-base08; - box-shadow: none; - outline: none; -} - -select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 rgb(63, 63, 63); -} - -@screen dark { - input::placeholder, - textarea::placeholder { - @apply text-base03; - opacity: 1; - } - - select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 rgb(232, 232, 232); - } -} - -/* Loading - ------- */ - -.loading-animation { - animation: loading-rotator 2s linear infinite; -} - -.loading-animation__circle { - animation: - loading-dash 1.5s ease-in-out infinite, - loading-colors 6s ease-in-out infinite; - stroke-dasharray: 1, 86.25; - stroke-dashoffset: 0; - transform-origin: center; -} - -@keyframes loading-rotator { - 0% { - transform: rotate(0deg); - } - - 100% { - transform: rotate(360deg); - } -} - -@keyframes loading-colors { - 0% { - stroke: rgb(248, 164, 167); - } - - 25% { - stroke: rgb(254, 196, 24); - } - - 50% { - stroke: rgb(72, 182, 133); - } - - 75% { - stroke: rgb(6, 182, 239); - } - - 100% { - stroke: rgb(248, 164, 167); - } -} - -@keyframes loading-dash { - 0% { - stroke-dasharray: 1, 86.25; - stroke-dashoffset: 0; - } - - 50% { - stroke-dasharray: 64.6875, 86.25; - stroke-dashoffset: -21.5625; - } - - 100% { - stroke-dasharray: 64.6875, 86.25; - stroke-dashoffset: -86.25; - } -} - -/* Overrides - --------- */ - -.no-tracks-view > div { - /* CSS fix for a scrolling issue: - Element would appear scrolled even though it's not (virtual-dom issue probably) - */ - overflow: visible !important; -} - -/* Range slider - ------------ */ - -.range-slider { - @apply w-24 appearance-none rounded bg-gray-400; - height: 4px; -} - -.range-slider::-webkit-slider-thumb { - @apply bg-base02 appearance-none; - border-radius: 100%; - height: 10px; - width: 10px; -} - -.range-slider::-moz-range-thumb { - @apply bg-darkest-hour appearance-none; - border-radius: 100%; - height: 10px; - width: 10px; -} - -.range-slider::-ms-thumb { - @apply bg-darkest-hour appearance-none; - border-radius: 100%; - height: 10px; - width: 10px; -} - -@screen dark { - .range-slider { - @apply bg-base01; - } - - .range-slider::-webkit-slider-thumb { - @apply bg-base07; - } - - .range-slider::-moz-range-thumb { - @apply bg-base07; - } - - .range-slider::-ms-thumb { - @apply bg-base07; - } -} diff --git a/src/Css/Fonts.css b/src/Css/Fonts.css deleted file mode 100644 index d19748e2a..000000000 --- a/src/Css/Fonts.css +++ /dev/null @@ -1,222 +0,0 @@ -/* Hack */ - - -@font-face { - font-family: "Hack"; - src: url("fonts/Hack/regular-subset.woff2") format("woff2"); - font-weight: 400; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Hack"; - src: url("fonts/Hack/bold-subset.woff2") format("woff2"); - font-weight: 700; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - - -/* Source Sans Pro */ - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/roman.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/light.woff2") format("woff2"); - font-weight: 300; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/italic.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/light-italic.woff2") format("woff2"); - font-weight: 300; - font-stretch: normal; - font-style: italic; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/roman.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/regular.woff2") format("woff2"); - font-weight: 400; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/italic.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/italic.woff2") format("woff2"); - font-weight: 400; - font-stretch: normal; - font-style: italic; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/roman.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/semibold.woff2") format("woff2"); - font-weight: 600; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/italic.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/semibold-italic.woff2") format("woff2"); - font-weight: 600; - font-stretch: normal; - font-style: italic; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/roman.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/bold.woff2") format("woff2"); - font-weight: 700; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/italic.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/bold-italic.woff2") format("woff2"); - font-weight: 700; - font-stretch: normal; - font-style: italic; - font-display: swap; -} - - -@font-face { - font-family: "Source Sans Pro"; - src: url("fonts/Source Sans Pro/Variable/roman.woff2") format("woff2-variations"), - url("fonts/Source Sans Pro/Old/black.woff2") format("woff2"); - font-weight: 900; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - - -/* Montserrat */ - - -@font-face { - font-family: "Montserrat"; - src: url("fonts/Montserrat/Variable/variable.woff2") format("woff2-variations"), - url("fonts/Montserrat/Old/light.woff2") format("woff2"); - font-weight: 300; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Montserrat"; - src: url("fonts/Montserrat/Variable/variable.woff2") format("woff2-variations"), - url("fonts/Montserrat/Old/regular.woff2") format("woff2"); - font-weight: 400; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Montserrat"; - src: url("fonts/Montserrat/Variable/variable.woff2") format("woff2-variations"), - url("fonts/Montserrat/Old/medium.woff2") format("woff2"); - font-weight: 500; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Montserrat"; - src: url("fonts/Montserrat/Variable/variable.woff2") format("woff2-variations"), - url("fonts/Montserrat/Old/semibold.woff2") format("woff2"); - font-weight: 600; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Montserrat"; - src: url("fonts/Montserrat/Variable/variable.woff2") format("woff2-variations"), - url("fonts/Montserrat/Old/bold.woff2") format("woff2"); - font-weight: 700; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - -@font-face { - font-family: "Montserrat"; - src: url("fonts/Montserrat/Variable/variable.woff2") format("woff2-variations"), - url("fonts/Montserrat/Old/extrabold.woff2") format("woff2"); - font-weight: 800; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - - -/* Playfair Display */ - - -@font-face { - font-family: "Playfair Display"; - src: url("fonts/Playfair Display/bold.woff2") format("woff2"); - font-weight: 700; - font-stretch: normal; - font-style: normal; - font-display: swap; -} - - - -/* Icons */ - - -@font-face { - font-family: "or-favourites"; - src: - url(data:application/x-font-woff;charset=utf-8;base64,d09GMgABAAAAAALMAA0AAAAABtgAAAJ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCZhEICoIkgiALEAABNgIkAxoEIAWDYwc/G90FyK4GbGMY+iEaIl0ZXnqKj/KnMxo7rFjbeJ5aK9/v7pldlgeU6EhAReQQhOPyqSgCF2HRqQMjoqPX6vfTvRLxyy8hvfxwgdgCG18WlkhGZ3wxVyCZK1Ax/aiqC+B/4mbcWICdj4mBZGkigQYYTgsk7LKxKMD9f/5g/fla58se9MEfLNSfcvcO9O3SWls3IbDt4mQLsPO506mPDqZYAkVELxoKan2ddJQfZfAFrM4/QkypmmLtKeRVvX0rsyIZCEj3I9S5bSDwhL5gg4FzYGqoaGI/qeHF70Bi9gvts99VMQVAVNKTCqSggHQPjarzL3rg45FF1mAA5uhxD7wHNEAQUaTWurrhQYB4+hIlu2a3I8xOXQvzO3CizrFj67snzG8Dsray+jlA9h5ezAsG025eelIV85r3AwDU71dzp4caxei26MzamixWl2hW+WUHJJl1NZnROUYue2qoNFe4OdrTX+dfx9KE/vahFdXFL1cVr2ofSZppTAzr8pckcBbsbPn493jRlIeqiT2AI78PQBDeHHyt7bBO/T80b+bKaag/KzBUQBjfHpqKuPLt0DdAbgJQ0LilHmHgCD1QAAAw91dAzGwgUAycRKCaeYRAM/NWQGfSDeiR3c1ja3GjL20k1iCiirkDVLUmG2iIiuos2aV6a87fMnaYFn0GRZLqMqrPiEFyw7ghePoi8puJy+TDfAi4hhONUOkyCO+o1YPOhTW69BZu0BC5Pho+mCgxcD9rjEXFDHTaBX00hvkQcRrcoC7llF4+uk3wUaRHnzJ9wImCp+nYcd4p6un78cMlgEKfGJCipKJHXNbQi6qJfhkzHtHIY2JiGAA=) format("woff2"), url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAWQAAsAAAAABUQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxEM82NtYXAAAAFoAAAAXAAAAFwAsAEYZ2FzcAAAAcQAAAAIAAAACAAAABBnbHlmAAABzAAAATAAAAEwWmanp2hlYWQAAAL8AAAANgAAADYOgV4yaGhlYQAAAzQAAAAkAAAAJAdsA8dobXR4AAADWAAAABgAAAAYDgAArGxvY2EAAANwAAAADgAAAA4AwACAbWF4cAAAA4AAAAAgAAAAIAAJADduYW1lAAADoAAAAc4AAAHOtR+CC3Bvc3QAAAVwAAAAIAAAACAAAwAAAAMDVQGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAQAAAAHQDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAEAAAAAMAAgAAgAEAAEAIABmAHT//f//AAAAAAAgAGYAdP/9//8AAf/j/57/kQADAAEAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACAFYAHQOqAysAGAA0AAAlPgM1NCYjIgYHIy4BIyIGFRQeAh8BEzIeAhUUDgIPAScuAzU0PgIzMhYXPgECBEx9WTBVQTFWEVAQVjJAVjBZfE0EwDFWPyQ0X4ZTPj5Sh180JD9VMjdmIyJmk0V0aF4vQFQ5Kys5VEAvXmh0RQQCnCQ/VjE9cXR/Szg2S392cT0xVj8kMigoMgAAAAABAFYAHQOqAysAGwAAJScuAzU0PgIzMhYXPgEzMh4CFRQOAgcCAD5Sh180JD9VMjdmIyJmODFWPyQ0X4ZTHThLf3RxPTFWPyQyKCgyJD9WMT1xdn9LAAAAAQAAAAEAALY04pNfDzz1AAsEAAAAAADV3I0FAAAAANXcjQUAAAAAA6oDKwAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADqgABAAAAAAAAAAAAAAAAAAAABgQAAAAAAAAAAAAAAAIAAAAEAABWBAAAVgAAAAAACgAUAB4AbACYAAAAAQAAAAYANQACAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA0AAAABAAAAAAACAAcAlgABAAAAAAADAA0ASAABAAAAAAAEAA0AqwABAAAAAAAFAAsAJwABAAAAAAAGAA0AbwABAAAAAAAKABoA0gADAAEECQABABoADQADAAEECQACAA4AnQADAAEECQADABoAVQADAAEECQAEABoAuAADAAEECQAFABYAMgADAAEECQAGABoAfAADAAEECQAKADQA7G9yLWZhdm91cml0ZXMAbwByAC0AZgBhAHYAbwB1AHIAaQB0AGUAc1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMG9yLWZhdm91cml0ZXMAbwByAC0AZgBhAHYAbwB1AHIAaQB0AGUAc29yLWZhdm91cml0ZXMAbwByAC0AZgBhAHYAbwB1AHIAaQB0AGUAc1JlZ3VsYXIAUgBlAGcAdQBsAGEAcm9yLWZhdm91cml0ZXMAbwByAC0AZgBhAHYAbwB1AHIAaQB0AGUAc0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format("woff"); - font-weight: normal; - font-stretch: normal; - font-style: normal; -} diff --git a/src/Css/Logo.css b/src/Css/Logo.css deleted file mode 100644 index 075cb26f7..000000000 --- a/src/Css/Logo.css +++ /dev/null @@ -1,15 +0,0 @@ -.logo { - opacity: 0.85; -} - -.logo img { - width: 154px; -} - -.logo-backdrop { - background-image: url("images/diffuse__icon-dark.svg"); - background-position: -43.5% 98px; - transform-origin: left top; - transform: rotate(90deg); - width: 105vh; -} diff --git a/src/Css/Notifications.css b/src/Css/Notifications.css deleted file mode 100644 index 303fdc96b..000000000 --- a/src/Css/Notifications.css +++ /dev/null @@ -1,29 +0,0 @@ -.notifications { - font-size: 13px; - line-height: 1.35; -} - -.notifications a, -.notifications em { - border-bottom: 1px solid rgba(255, 255, 255, 0.45); - display: inline-block; -} - -.notifications a { - color: inherit; - font-weight: 600; - text-decoration: none; -} - -.notifications p { - margin: 0; - padding: 0; -} - -.notifications em { - font-weight: inherit; -} - -.notifications strong { - font-weight: 600; -} diff --git a/src/Javascript/Brain/application.ts b/src/Javascript/Brain/application.ts deleted file mode 100644 index eeb2156dc..000000000 --- a/src/Javascript/Brain/application.ts +++ /dev/null @@ -1,24 +0,0 @@ -import "./index.d" - -// @ts-ignore -import { Elm } from "brain.elm.js" - - -// 🚀 - - -const flags: Record = location - .hash - .substring(1) - .split("&") - .reduce((acc, flag) => { - const [k, v] = flag.split("=") - return { ...acc, [k]: v } - }, {}) - - -export const load = () => Elm.Brain.init({ - flags: { - initialUrl: decodeURIComponent(flags.appHref) || "" - } -}) diff --git a/src/Javascript/Brain/artwork.ts b/src/Javascript/Brain/artwork.ts deleted file mode 100644 index fd8e9c896..000000000 --- a/src/Javascript/Brain/artwork.ts +++ /dev/null @@ -1,218 +0,0 @@ -// -// Album Covers -// (◕‿◕✿) - -import * as Uint8arrays from "uint8arrays" - -import * as processing from "./processing" -import { type App } from "./elm/types" -import { transformUrl } from "../urls" -import { toCache } from "./common" -import { type CoverPrep } from "../common" - - -// 🌳 - - -type CoverPrepWithUrls = CoverPrep & { - trackGetUrl: string - trackHeadUrl: string -} - - - -// 🏔️ - - -let artworkQueue: CoverPrep[] = [] -let app: App - - - -// 🚀 - - -export function init(a: App) { - app = a - - app.ports.provideArtworkTrackUrls.subscribe(provideArtworkTrackUrls) -} - - - -// PORTS - - -function provideArtworkTrackUrls(prep: CoverPrepWithUrls) { - find(prep).then(blob => { - return toCache(`coverCache.${prep.cacheKey}`, blob).then(_ => blob) - }) - .then((blob: Blob) => { - const url = URL.createObjectURL(blob) - - self.postMessage({ - tag: "GOT_CACHED_COVER", - data: { imageType: blob.type, key: prep.cacheKey, url: url }, - error: null - }) - }) - .catch(err => { - if (err === "No artwork found") { - // Indicate that we've tried to find artwork, - // so that we don't try to find it each time we launch the app. - return toCache(`coverCache.${prep.cacheKey}`, "TRIED") - - } else { - // Something went wrong - console.error(err) - return toCache(`coverCache.${prep.cacheKey}`, "TRIED") - - } - }) - .catch(() => { - console.warn("Failed to download artwork for ", prep) - }) - .finally(shiftQueue) -} - - - -// 🛠️ - - -export function download(list: CoverPrep[]) { - const exe = !artworkQueue[0] - artworkQueue = artworkQueue.concat(list) - if (exe) shiftQueue() -} - - -function shiftQueue() { - const next = artworkQueue.shift() - - if (next) { - app.ports.makeArtworkTrackUrls.send(next) - } else { - self.postMessage({ - action: "FINISHED_DOWNLOADING_ARTWORK", - data: null - }) - } -} - - - -// ㊙️ - - -const REJECT = () => Promise.reject("No artwork found") - - -function decodeCacheKey(cacheKey: string) { - return Uint8arrays.toString( - Uint8arrays.fromString(cacheKey, "base64"), - "utf8" - ) -} - - -function find(prep: CoverPrepWithUrls) { - return findUsingTags(prep) - .then(a => a ? a : findUsingMusicBrainz(prep)) - .then(a => a ? a : findUsingLastFm(prep)) - .then(a => a ? a : REJECT()) - .then(a => a.type.startsWith("image/") ? a : REJECT()) -} - - - -// 1. TAGS - - -async function findUsingTags(prep: CoverPrepWithUrls) { - return Promise.all( - [ - transformUrl(prep.trackHeadUrl, app), - transformUrl(prep.trackGetUrl, app) - ] - - ).then(([ headUrl, getUrl ]) => processing.getTags( - headUrl, - getUrl, - prep.trackFilename, - { covers: true } - - )).then(tags => { - return tags?.picture - ? new Blob([ tags.picture.data ], { type: tags.picture.format }) - : null - - }) -} - - - -// 2. MUSIC BRAINZ - - -function findUsingMusicBrainz(prep: CoverPrepWithUrls) { - if (!navigator.onLine) return null - - const parts = decodeCacheKey(prep.cacheKey).split(" --- ") - const artist = parts[ 0 ] - const album = parts[ 1 ] || parts[ 0 ] - - const query = `release:"${album}"` + (prep.variousArtists === "t" ? `` : ` AND artist:"${artist}"`) - const encodedQuery = encodeURIComponent(query) - - return fetch(`https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`) - .then(r => r.json()) - .then(r => musicBrainzCover(r.releases)) -} - - -function musicBrainzCover(remainingReleases) { - const release = remainingReleases[ 0 ] - if (!release) return null - - return fetch( - `https://coverartarchive.org/release/${release.id}/front-500` - ).then( - r => r.blob() - ).then( - r => r && r.type.startsWith("image/") - ? r - : musicBrainzCover(remainingReleases.slice(1)) - ).catch( - () => musicBrainzCover(remainingReleases.slice(1)) - ) -} - - - -// 3. LAST FM - - -function findUsingLastFm(prep: CoverPrepWithUrls) { - if (!navigator.onLine) return null - - const query = encodeURIComponent( - decodeCacheKey(prep.cacheKey).replace(" --- ", " ") - ) - - return fetch(`https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json`) - .then(r => r.json()) - .then(r => lastFmCover(r.results.albummatches.album)) -} - - -function lastFmCover(remainingMatches) { - const album = remainingMatches[ 0 ] - const url = album ? album.image[ album.image.length - 1 ][ "#text" ] : null - - return url && url !== "" - ? fetch(url) - .then(r => r.blob()) - .catch(_ => lastFmCover(remainingMatches.slice(1))) - : album && lastFmCover(remainingMatches.slice(1)) -} diff --git a/src/Javascript/Brain/common.ts b/src/Javascript/Brain/common.ts deleted file mode 100644 index f61bedd52..000000000 --- a/src/Javascript/Brain/common.ts +++ /dev/null @@ -1,117 +0,0 @@ -// -// Common stuff -// ʕ•ᴥ•ʔ - - -import * as crypto from "../crypto" -import { db } from "../common" - - -export const SECRET_KEY_LOCATION = "SECRET_KEY" - - -// 🔱 - - -export function isLocalHost(url: string) { - return ( - url.startsWith("localhost") || - url.startsWith("localhost") || - url.startsWith("127.0.0.1") || - url.startsWith("127.0.0.1") - ) -} - - -export function parseJsonIfNeeded(a: unknown) { - if (typeof a === "string") return JSON.parse(a) - return a -} - - -export function reportError(app, event) { - return e => { - const err = e ? e.message || e : null - if (err) { - console.error(err, e.stack) - app.ports.fromAlien.send({ tag: event.tag, data: null, error: err }) - } - } -} - - -export function sendData(app, event, opts: any = {}) { - return data => { - app.ports.fromAlien.send({ - tag: event.tag, - data: (opts && opts.parseJSON && typeof data === "string") - ? JSON.parse(data) - : (data || null), - error: null - }) - } -} - - - -// Cache -// ----- - -export function removeCache(key: string): Promise { - return db().removeItem(key) -} - - -export function fromCache(key: string): Promise { - return db().getItem(key) -} - - -export function toCache(key: string, data: unknown): Promise { - return db().setItem(key, data) -} - - - -// Crypto -// ------ - -export function decryptIfNeeded(data: unknown): Promise { - if (typeof data !== "string") { - return Promise.resolve(data) - - } else if (typeof data === "string" && (data.startsWith("{") || data.startsWith("["))) { - return Promise.resolve(data) - - } else if (data.length < 15 && Number.isInteger(parseInt(data, 10))) { - return Promise.resolve(data) - - } else { - return data - ? getSecretKey().then(secretKey => { - if (!secretKey) throw new Error("There seems to be existing data that's encrypted, I will need the passphrase (ie. encryption key) to continue.") - return crypto.decrypt(secretKey, data) - }) - : Promise.resolve(null) - - } -} - - -export async function encryptIfPossible(unencryptedData: string): Promise { - return unencryptedData - ? getSecretKey().then(secretKey => - secretKey - ? crypto.encrypt(secretKey, unencryptedData) - : unencryptedData - ) - : unencryptedData -} - - -export { encryptIfPossible as encryptWithSecretKey } - - -export function getSecretKey(): Promise { - return db().getItem(SECRET_KEY_LOCATION) -} diff --git a/src/Javascript/Brain/elm/types.ts b/src/Javascript/Brain/elm/types.ts deleted file mode 100644 index e5a05984a..000000000 --- a/src/Javascript/Brain/elm/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type App = any // TODO: ElmApp - - -export type ElmPorts = { - // ← Elm - // ... - - // → Elm - fromAlien: PortToElm -} diff --git a/src/Javascript/Brain/index.d.ts b/src/Javascript/Brain/index.d.ts deleted file mode 100644 index d1860d30d..000000000 --- a/src/Javascript/Brain/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ElmPorts } from "./elm/types" - - -export { } - - -declare const Elm: { Brain: ElmMain } -declare const BUILD_TIMESTAMP: string - - -declare module "elm-taskport" { - const install: () => void - const register: (a: string, b: (arg: any) => any) => void -} diff --git a/src/Javascript/Brain/index.ts b/src/Javascript/Brain/index.ts deleted file mode 100644 index 4444ef914..000000000 --- a/src/Javascript/Brain/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -// -// Brain -// 🧠 -// -// This worker is responsible for everything non-UI. - -import * as Application from "./application" -import * as Artwork from "./artwork" -import * as Processing from "./processing" -import * as Search from "./search" -import * as User from "./user" -import * as TaskPorts from "./task-ports" -import * as Tracks from "./tracks" -import * as UI from "./ui" - - -// 🚀 - -TaskPorts.register() -User.TaskPorts.register() - -const app = Application.load() -const brain = self as unknown as Worker - -// 🖼️ - -UI.link(brain, app) - -// ⚡ -Artwork.init(app) -Processing.init(app) -Search.init(app) -Tracks.init(app) - -User.Ports.register(app) - -// 🛫 - -brain.postMessage({ action: "READY" }) diff --git a/src/Javascript/Brain/processing.ts b/src/Javascript/Brain/processing.ts deleted file mode 100644 index 4c625e658..000000000 --- a/src/Javascript/Brain/processing.ts +++ /dev/null @@ -1,303 +0,0 @@ -// -// Processing -// ♪(´ε` ) -// -// Audio processing, getting metadata, etc. - -import type { IAudioMetadata } from "music-metadata" -import type { GeneralTrack, MediaInfoResult } from "mediainfo.js" -import type { ITokenizer } from "strtok3" - -import * as Uint8arrays from "uint8arrays" -import { type App } from "./elm/types" -import { transformUrl } from "../urls" - - -// 🏔️ - - -const ENCODING_ISSUE_REPLACE_CHAR = '▩'; - -let app: App - - - -// 🚀 - - -export function init(a: App) { - app = a - - app.ports.requestTags.subscribe(requestTags) - app.ports.syncTags.subscribe(syncTags) -} - - - -// Ports -// ----- - - -function requestTags(context) { - processContext(context, app).then(newContext => { - app.ports.receiveTags.send(newContext) - }) -} - - -function syncTags(context) { - processContext(context, app).then(newContext => { - app.ports.replaceTags.send(newContext) - }) -} - - - -// Contexts -// -------- - - -export async function processContext(context, app) { - const initialPromise = Promise.resolve([]); - - return context.urlsForTags - .reduce((accumulator, urls, idx) => { - return accumulator.then((col) => { - const filename = context.receivedFilePaths[idx].split("/").reverse()[0]; - - return Promise.all([transformUrl(urls.headUrl, app), transformUrl(urls.getUrl, app)]) - .then(([headUrl, getUrl]) => { - return getTags(headUrl, getUrl, filename, { covers: false }); - }) - .then((r) => { - return col.concat(r); - }) - .catch((e) => { - console.warn(e); - return col.concat(null); - }); - }); - }, initialPromise) - .then((col) => { - context.receivedTags = col; - return context; - }); -} - - - -// Tags - General -// -------------- - - -type Tags = { - disc: number; - nr: number; - album: string | null; - artist: string | null; - title: string; - genre: string | null; - year: number | null; - picture: { data: Uint8Array; format: string } | null; -}; - -export async function getTags( - headUrl: string, - getUrl: string, - filename: string, - { covers }: { covers: boolean }, -) { - const musicMetadata = await import("music-metadata"); - const httpTokenizer = await import("@tokenizer/http"); - const rangeTokenizer = await import("@tokenizer/range"); - - let tokenizer: ITokenizer; - let mmResult; - - try { - const httpClient = new httpTokenizer.HttpClient(headUrl, { resolveUrl: false }); - httpClient.resolvedUrl = getUrl - - tokenizer = await rangeTokenizer.tokenizer(httpClient); - - mmResult = await musicMetadata - .parseFromTokenizer(tokenizer, { skipCovers: !covers }) - .catch((err) => { - console.warn(err); - return null; - }); - } catch (err) { - console.warn(err); - } - - const mmTags = mmResult && pickTagsFromMusicMetadata(filename, mmResult); - if (mmTags) return mmTags; - - const miResult = await (await mediaInfoClient(covers)) - .analyzeData(getSize(headUrl), readChunk(getUrl)) - .catch((err) => { - console.warn(err); - return null; - }); - - const miTags = miResult && pickTagsFromMediaInfo(filename, miResult); - if (miTags) return miTags; - - return fallbackTags(filename); -} - -function fallbackTags(filename: string): Tags { - const filenameWithoutExt = filename.replace(/\.\w+$/, ""); - - return { - disc: 1, - nr: 1, - album: null, - artist: null, - title: filenameWithoutExt, - genre: null, - year: null, - picture: null, - }; -} - -// Tags - Media Info -// ----------------- - -const getSize = (headUrl: string) => async (): Promise => { - const response = await fetch(headUrl, { method: "HEAD" }); - - if (!response.ok) { - throw new Error(`HTTP error status=${response.status}: ${response.statusText}`); - } - - const l = response.headers.get("Content-Length"); - - if (l) { - return parseInt(l, 10); - } else { - throw new Error("HTTP response doesn't have a Content-Length"); - } -}; - -const readChunk = - (getUrl: string) => - async (chunkSize: number, offset: number): Promise => { - if (chunkSize === 0) return new Uint8Array(); - - const from = offset; - const to = offset + chunkSize; - - const start = to < from ? to : from; - const end = to < from ? from : to; - - const response = await fetch(getUrl, { - method: "GET", - headers: { - Range: `bytes=${start}-${end}`, - }, - }); - - if (!response.ok) { - throw new Error(`HTTP error status=${response.status}: ${response.statusText}`); - } - - return new Uint8Array(await response.arrayBuffer()); - }; - -function pickTagsFromMediaInfo(filename: string, result: MediaInfoResult): Tags | null { - const tagsRaw = result?.media?.track?.filter((t) => t["@type"] === "General")[0]; - const tags = tagsRaw === undefined ? undefined : tagsRaw as GeneralTrack; - if (tags === undefined) return null; - - let artist = typeof tags.Performer == "string" ? tags.Performer : null; - let album = typeof tags.Album == "string" ? tags.Album : null; - - let title = - typeof tags.Track == "string" ? tags.Track : typeof tags.Title == "string" ? tags.Title : null; - - if (!artist && !title) return null; - - // TODO: Encoding issues with mediainfo.js - // https://github.com/buzz/mediainfo.js/issues/150 - if (artist?.includes("�")) artist = artist.replace("�", ENCODING_ISSUE_REPLACE_CHAR) - if (album?.includes("�")) album = album.replace("�", ENCODING_ISSUE_REPLACE_CHAR) - if (title?.includes("�")) title = title.replace("�", ENCODING_ISSUE_REPLACE_CHAR) - - if (artist && artist.includes(" / ")) { - artist = artist - .split(" / ") - .filter((a) => a.trim() !== "") - .join(", "); - } - - const year = tags.Recorded_Date ? new Date(Date.parse(tags.Recorded_Date)).getFullYear() : null; - - return { - disc: tags.Part_Position || 1, - nr: tags.Track_Position || 1, - album: album, - artist: artist, - title: title || filename.replace(/\.\w+$/, ""), - genre: tags.Genre || null, - year: year !== null && isNaN(year) ? null : year, - picture: tags.Cover_Data - ? { - data: Uint8arrays.fromString(tags.Cover_Data.split(" / ")[0], "base64pad"), - format: tags.Cover_Mime || "image/jpeg", - } - : null, - }; -} - - -// Tags - Music Metadata -// --------------------- - - -function pickTagsFromMusicMetadata(filename: string, result: IAudioMetadata): Tags | null { - const tags = result && result.common; - if (!tags) return null; - - const artist = tags.artist && tags.artist.length ? tags.artist : null; - const title = tags.title && tags.title.length ? tags.title : null; - - if (!artist && !title) return null; - - return { - disc: tags.disk.no || 1, - nr: tags.track.no || 1, - album: tags.album && tags.album.length ? tags.album : null, - artist: artist, - title: title || filename.replace(/\.\w+$/, ""), - genre: (tags.genre && tags.genre[0]) || null, - year: tags.year || null, - picture: - tags.picture && tags.picture[0] - ? { data: tags.picture[0].data, format: tags.picture[0].format } - : null, - }; -} - - - -// 🛠️ - - -let client - - -async function mediaInfoClient(covers: boolean) { - const MediaInfoFactory = await import("mediainfo.js").then((a) => a.default); - - if (client) return client - - client = await MediaInfoFactory({ - coverData: covers, - locateFile: () => { - return "../../wasm/media-info.wasm"; - }, - }); - - return client -} diff --git a/src/Javascript/Brain/search.ts b/src/Javascript/Brain/search.ts deleted file mode 100644 index b2b978b5a..000000000 --- a/src/Javascript/Brain/search.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { App } from "./elm/types" - - -// 🏔️ - - -let app: App - - - -// 🚀 - - -export function init(a: App) { - app = a - - app.ports.requestSearch.subscribe(requestSearch) - app.ports.updateSearchIndex.subscribe(updateSearchIndex) -} - - -const search = new Worker( - "../../search.js", - { type: "module" } -) - - -search.onmessage = event => { - switch (event.data.action) { - case "PERFORM_SEARCH": - app.ports.receiveSearchResults.send(event.data.data) - break - } -} - - - -// PORTS - - -function requestSearch(searchTerm: string) { - search.postMessage({ - action: "PERFORM_SEARCH", - data: searchTerm - }) -} - - -function updateSearchIndex(tracksJson: string) { - search.postMessage({ - action: "UPDATE_SEARCH_INDEX", - data: tracksJson - }) -} diff --git a/src/Javascript/Brain/task-ports.ts b/src/Javascript/Brain/task-ports.ts deleted file mode 100644 index ea7d6bf9e..000000000 --- a/src/Javascript/Brain/task-ports.ts +++ /dev/null @@ -1,13 +0,0 @@ -// @ts-ignore -import * as TaskPort from "elm-taskport" - -import { fromCache, removeCache, toCache } from "./common" - - -export function register() { - TaskPort.install() - - TaskPort.register("fromCache", fromCache) - TaskPort.register("removeCache", removeCache) - TaskPort.register("toCache", ({ key, value }) => toCache(key, value)) -} diff --git a/src/Javascript/Brain/tracks.ts b/src/Javascript/Brain/tracks.ts deleted file mode 100644 index 530eaa916..000000000 --- a/src/Javascript/Brain/tracks.ts +++ /dev/null @@ -1,81 +0,0 @@ -import type { App } from "./elm/types" -import { db } from "../common" -import { reportError } from "./common" -import { transformUrl } from "../urls" - - -// 🏔️ - - -let app: App - - - -// 🚀 - - -export function init(a: App) { - app = a - - app.ports.downloadTracks.subscribe(downloadTracks) - app.ports.removeTracksFromCache.subscribe(removeTracksFromCache) - app.ports.storeTracksInCache.subscribe(storeTracksInCache) -} - - - -// PORTS - - -function downloadTracks(group) { - self.postMessage({ - action: "DOWNLOAD_TRACKS", - data: group - }) -} - - -function removeTracksFromCache(trackIds) { - trackIds.reduce( - (acc, id) => acc.then(_ => db("tracks").removeItem(id)), - Promise.resolve() - - ).catch( - _ => reportError - (app, { tag: "REMOVE_TRACKS_FROM_CACHE" }) - ("Failed to remove tracks from cache") - - ) -} - - -function storeTracksInCache(list) { - list.reduce( - (acc, item) => { - return acc - .then(_ => transformUrl(item.url, app)) - .then(fetch) - .then(r => r.blob()) - .then(b => db("tracks").setItem(item.trackId, b)) - }, - Promise.resolve() - - ).then( - _ => self.postMessage({ - tag: "STORE_TRACKS_IN_CACHE", - data: list.map(l => l.trackId), - error: null - }) - - ).catch( - err => { - console.error(err) - self.postMessage({ - tag: "STORE_TRACKS_IN_CACHE", - data: list.map(l => l.trackId), - error: err.message || err - }) - } - - ) -} diff --git a/src/Javascript/Brain/ui.ts b/src/Javascript/Brain/ui.ts deleted file mode 100644 index 46c104f44..000000000 --- a/src/Javascript/Brain/ui.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { App } from "./elm/types" -import * as Artwork from "./artwork" - - -export function link(worker: Worker, app: App) { - app.ports.toUI.subscribe(event => { - worker.postMessage(event) - }) - - worker.onmessage = event => { - if (event.data.action) return handleAction(event.data.action, event.data.data) - if (event.data.tag) return app.ports.fromAlien.send(event.data) - } - - - function handleAction(action: string, data: unknown) { - switch (action) { - case "DOWNLOAD_ARTWORK": return Artwork.download(data) - } - } -} diff --git a/src/Javascript/Brain/user.ts b/src/Javascript/Brain/user.ts deleted file mode 100644 index ae6ffaf37..000000000 --- a/src/Javascript/Brain/user.ts +++ /dev/null @@ -1,185 +0,0 @@ -// -// User -// (づ。◕‿‿◕。)づ -// -// Related to the user layer. - - -// @ts-ignore -import * as TaskPort from "elm-taskport" - -import type { App } from "./elm/types" - -import * as crypto from "../crypto" - -import { decryptIfNeeded, encryptIfPossible, SECRET_KEY_LOCATION } from "./common" -import { parseJsonIfNeeded, toCache } from "./common" - - -const ports: Record = {} -const taskPorts: Record = {} - - -// Crypto -// ====== - -taskPorts.fabricateSecretKey = async passphrase => { - const data = await crypto.keyFromPassphrase(passphrase) - return toCache(SECRET_KEY_LOCATION, data) -} - - - -// Dropbox -// ------- - -taskPorts.fromDropbox = ({ fileName, token }) => { - return fetch("https://content.dropboxapi.com/2/files/download", { - method: "POST", - headers: { - "Authorization": "Bearer " + token, - "Dropbox-API-Arg": JSON.stringify({ path: "/" + fileName }) - } - }) - .then(r => r.ok ? r.text() : r.json()) - .then(r => r.error ? null : r) - .then(decryptIfNeeded) - .then(parseJsonIfNeeded) -} - - -taskPorts.toDropbox = async ({ fileName, data, token }) => { - const json = JSON.stringify(data) - const params = { - path: "/" + fileName, - mode: "overwrite", - mute: true - } - - return fetch("https://content.dropboxapi.com/2/files/upload", { - method: "POST", - headers: { - "Authorization": "Bearer " + token, - "Content-Type": "application/octet-stream", - "Dropbox-API-Arg": JSON.stringify(params) - }, - body: await encryptIfPossible(json) - }) -} - - - -// IPFS -// ---- - -const IPFS_ROOT = "/Applications/Diffuse/" - - -taskPorts.fromIpfs = ({ apiOrigin, fileName }) => { - const path = IPFS_ROOT + fileName - - return fetch(apiOrigin + "/api/v0/files/read?arg=" + encodeURIComponent(path), { method: "POST" }) - .then(r => r.ok ? r.text() : r.json()) - .then(r => r.Code === 0 ? null : r) - .then(decryptIfNeeded) - .then(parseJsonIfNeeded) -} - - -taskPorts.toIpfs = ({ apiOrigin, fileName, data }) => { - const json = JSON.stringify(data) - const params = new URLSearchParams({ - arg: IPFS_ROOT + fileName, - create: "true", - offset: "0", - parents: "true", - truncate: "true" - }).toString() - - return encryptIfPossible(json).then(possiblyEncryptedData => { - const formData = new FormData() - - formData.append("data", possiblyEncryptedData) - - return fetch( - apiOrigin + "/api/v0/files/write?" + params, - { method: "POST", body: formData } - ) - }) -} - - - -// Remote Storage -// -------------- - -let rs -let rsClient - - -async function remoteStorage(userAddress: string, token: string) { - if (!rs) { - const { default: RemoteStorage } = await import("remotestoragejs") - - rs = new RemoteStorage({ cache: false }) - rs.access.claim("diffuse", "rw") - - rsClient = rs.scope("/diffuse/") - - return new Promise(resolve => { - rs.on("connected", resolve) - rs.connect(userAddress, token) - }) - - } else { - return Promise.resolve() - - } -} - - -ports.deconstructRemoteStorage = _app => _ => { - rs = null - rsClient = null -} - - -taskPorts.fromRemoteStorage = ({ fileName, userAddress, token }) => { - return remoteStorage(userAddress, token) - .then(_ => rsClient.getFile(fileName)) - .then(r => r.data) - .then(decryptIfNeeded) - .then(parseJsonIfNeeded) -} - - -taskPorts.toRemoteStorage = ({ data, fileName, userAddress, token }) => { - const json = JSON.stringify(data) - - return remoteStorage(userAddress, token) - .then(_ => encryptIfPossible(json)) - .then(data => rsClient.storeFile("application/json", fileName, data)) -} - - - -// EXPORT -// ====== - -function registerPorts(app: App) { - Object.keys(ports).forEach(name => { - const fn = ports[ name ](app) - app.ports[ name ].subscribe(fn) - }) -} - -function registerTaskPorts() { - Object.keys(taskPorts).forEach(name => { - const fn = taskPorts[ name ] - TaskPort.register(name, fn) - }) -} - - -export const TaskPorts = { register: registerTaskPorts } -export const Ports = { register: registerPorts } diff --git a/src/Javascript/UI/application.ts b/src/Javascript/UI/application.ts deleted file mode 100644 index 58acdd26d..000000000 --- a/src/Javascript/UI/application.ts +++ /dev/null @@ -1,106 +0,0 @@ -import "./index.d" -import type { App } from "./elm/types" -import { version } from "../../../package.json" - - -// 🏔️ - - -let app: App -let channel: BroadcastChannel - - - -// 🚀 - - -export const load = ({ isNativeWrapper, reg }: { isNativeWrapper: boolean, reg: ServiceWorkerRegistration }) => Elm.UI.init({ - node: document.getElementById("elm") || undefined, - flags: { - buildTimestamp: BUILD_TIMESTAMP, - darkMode: preferredColorScheme().matches, - initialTime: Date.now(), - isInstallingServiceWorker: !!reg.installing, - isOnline: navigator.onLine, - isTauri: isNativeWrapper, - version, - viewport: { - height: window.innerHeight, - width: window.innerWidth - } - } -}) - - -export function init(a: App, c: BroadcastChannel) { - app = a - channel = c - - app.ports.downloadJsonUsingTauri.subscribe(downloadJsonUsingTauri) - app.ports.openUrlOnNewPage.subscribe(openUrlOnNewPage) - app.ports.reloadApp.subscribe(reloadApp) -} - - - -// 🌗 - - -function preferredColorScheme() { - const m = - window.matchMedia && - window.matchMedia("(prefers-color-scheme: dark)") - - m?.addEventListener("change", e => { - app.ports.preferredColorSchemaChanged.send({ dark: e.matches }) - }) - - return m -} - - - -// PORTS - - -async function downloadJsonUsingTauri( - { filename, json }: { filename: string, json: string } -) { - const { save } = await import("@tauri-apps/plugin-dialog") - const { writeTextFile } = await import("@tauri-apps/plugin-fs") - const { BaseDirectory } = await import("@tauri-apps/api/path") - - const filePath = await save({ defaultPath: filename }) - await writeTextFile(filePath || filename, json, { baseDir: BaseDirectory.Download }) -} - - -function openUrlOnNewPage(url: string) { - if (globalThis.__TAURI__) { - globalThis.__TAURI__.shell.open( - url.includes("://") ? url : `${location.origin}/${url.replace(/^\.\//, "")}` - ) - - } else { - window.open(url, "_blank") - - } -} - - -function reloadApp() { - const timeout = setTimeout(async () => { - const reg = await navigator.serviceWorker.getRegistration() - if (reg?.waiting) reg.waiting.postMessage("skipWaiting") - window.location.reload() - }, 250) - - channel.addEventListener("message", event => { - if (event.data === "PONG") { - clearTimeout(timeout) - alert("⚠️ You can only update the app when you have no more than one instance open.") - } - }) - - channel.postMessage("PING") -} diff --git a/src/Javascript/UI/artwork.ts b/src/Javascript/UI/artwork.ts deleted file mode 100644 index 0c5b35127..000000000 --- a/src/Javascript/UI/artwork.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { debounce } from "throttle-debounce" - -import type { App } from "./elm/types" -import { type CoverPrep, db } from "../common" - - - -// 🏔️ - - -let app: App -let brain: Worker - - - -// 🚀 - - -export function init(a: App, b: Worker) { - app = a - brain = b - - app.ports.loadAlbumCovers.subscribe( - debounce(500, loadAlbumCoversFromDom) - ) - - db().keys().then(cachedCovers) -} - - - -// 🛠️ - - -export function albumCover(coverKey: string): Promise { - return db().getItem(`coverCache.${coverKey}`) -} - - -async function loadAlbumCoversFromDom({ coverView, list }: { coverView: boolean, list: boolean }): Promise { - let nodes: HTMLElement[] = [] - - if (list) nodes = nodes.concat(Array.from( - document.querySelectorAll("#diffuse__track-covers [data-key]") - )) - - if (coverView) nodes = nodes.concat(Array.from( - document.querySelectorAll("#diffuse__track-covers + div [data-key]") - )) - - if (!nodes.length) return; - - const coverPrepList = nodes.reduce((acc: CoverPrep[], node: HTMLElement) => { - const a = { - cacheKey: node.getAttribute("data-key"), - trackFilename: node.getAttribute("data-filename"), - trackPath: node.getAttribute("data-path"), - trackSourceId: node.getAttribute("data-source-id"), - variousArtists: node.getAttribute("data-various-artists") - } - - if (a.cacheKey && a.trackFilename && a.trackPath && a.trackSourceId && a.variousArtists) { - return [...acc, a as CoverPrep] - } else { - return acc - } - }, [] as CoverPrep[]) - - return loadAlbumCovers(coverPrepList) -} - - -export async function loadAlbumCovers(coverPrepList: CoverPrep[]): Promise { - const withoutEarlierAttempts = await coverPrepList.reduce(async ( - acc: Promise, - prep: CoverPrep - ): Promise => { - const arr = await acc - const a = await albumCover(prep.cacheKey) - if (!a) return [...arr, prep] - return arr - }, Promise.resolve([])) - - brain.postMessage({ - action: "DOWNLOAD_ARTWORK", - data: withoutEarlierAttempts - }) -} - - -// Send a dictionary of the cached covers to the app. -async function cachedCovers(keys: string[]) { - const cacheKeys = keys.filter( - k => k.startsWith("coverCache.") - ) - - const cache = await cacheKeys.reduce(async (acc, key) => { - const c = await acc - const blob = await db().getItem(key) - const cacheKey = key.slice(11) - - if (blob && typeof blob !== "string" && blob instanceof Blob) { - c[cacheKey] = URL.createObjectURL(blob) - } - - return c - }, Promise.resolve({})) - - app.ports.insertCoverCache.send(cache) - setTimeout(() => loadAlbumCoversFromDom({ list: true, coverView: true }), 500) -} diff --git a/src/Javascript/UI/audio.ts b/src/Javascript/UI/audio.ts deleted file mode 100644 index 8576176a8..000000000 --- a/src/Javascript/UI/audio.ts +++ /dev/null @@ -1,533 +0,0 @@ -// -// Audio engine -// ♪(´ε` ) - -import type { App } from "./elm/types" - -import Timer from "timer.js" -import { debounce } from "throttle-debounce" -import { CoverPrep, db, mimeType } from "../common" -import { albumCover, loadAlbumCovers } from "./artwork" -import { transformUrl } from "../urls" - - -// 🏔️ - - -const silentMp3File = - "data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV" - - -let app: App -let container: Element | null = null -let scrobbleTimer: Timer | null = null - - - -// 🚀 - - -export function init(a: App) { - app = a - - app.ports.adjustEqualizerSetting.subscribe(adjustEqualizerSetting) - app.ports.pause.subscribe(pause) - app.ports.pauseScrobbleTimer.subscribe(pauseScrobbleTimer) - app.ports.play.subscribe(play) - app.ports.reloadAudioNodeIfNeeded.subscribe(reloadAudioNodeIfNeeded) - app.ports.renderAudioElements.subscribe(renderAudioElements) - app.ports.resetScrobbleTimer.subscribe(resetScrobbleTimer) - app.ports.seek.subscribe(seek) - app.ports.setMediaSessionArtwork.subscribe(setMediaSessionArtwork) - app.ports.setMediaSessionMetadata.subscribe(setMediaSessionMetadata) - app.ports.setMediaSessionPlaybackState.subscribe(setMediaSessionPlaybackState) - app.ports.setMediaSessionPositionState.subscribe(setMediaSessionPositionState) - app.ports.startScrobbleTimer.subscribe(startScrobbleTimer) -} - - - -// 🌳 - - -/** - * Javascript representation of `Queue.EngineItem` in Elm. - */ -type EngineItem = { - isCached: boolean - isPreload: boolean - progress: number | null - sourceId: string - trackId: string - trackTags: TrackTags - trackPath: string - url: string -} - - -/**/ -type TrackTags = { - disc: number - nr: number - - // Main - album: string | null - artist: string | null - title: string - - // Extra - genre: string | null - picture: string | null - year: number | null -} - - - -// Ports -// ----- - - -function adjustEqualizerSetting({ knob, value }: { knob: string, value: number }): void { - switch (knob) { - case "VOLUME": - Array.from( - document.body.querySelectorAll('#audio-elements audio[data-is-preload="false"]'), - ).forEach((audio) => ((audio as HTMLAudioElement).volume = value)) - break - } -} - - -function pause({ trackId }: { trackId: string }) { - withAudioNode(trackId, (audio) => audio.pause()) -} - - -function pauseScrobbleTimer() { - if (scrobbleTimer) scrobbleTimer.pause() -} - - -function play({ trackId, volume }: { trackId: string, volume: number }) { - withAudioNode(trackId, (audio) => { - audio.volume = volume - audio.muted = false - - if (audio.readyState === 0) audio.load() - if (!audio.isConnected) return - - const promise = audio.play() || Promise.resolve() - const didPreload = audio.getAttribute("data-did-preload") === "true" - const isPreload = audio.getAttribute("data-is-preload") === "true" - - if (didPreload && !isPreload) { - audio.removeAttribute("data-did-preload") - app.ports.audioDurationChange.send({ - trackId: audio.id, - duration: audio.duration, - }) - } - - promise.catch((e) => { - if (!audio.isConnected) return /* The node was removed from the DOM, we can ignore this error */ - const err = "Couldn't play audio automatically. Please resume playback manually." - console.error(err, e) - if (app) app.ports.fromAlien.send({ tag: "", data: null, error: err }) - }) - }) -} - - -async function reloadAudioNodeIfNeeded(args: { play: boolean, progress: number | null, trackId: string }) { - withAudioNode(args.trackId, (audio) => { - if (audio.readyState === 0 || audio.error?.code === 2) { - audio.load() - - if (args.progress) { - audio.setAttribute("data-initial-progress", JSON.stringify(args.progress)) - } - - if (args.play) { - play({ trackId: args.trackId, volume: audio.volume }) - } - } - }) -} - - -async function renderAudioElements(args: { - items: Array - play: string | null - volume: number -}) { - await render(args.items) - if (args.play) play({ trackId: args.play, volume: args.volume }) -} - - -function resetScrobbleTimer({ duration, trackId }: { duration: number, trackId: string }) { - const timestamp = Math.round(Date.now() / 1000) - const scrobbleTimeoutDuration = Math.min(240 + 0.5, duration / 1.95) - - if (scrobbleTimer) scrobbleTimer.stop() - - scrobbleTimer = new Timer({ - onend: () => { - scrobbleTimer = undefined - app.ports.scrobble.send({ - duration: Math.round(duration), - timestamp, - trackId, - }) - } - }) - - scrobbleTimer.start(scrobbleTimeoutDuration) -} - - -function seek({ percentage, trackId }: { percentage: number, trackId: string }) { - withAudioNode(trackId, (audio) => { - if (!isNaN(audio.duration)) { - audio.currentTime = audio.duration * percentage - } - }) -} - - -async function setMediaSessionArtwork({ blobUrl, imageType }: { blobUrl: string, imageType: string }) { - const artwork: MediaImage[] = [{ - src: blobUrl, - type: imageType - }] - - navigator.mediaSession.metadata = new MediaMetadata({ - title: navigator.mediaSession.metadata?.title, - artist: navigator.mediaSession.metadata?.artist, - album: navigator.mediaSession.metadata?.album, - artwork: artwork, - }) -} - - -async function setMediaSessionMetadata({ - album, - artist, - title, - - coverPrep, -}: { - album: string | null - artist: string | null - title: string - - coverPrep: CoverPrep | null -}) { - let artwork: MediaImage[] = [] - - if (coverPrep) { - const blob = await albumCover(coverPrep.cacheKey) - - artwork = blob && typeof blob !== "string" - ? [{ - src: URL.createObjectURL(blob), - type: blob.type - }] - : [] - - if (!blob) { - // Download artwork and set it later - loadAlbumCovers([coverPrep]) - } - } - - navigator.mediaSession.metadata = new MediaMetadata({ - title, - artist: artist || undefined, - album: album || undefined, - artwork: artwork, - }) -} - - -function setMediaSessionPlaybackState(state: MediaSessionPlaybackState) { - if (navigator.mediaSession) navigator.mediaSession.playbackState = state -} - - -function setMediaSessionPositionState({ - currentTime, - duration, -}: { - currentTime: number - duration: number -}) { - try { - navigator?.mediaSession?.setPositionState({ - duration: duration, - position: currentTime, - }) - } catch (_err) { - // - } -} - - -function startScrobbleTimer() { - if (scrobbleTimer) scrobbleTimer.start() -} - - - -// Media Keys -// ---------- - - -if ("mediaSession" in navigator) { - navigator.mediaSession.setActionHandler("play", () => { - app.ports.requestPlay.send(null) - }) - - navigator.mediaSession.setActionHandler("pause", () => { - app.ports.requestPause.send(null) - }) - - navigator.mediaSession.setActionHandler("previoustrack", () => { - app.ports.requestPrevious.send(null) - }) - - navigator.mediaSession.setActionHandler("nexttrack", () => { - app.ports.requestNext.send(null) - }) - - navigator.mediaSession.setActionHandler("seekbackward", (event) => { - const seekOffset = event.seekOffset || 10 - withActiveAudioNode( - (audio) => (audio.currentTime = Math.max(audio.currentTime - seekOffset, 0)), - ) - }) - - navigator.mediaSession.setActionHandler("seekforward", (event) => { - const seekOffset = event.seekOffset || 10 - withActiveAudioNode( - (audio) => (audio.currentTime = Math.min(audio.currentTime + seekOffset, audio.duration)), - ) - }) - - navigator.mediaSession.setActionHandler("seekto", (event) => { - withActiveAudioNode((audio) => (audio.currentTime = event.seekTime || audio.currentTime)) - }) -} - - - -// 🖼️ - - -async function render(items: Array) { - if (!container) { - container = document.createElement("div") - container.id = "audio-elements" - container.className = "absolute h-0 invisible left-0 pointer-events-none top-0 w-0" - - document.body.appendChild(container) - } - - const trackIds = items.map((e) => e.trackId) - const existingNodes = {} - - // Manage existing nodes - Array.from(container.querySelectorAll("audio")).map((node: HTMLAudioElement) => { - if (trackIds.includes(node.id)) { - existingNodes[node.id] = node - } else { - node.src = silentMp3File - container?.removeChild(node) - } - }) - - // Adjust existing and add new - await items.reduce(async (acc: Promise, item: EngineItem) => { - await acc - - const existingNode = existingNodes[item.trackId] - - if (existingNode) { - const isPreload = existingNode.getAttribute("data-is-preload") - if (isPreload === "true") existingNode.setAttribute("data-did-preload", "true") - - existingNode.setAttribute( - "data-is-preload", - item.isPreload ? "true" : "false", - ) - } else { - await createElement(item) - } - }, Promise.resolve()) -} - - -export async function createElement(item: EngineItem) { - const url = item.isCached - ? await db("tracks") - .getItem(item.trackId) - .then((blob) => (blob ? URL.createObjectURL(blob as Blob) : item.url)) - : await transformUrl(item.url, app) - - // Mime + SRC - const fileName = item.trackPath.split("/").reverse()[0] - const fileExtMatch = fileName.match(/\.(\w+)$/) - const fileExt = fileExtMatch && fileExtMatch[1] - const mime = fileExt ? mimeType(fileExt) : null - - const source = document.createElement("source") - if (mime) source.setAttribute("type", mime) - source.setAttribute("src", url) - - // Audio node - const audio = new Audio() - audio.setAttribute("id", item.trackId) - audio.setAttribute("crossorigin", "anonymous") - audio.setAttribute("data-initial-progress", JSON.stringify(item.progress)) - audio.setAttribute("data-is-preload", item.isPreload ? "true" : "false") - audio.setAttribute("muted", "true") - audio.setAttribute("preload", "auto") - audio.appendChild(source) - - audio.addEventListener("canplay", canplayEvent) - audio.addEventListener("durationchange", durationchangeEvent) - audio.addEventListener("ended", endedEvent) - audio.addEventListener("error", errorEvent) - audio.addEventListener("pause", pauseEvent) - audio.addEventListener("play", playEvent) - audio.addEventListener("suspend", suspendEvent) - audio.addEventListener("timeupdate", timeupdateEvent) - audio.addEventListener("waiting", debounce(1500, waitingEvent)) - - container?.appendChild(audio) -} - - - -// 🖼 ░░ EVENTS - - -function canplayEvent(event: Event) { - const target = event.target as HTMLAudioElement - - if (target.hasAttribute("data-initial-progress") && target.duration && !isNaN(target.duration)) { - const progress = JSON.parse(target.getAttribute("data-initial-progress") as string) - target.currentTime = target.duration * progress - target.removeAttribute("data-initial-progress") - } - - finishedLoading(event) -} - - -function durationchangeEvent(event: Event) { - const target = event.target as HTMLAudioElement - - if (!isNaN(target.duration)) { - app.ports.audioDurationChange.send({ - trackId: target.id, - duration: target.duration, - }) - } -} - -function endedEvent(event: Event) { - app.ports.audioEnded.send({ - trackId: (event.target as HTMLAudioElement).id, - }) -} - -function errorEvent(event: Event) { - const audio = event.target as HTMLAudioElement - - app.ports.audioError.send({ - trackId: audio.id, - code: audio.error?.code || 0 - }) -} - - -function pauseEvent(event: Event) { - app.ports.audioPlaybackStateChanged.send({ - trackId: (event.target as HTMLAudioElement).id, - isPlaying: false, - }) -} - - -function playEvent(event: Event) { - const audio = event.target as HTMLAudioElement - - app.ports.audioPlaybackStateChanged.send({ - trackId: audio.id, - isPlaying: true, - }) - - // In case audio was preloaded: - if (audio.readyState === 4) finishedLoading(event) -} - - -function suspendEvent(event: Event) { - finishedLoading(event) -} - - -function timeupdateEvent(event: Event) { - const target = event.target as HTMLAudioElement - - app.ports.audioTimeUpdated.send({ - trackId: target.id, - currentTime: target.currentTime, - duration: isNaN(target.duration) ? null : target.duration, - }) -} - - -function waitingEvent(event: Event) { - initiateLoading(event) -} - - - -// 🛠️ - - -function finishedLoading(event: Event) { - app.ports.audioHasLoaded.send({ - trackId: (event.target as HTMLAudioElement).id, - }) -} - - -function initiateLoading(event: Event) { - const audio = event.target as HTMLAudioElement - - if (audio.readyState < 4) - app.ports.audioIsLoading.send({ - trackId: audio.id, - }) -} - - -function withActiveAudioNode(fn: (node: HTMLAudioElement) => void): void { - const nonPreloadNodes: HTMLAudioElement[] = Array.from( - document.body.querySelectorAll(`#audio-elements audio[data-is-preload="false"]`), - ) - const playingNodes = nonPreloadNodes.filter((n) => n.paused === false) - const node = playingNodes.length ? playingNodes[0] : nonPreloadNodes[0] - if (node) fn(node) -} - - -function withAudioNode(trackId: string, fn: (node: HTMLAudioElement) => void): void { - const node = document.body.querySelector( - `#audio-elements audio[id="${trackId}"][data-is-preload="false"]`, - ) - if (node) fn(node as HTMLAudioElement) -} diff --git a/src/Javascript/UI/backdrop.ts b/src/Javascript/UI/backdrop.ts deleted file mode 100644 index ee5daff70..000000000 --- a/src/Javascript/UI/backdrop.ts +++ /dev/null @@ -1,46 +0,0 @@ -// 🚀 - - -export function init(app) { - app.ports.pickAverageBackgroundColor.subscribe((src: string) => { - const avgColor = pickAverageBackgroundColor(src) - if (avgColor) app.ports.setAverageBackgroundColor.send(avgColor) - }) -} - - - -// 🛠️ - - -function averageColorOfImage(img: HTMLImageElement): { r: number, g: number, b: number } | null { - const canvas = document.createElement("canvas") - const ctx = canvas.getContext("2d") - canvas.width = img.naturalWidth - canvas.height = img.naturalHeight - - if (!ctx) return null - - ctx.drawImage(img, 0, 0) - - const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height) - const color = { r: 0, g: 0, b: 0 } - - for (let i = 0, l = imageData.data.length; i < l; i += 4) { - color.r += imageData.data[i] - color.g += imageData.data[i + 1] - color.b += imageData.data[i + 2] - } - - color.r = Math.floor(color.r / (imageData.data.length / 4)) - color.g = Math.floor(color.g / (imageData.data.length / 4)) - color.b = Math.floor(color.b / (imageData.data.length / 4)) - - return color -} - - -function pickAverageBackgroundColor(src: string): { r: number, g: number, b: number } | null { - const img = document.querySelector(`img[src$="${src}"]`) - return img ? averageColorOfImage(img as HTMLImageElement) : null -} diff --git a/src/Javascript/UI/brain.ts b/src/Javascript/UI/brain.ts deleted file mode 100644 index bfb6efa2e..000000000 --- a/src/Javascript/UI/brain.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { App } from "./elm/types" -import * as Tracks from "./tracks" - - -export async function load(): Promise { - const brain = new Worker( - "./js/brain/index.js#appHref=" + encodeURIComponent(window.location.href), - { type: "module" } - ) - - await new Promise((resolve, reject) => { - brain.onmessage = event => { - if (event.data.action === "READY") resolve(null) - } - - brain.addEventListener("error", () => { - reject("Failed to load web worker.
    If you're using Firefox, you might need to upgrade your browser (version 113 and up) and set `dom.workers.modules.enabled` to `true` in `about:config`") - }) - }) - - // Fin - return brain -} - - -export function link({ app, brain }: { app: App, brain: Worker }) { - function handleAction(action, data, _ports) { - switch (action) { - case "DOWNLOAD_TRACKS": return Tracks.download(data) - } - } - - brain.onmessage = event => { - if (event.data.action) return handleAction(event.data.action, event.data.data, event.ports) - if (event.data.tag) app.ports.fromAlien.send(event.data) - } - - app.ports.toBrain.subscribe(a => brain.postMessage(a)) -} diff --git a/src/Javascript/UI/broadcast.ts b/src/Javascript/UI/broadcast.ts deleted file mode 100644 index 5e4be2118..000000000 --- a/src/Javascript/UI/broadcast.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function channel() { - const bc = new BroadcastChannel(`diffuse-${location.hostname}`) - - bc.addEventListener("message", event => { - switch (event.data) { - case "PING": return bc.postMessage("PONG") - } - }) - - return bc -} diff --git a/src/Javascript/UI/elm/types.ts b/src/Javascript/UI/elm/types.ts deleted file mode 100644 index d4ab9a503..000000000 --- a/src/Javascript/UI/elm/types.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type App = any // TODO: ElmApp - - -export type ElmPorts = { - // ← Elm - openUrlOnNewPage: PortFromElm - - // → Elm - fromAlien: PortToElm - indicateTouchDevice: PortToElm -} diff --git a/src/Javascript/UI/errors.ts b/src/Javascript/UI/errors.ts deleted file mode 100644 index b15472cd4..000000000 --- a/src/Javascript/UI/errors.ts +++ /dev/null @@ -1,20 +0,0 @@ -export function failure(text: string): void { - const note = document.createElement("div") - - note.className = "flex flex-col font-body items-center h-screen italic justify-center leading-relaxed px-4 text-center text-base text-white" - note.innerHTML = ` -
    - -

    - ${text} -

    - ` - - document.body.appendChild(note) - - // Remove loader - const elm = document.querySelector("#elm") - elm?.parentNode?.removeChild(elm) -} diff --git a/src/Javascript/UI/index.d.ts b/src/Javascript/UI/index.d.ts deleted file mode 100644 index 6e505a797..000000000 --- a/src/Javascript/UI/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { ElmPorts } from "./elm/types" - -export { } - -declare global { - const BUILD_TIMESTAMP: string - - const Elm: { UI: ElmMain } - const tocca: any -} diff --git a/src/Javascript/UI/index.ts b/src/Javascript/UI/index.ts deleted file mode 100644 index a725f3d09..000000000 --- a/src/Javascript/UI/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -// -// | (• ◡•)| (❍ᴥ❍ʋ) -// -// The bit where we launch the Elm apps & workers, -// and connect the other bits to it. - -import "./pointer-events" - -import * as Application from "./application" -import * as Artwork from "./artwork" -import * as Audio from "./audio" -import * as Backdrop from "./backdrop" -import * as Brain from "./brain" -import * as Broadcast from "./broadcast" -import * as Errors from "./errors" -import * as Misc from "./misc" -import * as ServiceWorker from "./service-worker" -import * as Tracks from "./tracks" - - - -// 🌸 - - -const isNativeWrapper = !!globalThis.__TAURI__ - - - -// 🚀 - - -ServiceWorker - .load({ isNativeWrapper }) - .then(async (reg: ServiceWorkerRegistration) => { - const brain = await Brain.load() - const app = Application.load({ isNativeWrapper, reg }) - const channel = Broadcast.channel() - - // 🧑‍🏭 - ServiceWorker.link({ - app, isNativeWrapper, reg - }) - - // 🧠 - Brain.link({ - app, brain - }) - - // ⚡ - Application.init(app, channel) - Artwork.init(app, brain) - Audio.init(app) - Backdrop.init(app) - Misc.init(app) - Tracks.init(app) - }) - .catch( - Errors.failure - ) diff --git a/src/Javascript/UI/misc.ts b/src/Javascript/UI/misc.ts deleted file mode 100644 index 6da919e64..000000000 --- a/src/Javascript/UI/misc.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { App } from "./elm/types" - - -// 🏔️ - - -let app: App - - - -// 🚀 - - -export function init(a: App) { - app = a - - app.ports.copyToClipboard.subscribe(copyToClipboard) -} - - - -// Clipboard -// --------- - - -async function copyToClipboard(text: string) { - navigator.clipboard.writeText(text) -} - - - -// Focus -// ----- - -window.addEventListener("blur", event => { - if (app && event.target === window) app.ports.lostWindowFocus.send(null) -}) - - - -// Internet Connection -// ------------------- - -window.addEventListener("online", onlineStatusChanged) -window.addEventListener("offline", onlineStatusChanged) - - -function onlineStatusChanged() { - if (app) app.ports.setIsOnline.send(navigator.onLine) -} - - - -// Touch Device -// ------------ - -window.addEventListener("touchstart", function onFirstTouch() { - if (!app) return - app.ports.indicateTouchDevice.send() - window.removeEventListener("touchstart", onFirstTouch, false) -}, false) diff --git a/src/Javascript/UI/pointer-events.ts b/src/Javascript/UI/pointer-events.ts deleted file mode 100644 index 0a1522117..000000000 --- a/src/Javascript/UI/pointer-events.ts +++ /dev/null @@ -1,116 +0,0 @@ -import "./index.d" -import "tocca" - -// Pointer Events -// -------------- -// Thanks to https://github.com/mpizenberg/elm-pep/ - -let enteredElement - - -tocca({ - dbltapThreshold: 400, - tapThreshold: 250 -}) - - -function mousePointerEvent(eventType, mouseEvent) { - const pointerEvent: any = new MouseEvent(eventType, mouseEvent) - pointerEvent.pointerId = 1 - pointerEvent.isPrimary = true - pointerEvent.pointerType = "mouse" - pointerEvent.width = 1 - pointerEvent.height = 1 - pointerEvent.tiltX = 0 - pointerEvent.tiltY = 0 - - "buttons" in mouseEvent && mouseEvent.buttons !== 0 - ? (pointerEvent.pressure = 0.5) - : (pointerEvent.pressure = 0) - - return pointerEvent -} - - -function touchPointerEvent(eventType, touchEvent, touch) { - const pointerEvent: any = new CustomEvent(eventType, { - bubbles: true, - cancelable: true - }) - - pointerEvent.ctrlKey = touchEvent.ctrlKey - pointerEvent.shiftKey = touchEvent.shiftKey - pointerEvent.altKey = touchEvent.altKey - pointerEvent.metaKey = touchEvent.metaKey - - pointerEvent.clientX = touch.clientX - pointerEvent.clientY = touch.clientY - pointerEvent.screenX = touch.screenX - pointerEvent.screenY = touch.screenY - pointerEvent.pageX = touch.pageX - pointerEvent.pageY = touch.pageY - - const rect = touch.target.getBoundingClientRect() - pointerEvent.offsetX = touch.clientX - rect.left - pointerEvent.offsetY = touch.clientY - rect.top - pointerEvent.pointerId = 1 + touch.identifier - - pointerEvent.button = 0 - pointerEvent.buttons = 1 - pointerEvent.movementX = 0 - pointerEvent.movementY = 0 - pointerEvent.region = null - pointerEvent.relatedTarget = null - pointerEvent.x = pointerEvent.clientX - pointerEvent.y = pointerEvent.clientY - - pointerEvent.pointerType = "touch" - pointerEvent.width = 1 - pointerEvent.height = 1 - pointerEvent.tiltX = 0 - pointerEvent.tiltY = 0 - pointerEvent.pressure = 1 - pointerEvent.isPrimary = true - - return pointerEvent -} - - -// Simulate `pointerenter` and `pointerleave` event for non-touch devices -if (!self.PointerEvent) { - document.addEventListener("mouseover", event => { - const section = document.body.querySelector("section") - const isDragging = section && section.classList.contains("dragging-something") - const node = isDragging && document.elementFromPoint(event.clientX, event.clientY) - - if (node && node != enteredElement) { - enteredElement && enteredElement.dispatchEvent(mousePointerEvent("pointerleave", event)) - node.dispatchEvent(mousePointerEvent("pointerenter", event)) - enteredElement = node - } - }) -} - - -// Simulate `pointerenter` and `pointerleave` event for touch devices -document.body.addEventListener("touchmove", event => { - const section = document.body.querySelector("section") - const isDragging = section && section.classList.contains("dragging-something") - const touch = event.touches[0] - - let node - - if (isDragging && touch) { - node = document.elementFromPoint(touch.clientX, touch.clientY) - } - - if (node && node != enteredElement) { - enteredElement && enteredElement.dispatchEvent(touchPointerEvent("pointerleave", event, touch)) - node.dispatchEvent(touchPointerEvent("pointerenter", event, touch)) - enteredElement = node - } - - if (isDragging) { - event.stopPropagation() - } -}) diff --git a/src/Javascript/UI/service-worker.ts b/src/Javascript/UI/service-worker.ts deleted file mode 100644 index 77f3ce0a7..000000000 --- a/src/Javascript/UI/service-worker.ts +++ /dev/null @@ -1,112 +0,0 @@ -import type { App } from "./elm/types" - - -/** - * Load: - * - * 1. Redirect to HTTPS if using the `diffuse.sh` domain (subdomains included). - * 2. Fail if not a secure context. - * 3. Set up service worker, ensure it's ready and then continue initialisation. - */ -export async function load({ isNativeWrapper } : { isNativeWrapper: boolean }): Promise { - return new Promise((resolve, reject) => { - if (location.hostname.endsWith("diffuse.sh") && location.protocol === "http:") { - location.href = location.href.replace("http://", "https://") - reject("Just a moment, redirecting to HTTPS.") - - } else if (!self.isSecureContext) { - reject(` - This app only works on a secure context, HTTPS & localhost, and modern browsers. - `) - - } else if ("serviceWorker" in navigator) { - // Service worker - window.addEventListener("load", () => { - navigator.serviceWorker - .getRegistrations() - .then(async registrations => { - const serverIsOnline = navigator.onLine && await fetch(`${location.origin}?ping=1`) - .then(r => r.text()) - .then(a => a === "false" ? false : true) - - if (isNativeWrapper) await Promise.all( - registrations.map(r => r.unregister()) - ) - - if (serverIsOnline) return navigator.serviceWorker.register( - "service-worker.js", - // { type: "module" } - ) - - if (registrations[0]) return registrations - - throw new Error("Web server is offline") - }) - .then(() => navigator.serviceWorker.ready) - .then(resolve) - .catch(err => { - const isFirefox = navigator.userAgent.toLowerCase().includes("firefox") - - console.error(err) - return reject( - location.protocol === "https:" || location.hostname === "localhost" - ? "Failed to start the service worker." + (isFirefox ? " Make sure the setting Delete cookies and site data when Firefox is closed is off, or Diffuse's domain is added as an exception." : "") - : "Failed to start the service worker, try using HTTPS." - ) - }) - }) - - } - }) -} - - -/** - * Link. - */ -export function link( - { app, isNativeWrapper, reg } : { app: App, isNativeWrapper: boolean, reg: ServiceWorkerRegistration } -) { - if (reg.installing) console.log("🧑‍✈️ Service worker is installing") - const initialInstall = reg.installing - - initialInstall?.addEventListener("statechange", function() { - if (this.state === "activated") { - console.log("🧑‍✈️ Service worker is activated") - app.ports.installedNewServiceWorker.send(null) - } - }) - - if (reg.waiting) { - console.log("🧑‍✈️ A new version of Diffuse is available") - app.ports.installingNewServiceWorker.send(null) - app.ports.installedNewServiceWorker.send(null) - } - - if (initialInstall?.state === "activated") { - console.log("🧑‍✈️ Service worker is activated") - app.ports.installedNewServiceWorker.send(null) - } - - reg.addEventListener("updatefound", () => { - const newWorker = reg.installing - if (!newWorker) return - - // No worker was installed yet, so we'll only want to track the state changes - if (newWorker !== initialInstall) { - console.log("🧑‍✈️ A new version of Diffuse is available") - app.ports.installingNewServiceWorker.send(null) - } - - newWorker.addEventListener("statechange", (e: any) => { - console.log("🧑‍✈️ Service worker is", e.target.state) - if (e.target.state === "installed") app.ports.installedNewServiceWorker.send(null) - }) - }) - - // Check for service worker updates and every hour after that - if (!isNativeWrapper && navigator.onLine) { - reg.update() - setInterval(() => reg.update(), 1 * 1000 * 60 * 60) - } -} diff --git a/src/Javascript/UI/tracks.ts b/src/Javascript/UI/tracks.ts deleted file mode 100644 index 644f630e4..000000000 --- a/src/Javascript/UI/tracks.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { App } from "./elm/types" -import { fileExtension } from "../common" -import { transformUrl } from "../urls" - - -// 🏔️ - - -let app: App - - - -// 🚀 - - -export function init(a: App) { - app = a -} - - - -// 🛠️ - - -export async function download(group) { - const { saveAs } = await import("file-saver").then(a => a.default) - const JSZip = await import("jszip").then(a => a.default) - - const zip = new JSZip() - const folder = zip.folder("Diffuse - " + group.name) - if (!folder) throw new Error("Failed to create ZIP file") - - return group.tracks - .reduce((acc, track) => { - return acc - .then(() => transformUrl(track.url, app)) - .then(fetch) - .then((r: Response) => { - const mimeType = r.headers.get("content-type") - const fileExt = (mimeType ? fileExtension(mimeType) : null) || track.path.match(/\.(\w+)$/)[1] || "unknown-ext" - - return r.blob().then((b: Blob) => folder.file(track.filename + "." + fileExt, b)) - }) - }, Promise.resolve()) - .then(() => zip.generateAsync({ type: "blob" })) - .then((zipFile: Blob) => { - saveAs(zipFile, "Diffuse - " + group.name + ".zip") - app.ports.downloadTracksFinished.send(null) - }) -} diff --git a/src/Javascript/Workers/search.ts b/src/Javascript/Workers/search.ts deleted file mode 100644 index cdbc70850..000000000 --- a/src/Javascript/Workers/search.ts +++ /dev/null @@ -1,157 +0,0 @@ -// -// Search worker -// (◡ ‿ ◡ ✿) -// -// This worker is responsible for searching through a `Track` collection. - - -import lunr from "lunr" - - -const FIELDS = ["album", "artist", "title"] - - -lunr.Pipeline.registerFunction( - removeParenthesesFromToken, - "Remove parentheses from token" -) - - -let index: lunr.Index - - - -// Incoming messages -// ----------------- - -self.onmessage = (event: MessageEvent) => { - switch (event.data.action) { - case "PERFORM_SEARCH": - performSearch(event.data.data) - break - - case "UPDATE_SEARCH_INDEX": - updateSearchIndex(event.data.data) - break - } -} - - - -// Mapper -// ------ - -const mapTrack = track => ({ - id: track.id, - album: track.tags.album, - artist: track.tags.artist, - title: track.tags.title, -}) - - - -// Actions -// ------- - -function performSearch(rawSearchTerm: string) { - let results: string[] = - [] - - const searchTerm = rawSearchTerm - .replace(/-\s+/g, "-") - .replace(/\+\s+/g, "+") - .split(/ +/) - .reduce( - ([ acc, previousOperator, previousPrefix ]: [ string[], string, string ], chunk: string): [ string[], string, string ] => { - const operator = (a => a && a[0])( chunk.match(/^(\+|-)/) ) - - let chunkWithoutOperator = chunk.replace(/^(\+|-)/, "").replace(/\*$/, "").trim() - let prefix = (a => a && a[1])( chunkWithoutOperator.match(/^([^:]+:)/) ) - let chunkWithoutPrefix = chunkWithoutOperator.replace(/^([^:]+:)/, "") - - if (prefix && !FIELDS.includes(prefix.slice(0, -1))) { - prefix = null - chunkWithoutPrefix = chunkWithoutOperator.replace(":", "\\:") - chunkWithoutOperator = chunkWithoutPrefix - - } else if (prefix && chunkWithoutPrefix.includes(":")) { - chunkWithoutPrefix = chunkWithoutPrefix.replace(":", "\\:") - chunkWithoutOperator = prefix + chunkWithoutPrefix - - } - - const op = operator || previousOperator - const pr = prefix ? "" : (operator ? "" : previousPrefix) - - return chunkWithoutPrefix.trim().length > 0 - ? [ [ ...acc - , op + pr + chunkWithoutOperator - ] - , op - , prefix || pr - ] - : [ acc, previousOperator, previousPrefix ] - }, - [ [], "+", "" ] - )[0] - .join(" ") - - const searchTermWithAsteriks = - searchTerm - .split(" ") - .map(s => { - if (s.startsWith("-")) return s - return s + "*" - }) - .join(" ") - - if (index) { - results = index - .search(searchTerm) - .map(s => s.ref) - .concat( - index - .search(searchTermWithAsteriks) - .map(s => s.ref) - ) - } - - self.postMessage({ - action: "PERFORM_SEARCH", - data: results - }) -} - - -function updateSearchIndex(input: string | object[]) { - const tracks = (typeof input == "string") - ? JSON.parse(input) - : input - - index = customLunr((builder: lunr.Builder) => { - FIELDS.forEach( - field => builder.field(field) - ) - - ;(tracks || []) - .map(mapTrack) - .forEach(t => builder.add(t)) - }) -} - - - -function customLunr(fn: (b: lunr.Builder) => void) { - const builder = new lunr.Builder - - builder.pipeline.add(removeParenthesesFromToken, lunr.stemmer) - builder.searchPipeline.add(removeParenthesesFromToken, lunr.stemmer) - - fn(builder) - return builder.build() -} - - -function removeParenthesesFromToken(token: lunr.Token): lunr.Token { - return token.update(s => s.replace(/\(|\)/, "")) -} diff --git a/src/Javascript/Workers/service.ts b/src/Javascript/Workers/service.ts deleted file mode 100644 index b467b062d..000000000 --- a/src/Javascript/Workers/service.ts +++ /dev/null @@ -1,182 +0,0 @@ -// -// Service worker -// (◡ ‿ ◡ ✿) -// -// This worker is responsible for caching the application -// so it can be used offline and acts as a proxy that -// allows for example, authentication through headers -// when using audio elements. -// -/// - - -const KEY = - /* eslint-disable no-undef *//* @ts-ignore */ - `diffuse-${BUILD_TIMESTAMP}` - - -const EXCLUDE = - [ "_headers" - , "_redirects" - , "CORS" - ] - - -const GOOGLE_DRIVE = "https://www.googleapis.com/drive/" - - - -// 🙈 - - -const isNativeWrapper = location.host === "localhost:44999" || location.host === "127.0.0.1:44999" -let googleDriveToken - - - -// 📣 - - -self.addEventListener("activate", () => { - // Remove all caches except the one with the currently used `KEY` - caches.keys().then(keys => { - keys.forEach(k => { - if (k !== KEY) caches.delete(k) - }) - }) -}) - - -self.addEventListener("install", event => { - if (isNativeWrapper) { - return globalThis.skipWaiting() - } - - const href = self.location.href.replace("service-worker.js", "") - const promise = fetch("tree.json") - .then(response => response.json()) - .then(tree => { - const filteredTree = tree - .filter(t => !EXCLUDE.find(u => u === t)) - .filter(u => u.endsWith(".jpg")) - const whatToCache = [ href, `${href.replace(/\/+$/, "")}/about/` ].concat(filteredTree) - return caches.open(KEY).then(c => Promise.all(whatToCache.map(x => c.add(x)))) - }) - - event.waitUntil(promise) -}) - - -self.addEventListener("fetch", fetchEvent => { - const event = fetchEvent as FetchEvent - - const isInternal = - !!event.request.url.match(new RegExp("^" + self.location.origin)) - - // Ping - if (event.request.url.includes("?ping=1")) { - event.respondWith( - (async () => { - const serverIsOnline = await network(event).then(_ => true).catch(_ => false) - return new Response(JSON.stringify(serverIsOnline), { - headers: { "Content-Type": "application/json" } - }) - })() - ) - - // When doing a request with basic authentication in the url, put it in the headers instead - } else if (event.request.url.includes("basic_auth=")) { - const url = new URL(event.request.url) - const token = url.searchParams.get("basic_auth") - - event.respondWith(newRequestWithAuth( - event.request, - url.toString(), - "Basic " + token - )) - - // When doing a request with access token in the url, put it in the headers instead - } else if (event.request.url.includes("bearer_token=")) { - const url = new URL(event.request.url) - const token = url.searchParams.get("bearer_token") - - if (url.href.startsWith(GOOGLE_DRIVE)) googleDriveToken = token - - url.searchParams.delete("bearer_token") - url.search = "?" + url.searchParams.toString() - - event.respondWith(newRequestWithAuth( - event.request, - url.toString(), - "Bearer " + token - )) - - // Use cache if internal request and not using native app - } else if (isInternal) { - event.respondWith( - isNativeWrapper - ? network(event) - : cacheThenNetwork(event) - ) - - } else if (event.request.url && event.request.url.startsWith(GOOGLE_DRIVE) && event.request.url.includes("alt=media")) { - // For some reason Safari starts using the non bearer-token URL while playing audio - event.respondWith( - googleDriveToken - ? newRequestWithAuth( - event.request, - event.request.url.toString(), - "Bearer " + googleDriveToken - ) - : network(event) - ) - - } -}) - - -function cacheThenNetwork(event) { - const url = new URL(event.request.url) - url.search = "" - - return caches - .open(KEY) - .then(cache => cache.match(url)) - .then(match => match || fetch(url)) -} - - -function network(event) { - return fetch(event.request.url) -} - - -addEventListener("message", event => { - if (event.data === "skipWaiting") { - globalThis.skipWaiting() - } -}) - - - -// ⚗️ - - -function newRequestWithAuth(request: Request, newUrl: string, authToken: string): Promise { - const newHeaders = new Headers(request.headers) - newHeaders.append("authorization", authToken) - - const newRequest = new Request(request, { headers: newHeaders }) - - const makeFetch = () => fetch(newRequest).then(async r => { - if (r.ok) { - return r - } else { - return r.text().then(text => { - throw new Error(text) - }) - } - }) - - return makeFetch() -} diff --git a/src/Javascript/common.ts b/src/Javascript/common.ts deleted file mode 100644 index e4081a427..000000000 --- a/src/Javascript/common.ts +++ /dev/null @@ -1,67 +0,0 @@ -// -// Common stuff -// ʕ•ᴥ•ʔ - - -import * as localforage from "localforage" - - -// 🌳 - - -export type CoverPrep = { - cacheKey: string - trackFilename: string - trackPath: string - trackSourceId: string - variousArtists: string -} - - - -// FUNCTIONS - - -export function db(storeName: string = "main"): LocalForage { - return localforage.createInstance({ - name: "diffuse", - storeName - }) -} - - -export function fileExtension(mimeType: string): string | undefined { - const audioId = mimeType.toLowerCase().split("/")[ 1 ] - - switch (audioId) { - case "mp3": return "mp3"; - case "mpeg": return "mp3"; - - case "mp4a-latm": return "m4a"; - case "mp4": return "m4a"; - case "x-m4a": return "m4a"; - - case "flac": return "flac"; - case "x-flac": return "flac"; - case "ogg": return "ogg"; - case "opus": return "opus"; - - case "wav": return "wav"; - case "wave": return "wav"; - - case "webm": return "webm"; - } -} - - -export function mimeType(fileExt: string): string | undefined { - switch (fileExt) { - case "mp3": return "audio/mpeg"; - case "mp4": return "audio/mp4"; - case "m4a": return "audio/mp4"; - case "flac": return "audio/flac"; - case "ogg": return "audio/ogg"; - case "wav": return "audio/wave"; - case "webm": return "audio/webm"; - } -} diff --git a/src/Javascript/crypto.ts b/src/Javascript/crypto.ts deleted file mode 100644 index a00e63914..000000000 --- a/src/Javascript/crypto.ts +++ /dev/null @@ -1,83 +0,0 @@ -// -// Cryptography -// \ (•◡•) / -// -// Data encryption & decryption. - - -import * as Uint8arrays from "uint8arrays" - - -const extractable = false - - -export async function keyFromPassphrase(passphrase: string): Promise { - const baseKey = await crypto.subtle.importKey( - "raw", - Uint8arrays.fromString(passphrase, "utf8"), - { - name: "PBKDF2" - }, - false, - [ "deriveKey" ] - ) - - return await crypto.subtle.deriveKey( - { - name: "PBKDF2", - salt: Uint8arrays.fromString("diffuse", "utf8"), - iterations: 10000, - hash: "SHA-512" - }, - baseKey, - { - name: "AES-GCM", - length: 256 - }, - extractable, - [ "encrypt", "decrypt" ] - ) -} - - -export async function encrypt(key: CryptoKey, string: string): Promise { - const iv = crypto.getRandomValues(new Uint8Array(12)) - - const buf = await crypto.subtle.encrypt( - { - name: "AES-GCM", - iv: iv, - tagLength: 128 - }, - key, - Uint8arrays.fromString(string, "utf8") - ) - - const iv_b64 = Uint8arrays.toString(iv, "base64pad") - const buf_b64 = Uint8arrays.toString(new Uint8Array(buf), "base64pad") - return iv_b64 + buf_b64 -} - - -export async function decrypt(key: CryptoKey, string: string): Promise { - const iv_b64 = string.substring(0, 16) - const buf_b64 = string.substring(16) - - const iv = Uint8arrays.fromString(iv_b64, "base64pad") - const buf = Uint8arrays.fromString(buf_b64, "base64pad") - - const decrypted = await crypto.subtle.decrypt( - { - name: "AES-GCM", - iv: iv, - tagLength: 128 - }, - key, - buf - ) - - return Uint8arrays.toString( - new Uint8Array(decrypted), - "utf8" - ) -} diff --git a/src/Javascript/urls.ts b/src/Javascript/urls.ts deleted file mode 100644 index 5f9fd85f6..000000000 --- a/src/Javascript/urls.ts +++ /dev/null @@ -1,118 +0,0 @@ -// -// URLs -// \ (•◡•) / -// -// Some URLs are special you know. - - -const EXPIRED_ACCESS_TOKENS = { - GOOGLE: {} -} - - -export async function transformUrl(url, app) { - const parts = url.split("://") - - switch (parts[ 0 ]) { - - case "dropbox": { - const dropboxBits = parts[ 1 ].split("@") - const accessToken = dropboxBits[ 0 ] - const filePath = dropboxBits[ 1 ] - - return fetch( - "https://api.dropboxapi.com/2/files/get_temporary_link", - { - method: "POST" - , body: JSON.stringify({ path: filePath }) - , headers: new Headers({ - "Authorization": "Bearer " + accessToken, - "Content-Type": "application/json" - }) - } - ).then( - response => response.json() - ).then( - response => response.link - ) - } - - case "google": { - let finalAccessToken - - const googleBits = parts[ 1 ].split("@") - const [ accessToken, expiresAtString, refreshToken, clientId, clientSecret, srcId ] = googleBits[ 0 ].split(":") - const fileId = googleBits[ 1 ] - - // Unix timestamp in milliseconds - const inXminutes = Date.now() + 5 * 60 * 1000 // 5 minutes - const expiresAt = parseInt(expiresAtString, 10) - const isAlmostExpired = expiresAt <= inXminutes - - if (EXPIRED_ACCESS_TOKENS.GOOGLE[ accessToken ]) { - const replacement = EXPIRED_ACCESS_TOKENS.GOOGLE[ accessToken ] - - if (replacement.newExpiresAt <= inXminutes) { - finalAccessToken = await refreshGoogleAccessToken({ - app, clientId, clientSecret, refreshToken, srcId, oldToken: accessToken - }) - } else { - finalAccessToken = replacement.newToken - } - - } else if (isAlmostExpired) { - finalAccessToken = await refreshGoogleAccessToken({ - app, clientId, clientSecret, refreshToken, srcId, oldToken: accessToken - }) - - } else { - finalAccessToken = accessToken - - } - - return Promise.resolve( - `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media&bearer_token=${encodeURIComponent(finalAccessToken)}` - ) - } - - default: - return Promise.resolve(url) - - } -} - - - -// GOOGLE - - -async function refreshGoogleAccessToken({ app, clientId, clientSecret, oldToken, refreshToken, srcId }) { - console.log("🔐 Refreshing Google Drive access token") - - const url = new URL("https://www.googleapis.com/oauth2/v4/token") - - url.searchParams.set("client_id", clientId) - url.searchParams.set("client_secret", clientSecret) - url.searchParams.set("refresh_token", refreshToken) - url.searchParams.set("grant_type", "refresh_token") - - const serverResponse = await fetch(url, { method: "POST" }).then(r => r.json()) - const newToken = serverResponse.access_token - const newExpiresAt = Date.now() + (serverResponse.expires_in * 1000) - - EXPIRED_ACCESS_TOKENS.GOOGLE[ oldToken ] = { - oldToken, - newToken, - newExpiresAt, - refreshToken - } - - app.ports.refreshedAccessToken.send({ - service: "Google", - sourceId: srcId, - accessToken: newToken, - expiresAt: newExpiresAt - }) - - return serverResponse.access_token -} diff --git a/src/Library/Alfred.elm b/src/Library/Alfred.elm deleted file mode 100644 index 625e93839..000000000 --- a/src/Library/Alfred.elm +++ /dev/null @@ -1,110 +0,0 @@ -module Alfred exposing (..) - -import List.Extra as List -import Material.Icons.Types exposing (Coloring) -import Svg exposing (Svg) - - - --- 🌳 - - -type alias Alfred msg = - { action : Action msg - , focus : Int - , index : List (Group msg) - , indexFlattened : List (Item msg) - , message : String - , operation : Operation - , results : List (Group msg) - , searchTerm : Maybe String - } - - -type alias Action msg = - { result : Maybe (Item msg), searchTerm : Maybe String } -> List msg - - -type alias Group msg = - { name : Maybe String, items : List (Item msg) } - - -type alias Item msg = - { icon : Maybe (Coloring -> Svg msg) - , title : String - , value : ItemValue msg - } - - -type ItemValue msg - = Command msg - | StringValue String - - -type Operation - = Query - | QueryOrMutation - | Mutation - - - --- 🛳 - - -create : - { action : Action msg - , index : List (Group msg) - , message : String - , operation : Operation - } - -> Alfred msg -create { action, index, message, operation } = - { action = action - , focus = 0 - , index = index - , indexFlattened = List.concatMap .items index - , message = message - , operation = operation - , results = index - , searchTerm = Nothing - } - - - --- 🛠 - - -command : ItemValue msg -> Maybe msg -command val = - case val of - Command cmd -> - Just cmd - - StringValue _ -> - Nothing - - -stringValue : ItemValue msg -> Maybe String -stringValue val = - case val of - Command _ -> - Nothing - - StringValue string -> - Just string - - - --- 🛠 - - -getAt : Int -> Alfred msg -> Maybe (Item msg) -getAt index alfred = - alfred.results - |> List.concatMap .items - |> List.getAt index - - -length : Alfred msg -> Int -length { indexFlattened } = - List.length indexFlattened diff --git a/src/Library/Alien.elm b/src/Library/Alien.elm deleted file mode 100644 index ab08b6bfb..000000000 --- a/src/Library/Alien.elm +++ /dev/null @@ -1,200 +0,0 @@ -module Alien exposing (Event, Tag(..), broadcast, hostDecoder, report, tagDecoder, tagFromJson, tagFromString, tagToJson, tagToString, trigger) - -{-| 👽 Aliens. - -This involves the incoming and outgoing data. -Including the communication between the different Elm apps/workers. - --} - -import Enum exposing (Enum) -import Json.Decode -import Json.Encode - - - --- 🌳 - - -type alias Event = - { tag : String - , data : Json.Encode.Value - , error : Maybe String - } - - -type Tag - = EnclosedData - | SearchTracks - | SecretKey - | SyncLocal - | SyncMethod - ----------------------------------------- - -- from UI - ----------------------------------------- - | DownloadTracks - | ProcessSources - | RefreshedAccessToken - | RemoveEncryptionKey - | RemoveTracksBySourceId - | RemoveTracksFromCache - | SaveEnclosedUserData - | SaveFavourites - | SavePlaylists - | SaveProgress - | SaveSettings - | SaveSources - | SaveTracks - | SetSyncMethod - | StopProcessing - | StoreTracksInCache - | SyncHypaethralData - | SyncTrackTags - | ToCache - | UnsetSyncMethod - | UpdateEncryptionKey - ----------------------------------------- - -- to UI - ----------------------------------------- - | AddTracks - | FinishedProcessingSource - | FinishedProcessingSources - | FinishedSyncing - | GotCachedCover - | HideLoadingScreen - | LoadEnclosedUserData - | LoadHypaethralUserData - | ReloadTracks - | RemoveTracksByPath - | ReportError - | ReportProcessingError - | ReportProcessingProgress - | StartedSyncing - | UpdateSourceData - - -enum : Enum Tag -enum = - Enum.create - [ ( "ENCLOSED_DATA", EnclosedData ) - , ( "SEARCH_TRACKS", SearchTracks ) - , ( "SECRET_KEY", SecretKey ) - , ( "SYNC_LOCAL", SyncLocal ) - , ( "SYNC_METHOD", SyncMethod ) - - ----------------------------------------- - -- From UI - ----------------------------------------- - , ( "DOWNLOAD_TRACKS", DownloadTracks ) - , ( "PROCESS_SOURCES", ProcessSources ) - , ( "REFRESHED_ACCESS_TOKEN", RefreshedAccessToken ) - , ( "REMOVE_ENCRYPTION_KEY", RemoveEncryptionKey ) - , ( "REMOVE_TRACKS_BY_SOURCE_ID", RemoveTracksBySourceId ) - , ( "REMOVE_TRACKS_FROM_CACHE", RemoveTracksFromCache ) - , ( "SAVE_ENCLOSED_USER_DATA", SaveEnclosedUserData ) - , ( "SAVE_FAVOURITES", SaveFavourites ) - , ( "SAVE_PLAYLISTS", SavePlaylists ) - , ( "SAVE_PROGRESS", SaveProgress ) - , ( "SAVE_SETTINGS", SaveSettings ) - , ( "SAVE_SOURCES", SaveSources ) - , ( "SAVE_TRACKS", SaveTracks ) - , ( "SET_SYNC_METHOD", SetSyncMethod ) - , ( "STOP_PROCESSING", StopProcessing ) - , ( "STORE_TRACKS_IN_CACHE", StoreTracksInCache ) - , ( "SYNC_HYPAETHRAL_DATA", SyncHypaethralData ) - , ( "SYNC_TRACK_TAGS", SyncTrackTags ) - , ( "TO_CACHE", ToCache ) - , ( "UNSET_SYNC_METHOD", UnsetSyncMethod ) - , ( "UPDATE_ENCRYPTION_KEY", UpdateEncryptionKey ) - - ----------------------------------------- - -- To UI - ----------------------------------------- - , ( "ADD_TRACKS", AddTracks ) - , ( "FINISHED_PROCESSING_SOURCE", FinishedProcessingSource ) - , ( "FINISHED_PROCESSING_SOURCES", FinishedProcessingSources ) - , ( "GOT_CACHED_COVER", GotCachedCover ) - , ( "HIDE_LOADING_SCREEN", HideLoadingScreen ) - , ( "LOAD_ENCLOSED_USER_DATA", LoadEnclosedUserData ) - , ( "LOAD_HYPAETHRAL_USER_DATA", LoadHypaethralUserData ) - , ( "RELOAD_TRACKS", ReloadTracks ) - , ( "REMOVE_TRACKS_BY_PATH", RemoveTracksByPath ) - , ( "REPORT_ERROR", ReportError ) - , ( "REPORT_PROCESSING_ERROR", ReportProcessingError ) - , ( "REPORT_PROCESSING_PROGRESS", ReportProcessingProgress ) - , ( "STARTED_SYNCING", StartedSyncing ) - , ( "UPDATE_SOURCE_DATA", UpdateSourceData ) - ] - - - --- 🔱 - - -broadcast : Tag -> Json.Encode.Value -> Event -broadcast tag data = - { tag = tagToString tag - , data = data - , error = Nothing - } - - -report : Tag -> String -> Event -report tag error = - { tag = tagToString tag - , data = Json.Encode.null - , error = Just error - } - - -trigger : Tag -> Event -trigger tag = - { tag = tagToString tag - , data = Json.Encode.null - , error = Nothing - } - - -tagDecoder : Json.Decode.Decoder Tag -tagDecoder = - enum.decoder - - -tagToJson : Tag -> Json.Encode.Value -tagToJson = - enum.encode - - -tagToString : Tag -> String -tagToString = - enum.toString - - -tagFromJson : Json.Decode.Value -> Result Json.Decode.Error Tag -tagFromJson = - Json.Decode.decodeValue enum.decoder - - -tagFromString : String -> Maybe Tag -tagFromString = - enum.fromString - - - --- ⚗️ - - -{-| Decoder for an alien event inside another alient event. --} -hostDecoder : Json.Decode.Decoder Event -hostDecoder = - Json.Decode.map3 - (\tag data error -> - { tag = tag - , data = data - , error = error - } - ) - (Json.Decode.field "tag" Json.Decode.string) - (Json.Decode.field "data" Json.Decode.value) - (Json.Decode.field "error" <| Json.Decode.maybe Json.Decode.string) diff --git a/src/Library/Chunky.elm b/src/Library/Chunky.elm deleted file mode 100644 index 0f1f09c85..000000000 --- a/src/Library/Chunky.elm +++ /dev/null @@ -1,97 +0,0 @@ -module Chunky exposing (brick, bricky, chunk, chunky, inline, lineBreak, nothing, raw, rawy, slab, slaby) - -{-| Chunks, blocks and slabs. - -Convenience functions to build UIs with composable CSS classes. - --} - -import Html exposing (Html) -import Html.Attributes as A - - - --- 1 - - -slab : - (List (Html.Attribute msg) -> List (Html msg) -> Html msg) - -> List (Html.Attribute msg) - -> List String - -> List (Html msg) - -> Html msg -slab typ attributes stylingAttributes children = - typ - (A.class (String.join " " stylingAttributes) :: attributes) - children - - -slaby : - (List (Html.Attribute msg) -> List (Html msg) -> Html msg) - -> List (Html.Attribute msg) - -> List String - -> Html msg - -> Html msg -slaby a b c = - List.singleton >> slab a b c - - - --- 2 - - -brick : List (Html.Attribute msg) -> List String -> List (Html msg) -> Html msg -brick = - slab Html.div - - -bricky : List (Html.Attribute msg) -> List String -> Html msg -> Html msg -bricky a b = - List.singleton >> brick a b - - - --- 3 - - -chunk : List String -> List (Html msg) -> Html msg -chunk = - brick [] - - -chunky : List String -> Html msg -> Html msg -chunky a = - List.singleton >> chunk a - - -inline : List String -> List (Html msg) -> Html msg -inline = - slab Html.span [] - - - --- 4 - - -raw : List (Html msg) -> Html msg -raw = - chunk [] - - -rawy : Html msg -> Html msg -rawy = - List.singleton >> raw - - - --- 5 - - -nothing : Html msg -nothing = - Html.text "" - - -lineBreak : Html msg -lineBreak = - Html.br [] [] diff --git a/src/Library/Common.elm b/src/Library/Common.elm deleted file mode 100644 index 9e74a2df5..000000000 --- a/src/Library/Common.elm +++ /dev/null @@ -1,97 +0,0 @@ -module Common exposing (ServiceWorkerStatus(..), Switch(..), backToIndex, boolFromString, boolToString, queryString, translateHttpResponse, urlOrigin) - -import Http -import Tuple.Ext as Tuple -import Url exposing (Protocol(..), Url) -import Url.Builder as Url - - - --- ⛩ - - -backToIndex : String -backToIndex = - "Back to tracks" - - - --- 🌳 - - -type ServiceWorkerStatus - = InstallingInitial - | InstallingNew - | WaitingForActivation - | Activated - - -type Switch - = On - | Off - - - --- 🔱 - - -boolFromString : String -> Bool -boolFromString string = - case string of - "t" -> - True - - _ -> - False - - -boolToString : Bool -> String -boolToString bool = - if bool then - "t" - - else - "f" - - -queryString : List ( String, String ) -> String -queryString = - List.map (Tuple.uncurry Url.string) >> Url.toQuery - - -translateHttpResponse : Http.Response String -> Result Http.Error String -translateHttpResponse response = - case response of - Http.BadUrl_ u -> - Err (Http.BadUrl u) - - Http.Timeout_ -> - Err Http.Timeout - - Http.NetworkError_ -> - Err Http.NetworkError - - Http.BadStatus_ _ body -> - Err (Http.BadBody body) - - Http.GoodStatus_ _ body -> - Ok body - - -urlOrigin : Url -> String -urlOrigin { host, port_, path, protocol } = - let - scheme = - case protocol of - Http -> - "http://" - - Https -> - "https://" - - thePort = - port_ - |> Maybe.map (String.fromInt >> (++) ":") - |> Maybe.withDefault "" - in - scheme ++ host ++ thePort ++ path diff --git a/src/Library/Conditional.elm b/src/Library/Conditional.elm deleted file mode 100644 index 03bd32dc3..000000000 --- a/src/Library/Conditional.elm +++ /dev/null @@ -1,12 +0,0 @@ -module Conditional exposing (ifThenElse) - --- 🔱 - - -ifThenElse : Bool -> a -> a -> a -ifThenElse bool x y = - if bool then - x - - else - y diff --git a/src/Library/ContextMenu.elm b/src/Library/ContextMenu.elm deleted file mode 100644 index c517659d2..000000000 --- a/src/Library/ContextMenu.elm +++ /dev/null @@ -1,54 +0,0 @@ -module ContextMenu exposing (ContextMenu(..), Item(..), ItemProperties, anyItem, coordinates, justAnItem) - -import Coordinates exposing (Coordinates) -import Material.Icons.Types exposing (Coloring) -import Svg exposing (Svg) - - - --- 🌳 - - -type ContextMenu msg - = ContextMenu (List (Item msg)) Coordinates - - -type Item msg - = Item (ItemProperties msg) - | Divider - - -type alias ItemProperties msg = - { icon : Int -> Coloring -> Svg msg - , label : String - , msg : msg - , active : Bool - } - - - --- 🔱 - - -anyItem : (ItemProperties msg -> Bool) -> ContextMenu msg -> Bool -anyItem fn (ContextMenu items _) = - List.any - (\item -> - case item of - Item props -> - fn props - - Divider -> - False - ) - items - - -coordinates : ContextMenu msg -> Coordinates -coordinates (ContextMenu _ c) = - c - - -justAnItem : ItemProperties msg -> Maybe (Item msg) -justAnItem = - Just << Item diff --git a/src/Library/Coordinates.elm b/src/Library/Coordinates.elm deleted file mode 100644 index 0278081bc..000000000 --- a/src/Library/Coordinates.elm +++ /dev/null @@ -1,29 +0,0 @@ -module Coordinates exposing (..) - --- 🌳 - - -type alias Coordinates = - { x : Float, y : Float } - - -type alias Viewport = - { height : Float - , width : Float - } - - - --- 🔱 - - -fromTuple : ( Float, Float ) -> Coordinates -fromTuple ( x, y ) = - { x = x - , y = y - } - - -toTuple : Coordinates -> ( Float, Float ) -toTuple { x, y } = - ( x, y ) diff --git a/src/Library/Cryptography/Hmac.elm b/src/Library/Cryptography/Hmac.elm deleted file mode 100644 index 944a4919f..000000000 --- a/src/Library/Cryptography/Hmac.elm +++ /dev/null @@ -1,139 +0,0 @@ -module Cryptography.Hmac exposing (encrypt128, encrypt64) - -{-| Cryptography – HMAC --} - -import Binary exposing (Bits) - - -type alias HashFunction = - Bits -> Bits - - -{-| HMAC encryption for hashing algorithms with a `blockSize` of 64. -These include: SHA-0, SHA-1, SHA-224, SHA-256, MD5, etc. - - >>> import Binary - >>> import SHA - - >>> Binary.fromStringAsUtf8 "" - ..> |> encrypt64 SHA.sha256 "" - ..> |> Binary.toHex - ..> |> String.toLower - "b613679a0814d9ec772f95d778c35fc5ff1697c493715653c6c712144292c5ad" - - >>> Binary.fromStringAsUtf8 "key" - ..> |> encrypt64 SHA.sha256 "The quick brown fox jumps over the lazy dog" - ..> |> Binary.toHex - ..> |> String.toLower - "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8" - - >>> Binary.fromHex "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" - ..> |> encrypt64 SHA.sha256 "Hi There" - ..> |> Binary.toHex - ..> |> String.toLower - "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7" - - >>> Binary.fromHex "4a656665" - ..> |> encrypt64 SHA.sha256 "what do ya want for nothing?" - ..> |> Binary.toHex - ..> |> String.toLower - "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843" - - >>> Binary.fromHex "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - ..> |> encrypt64 SHA.sha256 "Test Using Larger Than Block-Size Key - Hash Key First" - ..> |> Binary.toHex - ..> |> String.toLower - "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54" - --} -encrypt64 : HashFunction -> String -> Bits -> Bits -encrypt64 = - encrypt (64 * 8) - - -{-| HMAC encryption for hashing algorithms with a `blockSize` of 128. -These include: SHA-384, SHA-512, etc. --} -encrypt128 : HashFunction -> String -> Bits -> Bits -encrypt128 = - encrypt (128 * 8) - - - --- ENCRYPT - - -encrypt : Int -> HashFunction -> String -> Bits -> Bits -encrypt blockSize hash messageString key = - let - keySize = - Binary.width key - - keyWithBlockSize = - if keySize > blockSize then - padRight blockSize (hash key) - - else if keySize < blockSize then - padRight blockSize key - - else - key - - ( binSeqOne, binSeqTwo ) = - Tuple.mapBoth - (Binary.xor keyWithBlockSize) - (Binary.xor keyWithBlockSize) - (padding <| blockSize // 8) - in - messageString - |> Binary.fromString 8 - |> Binary.append binSeqOne - |> hash - |> Binary.append binSeqTwo - |> hash - - -padRight : Int -> Bits -> Bits -padRight int bits = - let - size = - Binary.width bits - in - False - |> List.repeat (int - size) - |> List.append (Binary.toBooleans bits) - |> Binary.fromBooleans - - - --- PADDING - - -padding : Int -> ( Bits, Bits ) -padding blockSize = - case blockSize of - 64 -> - padding64 - - 128 -> - padding128 - - _ -> - ( Binary.concat (List.repeat blockSize <| Binary.fromHex "36") - , Binary.concat (List.repeat blockSize <| Binary.fromHex "5C") - ) - - -padding64 : ( Bits, Bits ) -padding64 = - ( Binary.concat (List.repeat 64 <| Binary.fromHex "36") - , Binary.concat (List.repeat 64 <| Binary.fromHex "5C") - ) - - -padding128 : ( Bits, Bits ) -padding128 = - ( Binary.concat (List.repeat 128 <| Binary.fromHex "36") - , Binary.concat (List.repeat 128 <| Binary.fromHex "5C") - ) diff --git a/src/Library/Dict/Ext.elm b/src/Library/Dict/Ext.elm deleted file mode 100644 index 82be3a63e..000000000 --- a/src/Library/Dict/Ext.elm +++ /dev/null @@ -1,24 +0,0 @@ -module Dict.Ext exposing (fetch, fetchUnknown, unionFlipped) - -import Dict exposing (Dict) - - - --- 🔱 - - -unionFlipped : Dict comparable v -> Dict comparable v -> Dict comparable v -unionFlipped a b = - Dict.union b a - - -fetch : comparable -> v -> Dict comparable v -> v -fetch key default dict = - dict - |> Dict.get key - |> Maybe.withDefault default - - -fetchUnknown : comparable -> Dict comparable String -> String -fetchUnknown key dict = - fetch key "MISSING_VALUE" dict diff --git a/src/Library/Equalizer.elm b/src/Library/Equalizer.elm deleted file mode 100644 index 83ffdf1b2..000000000 --- a/src/Library/Equalizer.elm +++ /dev/null @@ -1,68 +0,0 @@ -module Equalizer exposing (..) - -import Coordinates exposing (Coordinates) -import Json.Decode -import Json.Encode - - - --- 🌳 - - -type Knob - = Low - | Mid - | High - | Volume - - -type alias KnobOperation = - { knob : Knob - , startingPosition : Coordinates - } - - -type alias Settings = - { low : Float - , mid : Float - , high : Float - , volume : Float - } - - -maxAngle : Float -maxAngle = - 135 - - - --- 🔱 - - -defaultSettings : Settings -defaultSettings = - { low = 0 - , mid = 0 - , high = 0 - , volume = 0.5 - } - - -encodeSettings : Settings -> Json.Encode.Value -encodeSettings settings = - Json.Encode.object - [ ( "low", Json.Encode.float settings.low ) - , ( "mid", Json.Encode.float settings.mid ) - , ( "high", Json.Encode.float settings.high ) - , ( "volume", Json.Encode.float settings.volume ) - ] - - -settingsDecoder : Json.Decode.Decoder Settings -settingsDecoder = - Json.Decode.map4 - Settings - (Json.Decode.field "low" Json.Decode.float) - (Json.Decode.field "mid" Json.Decode.float) - (Json.Decode.field "high" Json.Decode.float) - (Json.Decode.field "volume" Json.Decode.float) diff --git a/src/Library/Html/Ext.elm b/src/Library/Html/Ext.elm deleted file mode 100644 index d20b13429..000000000 --- a/src/Library/Html/Ext.elm +++ /dev/null @@ -1,50 +0,0 @@ -module Html.Ext exposing (..) - -import Html exposing (Attribute, Html) -import Html.Events exposing (keyCode, on, preventDefaultOn, stopPropagationOn) -import Json.Decode as Json - - -lineBreak : Html msg -lineBreak = - Html.br [] [] - - -onClickStopPropagation : msg -> Attribute msg -onClickStopPropagation msg = - stopPropagationOn "click" (Json.succeed ( msg, True )) - - -onDoubleTap : msg -> Attribute msg -onDoubleTap msg = - on "dbltap" (Json.succeed msg) - - -onEnterKey : msg -> Attribute msg -onEnterKey msg = - on "keydown" (Json.andThen (ifEnterKey msg) keyCode) - - -ifEnterKey : msg -> Int -> Json.Decoder msg -ifEnterKey msg key = - case key of - 13 -> - Json.succeed msg - - _ -> - Json.fail "Another key, that isn't enter, was pressed" - - -onTap : msg -> Attribute msg -onTap msg = - on "tap" (Json.succeed msg) - - -onTapPreventDefault : msg -> Attribute msg -onTapPreventDefault msg = - preventDefaultOn "tap" (Json.succeed ( msg, True )) - - -onTapStopPropagation : msg -> Attribute msg -onTapStopPropagation msg = - stopPropagationOn "tap" (Json.succeed ( msg, True )) diff --git a/src/Library/Http/Ext.elm b/src/Library/Http/Ext.elm deleted file mode 100644 index 0cf925ec1..000000000 --- a/src/Library/Http/Ext.elm +++ /dev/null @@ -1,27 +0,0 @@ -module Http.Ext exposing (errorToString) - -import Http exposing (Error(..)) - - - --- 🛠 - - -errorToString : Http.Error -> String -errorToString err = - -- Thanks to: https://github.com/hercules-ci/elm-hercules-extras/blob/1.0.0/src/Http/Extras.elm - case err of - Timeout -> - "Timeout exceeded" - - NetworkError -> - "Network error" - - BadStatus code -> - "Something went wrong, got status code: " ++ String.fromInt code - - BadBody text -> - "Unexpected response: " ++ text - - BadUrl url -> - "Malformed url: " ++ url diff --git a/src/Library/Icons.elm b/src/Library/Icons.elm deleted file mode 100644 index 40fd078c0..000000000 --- a/src/Library/Icons.elm +++ /dev/null @@ -1,25 +0,0 @@ -module Icons exposing (..) - -import Chunky exposing (slaby) -import Html -import Material.Icons.Types exposing (Coloring) -import VirtualDom - - - --- 🌳 - - -type alias Icon msg = - Int -> Coloring -> VirtualDom.Node msg - - - --- 🔱 - - -wrapped : List String -> Icon msg -> Int -> Coloring -> VirtualDom.Node msg -wrapped classes icon size coloring = - coloring - |> icon size - |> slaby Html.span [] classes diff --git a/src/Library/Json/Decode/Ext.elm b/src/Library/Json/Decode/Ext.elm deleted file mode 100644 index 20a20a150..000000000 --- a/src/Library/Json/Decode/Ext.elm +++ /dev/null @@ -1,28 +0,0 @@ -module Json.Decode.Ext exposing (listIgnore, optionalField) - -import Json.Decode as Decode exposing (Decoder) -import Maybe.Extra as Maybe - - - --- 🔱 - - -{-| A list decoder that always succeeds, throwing away the failures. --} -listIgnore : Decoder a -> Decoder (List a) -listIgnore decoder = - decoder - |> Decode.maybe - |> Decode.list - |> Decode.map Maybe.values - - -{-| Provide a default value for a field that might not be there. --} -optionalField : String -> Decoder a -> a -> Decoder a -optionalField field decoder defaultValue = - decoder - |> Decode.field field - |> Decode.maybe - |> Decode.map (Maybe.withDefault defaultValue) diff --git a/src/Library/Json/Encode/Ext.elm b/src/Library/Json/Encode/Ext.elm deleted file mode 100644 index cb768bf68..000000000 --- a/src/Library/Json/Encode/Ext.elm +++ /dev/null @@ -1,10 +0,0 @@ -module Json.Encode.Ext exposing (..) - -import Json.Encode as Encode - - -encodeMaybe : Maybe a -> (a -> Encode.Value) -> Encode.Value -encodeMaybe maybe encoder = - maybe - |> Maybe.map encoder - |> Maybe.withDefault Encode.null diff --git a/src/Library/LastFm.elm b/src/Library/LastFm.elm deleted file mode 100644 index d9280ded0..000000000 --- a/src/Library/LastFm.elm +++ /dev/null @@ -1,200 +0,0 @@ -module LastFm exposing (..) - -import Common -import Http -import Json.Decode as Json -import List.Ext as List -import MD5 -import String.Ext as String -import Tracks exposing (Track) -import Tuple.Ext as Tuple -import Url exposing (Url) -import Url.Ext as Url - - - --- 🏔 - - -apiKey = - "4f0fe85b67baef8bb7d008a8754a95e5" - - -apiUrl = - "https://ws.audioscrobbler.com/2.0" - - -notSoSecret = - "0cec3ca0f58e04a5082f1131aba1e0d3" - - - --- 🌳 - - -type alias Model = - { authenticating : Bool - , sessionKey : Maybe String - } - - -initialModel : Model -initialModel = - { authenticating = False - , sessionKey = Nothing - } - - -authenticationCommand : (Result Http.Error String -> msg) -> Url -> Cmd msg -authenticationCommand msg url = - case Url.extractQueryParam "token" url of - Just token -> - Http.get - { url = - authenticatedUrl - [ ( "method", "auth.getSession" ) - , ( "token", token ) - ] - , expect = - Json.string - |> Json.at [ "session", "key" ] - |> Http.expectJson msg - } - - Nothing -> - Cmd.none - - - --- 📣 - - -disconnect : Model -> Model -disconnect model = - { model | sessionKey = Nothing } - - -failedToAuthenticate : Model -> Model -failedToAuthenticate model = - { model | authenticating = False } - - -gotSessionKey : String -> Model -> Model -gotSessionKey sessionKey model = - { model | sessionKey = Just sessionKey } - - - --- 🎵 - - -nowPlaying : Model -> { duration : Int, msg : msg, track : Track } -> Cmd msg -nowPlaying model { duration, msg, track } = - case model.sessionKey of - Just sessionKey -> - Http.post - { url = - apiUrl - , body = - [ ( "duration", String.fromInt duration ) - , ( "track", track.tags.title ) - , ( "trackNumber", String.fromInt track.tags.nr ) - - -- - , ( "method", "track.updateNowPlaying" ) - , ( "sk", sessionKey ) - ] - |> addAlbum track - |> addArtist track - |> authenticatedBody - , expect = - Http.expectWhatever (always msg) - } - - Nothing -> - Cmd.none - - -scrobble : Model -> { duration : Int, msg : msg, timestamp : Int, track : Track } -> Cmd msg -scrobble model { duration, msg, timestamp, track } = - case model.sessionKey of - Just sessionKey -> - Http.post - { url = - apiUrl - , body = - [ ( "duration", String.fromInt duration ) - , ( "track", track.tags.title ) - , ( "trackNumber", String.fromInt track.tags.nr ) - - -- - , ( "method", "track.scrobble" ) - , ( "sk", sessionKey ) - , ( "timestamp", String.fromInt timestamp ) - ] - |> addAlbum track - |> addArtist track - |> authenticatedBody - , expect = - Http.expectWhatever (always msg) - } - - Nothing -> - Cmd.none - - -addAlbum track list = - case track.tags.album of - Just album -> - ( "album", album ) :: list - - Nothing -> - list - - -addArtist track list = - case track.tags.artist of - Just artist -> - ( "artist", artist ) :: list - - Nothing -> - list - - - --- 🔱 - - -authenticatedBody : List ( String, String ) -> Http.Body -authenticatedBody params = - params - |> authenticatedParams - |> Common.queryString - |> String.dropLeft 1 - |> Http.stringBody "application/x-www-form-urlencoded" - - -authenticatedUrl : List ( String, String ) -> String -authenticatedUrl params = - params - |> authenticatedParams - |> Common.queryString - |> String.append apiUrl - - -authenticatedParams : List ( String, String ) -> List ( String, String ) -authenticatedParams params = - let - extendedParams = - ( "api_key", apiKey ) :: params - in - extendedParams - |> List.sortBy Tuple.first - |> List.map (Tuple.uncurry String.append) - |> String.concat - |> String.addSuffix notSoSecret - |> MD5.hex - |> Tuple.pair "api_sig" - |> List.addTo extendedParams - |> (::) ( "format", "json" ) - |> List.sortBy Tuple.first diff --git a/src/Library/Lens/Ext.elm b/src/Library/Lens/Ext.elm deleted file mode 100644 index ee39cd285..000000000 --- a/src/Library/Lens/Ext.elm +++ /dev/null @@ -1,17 +0,0 @@ -module Lens.Ext exposing (..) - -import Monocle.Lens as Lens exposing (Lens) - - -{-| Flipped version of `Lens.modify`. --} -adjust : Lens a b -> a -> (b -> b) -> a -adjust lens a fn = - Lens.modify lens fn a - - -{-| Flipped version of `lens.set`. --} -replace : Lens a b -> a -> b -> a -replace lens a b = - lens.set b a diff --git a/src/Library/List/Ext.elm b/src/Library/List/Ext.elm deleted file mode 100644 index 04b76488c..000000000 --- a/src/Library/List/Ext.elm +++ /dev/null @@ -1,75 +0,0 @@ -module List.Ext exposing (..) - -import List.Extra as List - - -{-| Flipped version of `append`. - - >>> add [2, 3] [1] - [1, 2, 3] - --} -add : List a -> List a -> List a -add a b = - List.append b a - - -{-| Flipped version of (::). - - >>> addTo [2, 3] 1 - [1, 2, 3] - --} -addTo : List a -> a -> List a -addTo list item = - item :: list - - -{-| Move an item "from" an index "to" another index. -Putting the item in front of the `to` index. - - >>> move { from = 0, to = 2, amount = 1 } [1, 2, 3] - [2, 1, 3] - - >>> move { from = 2, to = 0, amount = 1 } [1, 2, 3] - [3, 1, 2] - - >>> move { from = 2, to = 7, amount = 3 } [0, 1, 2, 3, 4, 5, 6, 7] - [0, 1, 5, 6, 2, 3, 4, 7] - - >>> move { from = 2, to = 1, amount = 3 } [0, 1, 2, 3, 4, 5, 6, 7] - [0, 2, 3, 4, 1, 5, 6, 7] - --} -move : { amount : Int, from : Int, to : Int } -> List a -> List a -move { from, to, amount } list = - [] - ++ (list |> List.take (min from to)) - ++ (list |> List.take to |> List.drop (from + amount)) - ++ (list |> List.drop from |> List.take amount) - ++ (list |> List.take from |> List.drop to) - ++ (list |> List.drop (max (from + amount) to)) - - -pickIndexes : List Int -> List a -> List a -pickIndexes indexes items = - List.foldr - (\idx acc -> - items - |> List.getAt idx - |> Maybe.map (addTo acc) - |> Maybe.withDefault acc - ) - [] - indexes - - -{-| Exclude a list from another list. - - >>> without [ 2 ] [ 1, 2, 3 ] - [ 1, 3 ] - --} -without : List a -> List a -> List a -without exclude = - List.filter (\c -> List.notMember c exclude) diff --git a/src/Library/Management.elm b/src/Library/Management.elm deleted file mode 100644 index 01efbde84..000000000 --- a/src/Library/Management.elm +++ /dev/null @@ -1,43 +0,0 @@ -module Management exposing (..) - -import Monocle.Lens exposing (Lens) - - - --- 📣 - - -type alias Manager msg model = - model -> ( model, Cmd msg ) - - - --- 🔱 - - -{-| For working with nested models. - - organize : Manager Msg NestedModel -> Manager Msg Model - organize = - { get = .nested - , set = \nested ui -> { ui | nested = nested } - } - |> Monocle.Lens.Lens - |> Management.organize - - update : Nested.Msg -> Manager Msg Model - update msg = - case msg of - NestedMsg -> - organize handleNestedMsg - --} -organize : - Lens parent nested - -> Manager msg nested - -> Manager msg parent -organize lens manager parent = - parent - |> lens.get - |> manager - |> Tuple.mapFirst (\nested -> lens.set nested parent) diff --git a/src/Library/Maybe/Ext.elm b/src/Library/Maybe/Ext.elm deleted file mode 100644 index 298a13229..000000000 --- a/src/Library/Maybe/Ext.elm +++ /dev/null @@ -1,13 +0,0 @@ -module Maybe.Ext exposing (preferFirst, preferSecond) - -import Maybe.Extra - - -preferFirst : Maybe a -> Maybe a -> Maybe a -preferFirst = - Maybe.Extra.or - - -preferSecond : Maybe a -> Maybe a -> Maybe a -preferSecond = - Maybe.Extra.orElse diff --git a/src/Library/MediaSession.elm b/src/Library/MediaSession.elm deleted file mode 100644 index 299fe63f6..000000000 --- a/src/Library/MediaSession.elm +++ /dev/null @@ -1,8 +0,0 @@ -module MediaSession exposing (states) - - -states = - { none = "none" - , paused = "paused" - , playing = "playing" - } diff --git a/src/Library/Notifications.elm b/src/Library/Notifications.elm deleted file mode 100644 index 1d1068628..000000000 --- a/src/Library/Notifications.elm +++ /dev/null @@ -1,186 +0,0 @@ -module Notifications exposing (Action, Kind(..), Notification, Options, casual, contents, dismiss, error, errorWithCode, id, kind, options, stickyCasual, stickyError, stickySuccess, success) - -import Chunky exposing (..) -import Html exposing (Html) -import Markdown -import Murmur3 exposing (..) - - - --- 🌳 - - -type Notification msg - = Notification Kind Int Options (Html msg) - - -type alias Action msg = - { label : String, msg : msg } - - -type alias Options = - { sticky : Bool, wasDismissed : Bool } - - -type Kind - = Casual - | Error - | Success - - - --- 🔱 - - -id : Notification msg -> Int -id (Notification _ i _ _) = - i - - -contents : Notification msg -> Html msg -contents (Notification _ _ _ c) = - c - - -kind : Notification msg -> Kind -kind (Notification k _ _ _) = - k - - -options : Notification msg -> Options -options (Notification _ _ o _) = - o - - - --- ⚗️ - - -dismiss : Notification msg -> Notification msg -dismiss (Notification k i o c) = - Notification k i { o | wasDismissed = True } c - - - --- 🚨 - - -error : String -> Notification msg -error content = - Notification - Error - (hashString 0 content) - { sticky = False - , wasDismissed = False - } - (render content) - - -stickyError : String -> Notification msg -stickyError content = - Notification - Error - (hashString 0 content) - { sticky = True - , wasDismissed = False - } - (render content) - - -errorWithCode : String -> String -> List (Action msg) -> Notification msg -errorWithCode content code _ = - Notification - Error - (hashString 0 content) - { sticky = True - , wasDismissed = False - } - (Html.div - [] - [ render content - , if String.isEmpty (String.trim code) then - nothing - - else - chunk - [ "bg-black-50" - , "break-all" - , "rounded" - , "mb-0" - , "mt-3" - , "p-2" - , "text-xxs" - ] - [ slab - Html.code - [] - [ "align-middle" ] - [ Html.text code ] - ] - ] - ) - - - --- 💚 - - -success : String -> Notification msg -success content = - Notification - Success - (hashString 0 content) - { sticky = False - , wasDismissed = False - } - (render content) - - -stickySuccess : String -> Notification msg -stickySuccess content = - Notification - Success - (hashString 0 content) - { sticky = True - , wasDismissed = False - } - (render content) - - - --- 🦉 - - -casual : String -> Notification msg -casual content = - Notification - Casual - (hashString 0 content) - { sticky = False - , wasDismissed = False - } - (render content) - - -stickyCasual : String -> Notification msg -stickyCasual content = - Notification - Casual - (hashString 0 content) - { sticky = True - , wasDismissed = False - } - (render content) - - - --- ⚗️ - - -render : String -> Html msg -render content = - content - |> String.lines - |> List.map String.trimLeft - |> String.join "\n" - |> Markdown.toHtml [] diff --git a/src/Library/Playlists.elm b/src/Library/Playlists.elm deleted file mode 100644 index f398b8b67..000000000 --- a/src/Library/Playlists.elm +++ /dev/null @@ -1,41 +0,0 @@ -module Playlists exposing (..) - -import Time - - - --- 🌳 - - -type alias Playlist = - { autoGenerated : Maybe { level : Int } - , collection : Bool - , name : String - , public : Bool - , tracks : List PlaylistTrack - } - - -type alias PlaylistTrackWithoutMetadata = - { album : Maybe String - , artist : Maybe String - , title : String - } - - -type alias PlaylistTrack = - { album : Maybe String - , artist : Maybe String - , title : String - - -- - , insertedAt : Time.Posix - } - - -type alias IdentifiedPlaylistTrack = - ( Identifiers, PlaylistTrack ) - - -type alias Identifiers = - { index : Int } diff --git a/src/Library/Playlists/Encoding.elm b/src/Library/Playlists/Encoding.elm deleted file mode 100644 index 102427f7d..000000000 --- a/src/Library/Playlists/Encoding.elm +++ /dev/null @@ -1,66 +0,0 @@ -module Playlists.Encoding exposing (decoder, encode, encodePlaylistTrack, playlistTrackDecoder) - -import Json.Decode as Decode -import Json.Decode.Ext as Decode -import Json.Encode as Encode -import Json.Encode.Ext exposing (..) -import Playlists exposing (..) -import Time.Ext as Time - - - --- ENCODE - - -encode : Playlist -> Encode.Value -encode playlist = - Encode.object - [ ( "autoGenerated" - , case playlist.autoGenerated of - Just { level } -> - Encode.object - [ ( "level", Encode.int level ) ] - - Nothing -> - Encode.null - ) - , ( "collection", Encode.bool playlist.collection ) - , ( "name", Encode.string playlist.name ) - , ( "public", Encode.bool playlist.public ) - , ( "tracks", Encode.list encodePlaylistTrack playlist.tracks ) - ] - - -encodePlaylistTrack : PlaylistTrack -> Encode.Value -encodePlaylistTrack playlistTrack = - Encode.object - [ ( "album", encodeMaybe playlistTrack.album Encode.string ) - , ( "artist", encodeMaybe playlistTrack.artist Encode.string ) - , ( "title", Encode.string playlistTrack.title ) - - -- - , ( "insertAt", Time.encode playlistTrack.insertedAt ) - ] - - - --- DECODE - - -decoder : Decode.Decoder Playlist -decoder = - Decode.map5 Playlist - (Decode.field "autoGenerated" <| Decode.maybe <| Decode.map (\l -> { level = l }) <| Decode.field "level" Decode.int) - (Decode.optionalField "collection" Decode.bool False) - (Decode.field "name" Decode.string) - (Decode.optionalField "public" Decode.bool False) - (Decode.field "tracks" <| Decode.list playlistTrackDecoder) - - -playlistTrackDecoder : Decode.Decoder PlaylistTrack -playlistTrackDecoder = - Decode.map4 PlaylistTrack - (Decode.maybe <| Decode.field "album" Decode.string) - (Decode.maybe <| Decode.field "artist" Decode.string) - (Decode.field "title" Decode.string) - (Decode.optionalField "insertedAt" Time.decoder Time.default) diff --git a/src/Library/Playlists/Matching.elm b/src/Library/Playlists/Matching.elm deleted file mode 100644 index 1e47b9f4a..000000000 --- a/src/Library/Playlists/Matching.elm +++ /dev/null @@ -1,53 +0,0 @@ -module Playlists.Matching exposing (match) - -import Playlists exposing (..) -import Tracks exposing (IdentifiedTrack) - - - --- 🔱 - - -match : Playlist -> List IdentifiedTrack -> ( List IdentifiedTrack, List IdentifiedPlaylistTrack ) -match playlist = - List.foldl - (\( i, t ) ( identifiedTracks, remainingPlaylistTracks ) -> - let - im = - { album = t.tags.album - , artist = t.tags.artist - , title = t.tags.title - } - - ( matches, remainingPlaylistTracksWithoutMatches ) = - List.foldl - (\( pi, pt ) -> - if im.title == pt.title && im.album == pt.album && im.artist == pt.artist then - Tuple.mapBoth - ((::) ( playlistTrackIdentifiers i pi, t )) - identity - - else - Tuple.mapBoth - identity - ((::) ( pi, pt )) - ) - ( [], [] ) - remainingPlaylistTracks - in - ( identifiedTracks ++ matches - , remainingPlaylistTracksWithoutMatches - ) - ) - ( [] - , List.indexedMap (\idx -> Tuple.pair { index = idx }) playlist.tracks - ) - - - --- ㊙️ - - -playlistTrackIdentifiers : Tracks.Identifiers -> Playlists.Identifiers -> Tracks.Identifiers -playlistTrackIdentifiers i pi = - { i | indexInPlaylist = Just pi.index } diff --git a/src/Library/Queue.elm b/src/Library/Queue.elm deleted file mode 100644 index 3188597f0..000000000 --- a/src/Library/Queue.elm +++ /dev/null @@ -1,78 +0,0 @@ -module Queue exposing (EngineItem, Item, makeEngineItem, makeItem, makeTrackUrl) - -import Dict exposing (Dict) -import List.Extra as List -import Sources exposing (Source) -import Sources.Processing exposing (HttpMethod(..)) -import Sources.Services -import Time -import Tracks exposing (IdentifiedTrack, Tags, Track) - - - --- 🌳 - - -type alias Item = - { manualEntry : Bool - , identifiedTrack : IdentifiedTrack - } - - -type alias EngineItem = - { isCached : Bool - , isPreload : Bool - , progress : Maybe Float - , sourceId : String - , trackId : String - , trackTags : Tags - , trackPath : String - , url : String - } - - - --- 🔱 - - -makeEngineItem : Bool -> Time.Posix -> List Source -> List String -> Dict String Float -> Track -> EngineItem -makeEngineItem preload timestamp sources cachedTrackIds progressTable track = - { isCached = List.member track.id cachedTrackIds - , isPreload = preload - , progress = Dict.get track.id progressTable - , sourceId = track.sourceId - , trackId = track.id - , trackPath = track.path - , trackTags = track.tags - , url = makeTrackUrl timestamp sources track - } - - -makeItem : Bool -> IdentifiedTrack -> Item -makeItem isManualEntry identifiedTrack = - { manualEntry = isManualEntry - , identifiedTrack = identifiedTrack - } - - -makeTrackUrl : Time.Posix -> List Source -> Track -> String -makeTrackUrl timestamp sources track = - sources - |> List.find (.id >> (==) track.sourceId) - |> Maybe.map (makeTrackUrl_ timestamp track) - |> Maybe.withDefault "" - - - --- ㊙️ - - -makeTrackUrl_ : Time.Posix -> Track -> Source -> String -makeTrackUrl_ timestamp track source = - Sources.Services.makeTrackUrl - source.service - timestamp - source.id - source.data - Get - track.path diff --git a/src/Library/Return/Ext.elm b/src/Library/Return/Ext.elm deleted file mode 100644 index abccc6e07..000000000 --- a/src/Library/Return/Ext.elm +++ /dev/null @@ -1,19 +0,0 @@ -module Return.Ext exposing (..) - -import Task - - - --- 🔱 - - -communicate : Cmd msg -> model -> ( model, Cmd msg ) -communicate c m = - ( m, c ) - - -task : msg -> Cmd msg -task msg = - msg - |> Task.succeed - |> Task.perform identity diff --git a/src/Library/Settings.elm b/src/Library/Settings.elm deleted file mode 100644 index 73199a090..000000000 --- a/src/Library/Settings.elm +++ /dev/null @@ -1,63 +0,0 @@ -module Settings exposing (Settings, decoder, encode) - -import Json.Decode as Json -import Json.Decode.Pipeline exposing (optional) -import Json.Encode -import Maybe.Extra as Maybe - - - --- 🌳 - - -type alias Settings = - { backgroundImage : Maybe String - , coverSelectionReducesPool : Bool - , hideDuplicates : Bool - , lastFm : Maybe String - , processAutomatically : Bool - , rememberProgress : Bool - } - - - --- ENCODING - - -encode : Settings -> Json.Value -encode settings = - Json.Encode.object - [ ( "backgroundImage" - , Maybe.unwrap Json.Encode.null Json.Encode.string settings.backgroundImage - ) - , ( "coverSelectionReducesPool" - , Json.Encode.bool settings.coverSelectionReducesPool - ) - , ( "hideDuplicates" - , Json.Encode.bool settings.hideDuplicates - ) - , ( "lastFm" - , Maybe.unwrap Json.Encode.null Json.Encode.string settings.lastFm - ) - , ( "processAutomatically" - , Json.Encode.bool settings.processAutomatically - ) - , ( "rememberProgress" - , Json.Encode.bool settings.rememberProgress - ) - ] - - - --- DECODING - - -decoder : Json.Decoder Settings -decoder = - Json.succeed Settings - |> optional "backgroundImage" (Json.maybe Json.string) Nothing - |> optional "coverSelectionReducesPool" Json.bool True - |> optional "hideDuplicates" Json.bool False - |> optional "lastFm" (Json.maybe Json.string) Nothing - |> optional "processAutomatically" Json.bool True - |> optional "rememberProgress" Json.bool True diff --git a/src/Library/Sources.elm b/src/Library/Sources.elm deleted file mode 100644 index 250a231cf..000000000 --- a/src/Library/Sources.elm +++ /dev/null @@ -1,120 +0,0 @@ -module Sources exposing (..) - -import Conditional exposing (..) -import Dict exposing (Dict) -import Json.Decode -import Time - - - --- 🌳 - - -type alias Source = - { id : String - , data : SourceData - , directoryPlaylists : Bool - , enabled : Bool - , service : Service - } - - - --- PIECES - - -type alias Property = - { key : String - , label : String - , placeholder : String - , password : Bool - } - - -type alias SourceData = - Dict String String - - - --- SERVICES - - -type Service - = AmazonS3 - | AzureBlob - | AzureFile - | Dropbox - | Google - | Ipfs - | WebDav - - -serviceDictionary : Dict String Service -serviceDictionary = - Dict.fromList - [ ( "amazons3", AmazonS3 ) - , ( "amazon_s3", AmazonS3 ) - , ( "azureblob", AzureBlob ) - , ( "azure_blob", AzureBlob ) - , ( "azurefile", AzureFile ) - , ( "azure_file", AzureFile ) - , ( "dropbox", Dropbox ) - , ( "google", Google ) - , ( "ipfs", Ipfs ) - , ( "webdav", WebDav ) - , ( "web_dav", WebDav ) - ] - - -serviceDecoder : Json.Decode.Decoder Service -serviceDecoder = - Json.Decode.andThen - (\string -> - serviceDictionary - |> Dict.get string - |> Maybe.map Json.Decode.succeed - |> Maybe.withDefault (Json.Decode.fail "Invalid source kind") - ) - Json.Decode.string - - - ---- 🔱 - - -enabledSourceIds : List Source -> List String -enabledSourceIds = - List.filterMap (\s -> ifThenElse s.enabled (Just s.id) Nothing) - - -setProperId : Int -> Time.Posix -> Source -> Source -setProperId n time source = - { source | id = String.fromInt (Time.posixToMillis time) ++ String.fromInt n } - - -worksOffline : Source -> Bool -worksOffline source = - case source.service of - AmazonS3 -> - False - - AzureBlob -> - False - - AzureFile -> - False - - Dropbox -> - False - - Google -> - False - - Ipfs -> - True - - WebDav -> - source.data - |> Dict.get "url" - |> Maybe.map (\u -> String.contains "localhost" u || String.contains "127.0.0.1" u) - |> Maybe.withDefault False diff --git a/src/Library/Sources/Encoding.elm b/src/Library/Sources/Encoding.elm deleted file mode 100644 index 722e008da..000000000 --- a/src/Library/Sources/Encoding.elm +++ /dev/null @@ -1,74 +0,0 @@ -module Sources.Encoding exposing (decode, decoder, encode, encodeData, serviceDecoder) - -{-| Encoding. --} - -import Dict -import Json.Decode as Decode -import Json.Encode as Encode -import Sources exposing (..) -import Sources.Services as Services - - - --- ENCODE - - -encode : Source -> Encode.Value -encode source = - Encode.object - [ ( "id", Encode.string source.id ) - , ( "data", encodeData source.data ) - , ( "directoryPlaylists", Encode.bool source.directoryPlaylists ) - , ( "enabled", Encode.bool source.enabled ) - , ( "service", Encode.string (Services.typeToKey source.service) ) - ] - - -encodeData : SourceData -> Encode.Value -encodeData data = - data - |> Dict.toList - |> List.map (Tuple.mapSecond Encode.string) - |> Encode.object - - - --- DECODE - - -decode : Decode.Value -> Maybe Source -decode value = - value - |> Decode.decodeValue decoder - |> Result.toMaybe - - -decoder : Decode.Decoder Source -decoder = - Decode.map5 Source - (Decode.field "id" Decode.string) - (Decode.field "data" (Decode.dict Decode.string)) - (Decode.field "directoryPlaylists" Decode.bool - |> Decode.maybe - |> Decode.map (Maybe.withDefault True) - ) - (Decode.field "enabled" Decode.bool - |> Decode.maybe - |> Decode.map (Maybe.withDefault True) - ) - (Decode.field "service" serviceDecoder) - - -serviceDecoder : Decode.Decoder Service -serviceDecoder = - Decode.andThen - (\key -> - case Services.keyToType key of - Just service -> - Decode.succeed service - - Nothing -> - Decode.fail "Unrecognizable source service" - ) - Decode.string diff --git a/src/Library/Sources/Pick.elm b/src/Library/Sources/Pick.elm deleted file mode 100644 index c9d4205ba..000000000 --- a/src/Library/Sources/Pick.elm +++ /dev/null @@ -1,30 +0,0 @@ -module Sources.Pick exposing (isMusicFile, selectMusicFiles) - -import Regex - - - --- 🔱 - - -isMusicFile : String -> Bool -isMusicFile = - Regex.contains musicFileRegex - - -selectMusicFiles : List String -> List String -selectMusicFiles = - List.filter isMusicFile - - - ------------------------------------------ --- ㊙️ ------------------------------------------ - - -musicFileRegex : Regex.Regex -musicFileRegex = - "\\.(mp3|mp4|m4a|flac|ogg|opus|wav|webm)$" - |> Regex.fromStringWith { caseInsensitive = True, multiline = False } - |> Maybe.withDefault Regex.never diff --git a/src/Library/Sources/Processing.elm b/src/Library/Sources/Processing.elm deleted file mode 100644 index 8bf842674..000000000 --- a/src/Library/Sources/Processing.elm +++ /dev/null @@ -1,97 +0,0 @@ -module Sources.Processing exposing (..) - -import Sources exposing (Source, SourceData) -import Tracks exposing (Tags, Track) - - - --- 🌳 - - -type Status - = Processing ( Source, List Track ) (List ( Source, List Track )) - | NotProcessing - - -type alias Arguments = - { origin : String - , sources : List Source - } - - - --- MARKERS & RESPONSES - - -type Marker - = TheBeginning - | InProgress String - | TheEnd - - -type alias PrepationAnswer marker = - { sourceData : SourceData - , marker : marker - } - - -type alias TreeAnswer marker = - { filePaths : List String - , marker : marker - } - - - --- CONTEXTS - - -type alias Context = - { filePaths : List String - , origin : String - , preparationMarker : Marker - , source : Source - , treeMarker : Marker - } - - -type alias ContextForTags = - { amount : Int - , nextFilePaths : List String - , receivedFilePaths : List String - , receivedTags : List (Maybe Tags) - , sourceId : String - , urlsForTags : List TagUrls - } - - -type alias ContextForTagsSync = - { receivedFilePaths : List String - , receivedTags : List (Maybe Tags) - , trackIds : List String - , urlsForTags : List TagUrls - } - - -type alias TagUrls = - { getUrl : String - , headUrl : String - } - - - --- HTTP - - -type HttpMethod - = Get - | Head - - -httpMethod : HttpMethod -> String -httpMethod method = - case method of - Get -> - "GET" - - Head -> - "HEAD" diff --git a/src/Library/Sources/Processing/Encoding.elm b/src/Library/Sources/Processing/Encoding.elm deleted file mode 100644 index 0401f6ea1..000000000 --- a/src/Library/Sources/Processing/Encoding.elm +++ /dev/null @@ -1,19 +0,0 @@ -module Sources.Processing.Encoding exposing (argumentsDecoder) - -{-| Encoding. --} - -import Json.Decode as Decode exposing (Decoder) -import Sources.Encoding as Sources -import Sources.Processing exposing (Arguments) - - - --- 🔱 - - -argumentsDecoder : Decoder Arguments -argumentsDecoder = - Decode.map2 Arguments - (Decode.field "origin" Decode.string) - (Decode.field "sources" <| Decode.list Sources.decoder) diff --git a/src/Library/Sources/Refresh/AccessToken.elm b/src/Library/Sources/Refresh/AccessToken.elm deleted file mode 100644 index 2152a5a96..000000000 --- a/src/Library/Sources/Refresh/AccessToken.elm +++ /dev/null @@ -1,39 +0,0 @@ -module Sources.Refresh.AccessToken exposing (..) - -import Json.Decode exposing (Decoder) -import Sources exposing (Service) -import Sources.Encoding exposing (serviceDecoder) - - - --- 🌳 - - -type alias PortArguments = - { service : Service - , sourceId : String - , accessToken : String - - -- Unix timestamp in milliseconds - , expiresAt : Int - } - - - --- 🛠 - - -portArgumentsDecoder : Decoder PortArguments -portArgumentsDecoder = - Json.Decode.map4 - (\service sourceId accessToken expiresAt -> - { service = service - , sourceId = sourceId - , accessToken = accessToken - , expiresAt = expiresAt - } - ) - (Json.Decode.field "service" serviceDecoder) - (Json.Decode.field "sourceId" Json.Decode.string) - (Json.Decode.field "accessToken" Json.Decode.string) - (Json.Decode.field "expiresAt" Json.Decode.int) diff --git a/src/Library/Sources/Services.elm b/src/Library/Sources/Services.elm deleted file mode 100644 index a3b16fcef..000000000 --- a/src/Library/Sources/Services.elm +++ /dev/null @@ -1,328 +0,0 @@ -module Sources.Services exposing (initialData, keyToType, labels, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties, typeToKey) - -{-| Service functions used in other modules. --} - -import Http -import Sources exposing (..) -import Sources.Processing exposing (..) -import Sources.Services.AmazonS3 as AmazonS3 -import Sources.Services.AzureBlob as AzureBlob -import Sources.Services.AzureFile as AzureFile -import Sources.Services.Dropbox as Dropbox -import Sources.Services.Google as Google -import Sources.Services.Ipfs as Ipfs -import Sources.Services.WebDav as WebDav -import Time - - - --- FUNCTIONS - - -initialData : Service -> SourceData -initialData service = - case service of - AmazonS3 -> - AmazonS3.initialData - - AzureBlob -> - AzureBlob.initialData - - AzureFile -> - AzureFile.initialData - - Dropbox -> - Dropbox.initialData - - Google -> - Google.initialData - - Ipfs -> - Ipfs.initialData - - WebDav -> - WebDav.initialData - - -makeTrackUrl : Service -> Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl service = - case service of - AmazonS3 -> - AmazonS3.makeTrackUrl - - AzureBlob -> - AzureBlob.makeTrackUrl - - AzureFile -> - AzureFile.makeTrackUrl - - Dropbox -> - Dropbox.makeTrackUrl - - Google -> - Google.makeTrackUrl - - Ipfs -> - Ipfs.makeTrackUrl - - WebDav -> - WebDav.makeTrackUrl - - -makeTree : - Service - -> SourceData - -> Marker - -> Time.Posix - -> (Result Http.Error String -> msg) - -> Cmd msg -makeTree service = - case service of - AmazonS3 -> - AmazonS3.makeTree - - AzureBlob -> - AzureBlob.makeTree - - AzureFile -> - AzureFile.makeTree - - Dropbox -> - Dropbox.makeTree - - Google -> - Google.makeTree - - Ipfs -> - Ipfs.makeTree - - WebDav -> - WebDav.makeTree - - -parseErrorResponse : Service -> String -> Maybe String -parseErrorResponse service = - case service of - AmazonS3 -> - AmazonS3.parseErrorResponse - - AzureBlob -> - AzureBlob.parseErrorResponse - - AzureFile -> - AzureFile.parseErrorResponse - - Dropbox -> - Dropbox.parseErrorResponse - - Google -> - Google.parseErrorResponse - - Ipfs -> - Ipfs.parseErrorResponse - - WebDav -> - WebDav.parseErrorResponse - - -parsePreparationResponse : Service -> String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse service = - case service of - AmazonS3 -> - AmazonS3.parsePreparationResponse - - AzureBlob -> - AzureBlob.parsePreparationResponse - - AzureFile -> - AzureFile.parsePreparationResponse - - Dropbox -> - Dropbox.parsePreparationResponse - - Google -> - Google.parsePreparationResponse - - Ipfs -> - Ipfs.parsePreparationResponse - - WebDav -> - WebDav.parsePreparationResponse - - -parseTreeResponse : Service -> String -> Marker -> TreeAnswer Marker -parseTreeResponse service = - case service of - AmazonS3 -> - AmazonS3.parseTreeResponse - - AzureBlob -> - AzureBlob.parseTreeResponse - - AzureFile -> - AzureFile.parseTreeResponse - - Dropbox -> - Dropbox.parseTreeResponse - - Google -> - Google.parseTreeResponse - - Ipfs -> - Ipfs.parseTreeResponse - - WebDav -> - WebDav.parseTreeResponse - - -postProcessTree : Service -> List String -> List String -postProcessTree service = - case service of - AmazonS3 -> - AmazonS3.postProcessTree - - AzureBlob -> - AzureBlob.postProcessTree - - AzureFile -> - AzureFile.postProcessTree - - Dropbox -> - Dropbox.postProcessTree - - Google -> - Google.postProcessTree - - Ipfs -> - Ipfs.postProcessTree - - WebDav -> - WebDav.postProcessTree - - -prepare : - Service - -> String - -> SourceData - -> Marker - -> (Result Http.Error String -> msg) - -> Maybe (Cmd msg) -prepare service = - case service of - AmazonS3 -> - AmazonS3.prepare - - AzureBlob -> - AzureBlob.prepare - - AzureFile -> - AzureFile.prepare - - Dropbox -> - Dropbox.prepare - - Google -> - Google.prepare - - Ipfs -> - Ipfs.prepare - - WebDav -> - WebDav.prepare - - -properties : Service -> List Property -properties service = - case service of - AmazonS3 -> - AmazonS3.properties - - AzureBlob -> - AzureBlob.properties - - AzureFile -> - AzureFile.properties - - Dropbox -> - Dropbox.properties - - Google -> - Google.properties - - Ipfs -> - Ipfs.properties - - WebDav -> - WebDav.properties - - - --- KEYS & LABELS - - -keyToType : String -> Maybe Service -keyToType str = - case str of - "AmazonS3" -> - Just AmazonS3 - - "AzureBlob" -> - Just AzureBlob - - "AzureFile" -> - Just AzureFile - - "Dropbox" -> - Just Dropbox - - "Google" -> - Just Google - - "Ipfs" -> - Just Ipfs - - "WebDav" -> - Just WebDav - - _ -> - Nothing - - -typeToKey : Service -> String -typeToKey service = - case service of - AmazonS3 -> - "AmazonS3" - - AzureBlob -> - "AzureBlob" - - AzureFile -> - "AzureFile" - - Dropbox -> - "Dropbox" - - Google -> - "Google" - - Ipfs -> - "Ipfs" - - WebDav -> - "WebDav" - - -{-| Service labels. -Maps a service key to a label. --} -labels : List ( String, String ) -labels = - [ ( typeToKey AmazonS3, "Amazon S3" ) - , ( typeToKey AzureBlob, "Azure Blob Storage" ) - , ( typeToKey AzureFile, "Azure File Storage" ) - , ( typeToKey Dropbox, "Dropbox" ) - , ( typeToKey Ipfs, "IPFS" ) - , ( typeToKey WebDav, "WebDAV" ) - ] diff --git a/src/Library/Sources/Services/AmazonS3.elm b/src/Library/Sources/Services/AmazonS3.elm deleted file mode 100644 index 34cc66bca..000000000 --- a/src/Library/Sources/Services/AmazonS3.elm +++ /dev/null @@ -1,190 +0,0 @@ -module Sources.Services.AmazonS3 exposing (defaults, initialData, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties) - -{-| Amazon S3 Service. - -Resources: - - - - --} - -import Common -import Dict -import Http -import Sources exposing (Property, SourceData) -import Sources.Pick -import Sources.Processing exposing (..) -import Sources.Services.AmazonS3.Parser as Parser -import Sources.Services.AmazonS3.Presign exposing (..) -import Sources.Services.Common exposing (cleanPath, noPrep) -import Time - - - --- PROPERTIES --- 📟 - - -defaults = - { bucketName = "music" - , name = "Music from Amazon S3" - , region = "eu-west-1" - } - - -{-| The list of properties we need from the user. --} -properties : List Property -properties = - [ { key = "accessKey" - , label = "Access key" - , placeholder = "Fv6EWfLfCcMo" - , password = True - } - , { key = "secretKey" - , label = "Secret key" - , placeholder = "qeNcqiMpgqC8" - , password = True - } - , { key = "bucketName" - , label = "Bucket name" - , placeholder = "music" - , password = False - } - , { key = "region" - , label = "Region" - , placeholder = defaults.region - , password = False - } - , { key = "directoryPath" - , label = "Directory (Optional)" - , placeholder = "/" - , password = False - } - , { key = "host" - , label = "Host (Optional)" - , placeholder = "http://localhost:9000" - , password = False - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "accessKey", "" ) - , ( "bucketName", defaults.bucketName ) - , ( "directoryPath", "" ) - , ( "host", "" ) - , ( "name", defaults.name ) - , ( "region", defaults.region ) - , ( "secretKey", "" ) - ] - - - --- PREPARATION - - -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare _ _ _ _ = - Nothing - - - --- TREE - - -{-| Create a directory tree. - -List all the tracks in the bucket. -Or a specific directory in the bucket. - --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker currentTime resultMsg = - let - directoryPath = - srcData - |> Dict.get "directoryPath" - |> Maybe.withDefault "" - |> cleanPath - - initialParams = - [ ( "list-type", "2" ) - , ( "max-keys", "500" ) - ] - - prefix = - if String.length directoryPath > 0 then - [ ( "prefix", directoryPath ) ] - - else - [] - - continuation = - case marker of - InProgress s -> - [ ( "continuation-token", s ) ] - - _ -> - [] - - params = - initialParams ++ prefix ++ continuation - - url = - presignedUrl Get (60 * 5) params currentTime srcData "/" - in - Http.get - { url = url - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - } - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - noPrep - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - Sources.Pick.selectMusicFiles - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. -Creates a presigned url that's valid for 48 hours - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl currentTime _ srcData method pathToFile = - presignedUrl method 172800 [] currentTime srcData pathToFile diff --git a/src/Library/Sources/Services/AmazonS3/Parser.elm b/src/Library/Sources/Services/AmazonS3/Parser.elm deleted file mode 100644 index 17e6ef3c8..000000000 --- a/src/Library/Sources/Services/AmazonS3/Parser.elm +++ /dev/null @@ -1,66 +0,0 @@ -module Sources.Services.AmazonS3.Parser exposing (parseErrorResponse, parseTreeResponse) - -import Conditional exposing (..) -import Sources.Processing exposing (Marker(..), TreeAnswer) -import Xml.Decode exposing (..) - - - --- TREE - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response _ = - response - |> decodeString - (map2 - (\f m -> { filePaths = f, marker = m }) - filePathsDecoder - markerDecoder - ) - |> Result.withDefault { filePaths = [], marker = TheEnd } - - -filePathsDecoder : Decoder (List String) -filePathsDecoder = - string - |> single - |> path [ "Key" ] - |> list - |> path [ "Contents" ] - - -markerDecoder : Decoder Marker -markerDecoder = - map2 - (\a b -> - Maybe.withDefault - TheEnd - (Maybe.map2 - (\isTruncated token -> - ifThenElse (isTruncated == "true") (InProgress token) TheEnd - ) - a - b - ) - ) - (maybe <| path [ "IsTruncated" ] <| single string) - (maybe <| path [ "NextContinuationToken" ] <| single string) - - - --- ERROR - - -parseErrorResponse : String -> Maybe String -parseErrorResponse response = - response - |> decodeString errorMessagesDecoder - |> Result.toMaybe - - -errorMessagesDecoder : Decoder String -errorMessagesDecoder = - string - |> single - |> path [ "Message" ] diff --git a/src/Library/Sources/Services/AmazonS3/Presign.elm b/src/Library/Sources/Services/AmazonS3/Presign.elm deleted file mode 100644 index 6510534c6..000000000 --- a/src/Library/Sources/Services/AmazonS3/Presign.elm +++ /dev/null @@ -1,208 +0,0 @@ -module Sources.Services.AmazonS3.Presign exposing (presignedUrl) - -import Binary exposing (Bits) -import Common -import Cryptography.Hmac as Hmac -import DateFormat as Date -import Dict.Ext as Dict -import Hex -import Maybe.Extra as Maybe -import Regex -import SHA -import Sources exposing (SourceData) -import Sources.Processing exposing (HttpMethod, httpMethod) -import String.Ext as String -import Time -import Url - - - --- 🔱 - - -presignedUrl : - HttpMethod - -> Int - -> List ( String, String ) - -> Time.Posix - -> SourceData - -> String - -> String -presignedUrl method lifeExpectancyInSeconds extraParams currentTime srcData pathToFile = - let - aws = - srcData - - region = - Dict.fetchUnknown "region" aws - - bucketName = - Dict.fetchUnknown "bucketName" aws - - customHost = - case Dict.fetch "host" "" aws of - "" -> - Nothing - - x -> - Just x - - host = - case customHost of - Just h -> - h - |> String.chopStart "http://" - |> String.chopStart "https://" - |> String.chopEnd "/" - - Nothing -> - case String.trim region of - "" -> - bucketName ++ ".s3.amazonaws.com" - - r -> - bucketName ++ ".s3." ++ r ++ ".amazonaws.com" - - protocol = - if String.contains "http://" (Maybe.withDefault "" customHost) then - "http://" - - else - "https://" - - -- {var} Paths - filePathPrefix = - if Maybe.isJust customHost then - bucketName ++ "/" - - else - "" - - filePath = - pathToFile - |> String.chopStart "/" - |> String.split "/" - |> List.map (Url.percentEncode >> encodeAdditionalCharacters) - |> String.join "/" - |> String.append ("/" ++ filePathPrefix) - - -- {var} Time - -- timestamp -> 20130721T201207Z - -- date -> 20130721 - timestamp = - Date.format - [ Date.yearNumber - , Date.monthFixed - , Date.dayOfMonthFixed - , Date.text "T" - , Date.hourMilitaryFixed - , Date.minuteFixed - , Date.secondFixed - , Date.text "Z" - ] - Time.utc - currentTime - - date = - Date.format - [ Date.yearNumber - , Date.monthFixed - , Date.dayOfMonthFixed - ] - Time.utc - currentTime - - -- Request - credential = - [ Dict.fetchUnknown "accessKey" aws - , date - , region - , "s3" - , "aws4_request" - ] - |> String.join "/" - - queryString = - [ ( "X-Amz-Algorithm", "AWS4-HMAC-SHA256" ) - , ( "X-Amz-Credential", credential ) - , ( "X-Amz-Date", timestamp ) - , ( "X-Amz-Expires", String.fromInt lifeExpectancyInSeconds ) - , ( "X-Amz-SignedHeaders", "host" ) - ] - |> List.append extraParams - |> List.sortBy Tuple.first - |> Common.queryString - |> String.dropLeft 1 - |> encodeAdditionalCharacters - - request = - String.join - "\n" - [ httpMethod method - , filePath - , queryString - , "host:" ++ host - , "" - , "host" - , "UNSIGNED-PAYLOAD" - ] - - -- String to sign - stringToSign = - String.join - "\n" - [ "AWS4-HMAC-SHA256" - , timestamp - , String.join "/" [ date, region, "s3", "aws4_request" ] - - -- - , request - |> Binary.fromStringAsUtf8 - |> SHA.sha256 - |> Binary.toHex - |> String.toLower - ] - - -- Signature - signature = - ("AWS4" ++ Dict.fetchUnknown "secretKey" aws) - |> Binary.fromStringAsUtf8 - |> hmacSha256 date - |> hmacSha256 region - |> hmacSha256 "s3" - |> hmacSha256 "aws4_request" - |> hmacSha256 stringToSign - |> Binary.toHex - |> String.toLower - in - String.concat - [ protocol - , host - , filePath - , "?" - , queryString - , "&X-Amz-Signature=" - , signature - ] - - - --- ⚗️ - - -encodeAdditionalCharacters : String -> String -encodeAdditionalCharacters query = - Regex.replace - (Maybe.withDefault Regex.never <| Regex.fromString "[!*'()]") - (\{ match } -> - match - |> String.toList - |> List.map (Char.toCode >> Hex.toString >> String.toUpper >> (++) "%") - |> String.concat - ) - query - - -hmacSha256 : String -> Bits -> Bits -hmacSha256 = - Hmac.encrypt64 SHA.sha256 diff --git a/src/Library/Sources/Services/Azure/Authorization.elm b/src/Library/Sources/Services/Azure/Authorization.elm deleted file mode 100755 index 8c5a8b0fe..000000000 --- a/src/Library/Sources/Services/Azure/Authorization.elm +++ /dev/null @@ -1,225 +0,0 @@ -module Sources.Services.Azure.Authorization exposing (Computation(..), SignatureDependencies, StorageMethod(..), makeSignature, presignedUrl) - -{-| Resources: - - - - - - --} - -import Binary -import BinaryBase64 -import Common -import Cryptography.Hmac as Hmac -import DateFormat as Date -import Dict.Ext as Dict -import SHA -import Sources exposing (SourceData) -import Sources.Processing exposing (HttpMethod) -import String.Ext as String -import Time -import Url - - - --- Types - - -type Computation - = List - | Read - - -type StorageMethod - = Blob - | File - - - --- Public functions - - -presignedUrl : - StorageMethod - -> Computation - -> HttpMethod - -> Int - -> Time.Posix - -> SourceData - -> String - -> List ( String, String ) - -> String -presignedUrl storageMethod computation _ _ currentTime srcData pathToFile params = - let - azure = - srcData - - accountName = - Dict.fetchUnknown "accountName" azure - - accountKey = - Dict.fetchUnknown "accountKey" azure - - container = - Dict.fetchUnknown "container" azure - - -- {var} Time (y-MM-ddTHH:mmZ) - expiryTime = - Date.format - [ Date.yearNumber - , Date.text "-" - , Date.monthFixed - , Date.text "-" - , Date.dayOfMonthFixed - , Date.text "T" - , Date.hourMilitaryFixed - , Date.text ":" - , Date.minuteFixed - , Date.text "Z" - ] - Time.utc - (currentTime - |> Time.posixToMillis - |> (+) 3600000 - |> Time.millisToPosix - ) - - -- {var} Other - permissions = - case computation of - List -> - "l" - - Read -> - "r" - - resourceType = - case storageMethod of - Blob -> - "blob" - - File -> - "file" - - resType = - case storageMethod of - Blob -> - "container" - - File -> - "directory" - - -- Signature - signatureStuff = - { accountKey = accountKey - , accountName = accountName - , expiryTime = expiryTime - , permissions = permissions - , protocol = "https" - , resources = "co" - , services = "bf" - , startTime = "" - , version = "2017-04-17" - } - in - String.concat - [ "https://" - , Url.percentEncode accountName - , "." - , Url.percentEncode resourceType - , ".core.windows.net/" - , Url.percentEncode container - , "/" - , Url.percentEncode (String.chopStart "/" pathToFile) - - -- Start query params - , case Common.queryString params of - "" -> - "?" - - qs -> - qs - - -- Query params for certain requests - , case computation of - List -> - "&restype=" ++ resType ++ "&comp=list" - - _ -> - "" - - -- Signature things - , "&sv=" - , Url.percentEncode signatureStuff.version - , "&ss=" - , Url.percentEncode signatureStuff.services - , "&srt=" - , Url.percentEncode signatureStuff.resources - , "&sp=" - , Url.percentEncode signatureStuff.permissions - , "&se=" - , Url.percentEncode signatureStuff.expiryTime - , "&spr=" - , Url.percentEncode signatureStuff.protocol - , "&sig=" - , Url.percentEncode (makeSignature signatureStuff) - ] - - - --- Signature - - -type alias SignatureDependencies = - { accountKey : String - , accountName : String - , expiryTime : String - , permissions : String - , protocol : String - , resources : String - , services : String - , startTime : String - , version : String - } - - -{-| Make a signature. - - >>> makeSignature { accountKey = "93K17Co74T2lDHk2rA+wmb/avIAS6u6lPnZrk2hyT+9+aov82qNhrcXSNGZCzm9mjd4d75/oxxOr6r1JVpgTLA==", accountName = "tsmatsuzsttest0001", expiryTime = "2016-07-08T04:41:20Z", permissions = "rwdlacup", protocol = "https", resources = "sco", services = "bfqt", startTime = "2016-06-29T04:41:20Z", version = "2015-04-05" } - "+XuDjuLE1Sv/FrJTLz8YjsaDukWNTKX7e8G8Ew+5aps=" - --} -makeSignature : SignatureDependencies -> String -makeSignature { accountKey, accountName, expiryTime, permissions, protocol, resources, services, startTime, version } = - let - message = - -- accountname + "\n" + - -- signedpermissions + "\n" + - -- signedservice + "\n" + - -- signedresourcetype + "\n" + - -- signedstart + "\n" + - -- signedexpiry + "\n" + - -- signedIP + "\n" + - -- signedProtocol + "\n" + - -- signedversion + "\n" - String.join "\n" - [ accountName - , permissions - , services - , resources - , startTime - , expiryTime - , "" - , protocol - , version ++ "\n" - ] - in - accountKey - |> BinaryBase64.decode - |> Result.withDefault [] - |> List.map (Binary.fromDecimal >> Binary.ensureSize 8) - |> Binary.concat - |> Hmac.encrypt64 SHA.sha256 message - |> Binary.chunksOf 8 - |> List.map Binary.toDecimal - |> BinaryBase64.encode diff --git a/src/Library/Sources/Services/Azure/BlobParser.elm b/src/Library/Sources/Services/Azure/BlobParser.elm deleted file mode 100755 index c7d6f3900..000000000 --- a/src/Library/Sources/Services/Azure/BlobParser.elm +++ /dev/null @@ -1,64 +0,0 @@ -module Sources.Services.Azure.BlobParser exposing (parseErrorResponse, parseTreeResponse) - -import Sources.Processing exposing (Marker(..), TreeAnswer) -import Xml.Decode exposing (..) - - - --- TREE - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response _ = - response - |> decodeString - (map2 - (\f m -> { filePaths = f, marker = m }) - filePathsDecoder - markerDecoder - ) - |> Result.withDefault { filePaths = [], marker = TheEnd } - - -filePathsDecoder : Decoder (List String) -filePathsDecoder = - string - |> single - |> path [ "Name" ] - |> list - |> path [ "Blobs", "Blob" ] - - -markerDecoder : Decoder Marker -markerDecoder = - map - (\maybeNextMarker -> - case maybeNextMarker of - Just "" -> - TheEnd - - Just nextMarker -> - InProgress nextMarker - - Nothing -> - TheEnd - ) - (maybe <| path [ "NextMarker" ] <| single string) - - - --- ERROR - - -parseErrorResponse : String -> Maybe String -parseErrorResponse response = - response - |> decodeString errorMessagesDecoder - |> Result.toMaybe - - -errorMessagesDecoder : Decoder String -errorMessagesDecoder = - string - |> single - |> path [ "Message" ] diff --git a/src/Library/Sources/Services/Azure/FileMarker.elm b/src/Library/Sources/Services/Azure/FileMarker.elm deleted file mode 100755 index 5bbcc497b..000000000 --- a/src/Library/Sources/Services/Azure/FileMarker.elm +++ /dev/null @@ -1,154 +0,0 @@ -module Sources.Services.Azure.FileMarker exposing (MarkerItem(..), concat, itemToString, paramSeparator, prefixer, removeOne, separator, stringToItem, takeOne) - -{-| Custom `Marker` for the Azure File API. - -The Azure File API currently doesn't make a recursive list, -so we have to manage that ourselves. - -This custom marker is a combination of: - - - The default `marker` param, see URI parameters at - - Our custom logic to handle recursive listings - -Example: InProgress "dir=example ¶ param=defaultMarker" - --} - -import Sources.Processing exposing (Marker(..)) - - -type MarkerItem - = Directory String - | Param { directory : String, marker : String } - - -separator : String -separator = - " ɑ " - - -prefixer : String -prefixer = - " β " - - -paramSeparator : String -paramSeparator = - " ɣ " - - - --- IN - - -concat : List MarkerItem -> Marker -> Marker -concat list marker = - let - listStringified = - List.map itemToString list - - result = - case marker of - InProgress m -> - [ listStringified, String.split separator m ] - |> List.concat - |> String.join separator - - _ -> - String.join separator listStringified - in - case result of - "" -> - TheEnd - - r -> - InProgress r - - - --- OUT - - -{-| Take the first item and return it. --} -takeOne : Marker -> Maybe MarkerItem -takeOne marker = - case marker of - InProgress m -> - m - |> String.split separator - |> List.head - |> Maybe.andThen stringToItem - - _ -> - Nothing - - -{-| Remove the first item if there is one. --} -removeOne : Marker -> Marker -removeOne marker = - case marker of - InProgress m -> - let - tmp = - m - |> String.split separator - |> List.drop 1 - |> String.join separator - in - case tmp of - "" -> - TheEnd - - x -> - InProgress x - - _ -> - TheEnd - - - --- CONVERSIONS - - -itemToString : MarkerItem -> String -itemToString item = - case item of - Directory d -> - "dir" ++ prefixer ++ d - - Param { directory, marker } -> - "par" ++ prefixer ++ directory ++ paramSeparator ++ marker - - -stringToItem : String -> Maybe MarkerItem -stringToItem string = - let - exploded = - String.split prefixer string - in - case List.head exploded of - Just "dir" -> - exploded - |> List.drop 1 - |> String.join prefixer - |> Directory - |> Just - - Just "par" -> - exploded - |> List.drop 1 - |> String.join prefixer - |> String.split paramSeparator - |> (\x -> - case x of - [ dir, mar ] -> - Just (Param { directory = dir, marker = mar }) - - _ -> - Nothing - ) - - _ -> - Nothing diff --git a/src/Library/Sources/Services/Azure/FileParser.elm b/src/Library/Sources/Services/Azure/FileParser.elm deleted file mode 100755 index ed1c82036..000000000 --- a/src/Library/Sources/Services/Azure/FileParser.elm +++ /dev/null @@ -1,98 +0,0 @@ -module Sources.Services.Azure.FileParser exposing (parseErrorResponse, parseTreeResponse) - -import Sources.Processing exposing (Marker(..), TreeAnswer) -import Sources.Services.Azure.FileMarker as FileMarker exposing (MarkerItem(..)) -import Sources.Services.Common exposing (cleanPath) -import Xml.Decode exposing (..) - - - --- TREE - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response previousMarker = - response - |> decodeString (treeDecoder previousMarker) - |> Result.withDefault { filePaths = [], marker = TheEnd } - - -treeDecoder : Marker -> Decoder (TreeAnswer Marker) -treeDecoder previousMarker = - usedDirectoryDecoder - |> map cleanPath - |> andThen - (\usedDirectory -> - map2 - (\a b -> ( usedDirectory, a, b )) - (map (List.map <| String.append usedDirectory) filePathsDecoder) - (map (List.map <| String.append usedDirectory) directoryPathsDecoder) - ) - |> andThen - (\( usedDirectory, filePaths, directoryPaths ) -> - previousMarker - |> FileMarker.removeOne - |> FileMarker.concat (List.map Directory directoryPaths) - |> markerDecoder usedDirectory - |> map (\marker -> { filePaths = filePaths, marker = marker }) - ) - - -usedDirectoryDecoder : Decoder String -usedDirectoryDecoder = - stringAttr "DirectoryPath" - - -filePathsDecoder : Decoder (List String) -filePathsDecoder = - string - |> single - |> path [ "Name" ] - |> list - |> path [ "Entries", "File" ] - - -directoryPathsDecoder : Decoder (List String) -directoryPathsDecoder = - string - |> single - |> path [ "Name" ] - |> list - |> path [ "Entries", "Directory" ] - - -markerDecoder : String -> Marker -> Decoder Marker -markerDecoder usedDirectory markerWithDirectories = - map - (\maybeNextMarker -> - case maybeNextMarker of - Just "" -> - markerWithDirectories - - Just marker -> - FileMarker.concat - [ Param { directory = usedDirectory, marker = marker } ] - markerWithDirectories - - Nothing -> - markerWithDirectories - ) - (maybe <| path [ "NextMarker" ] <| single string) - - - --- ERROR - - -parseErrorResponse : String -> Maybe String -parseErrorResponse response = - response - |> decodeString errorMessagesDecoder - |> Result.toMaybe - - -errorMessagesDecoder : Decoder String -errorMessagesDecoder = - string - |> single - |> path [ "Message" ] diff --git a/src/Library/Sources/Services/AzureBlob.elm b/src/Library/Sources/Services/AzureBlob.elm deleted file mode 100644 index d9ca88f05..000000000 --- a/src/Library/Sources/Services/AzureBlob.elm +++ /dev/null @@ -1,168 +0,0 @@ -module Sources.Services.AzureBlob exposing (defaults, initialData, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties) - -{-| Microsoft Azure Blob Service. - -Resources: - - - - --} - -import Common -import Dict -import Http -import Sources exposing (Property, SourceData) -import Sources.Pick -import Sources.Processing exposing (..) -import Sources.Services.Azure.Authorization exposing (..) -import Sources.Services.Azure.BlobParser as Parser -import Sources.Services.Common exposing (cleanPath, noPrep) -import Time - - - --- PROPERTIES --- 📟 - - -defaults = - { name = "Music from Azure Blob Storage" - } - - -{-| The list of properties we need from the user. - -Tuple: (property, label, placeholder, isPassword) -Will be used for the forms. - --} -properties : List Property -properties = - [ { key = "accountName" - , label = "Account name" - , placeholder = "myaccount" - , password = False - } - , { key = "accountKey" - , label = "Account key" - , placeholder = "MXFPDkaN4KBT" - , password = True - } - , { key = "container" - , label = "Container" - , placeholder = "music" - , password = False - } - , { key = "directoryPath" - , label = "Directory (aka. Prefix, Optional)" - , placeholder = "/" - , password = False - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "accountName", "" ) - , ( "accountKey", "" ) - , ( "container", "" ) - , ( "directoryPath", "" ) - , ( "name", defaults.name ) - ] - - - --- PREPARATION - - -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare _ _ _ _ = - Nothing - - - --- TREE - - -{-| Create a directory tree. - -List all the tracks in the container. -Or a specific directory in the container. - --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker currentTime resultMsg = - let - directoryPath = - srcData - |> Dict.get "directoryPath" - |> Maybe.withDefault "" - |> cleanPath - - baseParams = - [ ( "maxresults", "1000" ) ] - - params = - case marker of - InProgress s -> - [ ( "marker", s ) ] - - _ -> - [] - - url = - presignedUrl Blob List Get 1 currentTime srcData directoryPath (baseParams ++ params) - in - Http.get - { url = url - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - } - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - noPrep - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -!!! Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - Sources.Pick.selectMusicFiles - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. -(!) Creates a presigned url that's valid for 48 hours - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl currentTime _ srcData _ pathToFile = - presignedUrl Blob Read Get 48 currentTime srcData pathToFile [] diff --git a/src/Library/Sources/Services/AzureFile.elm b/src/Library/Sources/Services/AzureFile.elm deleted file mode 100644 index e49a68bb8..000000000 --- a/src/Library/Sources/Services/AzureFile.elm +++ /dev/null @@ -1,172 +0,0 @@ -module Sources.Services.AzureFile exposing (defaults, initialData, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties) - -{-| Microsoft Azure File Service. - -Resources: - - - - --} - -import Common -import Dict -import Http -import Sources exposing (Property, SourceData) -import Sources.Pick -import Sources.Processing exposing (..) -import Sources.Services.Azure.Authorization exposing (..) -import Sources.Services.Azure.FileMarker as FileMarker exposing (MarkerItem(..)) -import Sources.Services.Azure.FileParser as Parser -import Sources.Services.Common exposing (cleanPath, noPrep) -import Time - - - --- PROPERTIES --- 📟 - - -defaults = - { name = "Music from Azure File Storage" - } - - -{-| The list of properties we need from the user. - -Tuple: (property, label, placeholder, isPassword) -Will be used for the forms. - --} -properties : List Property -properties = - [ { key = "accountName" - , label = "Account name" - , placeholder = "myaccount" - , password = False - } - , { key = "accountKey" - , label = "Account key" - , placeholder = "MXFPDkaN4KBT" - , password = True - } - , { key = "container" - , label = "Share name" - , placeholder = "music" - , password = False - } - , { key = "directoryPath" - , label = "Directory (aka. Prefix, Optional)" - , placeholder = "/" - , password = False - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "accountName", "" ) - , ( "accountKey", "" ) - , ( "container", "" ) - , ( "directoryPath", "" ) - , ( "name", defaults.name ) - ] - - - --- PREPARATION - - -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare _ _ _ _ = - Nothing - - - --- TREE - - -{-| Create a directory tree. - -List all the tracks in the container. -Or a specific directory in the container. - --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker currentTime resultMsg = - let - directoryPathFromSrcData = - srcData - |> Dict.get "directoryPath" - |> Maybe.withDefault "" - |> cleanPath - - baseParams = - [ ( "maxresults", "1000" ) ] - - ( directoryPath, params ) = - case FileMarker.takeOne marker of - Just (Directory directory) -> - Tuple.pair directory [] - - Just (Param param) -> - Tuple.pair param.directory [ ( "marker", param.marker ) ] - - _ -> - Tuple.pair directoryPathFromSrcData [] - - url = - presignedUrl File List Get 1 currentTime srcData directoryPath (baseParams ++ params) - in - Http.get - { url = url - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - } - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - noPrep - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -!!! Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - Sources.Pick.selectMusicFiles - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. -(!) Creates a presigned url that's valid for 48 hours - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl currentTime _ srcData _ pathToFile = - presignedUrl File Read Get 48 currentTime srcData pathToFile [] diff --git a/src/Library/Sources/Services/Common.elm b/src/Library/Sources/Services/Common.elm deleted file mode 100644 index 286e3e472..000000000 --- a/src/Library/Sources/Services/Common.elm +++ /dev/null @@ -1,49 +0,0 @@ -module Sources.Services.Common exposing (cleanPath, noPrep) - -import Sources exposing (..) -import Sources.Processing exposing (..) -import String.Ext as String -import Time - - - --- PATHS - - -{-| Clean a path. - - >>> cleanPath " " - "" - - >>> cleanPath "/example" - "example/" - - >>> cleanPath "example" - "example/" - - >>> cleanPath "example/" - "example/" - --} -cleanPath : String -> String -cleanPath dirtyPath = - dirtyPath - |> String.trim - |> String.chopStart "/" - |> String.chopEnd "/" - |> (\p -> - if String.isEmpty p then - p - - else - p ++ "/" - ) - - - --- PARSING - - -noPrep : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -noPrep _ _ srcData _ = - { sourceData = srcData, marker = TheEnd } diff --git a/src/Library/Sources/Services/Dropbox.elm b/src/Library/Sources/Services/Dropbox.elm deleted file mode 100644 index 130b52d4f..000000000 --- a/src/Library/Sources/Services/Dropbox.elm +++ /dev/null @@ -1,230 +0,0 @@ -module Sources.Services.Dropbox exposing (authorizationSourceData, authorizationUrl, defaults, getProperDirectoryPath, initialData, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties) - -{-| Dropbox Service. --} - -import Base64 -import Common -import Dict -import Dict.Ext as Dict -import Http -import Json.Decode -import Json.Encode -import Sources exposing (Property, SourceData) -import Sources.Pick -import Sources.Processing exposing (..) -import Sources.Services.Common exposing (cleanPath, noPrep) -import Sources.Services.Dropbox.Parser as Parser -import Time - - - --- PROPERTIES --- 📟 - - -defaults = - { appKey = "kwsydtrzban41zr" - , name = "Music from Dropbox" - } - - -{-| The list of properties we need from the user. - -Tuple: (property, label, placeholder, isPassword) -Will be used for the forms. - --} -properties : List Property -properties = - [ { key = "directoryPath" - , label = "Directory (Optional)" - , placeholder = "/" - , password = False - } - , { key = "appKey" - , label = "App key" - , placeholder = defaults.appKey - , password = False - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "appKey", defaults.appKey ) - , ( "directoryPath", "" ) - , ( "name", defaults.name ) - ] - - - --- AUTHORIZATION - - -{-| Authorization url. --} -authorizationUrl : SourceData -> String -> String -authorizationUrl sourceData origin = - let - encodeData data = - data - |> Dict.toList - |> List.map (Tuple.mapSecond Json.Encode.string) - |> Json.Encode.object - - state = - sourceData - |> encodeData - |> Json.Encode.encode 0 - |> Base64.encode - in - [ ( "response_type", "token" ) - , ( "client_id", Dict.fetch "appKey" "unknown" sourceData ) - , ( "redirect_uri", origin ++ "?path=sources/new/dropbox" ) - , ( "state", state ) - ] - |> Common.queryString - |> String.append "https://www.dropbox.com/oauth2/authorize" - - -{-| Authorization source data. --} -authorizationSourceData : { codeOrToken : Maybe String, state : Maybe String } -> SourceData -authorizationSourceData args = - args.state - |> Maybe.andThen (Base64.decode >> Result.toMaybe) - |> Maybe.withDefault "{}" - |> Json.Decode.decodeString (Json.Decode.dict Json.Decode.string) - |> Result.withDefault Dict.empty - |> Dict.unionFlipped initialData - |> Dict.update "accessToken" (\_ -> args.codeOrToken) - - - --- PREPARATION - - -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare _ _ _ _ = - Nothing - - - --- TREE - - -{-| Create a directory tree. - -List all the tracks in the bucket. -Or a specific directory in the bucket. - --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker _ resultMsg = - let - accessToken = - Dict.fetch "accessToken" "" srcData - - body = - (case marker of - TheBeginning -> - [ ( "limit", Json.Encode.int 2000 ) - , ( "path", Json.Encode.string (getProperDirectoryPath srcData) ) - , ( "recursive", Json.Encode.bool True ) - ] - - InProgress cursor -> - [ ( "cursor", Json.Encode.string cursor ) - ] - - TheEnd -> - [] - ) - |> Json.Encode.object - |> Http.jsonBody - - url = - case marker of - TheBeginning -> - "https://api.dropboxapi.com/2/files/list_folder" - - InProgress _ -> - "https://api.dropboxapi.com/2/files/list_folder/continue" - - TheEnd -> - "" - in - Http.request - { method = "POST" - , headers = [ Http.header "Authorization" ("Bearer " ++ accessToken) ] - , url = url - , body = body - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - , timeout = Nothing - , tracker = Nothing - } - - -getProperDirectoryPath : SourceData -> String -getProperDirectoryPath srcData = - let - path = - srcData - |> Dict.get "directoryPath" - |> Maybe.withDefault "" - |> cleanPath - in - if path == "" then - "" - - else - "/" ++ path - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - noPrep - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -!!! Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - Sources.Pick.selectMusicFiles - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl _ _ srcData _ pathToFile = - "dropbox://" ++ Dict.fetch "accessToken" "" srcData ++ "@" ++ pathToFile diff --git a/src/Library/Sources/Services/Dropbox/Parser.elm b/src/Library/Sources/Services/Dropbox/Parser.elm deleted file mode 100755 index 80dbb1982..000000000 --- a/src/Library/Sources/Services/Dropbox/Parser.elm +++ /dev/null @@ -1,43 +0,0 @@ -module Sources.Services.Dropbox.Parser exposing (parseErrorResponse, parseTreeResponse) - -import Json.Decode exposing (..) -import Sources.Processing exposing (Marker(..), TreeAnswer) - - - --- TREE - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response _ = - let - hasMore = - decodeString (field "has_more" bool) response - - cursor = - decodeString (field "cursor" string) response - - paths = - decodeString - (field "entries" <| list <| field "path_display" string) - response - in - { filePaths = Result.withDefault [] paths - , marker = - if Result.withDefault False hasMore then - InProgress (Result.withDefault "" cursor) - - else - TheEnd - } - - - --- Error - - -parseErrorResponse : String -> Maybe String -parseErrorResponse response = - response - |> decodeString (field "error_summary" string) - |> Result.toMaybe diff --git a/src/Library/Sources/Services/Google.elm b/src/Library/Sources/Services/Google.elm deleted file mode 100644 index 76db9a089..000000000 --- a/src/Library/Sources/Services/Google.elm +++ /dev/null @@ -1,323 +0,0 @@ -module Sources.Services.Google exposing (authorizationSourceData, authorizationUrl, defaultClientId, defaults, initialData, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties) - -{-| Google Drive Service. --} - -import Base64 -import Common -import Conditional exposing (..) -import Dict -import Dict.Ext as Dict -import Http -import Json.Decode -import Json.Encode -import Sources exposing (Property, SourceData) -import Sources.Processing exposing (..) -import Sources.Services.Google.Marker as Marker -import Sources.Services.Google.Parser as Parser -import String.Path -import Time - - - --- PROPERTIES --- 📟 - - -defaults = - { clientId = defaultClientId - , clientSecret = "uHBInBeGnA38FOlpLTEyPlUv" - , folderId = "" - , name = "Music from Google Drive" - } - - -defaultClientId : String -defaultClientId = - String.concat - [ "720114869239-74amkqeila5ursobjqvo9c263u1cllhu" - , ".apps.googleusercontent.com" - ] - - -{-| The list of properties we need from the user. - -Tuple: (property, label, placeholder, isPassword) -Will be used for the forms. - --} -properties : List Property -properties = - [ { key = "folderId" - , label = "Folder Id (Optional)" - , placeholder = defaults.folderId - , password = False - } - , { key = "clientId" - , label = "Client Id (Google Console)" - , placeholder = defaults.clientId - , password = False - } - , { key = "clientSecret" - , label = "Client Secret (Google Console)" - , placeholder = defaults.clientSecret - , password = False - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "clientId", defaults.clientId ) - , ( "clientSecret", defaults.clientSecret ) - , ( "folderId", defaults.folderId ) - , ( "name", defaults.name ) - ] - - - --- AUTHORIZATION - - -{-| Authorization url. --} -authorizationUrl : SourceData -> String -> String -authorizationUrl sourceData origin = - let - encodeData data = - data - |> Dict.toList - |> List.map (Tuple.mapSecond Json.Encode.string) - |> Json.Encode.object - - state = - sourceData - |> encodeData - |> Json.Encode.encode 0 - |> Base64.encode - in - [ ( "access_type", "offline" ) - , ( "client_id", Dict.fetch "clientId" "unknown" sourceData ) - , ( "prompt", "consent" ) - , ( "redirect_uri", origin ++ "?path=sources/new/google" ) - , ( "response_type", "code" ) - , ( "scope", "https://www.googleapis.com/auth/drive.readonly" ) - , ( "state", state ) - ] - |> Common.queryString - |> String.append "https://accounts.google.com/o/oauth2/v2/auth" - - -{-| Authorization source data. --} -authorizationSourceData : { codeOrToken : Maybe String, state : Maybe String } -> SourceData -authorizationSourceData args = - args.state - |> Maybe.andThen (Base64.decode >> Result.toMaybe) - |> Maybe.withDefault "{}" - |> Json.Decode.decodeString (Json.Decode.dict Json.Decode.string) - |> Result.withDefault Dict.empty - |> Dict.unionFlipped initialData - |> Dict.update "authCode" (\_ -> args.codeOrToken) - - - --- PREPARATION - - -{-| Before processing we need to prepare the source. -In this case this means that we will refresh the `access_token`. -Or if we don't have an access token yet, get one. --} -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare origin srcData _ resultMsg = - let - maybeCode = - Dict.get "authCode" srcData - - queryParams = - case maybeCode of - -- Exchange authorization code for access token & request token - Just _ -> - [ ( "client_id", Dict.fetch "clientId" "" srcData ) - , ( "client_secret", Dict.fetch "clientSecret" "" srcData ) - , ( "code", Dict.fetch "authCode" "" srcData ) - , ( "grant_type", "authorization_code" ) - , ( "redirect_uri", origin ++ "?path=sources/new/google" ) - ] - - -- Refresh access token - Nothing -> - [ ( "client_id", Dict.fetch "clientId" "" srcData ) - , ( "client_secret", Dict.fetch "clientSecret" "" srcData ) - , ( "refresh_token", Dict.fetch "refreshToken" "" srcData ) - , ( "grant_type", "refresh_token" ) - ] - - query = - Common.queryString queryParams - - url = - "https://www.googleapis.com/oauth2/v4/token" ++ query - in - (Just << Http.post) - { url = url - , body = Http.emptyBody - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - } - - - --- TREE - - -{-| Create a directory tree. - -List all the tracks in the bucket. -Or a specific directory in the bucket. - --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker _ resultMsg = - let - accessToken = - Dict.fetch "accessToken" "" srcData - - folderId = - Dict.fetch "folderId" "" srcData - - parentId = - marker - |> Marker.takeOne - |> Maybe.map Marker.itemDirectory - |> Maybe.andThen (\dir -> ifThenElse (String.isEmpty dir) Nothing <| Just dir) - |> Maybe.withDefault folderId - |> String.Path.file - - query = - case parentId of - "" -> - [ "mimeType contains 'audio/'" ] - - pid -> - [ "(mimeType contains 'audio/'" - , "or mimeType = 'application/vnd.google-apps.folder')" - , "and ('" ++ pid ++ "' in parents)" - ] - - paramsBase = - [ ( "fields" - , String.join ", " - [ "nextPageToken" - , "files/id" - , "files/mimeType" - , "files/name" - , "files/trashed" - ] - ) - , ( "includeItemsFromAllDrives", "true" ) - , ( "pageSize", "1000" ) - , ( "q", String.concat query ) - , ( "spaces", "drive" ) - , ( "supportsAllDrives", "true" ) - ] - - queryString = - (case Marker.takeOne marker of - Just (Marker.Param { token }) -> - [ ( "pageToken", token ) ] - - _ -> - [] - ) - |> List.append paramsBase - |> Common.queryString - in - Http.request - { method = "GET" - , headers = [ Http.header "Authorization" ("Bearer " ++ accessToken) ] - , url = "https://www.googleapis.com/drive/v3/files" ++ queryString - , body = Http.emptyBody - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - , timeout = Nothing - , tracker = Nothing - } - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - Parser.parsePreparationResponse - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -!!! Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - identity - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl currentTime srcId srcData _ path = - let - file = - String.Path.file path - - fileId = - file - |> String.split "?" - |> List.head - |> Maybe.withDefault file - - now = - Time.posixToMillis currentTime - - expiresAt = - Dict.fetch "expiresAt" (String.fromInt now) srcData - in - String.concat - [ "google://" - , Dict.fetch "accessToken" "" srcData - , ":" - , expiresAt - , ":" - , Dict.fetch "refreshToken" "" srcData - , ":" - , Dict.fetch "clientId" "" srcData - , ":" - , Dict.fetch "clientSecret" "" srcData - , ":" - , srcId - , "@" - , fileId - ] diff --git a/src/Library/Sources/Services/Google/Marker.elm b/src/Library/Sources/Services/Google/Marker.elm deleted file mode 100644 index 79c2e2976..000000000 --- a/src/Library/Sources/Services/Google/Marker.elm +++ /dev/null @@ -1,164 +0,0 @@ -module Sources.Services.Google.Marker exposing (..) - -{-| Custom `Marker` for the Google Drive API. - -The Google Drive API currently doesn't make a recursive list, -so we have to manage that ourselves. - -This custom marker is a combination of: - - - The standard `nextPageToken` param - - Our custom logic to handle recursive listings - -Example: InProgress "dir=example ¶ param=defaultMarker" - --} - -import Sources.Processing exposing (Marker(..)) - - -type MarkerItem - = Directory String - | Param { directory : String, token : String } - - -separator : String -separator = - " ɑ " - - -prefixer : String -prefixer = - " β " - - -paramSeparator : String -paramSeparator = - " ɣ " - - - --- IN - - -concat : List MarkerItem -> Marker -> Marker -concat list marker = - let - listStringified = - List.map itemToString list - - result = - case marker of - InProgress m -> - [ listStringified, String.split separator m ] - |> List.concat - |> String.join separator - - _ -> - String.join separator listStringified - in - case result of - "" -> - TheEnd - - r -> - InProgress r - - - --- OUT - - -{-| Take the first item and return it. --} -takeOne : Marker -> Maybe MarkerItem -takeOne marker = - case marker of - InProgress m -> - m - |> String.split separator - |> List.head - |> Maybe.andThen stringToItem - - _ -> - Nothing - - -{-| Remove the first item if there is one. --} -removeOne : Marker -> Marker -removeOne marker = - case marker of - InProgress m -> - let - tmp = - m - |> String.split separator - |> List.drop 1 - |> String.join separator - in - case tmp of - "" -> - TheEnd - - x -> - InProgress x - - _ -> - TheEnd - - - --- CONVERSIONS - - -itemDirectory : MarkerItem -> String -itemDirectory item = - case item of - Directory dir -> - dir - - Param { directory } -> - directory - - -itemToString : MarkerItem -> String -itemToString item = - case item of - Directory d -> - "dir" ++ prefixer ++ d - - Param { directory, token } -> - "par" ++ prefixer ++ directory ++ paramSeparator ++ token - - -stringToItem : String -> Maybe MarkerItem -stringToItem string = - let - exploded = - String.split prefixer string - in - case List.head exploded of - Just "dir" -> - exploded - |> List.drop 1 - |> String.join prefixer - |> Directory - |> Just - - Just "par" -> - exploded - |> List.drop 1 - |> String.join prefixer - |> String.split paramSeparator - |> (\x -> - case x of - [ dir, tok ] -> - Just (Param { directory = dir, token = tok }) - - _ -> - Nothing - ) - - _ -> - Nothing diff --git a/src/Library/Sources/Services/Google/Parser.elm b/src/Library/Sources/Services/Google/Parser.elm deleted file mode 100755 index ed2ad27a1..000000000 --- a/src/Library/Sources/Services/Google/Parser.elm +++ /dev/null @@ -1,185 +0,0 @@ -module Sources.Services.Google.Parser exposing (..) - -import Dict -import Json.Decode exposing (..) -import Json.Decode.Ext exposing (..) -import Maybe.Extra -import Sources exposing (SourceData) -import Sources.Pick -import Sources.Processing exposing (Marker(..), PrepationAnswer, TreeAnswer) -import Sources.Services.Google.Marker as Marker -import String.Path -import Time - - - --- PREPARATION - - -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse response currentTimePosix srcData _ = - let - newAccessToken = - response - |> decodeString (field "access_token" string) - |> Result.withDefault "" - - currentTime = - -- Current time in milliseconds - Time.posixToMillis currentTimePosix - - expiresAt = - -- Unix timestamp in milliseconds - response - |> decodeString (field "expires_in" int) - -- time in seconds - |> Result.withDefault 2500 - |> (\s -> currentTime + s * 1000) - - maybeRefreshToken = - response - |> decodeString (maybe <| field "refresh_token" string) - |> Result.toMaybe - |> Maybe.Extra.join - - refreshTokenUpdater dict = - case maybeRefreshToken of - Just refreshToken -> - Dict.insert "refreshToken" refreshToken dict - - Nothing -> - dict - in - srcData - |> Dict.insert "accessToken" newAccessToken - |> Dict.insert "expiresAt" (String.fromInt expiresAt) - |> refreshTokenUpdater - |> Dict.remove "authCode" - |> (\s -> { sourceData = s, marker = TheEnd }) - - - --- TREE - - -type alias Properties = - { id : String, name : String } - - -type Item - = File Properties - | Directory Properties - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response previousMarker = - let - nextPageToken = - response - |> decodeString (maybe <| field "nextPageToken" string) - |> Result.toMaybe - |> Maybe.Extra.join - - items = - response - |> decodeString (field "files" <| listIgnore itemDecoder) - |> Result.withDefault [] - - usedDirectory = - previousMarker - |> Marker.takeOne - |> Maybe.map Marker.itemDirectory - |> Maybe.withDefault "" - - usedPath = - usedDirectory - |> String.Path.dropRight 1 - |> String.Path.addSuffix - - ( directories, files ) = - List.partition - (\item -> - case item of - Directory _ -> - True - - File _ -> - False - ) - items - in - { filePaths = - files - |> List.map itemProperties - |> List.filter (.name >> Sources.Pick.isMusicFile) - |> List.map (\{ id, name } -> usedPath ++ id ++ "?name=" ++ name) - , marker = - previousMarker - |> Marker.removeOne - |> Marker.concat - (List.map - (itemProperties - >> (\props -> props.name ++ "/" ++ props.id) - >> String.append usedPath - >> Marker.Directory - ) - directories - ) - |> (case nextPageToken of - Just token -> - { directory = usedDirectory, token = token } - |> Marker.Param - |> List.singleton - |> Marker.concat - - Nothing -> - identity - ) - } - - -itemDecoder : Decoder Item -itemDecoder = - map4 - (\id name mime _ -> - case mime of - "application/vnd.google-apps.folder" -> - Directory { id = id, name = name } - - _ -> - File { id = id, name = name } - ) - (field "id" string) - (field "name" string) - (field "mimeType" string) - (andThen - (\b -> - if b then - fail "Exclude deleted files" - - else - succeed b - ) - (field "trashed" bool) - ) - - -itemProperties : Item -> Properties -itemProperties item = - case item of - Directory props -> - props - - File props -> - props - - - --- ERROR - - -parseErrorResponse : String -> Maybe String -parseErrorResponse response = - response - |> decodeString (at [ "error", "message" ] string) - |> Result.toMaybe diff --git a/src/Library/Sources/Services/Ipfs.elm b/src/Library/Sources/Services/Ipfs.elm deleted file mode 100644 index af17a8649..000000000 --- a/src/Library/Sources/Services/Ipfs.elm +++ /dev/null @@ -1,318 +0,0 @@ -module Sources.Services.Ipfs exposing (..) - -{-| IPFS Service. - -Resources: - - - - --} - -import Common exposing (boolFromString, boolToString) -import Conditional exposing (ifThenElse) -import Dict -import Dict.Ext as Dict -import Http -import Json.Decode as Json -import Sources exposing (Property, SourceData) -import Sources.Processing exposing (..) -import Sources.Services.Ipfs.Marker as Marker -import Sources.Services.Ipfs.Parser as Parser -import String.Ext as String -import Task -import Time -import Url - - - --- PROPERTIES --- 📟 - - -defaults = - { gateway = "" - , local = boolToString False - , name = "Music from IPFS" - , ipns = boolToString False - } - - -defaultGateway = - "https://ipfs.io" - - -{-| The list of properties we need from the user. - -Tuple: (property, label, placeholder, isPassword) -Will be used for the forms. - --} -properties : List Property -properties = - [ { key = "directoryHash" - , label = "Directory hash / DNSLink domain" - , placeholder = "QmVLDAhCY3X9P2u" - , password = False - } - , { key = "ipns" - , label = "Resolve using IPNS" - , placeholder = defaults.ipns - , password = False - } - , { key = "gateway" - , label = "Gateway (Optional)" - , placeholder = defaultGateway - , password = False - } - , { key = "local" - , label = "Resolve IPNS locally" - , placeholder = defaults.local - , password = False - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "directoryHash", "" ) - , ( "gateway", defaults.gateway ) - , ( "ipns", defaults.ipns ) - , ( "local", defaults.local ) - , ( "name", defaults.name ) - ] - - - --- PREPARATION - - -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare _ srcData _ toMsg = - let - domainName = - srcData - |> Dict.get "directoryHash" - |> Maybe.withDefault "" - |> String.chopStart "http://" - |> String.chopStart "https://" - |> String.chopEnd "/" - |> String.chopStart "_dnslink." - in - if isDnsLink srcData then - (Just << Http.request) - { method = "POST" - , headers = [] - , url = extractGateway srcData ++ "/api/v0/dns?arg=" ++ domainName - , body = Http.emptyBody - , expect = Http.expectString toMsg - , timeout = Nothing - , tracker = Nothing - } - - else - Nothing - - - --- TREE - - -{-| Create a directory tree. --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker _ resultMsg = - let - gateway = - extractGateway srcData - - resolveWithIpns = - case marker of - InProgress _ -> - False - - _ -> - srcData - |> Dict.fetch "ipns" defaults.ipns - |> boolFromString - - resolveLocally = - srcData - |> Dict.fetch "local" defaults.local - |> boolFromString - |> (\b -> ifThenElse b "true" "false") - - root = - rootHash srcData - - path = - case marker of - InProgress _ -> - marker - |> Marker.takeOne - |> Maybe.map (\p -> root ++ "/" ++ p) - |> Maybe.withDefault "" - - _ -> - root - in - (if resolveWithIpns then - Http.task - { method = "POST" - , headers = [] - , url = gateway ++ "/api/v0/name/resolve?arg=" ++ encodedPath path ++ "&local=" ++ resolveLocally ++ "&encoding=json" - , body = Http.emptyBody - , resolver = Http.stringResolver ipnsResolver - , timeout = Just (60 * 15 * 1000) - } - - else - Task.succeed { ipfsPath = path } - ) - |> Task.andThen - (\{ ipfsPath } -> - Http.task - { method = "POST" - , headers = [] - , url = gateway ++ "/api/v0/ls?arg=" ++ encodedPath ipfsPath ++ "&encoding=json" - , body = Http.emptyBody - , resolver = Http.stringResolver Common.translateHttpResponse - , timeout = Just (60 * 15 * 1000) - } - ) - |> Task.attempt resultMsg - - -ipnsResolver : Http.Response String -> Result Http.Error { ipfsPath : String } -ipnsResolver response = - case response of - Http.BadUrl_ u -> - Err (Http.BadUrl u) - - Http.Timeout_ -> - Err Http.Timeout - - Http.NetworkError_ -> - Err Http.NetworkError - - Http.BadStatus_ _ body -> - Err (Http.BadBody body) - - Http.GoodStatus_ _ body -> - body - |> Json.decodeString (Json.field "Path" Json.string) - |> Result.map (\path -> { ipfsPath = String.chopStart "/ipfs/" path }) - |> Result.mapError (Json.errorToString >> Http.BadBody) - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - Parser.parseDnsLookup - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -!!! Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - identity - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl _ _ srcData _ path = - if not (String.contains "/" path) && not (String.contains "." path) then - -- If it still uses the old way of doing things - -- (ie. each path was a cid) - extractGateway srcData ++ "/ipfs/" ++ path - - else - -- Or the new way - extractGateway srcData ++ "/ipfs/" ++ rootHash srcData ++ "/" ++ encodedPath path - - - --- ⚗️ - - -encodedPath : String -> String -encodedPath path = - path - |> String.split "/" - |> List.map Url.percentEncode - |> String.join "/" - - -extractGateway : SourceData -> String -extractGateway srcData = - srcData - |> Dict.get "gateway" - |> Maybe.map String.trim - |> Maybe.andThen - (\s -> - case s of - "" -> - Nothing - - _ -> - Just s - ) - |> Maybe.map (String.chopEnd "/") - |> Maybe.withDefault defaultGateway - - -isDnsLink : SourceData -> Bool -isDnsLink srcData = - srcData - |> Dict.get "directoryHash" - |> Maybe.map pathIsDnsLink - |> Maybe.withDefault False - - -pathIsDnsLink : String -> Bool -pathIsDnsLink = - String.contains "." - - -rootHash : SourceData -> String -rootHash srcData = - srcData - |> Dict.get "directoryHash" - |> Maybe.andThen - (\path -> - if pathIsDnsLink path then - Dict.get "directoryHashFromDnsLink" srcData - - else - Just path - ) - |> Maybe.withDefault "" - |> String.chopEnd "/" diff --git a/src/Library/Sources/Services/Ipfs/Marker.elm b/src/Library/Sources/Services/Ipfs/Marker.elm deleted file mode 100755 index 1be8f727c..000000000 --- a/src/Library/Sources/Services/Ipfs/Marker.elm +++ /dev/null @@ -1,93 +0,0 @@ -module Sources.Services.Ipfs.Marker exposing (concat, removeOne, separator, takeOne) - -{-| Marker stuff for IPFS. - -The IPFS API currently doesn't have a way to return a tree. -So we have build one ourselves. - -How it works: - -1. We list the objects in a given directory -2. We make a list of the sub directories -3. The marker becomes either: - - InProgress `hashOfSubDirA/hashOfSubDirB/hashOfSubDirC` - - TheEnd -4. If the marker was of the type `InProgress`, - the next request will make a list of the objects in `hashOfSubDirA`. - And so on ... - --} - -import Sources.Processing exposing (Marker(..)) - - -separator : String -separator = - " ɑ " - - - --- In - - -concat : List String -> Marker -> Marker -concat list marker = - let - result = - case marker of - InProgress m -> - [ list, String.split separator m ] - |> List.concat - |> String.join separator - - _ -> - String.join separator list - in - case result of - "" -> - TheEnd - - r -> - InProgress r - - - --- Out - - -{-| Take the first item and return it. --} -takeOne : Marker -> Maybe String -takeOne marker = - case marker of - InProgress m -> - m - |> String.split separator - |> List.head - - _ -> - Nothing - - -{-| Remove the first item if there is one. --} -removeOne : Marker -> Marker -removeOne marker = - case marker of - InProgress m -> - let - tmp = - m - |> String.split separator - |> List.drop 1 - |> String.join separator - in - case tmp of - "" -> - TheEnd - - x -> - InProgress x - - _ -> - TheEnd diff --git a/src/Library/Sources/Services/Ipfs/Parser.elm b/src/Library/Sources/Services/Ipfs/Parser.elm deleted file mode 100755 index 8175f757c..000000000 --- a/src/Library/Sources/Services/Ipfs/Parser.elm +++ /dev/null @@ -1,146 +0,0 @@ -module Sources.Services.Ipfs.Parser exposing (Link, linkDecoder, parseDnsLookup, parseErrorResponse, parseTreeResponse, treeDecoder) - -import Dict -import Json.Decode exposing (..) -import Sources exposing (SourceData) -import Sources.Pick exposing (isMusicFile) -import Sources.Processing exposing (Marker(..), PrepationAnswer, TreeAnswer) -import Sources.Services.Ipfs.Marker as Marker -import String.Ext as String -import Time - - - --- PREPARATION - - -parseDnsLookup : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parseDnsLookup response _ srcData _ = - case decodeString dnsResultDecoder response of - Ok path -> - srcData - |> Dict.insert "directoryHashFromDnsLink" (String.chopStart "/ipfs/" path) - |> (\s -> { sourceData = s, marker = TheEnd }) - - Err _ -> - { sourceData = srcData, marker = TheEnd } - - -dnsResultDecoder : Decoder String -dnsResultDecoder = - oneOf - [ at [ "Path" ] string - , cloudflareDnsResultDecoder - ] - - -cloudflareDnsResultDecoder : Decoder String -cloudflareDnsResultDecoder = - string - |> at [ "Answer", "0", "data" ] - |> map - (\txt -> - txt - |> String.chopEnd "\"" - |> String.chopStart "\"" - |> String.chopStart "dnslink=/ipfs/" - ) - - - --- TREE - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response previousMarker = - let - prefix = - case previousMarker of - TheBeginning -> - "" - - _ -> - response - |> decodeString prefixDecoder - |> Result.map - (String.chopStart "/ipfs/" - >> String.split "/" - >> List.drop 1 - >> String.join "/" - ) - |> Result.map - (\s -> - if String.isEmpty s then - "" - - else - s ++ "/" - ) - |> Result.withDefault "" - - links = - case decodeString treeDecoder response of - Ok l -> - l - - Err _ -> - [] - - dirs = - links - |> List.filter (.typ >> (==) 1) - |> List.map (\l -> prefix ++ l.name) - - files = - links - |> List.filter (.typ >> (==) 2) - |> List.filter (.name >> isMusicFile) - |> List.map (\l -> prefix ++ l.name) - in - { filePaths = - files - , marker = - previousMarker - |> Marker.removeOne - |> Marker.concat dirs - } - - -prefixDecoder : Decoder String -prefixDecoder = - field "Objects" <| index 0 <| field "Hash" <| string - - -treeDecoder : Decoder (List Link) -treeDecoder = - field "Objects" <| index 0 <| field "Links" <| list linkDecoder - - - --- LINKS - - -type alias Link = - { hash : String - , name : String - , typ : Int - } - - -linkDecoder : Decoder Link -linkDecoder = - map3 Link - (field "Hash" string) - (field "Name" string) - (field "Type" int) - - - --- ERRORS - - -parseErrorResponse : String -> Maybe String -parseErrorResponse response = - response - |> decodeString (field "Message" string) - |> Result.toMaybe diff --git a/src/Library/Sources/Services/WebDav.elm b/src/Library/Sources/Services/WebDav.elm deleted file mode 100644 index 3d1f6dfe4..000000000 --- a/src/Library/Sources/Services/WebDav.elm +++ /dev/null @@ -1,214 +0,0 @@ -module Sources.Services.WebDav exposing (defaults, initialData, makeTrackUrl, makeTree, parseErrorResponse, parsePreparationResponse, parseTreeResponse, postProcessTree, prepare, properties) - -{-| IPFS Service. - -Resources: - - - - --} - -import Base64 -import Common -import Dict -import Dict.Ext as Dict -import Http -import Sources exposing (Property, SourceData) -import Sources.Pick exposing (selectMusicFiles) -import Sources.Processing exposing (..) -import Sources.Services.Common exposing (noPrep) -import Sources.Services.WebDav.Marker as Marker -import Sources.Services.WebDav.Parser as Parser -import String.Ext as String -import Time -import Url - - - --- PROPERTIES --- 📟 - - -defaults = - { name = "Music from WebDAV" - } - - -{-| The list of properties we need from the user. - -Tuple: (property, label, placeholder, isPassword) -Will be used for the forms. - --} -properties : List Property -properties = - [ { key = "url" - , label = "Host URL" - , placeholder = "https://demo.nextcloud.com" - , password = False - } - , { key = "directoryPath" - , label = "Directory (Optional)" - , placeholder = "/icidasset/remote.php/webdav/" - , password = False - } - , { key = "username" - , label = "Username (Optional)" - , placeholder = "" - , password = False - } - , { key = "password" - , label = "Password (Optional)" - , placeholder = "" - , password = True - } - ] - - -{-| Initial data set. --} -initialData : SourceData -initialData = - Dict.fromList - [ ( "directoryPath", "" ) - , ( "url", "" ) - , ( "username", "" ) - , ( "password", "" ) - , ( "name", defaults.name ) - ] - - - --- PREPARATION - - -prepare : String -> SourceData -> Marker -> (Result Http.Error String -> msg) -> Maybe (Cmd msg) -prepare _ _ _ _ = - Nothing - - - --- TREE - - -{-| Create a directory tree. --} -makeTree : SourceData -> Marker -> Time.Posix -> (Result Http.Error String -> msg) -> Cmd msg -makeTree srcData marker _ resultMsg = - let - directory = - case marker of - InProgress _ -> - marker - |> Marker.takeOne - |> Maybe.withDefault "" - - _ -> - srcData - |> Dict.get "directoryPath" - |> Maybe.withDefault "" - - username = - Dict.fetch "username" "" srcData - - password = - Dict.fetch "password" "" srcData - - auth = - "Basic " ++ Base64.encode (username ++ ":" ++ password) - in - Http.request - { method = "PROPFIND" - , headers = [ Http.header "Authorization" auth, Http.header "Depth" "1" ] - , url = url { addAuth = False } srcData directory - , body = Http.emptyBody - , expect = Http.expectStringResponse resultMsg Common.translateHttpResponse - , timeout = Nothing - , tracker = Nothing - } - - -{-| Re-export parser functions. --} -parsePreparationResponse : String -> Time.Posix -> SourceData -> Marker -> PrepationAnswer Marker -parsePreparationResponse = - noPrep - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse = - Parser.parseTreeResponse - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Parser.parseErrorResponse - - - --- POST - - -{-| Post process the tree results. - -!!! Make sure we only use music files that we can use. - --} -postProcessTree : List String -> List String -postProcessTree = - selectMusicFiles - - - --- TRACK URL - - -{-| Create a public url for a file. - -We need this to play the track. - --} -makeTrackUrl : Time.Posix -> String -> SourceData -> HttpMethod -> String -> String -makeTrackUrl _ _ srcData _ filePath = - url { addAuth = True } srcData filePath - - - --- COMMON - - -url : { addAuth : Bool } -> SourceData -> String -> String -url { addAuth } srcData path = - let - host = - String.chopEnd "/" (Dict.fetch "url" "" srcData) - - username = - Dict.fetch "username" "" srcData - - password = - Dict.fetch "password" "" srcData - - authPrefix = - case ( username, password ) of - ( "", "" ) -> - "" - - ( u, p ) -> - u ++ ":" ++ p - - authBit = - if addAuth && String.length authPrefix > 0 then - "?basic_auth=" ++ Url.percentEncode (Base64.encode authPrefix) - - else - "" - - encodedPath = - path - |> String.chopStart "/" - |> String.split "/" - |> List.map Url.percentEncode - |> String.join "/" - in - host ++ "/" ++ encodedPath ++ authBit diff --git a/src/Library/Sources/Services/WebDav/Marker.elm b/src/Library/Sources/Services/WebDav/Marker.elm deleted file mode 100644 index 105c36903..000000000 --- a/src/Library/Sources/Services/WebDav/Marker.elm +++ /dev/null @@ -1,32 +0,0 @@ -module Sources.Services.WebDav.Marker exposing (concat, removeOne, takeOne) - -{-| Custom `Marker`. - -WebDAV doesn't make a recursive list, so we have to manage that ourselves. -The spec seems to have `Depth: Infinity` which should allow that. -But a lot of clients don't implement it. -This basically re-exports `Sources.Services.IPFS.Marker`. - --} - -import Sources.Services.Ipfs.Marker as IpfsMarker - - - --- IN - - -concat = - IpfsMarker.concat - - - --- OUT - - -takeOne = - IpfsMarker.takeOne - - -removeOne = - IpfsMarker.removeOne diff --git a/src/Library/Sources/Services/WebDav/Parser.elm b/src/Library/Sources/Services/WebDav/Parser.elm deleted file mode 100644 index 8e2d359f9..000000000 --- a/src/Library/Sources/Services/WebDav/Parser.elm +++ /dev/null @@ -1,135 +0,0 @@ -module Sources.Services.WebDav.Parser exposing (..) - -import Maybe.Extra as Maybe -import Sources.Pick exposing (isMusicFile) -import Sources.Processing exposing (Marker, TreeAnswer) -import Sources.Services.Ipfs.Marker as Marker -import String.Ext as String -import Url -import Xml.Decode exposing (..) -import XmlParser - - - --- TREE - - -parseTreeResponse : String -> Marker -> TreeAnswer Marker -parseTreeResponse response previousMarker = - let - currentDir = - Maybe.withDefault "//" (Marker.takeOne previousMarker) - - parseResult = - XmlParser.parse response - - namespace = - parseResult - |> Result.map - (\xml -> - case xml.root of - XmlParser.Element nodeName _ _ -> - nodeName - |> String.split ":" - |> List.head - - _ -> - Nothing - ) - |> Result.withDefault Nothing - |> (\maybe -> - case maybe of - Just n -> - n ++ ":" - - Nothing -> - if String.contains " decodeString (treeDecoder namespace) - |> Result.withDefault [] - |> List.map Url.percentDecode - |> Maybe.values - |> List.filter ((/=) currentDir) - - ( dirs, files ) = - List.partition (String.endsWith "/") entries - in - { filePaths = - List.map (String.chopStart "/") files - , marker = - previousMarker - |> Marker.removeOne - |> Marker.concat dirs - } - - -treeDecoder : String -> Decoder (List String) -treeDecoder namespace = - path - [ namespace ++ "response" ] - (leakyList <| treeItemDecoder namespace) - - -treeItemDecoder : String -> Decoder String -treeItemDecoder namespace = - let - withNamespace = - String.append namespace - in - string - |> single - |> path [ withNamespace "href" ] - |> andThen - (\href -> - oneOf - [ -- Audio - -------- - string - |> single - |> path [ withNamespace "propstat", withNamespace "prop", withNamespace "getcontenttype" ] - |> andThen (mustBeAudio href) - |> map (\_ -> href) - - -- Directory - ------------ - , string - |> single - |> path [ withNamespace "propstat", withNamespace "prop", withNamespace "resourcetype", withNamespace "collection" ] - |> andThen - (\_ -> - if String.endsWith "/@eaDir/" href then - fail "Ignore Synology metadata" - - else - succeed href - ) - ] - ) - - -mustBeAudio : String -> String -> Decoder String -mustBeAudio href contentType = - if isMusicFile href then - succeed contentType - - else if String.startsWith "audio/" contentType then - succeed contentType - - else - fail "Ignore this, not an audio file" - - - --- ERROR - - -parseErrorResponse : String -> Maybe String -parseErrorResponse = - Just diff --git a/src/Library/String/Ext.elm b/src/Library/String/Ext.elm deleted file mode 100644 index f16b45a73..000000000 --- a/src/Library/String/Ext.elm +++ /dev/null @@ -1,46 +0,0 @@ -module String.Ext exposing (..) - -{-| Flipped version of `append`. --} - --- 🔱 - - -{-| Flipped version of `append`. --} -addSuffix : String -> String -> String -addSuffix a b = - String.append b a - - -{-| Chop something from the end of a string until it's not there anymore. --} -chopEnd : String -> String -> String -chopEnd needle str = - if String.endsWith needle str then - str - |> String.dropRight (String.length needle) - |> chopEnd needle - - else - str - - -{-| Chop something from the beginning of a string until it's not there anymore. --} -chopStart : String -> String -> String -chopStart needle str = - if String.startsWith needle str then - str - |> String.dropLeft (String.length needle) - |> chopStart needle - - else - str - - -{-| Join a list of Strings with a space in between. --} -joinWithSpace : List String -> String -joinWithSpace = - String.join " " diff --git a/src/Library/String/Path.elm b/src/Library/String/Path.elm deleted file mode 100644 index becbe6d9b..000000000 --- a/src/Library/String/Path.elm +++ /dev/null @@ -1,48 +0,0 @@ -module String.Path exposing (..) - -import List.Extra as List - - - --- ⛩ - - -sep : String -sep = - "/" - - - --- 🔱 - - -addSuffix : String -> String -addSuffix path = - case path of - "" -> - "" - - p -> - p ++ sep - - -{-| Drop an amount of path segments from the right side. - - >>> dropRight 5 "a/b/c/d/e/f" - "a" - --} -dropRight : Int -> String -> String -dropRight int path = - path - |> String.split sep - |> (\l -> List.take (List.length l - int) l) - |> String.join sep - - -file : String -> String -file path = - path - |> String.split sep - |> List.last - |> Maybe.withDefault path diff --git a/src/Library/Syncing.elm b/src/Library/Syncing.elm deleted file mode 100644 index 19622e3fc..000000000 --- a/src/Library/Syncing.elm +++ /dev/null @@ -1,198 +0,0 @@ -module Syncing exposing (LocalConfig, RemoteConfig, task) - -import Json.Decode as Decode -import Json.Encode as Json -import Maybe.Extra as Maybe -import Task exposing (Task) -import Task.Extra as Task -import Time -import Time.Ext as Time -import User.Layer as User exposing (..) - - - --- 🌳 - - -type alias LocalConfig = - { localData : HypaethralData - , saveLocal : HypaethralBit -> Decode.Value -> Task String () - } - - -type alias RemoteConfig = - { retrieve : HypaethralBit -> Task String (Maybe Decode.Value) - , save : HypaethralBit -> Decode.Value -> Task String () - } - - - --- 🛠 - - -{-| Syncs all hypaethral data. - -Returns `Nothing` if the local data is preferred. - -🏝️ LOCAL -🛰️ REMOTE - -1. Try to pull remote `modified.json` timestamp - a. If newer, continue (#2) - b. If same, do nothing - c. If older, or not present, prefer local data 🏝️ (stop & push) -2. Try to download all remote data - a. If any remote data, continue (#3) - b. If none, prefer local data 🏝️ (stop & push) -3. Decode remote data and compare timestamps - a. If newer, use remote data 🛰️ - b. If same, do nothing - c. If older, prefer local data 🏝️ (stop & push) - d. If no timestamps, if local data, prefer local 🏝️ (stop & push), otherwise remote 🛰️ - --} -task : - Task String a - -> LocalConfig - -> RemoteConfig - -> Task String (Maybe HypaethralData) -task initialTask localConfig remoteConfig = - initialTask - |> Task.andThen - (\_ -> - remoteConfig.retrieve ModifiedAt - ) - |> Task.andThen - (\maybeModifiedAt -> - let - maybeRemoteModifiedAt = - Maybe.andThen - (Decode.decodeValue Time.decoder >> Result.toMaybe) - maybeModifiedAt - in - case ( maybeRemoteModifiedAt, localConfig.localData.modifiedAt ) of - ( Just remoteModifiedAt, Just localModifiedAt ) -> - if Time.posixToMillis remoteModifiedAt == Time.posixToMillis localModifiedAt then - -- 🏝️ - Task.succeed Nothing - - else if Time.posixToMillis remoteModifiedAt > Time.posixToMillis localModifiedAt then - -- 🛰️ - fetchRemote localConfig remoteConfig - - else - -- 🏝️ → 🛰️ - pushLocalToRemote localConfig remoteConfig { return = Nothing } - - ( Just _, Nothing ) -> - -- 🛰️ - fetchRemote localConfig remoteConfig - - ( Nothing, _ ) -> - -- 🛰️ - fetchRemote localConfig remoteConfig - ) - - -fetchRemote : - LocalConfig - -> RemoteConfig - -> Task String (Maybe HypaethralData) -fetchRemote localConfig remoteConfig = - let - { localData, saveLocal } = - localConfig - - { retrieve } = - remoteConfig - - saveLocally data = - data - |> User.saveHypaethralData saveLocal - |> Task.map (\_ -> Just data) - - noLocalData = - List.isEmpty localData.sources - && List.isEmpty localData.favourites - && List.isEmpty localData.playlists - in - retrieve - |> User.retrieveHypaethralData - |> Task.andThen - (\list -> - let - remoteHasExistingData = - List.any (Tuple.second >> Maybe.isJust) list - in - if remoteHasExistingData then - -- 🛰️ - Task.succeed list - - else - -- 🏝️ → 🛰️ - pushLocalToRemote localConfig remoteConfig { return = list } - ) - |> Task.andThen - (\list -> - -- Decode remote - list - |> List.map (\( a, b ) -> ( hypaethralBitKey a, Maybe.withDefault Json.null b )) - |> Json.object - |> User.decodeHypaethralData - |> Task.fromResult - |> Task.mapError Decode.errorToString - ) - |> Task.andThen - (\remoteData -> - -- Compare modifiedAt timestamps - case ( remoteData.modifiedAt, localData.modifiedAt ) of - ( Just remoteModifiedAt, Just localModifiedAt ) -> - if Time.posixToMillis remoteModifiedAt == Time.posixToMillis localModifiedAt then - -- 🏝️ - Task.succeed Nothing - - else if Time.posixToMillis remoteModifiedAt > Time.posixToMillis localModifiedAt then - -- 🛰️ - saveLocally remoteData - - else - -- 🏝️ → 🛰️ - pushLocalToRemote localConfig remoteConfig { return = Nothing } - - ( Just _, Nothing ) -> - -- 🛰️ - saveLocally remoteData - - ( Nothing, Just _ ) -> - -- 🏝️ → 🛰️ - pushLocalToRemote localConfig remoteConfig { return = Nothing } - - _ -> - if noLocalData then - -- 🛰️ - saveLocally remoteData - - else - -- 🏝️ - Task.succeed Nothing - ) - - - --- ㊙️ - - -pushLocalToRemote : LocalConfig -> RemoteConfig -> { return : a } -> Task String a -pushLocalToRemote localConfig remoteConfig { return } = - localConfig.localData - |> User.encodedHypaethralDataList - |> (case localConfig.localData.modifiedAt of - Just localModifiedAt -> - (::) ( ModifiedAt, Time.encode localModifiedAt ) - - Nothing -> - identity - ) - |> List.map (\( bit, data ) -> remoteConfig.save bit data) - |> Task.sequence - |> Task.map (\_ -> return) diff --git a/src/Library/Syncing/Services/Dropbox/Token.elm b/src/Library/Syncing/Services/Dropbox/Token.elm deleted file mode 100644 index 21b07d6bf..000000000 --- a/src/Library/Syncing/Services/Dropbox/Token.elm +++ /dev/null @@ -1,18 +0,0 @@ -module Syncing.Services.Dropbox.Token exposing (..) - -import Time - - -isExpired : { currentTime : Time.Posix, expiresAt : Int } -> Bool -isExpired { currentTime, expiresAt } = - let - currentTimeInSeconds = - Time.posixToMillis currentTime // 1000 - - currentTimeWithOffset = - -- We add 60 seconds here because we only get the current time every minute, - -- so there's always the chance the "current time" is 1-60 seconds behind. - currentTimeInSeconds + 60 - in - -- If the access token is expired - currentTimeWithOffset >= expiresAt diff --git a/src/Library/Task/Extra.elm b/src/Library/Task/Extra.elm deleted file mode 100644 index a18e786f8..000000000 --- a/src/Library/Task/Extra.elm +++ /dev/null @@ -1,28 +0,0 @@ -module Task.Extra exposing (do, doDelayed, fromResult) - -import Process -import Task - - - --- 🔱 - - -do : msg -> Cmd msg -do msg = - Task.perform identity (Task.succeed msg) - - -doDelayed : Float -> msg -> Cmd msg -doDelayed delay msg = - Task.perform (always msg) (Process.sleep delay) - - -fromResult : Result error value -> Task.Task error value -fromResult result = - case result of - Ok v -> - Task.succeed v - - Err e -> - Task.fail e diff --git a/src/Library/TaskPort/Extra.elm b/src/Library/TaskPort/Extra.elm deleted file mode 100644 index 8a1792f52..000000000 --- a/src/Library/TaskPort/Extra.elm +++ /dev/null @@ -1,18 +0,0 @@ -module TaskPort.Extra exposing (..) - -import TaskPort - - -errorToStringCustom : TaskPort.Error -> String -errorToStringCustom err = - case err of - TaskPort.JSError jsErr -> - case jsErr of - TaskPort.ErrorObject _ errRecord -> - errRecord.message - - TaskPort.ErrorValue _ -> - TaskPort.errorToString err - - TaskPort.InteropError _ -> - TaskPort.errorToString err diff --git a/src/Library/Theme.elm b/src/Library/Theme.elm deleted file mode 100644 index ff61848ba..000000000 --- a/src/Library/Theme.elm +++ /dev/null @@ -1,28 +0,0 @@ -module Theme exposing (..) - -import Html exposing (Html) -import Json.Decode as Decode -import Json.Encode as Encode -import Material.Icons.Types exposing (Icon) - - -type alias Id = - { id : String } - - -type alias Theme msg model = - { id : String - , title : String - , icon : Icon msg - , view : model -> Html msg - } - - -idDecoder : Decode.Decoder Id -idDecoder = - Decode.map (\s -> { id = s }) Decode.string - - -encodeId : Id -> Encode.Value -encodeId { id } = - Encode.string id diff --git a/src/Library/Time/Ext.elm b/src/Library/Time/Ext.elm deleted file mode 100644 index b91d31aed..000000000 --- a/src/Library/Time/Ext.elm +++ /dev/null @@ -1,104 +0,0 @@ -module Time.Ext exposing (decoder, default, encode, monthName, monthNumber) - -import Json.Decode as Decode exposing (Decoder) -import Json.Encode as Json -import Time exposing (Month(..)) - - - --- 🔱 - - -decoder : Decoder Time.Posix -decoder = - Decode.map Time.millisToPosix Decode.int - - -default : Time.Posix -default = - Time.millisToPosix 0 - - -encode : Time.Posix -> Json.Value -encode time = - Json.int (Time.posixToMillis time) - - -monthName : Time.Month -> String -monthName month = - case month of - Jan -> - "January" - - Feb -> - "February" - - Mar -> - "March" - - Apr -> - "April" - - May -> - "May" - - Jun -> - "June" - - Jul -> - "July" - - Aug -> - "August" - - Sep -> - "September" - - Oct -> - "October" - - Nov -> - "November" - - Dec -> - "December" - - -monthNumber : Time.Month -> Int -monthNumber month = - case month of - Jan -> - 1 - - Feb -> - 2 - - Mar -> - 3 - - Apr -> - 4 - - May -> - 5 - - Jun -> - 6 - - Jul -> - 7 - - Aug -> - 8 - - Sep -> - 9 - - Oct -> - 10 - - Nov -> - 11 - - Dec -> - 12 diff --git a/src/Library/Tracks.elm b/src/Library/Tracks.elm deleted file mode 100644 index 372fba7d5..000000000 --- a/src/Library/Tracks.elm +++ /dev/null @@ -1,469 +0,0 @@ -module Tracks exposing (..) - -import Base64 -import List.Extra as List -import Maybe.Extra as Maybe -import Playlists exposing (Playlist, PlaylistTrackWithoutMetadata) -import String.Ext as String -import Time -import Time.Ext as Time - - - --- 🌳 - - -type alias Track = - { id : String - , insertedAt : Time.Posix - , path : String - , sourceId : String - , tags : Tags - } - - - --- PIECES - - -type alias Tags = - { disc : Int - , nr : Int - - -- Main - , album : Maybe String - , artist : Maybe String - , title : String - - -- Extra - , genre : Maybe String - , picture : Maybe String - , year : Maybe Int - } - - - --- DERIVATIVES & SUPPLEMENTS - - -type alias Cover = - { group : String - , identifiedTrackCover : IdentifiedTrack - , key : String - , sameAlbum : Bool - , sameArtist : Bool - , trackIds : List String - , tracks : List IdentifiedTrack - , variousArtists : Bool - } - - -type alias Favourite = - { artist : Maybe String - , title : String - } - - -type alias IdentifiedTrack = - ( Identifiers, Track ) - - -type alias Identifiers = - { isFavourite : Bool - , isMissing : Bool - - -- - , filename : String - , group : Maybe { name : String, firstInGroup : Bool } - , indexInList : Int - , indexInPlaylist : Maybe Int - , parentDirectory : String - } - - - --- COLLECTIONS - - -type alias Collection = - { untouched : List Track - - -- `Track`s with `Identifiers` - , identified : List IdentifiedTrack - - -- Sorted, grouped and filtered by playlist (if not auto-generated) - , arranged : List IdentifiedTrack - - -- Filtered by search results, favourites, etc. - , harvested : List IdentifiedTrack - - -- Contexts - ----------- - , scrollContext : String - } - - -type alias CollectionDependencies = - { cached : List String - , cachedOnly : Bool - , enabledSourceIds : List String - , favourites : List Favourite - , favouritesOnly : Bool - , grouping : Maybe Grouping - , hideDuplicates : Bool - , selectedPlaylist : Maybe Playlist - , searchResults : Maybe (List String) - , sortBy : SortBy - , sortDirection : SortDirection - } - - -type alias Parcel = - ( CollectionDependencies, Collection ) - - -type alias CoverCollection = - { arranged : List Cover - , harvested : List Cover - } - - - --- GROUPING & SORTING - - -type Grouping - = AddedOn - | Directory - | FirstAlphaCharacter - | TrackYear - - -type SortBy - = Artist - | Album - | PlaylistIndex - | Title - - -type SortDirection - = Asc - | Desc - - - --- VIEW - - -type Scene - = Covers - | List - - - --- 🔱 - - -emptyTrack : Track -emptyTrack = - { id = "" - , insertedAt = Time.default - , path = "" - , sourceId = "" - , tags = emptyTags - } - - -emptyTags : Tags -emptyTags = - { disc = 1 - , nr = 0 - , album = Nothing - , artist = Nothing - , title = "Empty" - , genre = Nothing - , picture = Nothing - , year = Nothing - } - - -emptyIdentifiedTrack : IdentifiedTrack -emptyIdentifiedTrack = - ( emptyIdentifiers - , emptyTrack - ) - - -emptyIdentifiers : Identifiers -emptyIdentifiers = - { isFavourite = False - , isMissing = False - - -- - , filename = "" - , group = Nothing - , indexInList = 0 - , indexInPlaylist = Nothing - , parentDirectory = "" - } - - -emptyCollection : Collection -emptyCollection = - { untouched = [] - , identified = [] - , arranged = [] - , harvested = [] - - -- Contexts - ----------- - , scrollContext = "" - } - - -{-| If a track doesn't fit into a group, where does it go? --} -fallbackCoverGroup : String -fallbackCoverGroup = - "MISSING_TRACK_INFO" - - -{-| This value is used as a fallback in the UI if the album is missing. --} -fallbackAlbum : String -fallbackAlbum = - "" - - -{-| This value is used as a fallback in the UI if the artist is missing. --} -fallbackArtist : String -fallbackArtist = - "" - - - --- MORE STUFF - - -coverGroup : SortBy -> IdentifiedTrack -> String -coverGroup sort ( identifiers, { tags } as track ) = - if identifiers.isMissing then - "MISSING_TRACKS" - - else - case sort of - Artist -> - Maybe.unwrap fallbackCoverGroup (String.trim >> String.toLower) tags.artist - - Album -> - -- There is the possibility of albums with the same name, - -- such as "Greatests Hits". - -- To make sure we treat those as different albums, - -- we prefix the album by its parent directory. - case tags.album of - Just album -> - (identifiers.parentDirectory ++ album) - |> String.trim - |> String.toLower - - Nothing -> - fallbackCoverGroup - - PlaylistIndex -> - "" - - Title -> - tags.title - - -coverKey : Bool -> Track -> String -coverKey isVariousArtists { tags } = - if isVariousArtists then - Maybe.withDefault "?" tags.album - - else - Maybe.withDefault "?" tags.artist ++ " --- " ++ Maybe.withDefault "?" tags.album - - -isNowPlaying : IdentifiedTrack -> IdentifiedTrack -> Bool -isNowPlaying ( a, b ) ( x, y ) = - a.indexInPlaylist == x.indexInPlaylist && b.id == y.id - - -makeTrack : String -> ( String, Tags ) -> Track -makeTrack sourceId ( path, tags ) = - { id = - (sourceId ++ "//" ++ path) - |> Base64.encode - |> String.chopEnd "=" - , insertedAt = Time.default - , path = path - , sourceId = sourceId - , tags = tags - } - - -matchesAutoGeneratedPlaylist : Playlist -> Track -> Bool -matchesAutoGeneratedPlaylist playlist track = - case playlist.autoGenerated of - Just { level } -> - track.path - |> String.split "/" - |> List.drop (max 0 (level - 1)) - |> List.head - |> (==) (Just playlist.name) - - Nothing -> - False - - -missingId : String -missingId = - "" - - -pathParts : Track -> { filename : String, parentDirectory : String } -pathParts { path } = - let - s = - String.split "/" path - - l = - List.length s - in - case List.drop (max 0 <| l - 2) s of - [ p, f ] -> - { filename = f, parentDirectory = p } - - [ f ] -> - { filename = f, parentDirectory = "" } - - _ -> - { filename = "", parentDirectory = "" } - - -{-| Given a collection of tracks, pick out the tracks by id in order. -Note that track ids in the ids list may occur multiple times. --} -pick : List String -> List Track -> List Track -pick ids collection = - collection - |> List.foldr - (\track -> - List.map - (\picking -> - case picking of - PickId id -> - if id == track.id then - PickTrack track - - else - PickId id - - p -> - p - ) - ) - (List.map PickId ids) - |> List.foldr - (\picking acc -> - case picking of - PickId _ -> - acc - - PickTrack track -> - track :: acc - ) - [] - - -removeByPaths : { sourceId : String, paths : List String } -> List Track -> { kept : List Track, removed : List Track } -removeByPaths { sourceId, paths } tracks = - tracks - |> List.foldr - (\t ( kept, removed, remainingPathsToRemove ) -> - if t.sourceId == sourceId && List.member t.path remainingPathsToRemove then - ( kept, t :: removed, List.remove t.path remainingPathsToRemove ) - - else - ( t :: kept, removed, remainingPathsToRemove ) - ) - ( [], [], paths ) - |> (\( k, r, _ ) -> - { kept = k, removed = r } - ) - - -removeBySourceId : String -> List Track -> { kept : List Track, removed : List Track } -removeBySourceId removedSourceId tracks = - tracks - |> List.foldr - (\t ( kept, removed ) -> - if t.sourceId == removedSourceId then - ( kept, t :: removed ) - - else - ( t :: kept, removed ) - ) - ( [], [] ) - |> (\( k, r ) -> - { kept = k, removed = r } - ) - - -removeFromPlaylist : List IdentifiedTrack -> Playlist -> Playlist -removeFromPlaylist tracks playlist = - playlist.tracks - |> List.indexedFoldr - (\idx t ( acc, remaining ) -> - case List.partition ((==) (Just idx)) remaining of - ( _ :: _, rem ) -> - ( acc, rem ) - - ( _, rem ) -> - ( t :: acc, rem ) - ) - ( [] - , List.map (Tuple.first >> .indexInPlaylist) tracks - ) - |> (\( t, _ ) -> { playlist | tracks = t }) - - -shouldNoteProgress : { duration : Float } -> Bool -shouldNoteProgress { duration } = - duration >= 30 * 60 - - -shouldRenderGroup : Identifiers -> Bool -shouldRenderGroup identifiers = - identifiers.group - |> Maybe.map (.firstInGroup >> (==) True) - |> Maybe.withDefault False - - -playlistTrackFromTrack : Track -> PlaylistTrackWithoutMetadata -playlistTrackFromTrack track = - { album = track.tags.album - , artist = track.tags.artist - , title = track.tags.title - } - - -sortByIndexInPlaylist : List IdentifiedTrack -> List IdentifiedTrack -sortByIndexInPlaylist = - List.sortBy (\( i, t ) -> Maybe.withDefault (t.tags.disc * 1000 + t.tags.nr) i.indexInPlaylist) - - -toPlaylistTracks : List IdentifiedTrack -> List PlaylistTrackWithoutMetadata -toPlaylistTracks = - List.map (Tuple.second >> playlistTrackFromTrack) - - - --- ㊙️ - - -type Pick - = PickId String - | PickTrack Track diff --git a/src/Library/Tracks/Collection.elm b/src/Library/Tracks/Collection.elm deleted file mode 100644 index 33b91f17c..000000000 --- a/src/Library/Tracks/Collection.elm +++ /dev/null @@ -1,92 +0,0 @@ -module Tracks.Collection exposing (add, arrange, harvest, identifiedTracksChanged, identify, map, replace, tracksChanged) - -import Tracks exposing (IdentifiedTrack, Parcel, Track, emptyCollection) -import Tracks.Collection.Internal as Internal - - - --- 🔱 - - -identify : Parcel -> Parcel -identify = - Internal.identify >> Internal.arrange >> Internal.harvest - - -arrange : Parcel -> Parcel -arrange = - Internal.arrange >> Internal.harvest - - -harvest : Parcel -> Parcel -harvest = - Internal.harvest - - -map : (List IdentifiedTrack -> List IdentifiedTrack) -> Parcel -> Parcel -map fn ( model, collection ) = - ( model - , { collection - | identified = fn collection.identified - , arranged = fn collection.arranged - , harvested = fn collection.harvested - } - ) - - - --- ⚗️ - - -add : List Track -> Parcel -> Parcel -add tracks ( deps, { untouched } ) = - identify - ( deps - , { emptyCollection | untouched = untouched ++ tracks } - ) - - -replace : List Track -> Parcel -> Parcel -replace tracks ( deps, { untouched } ) = - identify - ( deps - , { emptyCollection | untouched = tracks } - ) - - - --- ⚗️ - - -tracksChanged : List Track -> List Track -> Bool -tracksChanged listA listB = - case ( listA, listB ) of - ( [], [] ) -> - False - - ( a :: restA, b :: restB ) -> - if a.id /= b.id then - True - - else - tracksChanged restA restB - - _ -> - True - - -identifiedTracksChanged : List IdentifiedTrack -> List IdentifiedTrack -> Bool -identifiedTracksChanged listA listB = - case ( listA, listB ) of - ( [], [] ) -> - False - - ( ( _, a ) :: restA, ( _, b ) :: restB ) -> - if a.id /= b.id then - True - - else - identifiedTracksChanged restA restB - - _ -> - True diff --git a/src/Library/Tracks/Collection/Internal.elm b/src/Library/Tracks/Collection/Internal.elm deleted file mode 100644 index 16d5b048c..000000000 --- a/src/Library/Tracks/Collection/Internal.elm +++ /dev/null @@ -1,29 +0,0 @@ -module Tracks.Collection.Internal exposing - ( arrange - , harvest - , identify - ) - -import Tracks exposing (Parcel) -import Tracks.Collection.Internal.Arrange as Internal -import Tracks.Collection.Internal.Harvest as Internal -import Tracks.Collection.Internal.Identify as Internal - - - --- 🔱 - - -identify : Parcel -> Parcel -identify = - Internal.identify - - -arrange : Parcel -> Parcel -arrange = - Internal.arrange - - -harvest : Parcel -> Parcel -harvest = - Internal.harvest diff --git a/src/Library/Tracks/Collection/Internal/Arrange.elm b/src/Library/Tracks/Collection/Internal/Arrange.elm deleted file mode 100644 index 71a7c7b04..000000000 --- a/src/Library/Tracks/Collection/Internal/Arrange.elm +++ /dev/null @@ -1,305 +0,0 @@ -module Tracks.Collection.Internal.Arrange exposing (arrange) - -import Conditional exposing (ifThenElse) -import Dict exposing (Dict) -import List.Extra as List -import Maybe.Extra as Maybe -import Playlists exposing (..) -import Playlists.Matching -import String.Ext as String -import Time -import Time.Ext as Time -import Tracks exposing (..) -import Tracks.Sorting as Sorting - - - --- 🍯 - - -arrange : Parcel -> Parcel -arrange ( deps, collection ) = - case deps.selectedPlaylist of - Just playlist -> - if playlist.collection then - case playlist.autoGenerated of - Just _ -> - arrangeByGroup ( deps, collection ) - - Nothing -> - arrangeByCollection ( deps, collection ) playlist - - else - arrangeByPlaylist ( deps, collection ) playlist - - Nothing -> - arrangeByGroup ( deps, collection ) - - - --- GROUPING - - -arrangeByGroup : Parcel -> Parcel -arrangeByGroup ( deps, collection ) = - case deps.grouping of - Just AddedOn -> - ( deps, groupByInsertedAt deps collection ) - - Just Directory -> - ( deps, groupByDirectory deps collection ) - - Just FirstAlphaCharacter -> - ( deps, groupByFirstAlphaCharacter deps collection ) - - Just TrackYear -> - ( deps, groupByYear deps collection ) - - Nothing -> - collection.identified - |> Sorting.sort deps.sortBy deps.sortDirection - |> (\x -> { collection | arranged = x }) - |> (\x -> ( deps, x )) - - -addToList : a -> Maybe (List a) -> Maybe (List a) -addToList item maybeList = - case maybeList of - Just list -> - Just (item :: list) - - Nothing -> - Just [ item ] - - -groupBy : { reversed : Bool } -> (IdentifiedTrack -> Dict a (List IdentifiedTrack) -> Dict a (List IdentifiedTrack)) -> CollectionDependencies -> Collection -> Collection -groupBy { reversed } folder deps collection = - collection.identified - |> List.foldl folder Dict.empty - |> Dict.values - |> ifThenElse reversed List.reverse identity - |> List.concatMap (Sorting.sort deps.sortBy deps.sortDirection) - |> (\arranged -> { collection | arranged = arranged }) - - - --- GROUPING ░░ ADDED ON - - -groupByInsertedAt : CollectionDependencies -> Collection -> Collection -groupByInsertedAt = - groupBy { reversed = True } groupByInsertedAtFolder - - -groupByInsertedAtFolder : IdentifiedTrack -> Dict Int (List IdentifiedTrack) -> Dict Int (List IdentifiedTrack) -groupByInsertedAtFolder ( i, t ) = - let - ( year, month ) = - ( Time.toYear Time.utc t.insertedAt - , Time.toMonth Time.utc t.insertedAt - ) - - group = - { name = insertedAtGroupName year month - , firstInGroup = False - } - - item = - ( { i | group = Just group } - , t - ) - in - Dict.update - (year * 1000 + Time.monthNumber month) - (addToList item) - - -insertedAtGroupName : Int -> Time.Month -> String -insertedAtGroupName year month = - if year == 1970 then - "MANY MOONS AGO" - - else - Time.monthName month ++ " " ++ String.fromInt year - - - --- GROUPING ░░ DIRECTORY - - -groupByDirectory : CollectionDependencies -> Collection -> Collection -groupByDirectory deps = - groupBy { reversed = False } (groupByDirectoryFolder deps) deps - - -groupByDirectoryFolder : CollectionDependencies -> IdentifiedTrack -> Dict String (List IdentifiedTrack) -> Dict String (List IdentifiedTrack) -groupByDirectoryFolder deps ( i, t ) = - let - directory = - t.path - |> String.chopStart "/" - |> String.split "/" - |> (case Maybe.andThen .autoGenerated deps.selectedPlaylist of - Just { level } -> - List.drop (max 0 (level - 1) + 1) - - Nothing -> - identity - ) - |> List.init - |> Maybe.map (String.join " / ") - |> Maybe.withDefault t.path - - group = - { name = directory - , firstInGroup = False - } - - item = - ( { i | group = Just group } - , t - ) - in - Dict.update - directory - (addToList item) - - - --- GROUPING ░░ FIRST LETTER - - -groupByFirstAlphaCharacter : CollectionDependencies -> Collection -> Collection -groupByFirstAlphaCharacter deps = - groupBy { reversed = False } (groupByFirstAlphaCharacterFolder deps) deps - - -groupByFirstAlphaCharacterFolder : CollectionDependencies -> IdentifiedTrack -> Dict String (List IdentifiedTrack) -> Dict String (List IdentifiedTrack) -groupByFirstAlphaCharacterFolder deps ( i, t ) = - let - tag = - case deps.sortBy of - Artist -> - Maybe.withDefault fallbackArtist t.tags.artist - - Album -> - Maybe.withDefault fallbackAlbum t.tags.album - - PlaylistIndex -> - "" - - Title -> - t.tags.title - - group = - { name = - tag - |> String.toList - |> List.head - |> Maybe.andThen - (\char -> - if Char.isAlpha char then - Just (String.fromList [ Char.toUpper char ]) - - else - Nothing - ) - |> Maybe.withDefault "#" - , firstInGroup = False - } - - item = - ( { i | group = Just group } - , t - ) - in - Dict.update - group.name - (addToList item) - - - --- GROUPING ░░ YEAR - - -groupByYear : CollectionDependencies -> Collection -> Collection -groupByYear = - groupBy { reversed = True } groupByYearFolder - - -groupByYearFolder : IdentifiedTrack -> Dict Int (List IdentifiedTrack) -> Dict Int (List IdentifiedTrack) -groupByYearFolder ( i, t ) = - let - group = - { name = Maybe.unwrap "0000 - Unknown" String.fromInt t.tags.year - , firstInGroup = False - } - - item = - ( { i | group = Just group } - , t - ) - in - Dict.update - (Maybe.withDefault 0 t.tags.year) - (addToList item) - - - --- PLAYLISTS - - -arrangeByCollection : Parcel -> Playlist -> Parcel -arrangeByCollection ( deps, collection ) playlist = - collection.identified - |> Playlists.Matching.match playlist - |> dealWithMissingPlaylistTracks - |> Sorting.sort deps.sortBy deps.sortDirection - |> (\x -> { collection | arranged = x }) - |> (\x -> ( deps, x )) - - -arrangeByPlaylist : Parcel -> Playlist -> Parcel -arrangeByPlaylist ( deps, collection ) playlist = - collection.identified - |> Playlists.Matching.match playlist - |> dealWithMissingPlaylistTracks - |> Sorting.sort PlaylistIndex Asc - |> (\x -> { collection | arranged = x }) - |> (\x -> ( deps, x )) - - -dealWithMissingPlaylistTracks : ( List IdentifiedTrack, List IdentifiedPlaylistTrack ) -> List IdentifiedTrack -dealWithMissingPlaylistTracks ( identifiedTracks, remainingPlaylistTracks ) = - identifiedTracks ++ List.map makeMissingPlaylistTrack remainingPlaylistTracks - - -makeMissingPlaylistTrack : IdentifiedPlaylistTrack -> IdentifiedTrack -makeMissingPlaylistTrack ( identifiers, playlistTrack ) = - let - tags = - { disc = 1 - , nr = 0 - , artist = playlistTrack.artist - , title = playlistTrack.title - , album = playlistTrack.album - , genre = Nothing - , picture = Nothing - , year = Nothing - } - in - Tuple.pair - { filename = "" - , group = Nothing - , indexInList = 0 - , indexInPlaylist = Just identifiers.index - , isFavourite = False - , isMissing = True - , parentDirectory = "" - } - { tags = tags - , id = missingId - , insertedAt = Time.default - , path = missingId - , sourceId = missingId - } diff --git a/src/Library/Tracks/Collection/Internal/Harvest.elm b/src/Library/Tracks/Collection/Internal/Harvest.elm deleted file mode 100644 index dbd45918a..000000000 --- a/src/Library/Tracks/Collection/Internal/Harvest.elm +++ /dev/null @@ -1,148 +0,0 @@ -module Tracks.Collection.Internal.Harvest exposing (harvest) - -import Dict -import List.Extra as List -import Maybe.Extra as Maybe -import Tracks exposing (..) - - - --- 🍯 - - -harvest : Parcel -> Parcel -harvest ( deps, collection ) = - let - harvested = - case deps.searchResults of - Just [] -> - [] - - Just trackIds -> - collection.arranged - |> List.foldl harvester ( [], trackIds ) - |> Tuple.first - - Nothing -> - collection.arranged - - filters = - [ -- Favourites / Missing - ----------------------- - if deps.favouritesOnly then - Tuple.first >> .isFavourite >> (==) True - - else if Maybe.map .autoGenerated deps.selectedPlaylist == Just Nothing then - always True - - else - Tuple.first >> .isMissing >> (==) False - - -- Playlist - ----------- - , case deps.selectedPlaylist of - Just playlist -> - case playlist.autoGenerated of - Just _ -> - \( _, t ) -> - Tracks.matchesAutoGeneratedPlaylist playlist t - - Nothing -> - \( i, _ ) -> - Maybe.isJust i.indexInPlaylist - - Nothing -> - always True - - -- Cached - --------- - , if deps.cachedOnly then - \( _, t ) -> List.member t.id deps.cached - - else - always True - ] - - theFilter x = - List.foldl - (\filter bool -> - if True == bool then - filter x - - else - bool - ) - True - filters - in - harvested - |> List.foldl - (\( i, t ) ( dict, ( idx, prevIdentifiers ), acc ) -> - let - -- Identifier used to distinguish duplicates - s = - case t.tags.artist of - Just artist -> - String.toLower (artist ++ t.tags.title) - - Nothing -> - String.toLower t.tags.title - in - if theFilter ( i, t ) == False then - ( dict, ( idx, prevIdentifiers ), acc ) - - else if deps.hideDuplicates && Dict.member s dict then - ( dict, ( idx, prevIdentifiers ), acc ) - - else - let - prevGroup = - Maybe.unwrap - "" - .name - prevIdentifiers.group - - newIdentifiers = - { i - | group = - Maybe.map - (\g -> { g | firstInGroup = prevGroup /= g.name }) - i.group - , indexInList = idx - } - in - ( if deps.hideDuplicates then - Dict.insert s () dict - - else - dict - -- - , ( idx + 1, newIdentifiers ) - , ( newIdentifiers, t ) :: acc - ) - ) - ( Dict.empty, ( 0, Tracks.emptyIdentifiers ), [] ) - |> (\( _, _, c ) -> c) - |> (\h -> { collection | harvested = List.reverse h }) - |> (\c -> ( deps, c )) - - - --- 🛠 - - -harvester : - IdentifiedTrack - -> ( List IdentifiedTrack, List String ) - -> ( List IdentifiedTrack, List String ) -harvester ( i, t ) ( acc, trackIds ) = - case List.findIndex ((==) t.id) trackIds of - Just idx -> - ( acc ++ [ ( i, t ) ] - , List.removeAt idx trackIds - ) - - Nothing -> - ( acc - , trackIds - ) diff --git a/src/Library/Tracks/Collection/Internal/Identify.elm b/src/Library/Tracks/Collection/Internal/Identify.elm deleted file mode 100644 index 42c5568c5..000000000 --- a/src/Library/Tracks/Collection/Internal/Identify.elm +++ /dev/null @@ -1,178 +0,0 @@ -module Tracks.Collection.Internal.Identify exposing (identify) - -import Dict -import List.Extra as List -import Time.Ext as Time -import Tracks exposing (..) - - - --- 🔱 - - -identify : Parcel -> Parcel -identify ( deps, collection ) = - let - ( favouritesDictionary, simplifiedFavourites ) = - List.foldr - (\fav ( dict, acc ) -> - let - simpl = - case fav.artist of - Just artist -> - String.toLower artist ++ String.toLower fav.title - - Nothing -> - String.toLower fav.title - in - ( Dict.insert simpl fav dict - , simpl :: acc - ) - ) - ( Dict.empty, [] ) - deps.favourites - - ( identifiedUnsorted, missingFavouritesSimplified ) = - List.foldl - (identifyTrack - deps.enabledSourceIds - simplifiedFavourites - ) - ( [], simplifiedFavourites ) - collection.untouched - - missingFavourites = - List.foldr - (\simpl acc -> - case Dict.get simpl favouritesDictionary of - Just fav -> - fav :: acc - - Nothing -> - acc - ) - [] - missingFavouritesSimplified - in - identifiedUnsorted - |> List.append (List.map makeMissingFavouriteTrack missingFavourites) - |> (\x -> { collection | identified = x }) - |> (\x -> ( deps, x )) - - - --- IDENTIFY - - -identifyTrack : - List String - -> List String - -> Track - -> ( List IdentifiedTrack, List String ) - -> ( List IdentifiedTrack, List String ) -identifyTrack enabledSourceIds favourites track = - if List.member track.sourceId enabledSourceIds then - partTwo favourites track - - else - identity - - -partTwo : - List String - -> Track - -> ( List IdentifiedTrack, List String ) - -> ( List IdentifiedTrack, List String ) -partTwo favourites track ( acc, remainingFavourites ) = - let - isFavourite_ = - isFavourite track - - isFav = - List.any isFavourite_ favourites - - { filename, parentDirectory } = - pathParts track - - identifiedTrack = - ( { isFavourite = isFav - , isMissing = False - - -- - , filename = filename - , group = Nothing - , indexInList = 0 - , indexInPlaylist = Nothing - , parentDirectory = parentDirectory - } - , track - ) - in - if isFav then - -- - -- A favourite - -- - ( identifiedTrack :: acc - , remainingFavourites - |> List.findIndex isFavourite_ - |> Maybe.map (\idx -> List.removeAt idx remainingFavourites) - |> Maybe.withDefault remainingFavourites - ) - - else - -- - -- Not a favourite - -- - ( identifiedTrack :: acc - , remainingFavourites - ) - - - --- FAVOURITES - - -isFavourite : Track -> String -> Bool -isFavourite track = - -- This needs to match the `simplifiedFavourites` format from above - (==) - (case track.tags.artist of - Just artist -> - String.toLower artist ++ String.toLower track.tags.title - - Nothing -> - String.toLower track.tags.title - ) - - -makeMissingFavouriteTrack : Favourite -> IdentifiedTrack -makeMissingFavouriteTrack fav = - let - tags = - { disc = 1 - , nr = 0 - , artist = fav.artist - , title = fav.title - , album = Nothing - , genre = Nothing - , picture = Nothing - , year = Nothing - } - in - ( { isFavourite = True - , isMissing = True - - -- - , filename = "" - , group = Nothing - , indexInList = 0 - , indexInPlaylist = Nothing - , parentDirectory = "" - } - , { tags = tags - , id = missingId - , insertedAt = Time.default - , path = missingId - , sourceId = missingId - } - ) diff --git a/src/Library/Tracks/Encoding.elm b/src/Library/Tracks/Encoding.elm deleted file mode 100644 index 00fd32cc7..000000000 --- a/src/Library/Tracks/Encoding.elm +++ /dev/null @@ -1,227 +0,0 @@ -module Tracks.Encoding exposing (..) - -import Json.Decode as Decode -import Json.Decode.Pipeline exposing (optional, required) -import Json.Encode as Encode -import Json.Encode.Ext exposing (..) -import Time.Ext as Time -import Tracks exposing (..) - - - --- ENCODE - - -encodeFavourite : Favourite -> Encode.Value -encodeFavourite fav = - Encode.object - [ ( "artist", encodeMaybe fav.artist Encode.string ) - , ( "title", Encode.string fav.title ) - ] - - -encodeGrouping : Grouping -> Encode.Value -encodeGrouping v = - case v of - AddedOn -> - Encode.string "ADDED_ON" - - Directory -> - Encode.string "DIRECTORY" - - FirstAlphaCharacter -> - Encode.string "FIRST_ALPHA_CHARACTER" - - TrackYear -> - Encode.string "TRACK_YEAR" - - -encodeScene : Scene -> Encode.Value -encodeScene scene = - case scene of - Covers -> - Encode.string "COVERS" - - List -> - Encode.string "LIST" - - -encodeSortBy : SortBy -> Encode.Value -encodeSortBy v = - case v of - Artist -> - Encode.string "ARTIST" - - Album -> - Encode.string "ALBUM" - - PlaylistIndex -> - Encode.string "PLAYLIST_INDEX" - - Title -> - Encode.string "TITLE" - - -encodeSortDirection : SortDirection -> Encode.Value -encodeSortDirection v = - case v of - Asc -> - Encode.string "ASC" - - Desc -> - Encode.string "DESC" - - -encodeTrack : Track -> Encode.Value -encodeTrack track = - Encode.object - [ ( "id", Encode.string track.id ) - , ( "insertedAt", Time.encode track.insertedAt ) - , ( "path", Encode.string track.path ) - , ( "sourceId", Encode.string track.sourceId ) - , ( "tags", encodeTags track.tags ) - ] - - -encodeTags : Tags -> Encode.Value -encodeTags tags = - Encode.object - [ ( "disc", Encode.int tags.disc ) - , ( "nr", Encode.int tags.nr ) - - -- - , ( "album", encodeMaybe tags.album Encode.string ) - , ( "artist", encodeMaybe tags.artist Encode.string ) - , ( "title", Encode.string tags.title ) - - -- - , ( "genre", encodeMaybe tags.genre Encode.string ) - , ( "picture", encodeMaybe tags.picture Encode.string ) - , ( "year", encodeMaybe tags.year Encode.int ) - ] - - - --- DECODE - - -decodeFavourite : Decode.Value -> Maybe Favourite -decodeFavourite = - Decode.decodeValue favouriteDecoder - >> Result.toMaybe - - -decodeTrack : Decode.Value -> Maybe Track -decodeTrack = - Decode.decodeValue trackDecoder - >> Result.toMaybe - - -favouriteDecoder : Decode.Decoder Favourite -favouriteDecoder = - Decode.map2 Favourite - (Decode.maybe <| Decode.field "artist" Decode.string) - (Decode.field "title" Decode.string) - - -groupingDecoder : Decode.Decoder Grouping -groupingDecoder = - Decode.andThen - (\string -> - case string of - "ADDED_ON" -> - Decode.succeed AddedOn - - "DIRECTORY" -> - Decode.succeed Directory - - "FIRST_ALPHA_CHARACTER" -> - Decode.succeed FirstAlphaCharacter - - "TRACK_YEAR" -> - Decode.succeed TrackYear - - _ -> - Decode.fail "Invalid Grouping" - ) - Decode.string - - -sceneDecoder : Decode.Decoder Scene -sceneDecoder = - Decode.andThen - (\string -> - case string of - "COVERS" -> - Decode.succeed Covers - - "LIST" -> - Decode.succeed List - - _ -> - Decode.fail "Invalid Scene" - ) - Decode.string - - -sortByDecoder : Decode.Decoder SortBy -sortByDecoder = - Decode.andThen - (\string -> - case string of - "ARTIST" -> - Decode.succeed Artist - - "ALBUM" -> - Decode.succeed Album - - "PLAYLIST_INDEX" -> - Decode.succeed PlaylistIndex - - "TITLE" -> - Decode.succeed Title - - _ -> - Decode.fail "Invalid SortBy" - ) - Decode.string - - -sortDirectionDecoder : Decode.Decoder SortDirection -sortDirectionDecoder = - Decode.andThen - (\string -> - case string of - "ASC" -> - Decode.succeed Asc - - "DESC" -> - Decode.succeed Desc - - _ -> - Decode.fail "Invalid SortDirection" - ) - Decode.string - - -tagsDecoder : Decode.Decoder Tags -tagsDecoder = - Decode.map8 Tags - (Decode.field "disc" Decode.int) - (Decode.field "nr" Decode.int) - (Decode.maybe <| Decode.field "album" Decode.string) - (Decode.maybe <| Decode.field "artist" Decode.string) - (Decode.field "title" Decode.string) - (Decode.maybe <| Decode.field "genre" Decode.string) - (Decode.maybe <| Decode.field "picture" Decode.string) - (Decode.maybe <| Decode.field "year" Decode.int) - - -trackDecoder : Decode.Decoder Track -trackDecoder = - Decode.succeed Track - |> required "id" Decode.string - |> optional "insertedAt" Time.decoder Time.default - |> required "path" Decode.string - |> required "sourceId" Decode.string - |> required "tags" tagsDecoder diff --git a/src/Library/Tracks/Favourites.elm b/src/Library/Tracks/Favourites.elm deleted file mode 100644 index c762b7ddf..000000000 --- a/src/Library/Tracks/Favourites.elm +++ /dev/null @@ -1,183 +0,0 @@ -module Tracks.Favourites exposing (completeFavouritesList, completeTracksList, match, removeFromFavouritesList, removeFromTracksList, toggleInFavouritesList, toggleInTracksList) - -import List.Extra as List -import Maybe.Extra as Maybe -import Tracks exposing (Favourite, IdentifiedTrack, Track, fallbackArtist) - - - --- 🔱 - - -completeFavouritesList : List IdentifiedTrack -> List Favourite -> List Favourite -completeFavouritesList tracks favourites = - List.append - favourites - (List.filterMap - (\( i, t ) -> - if not i.isFavourite then - Just - { artist = t.tags.artist - , title = t.tags.title - } - - else - Nothing - ) - tracks - ) - - -completeTracksList : List IdentifiedTrack -> List IdentifiedTrack -> List IdentifiedTrack -completeTracksList tracksToMakeFavourite tracks = - let - favs = - List.filterMap - (\( i, t ) -> - if not i.isFavourite then - Just ( lowercaseArtist t, lowercaseTitle t ) - - else - Nothing - ) - tracksToMakeFavourite - in - List.map - (\( i, t ) -> - let - ( la, lt ) = - ( lowercaseArtist t, lowercaseTitle t ) - in - List.foldr - (\( lartist, ltitle ) ( ai, at ) -> - if la == lartist && lt == ltitle && not ai.isFavourite then - ( { ai | isFavourite = True }, at ) - - else - ( ai, at ) - ) - ( i, t ) - favs - ) - tracks - - -match : Favourite -> Favourite -> Bool -match a b = - let - ( aa, at ) = - ( Maybe.unwrap "" String.toLower a.artist - , String.toLower a.title - ) - - ( ba, bt ) = - ( Maybe.unwrap "" String.toLower b.artist - , String.toLower b.title - ) - in - aa == ba && at == bt - - -removeFromFavouritesList : List IdentifiedTrack -> List Favourite -> List Favourite -removeFromFavouritesList tracks favourites = - List.foldr - (\( i, t ) acc -> - if i.isFavourite then - List.filterNot - (match { artist = t.tags.artist, title = t.tags.title }) - acc - - else - acc - ) - favourites - tracks - - -removeFromTracksList : List IdentifiedTrack -> List IdentifiedTrack -> List IdentifiedTrack -removeFromTracksList tracksToRemoveFromFavs tracks = - let - unfavs = - List.filterMap - (\( i, t ) -> - if i.isFavourite then - Just ( lowercaseArtist t, lowercaseTitle t ) - - else - Nothing - ) - tracksToRemoveFromFavs - in - List.map - (\( i, t ) -> - let - ( la, lt ) = - ( lowercaseArtist t, lowercaseTitle t ) - in - List.foldr - (\( lartist, ltitle ) ( ai, at ) -> - if la == lartist && lt == ltitle && ai.isFavourite then - ( { ai | isFavourite = False }, at ) - - else - ( ai, at ) - ) - ( i, t ) - unfavs - ) - tracks - - -toggleInTracksList : Track -> List IdentifiedTrack -> List IdentifiedTrack -toggleInTracksList track = - let - lartist = - lowercaseArtist track - - ltitle = - lowercaseTitle track - in - List.map - (\( i, t ) -> - if lowercaseArtist t == lartist && lowercaseTitle t == ltitle then - ( { i | isFavourite = not i.isFavourite }, t ) - - else - ( i, t ) - ) - - -toggleInFavouritesList : IdentifiedTrack -> List Favourite -> List Favourite -toggleInFavouritesList ( i, t ) favourites = - let - favourite = - { artist = t.tags.artist - , title = t.tags.title - } - in - if i.isFavourite then - -- Remove from list - List.filterNot - (match favourite) - favourites - - else - -- Add to list - List.append - favourites - [ favourite ] - - - --- ⚗️ - - -lowercaseArtist : Track -> String -lowercaseArtist = - -- NOTE: Not entirely sure this fallback is correct - .tags >> .artist >> Maybe.unwrap fallbackArtist String.toLower - - -lowercaseTitle : Track -> String -lowercaseTitle = - .tags >> .title >> String.toLower diff --git a/src/Library/Tracks/Sorting.elm b/src/Library/Tracks/Sorting.elm deleted file mode 100644 index dd3c80e41..000000000 --- a/src/Library/Tracks/Sorting.elm +++ /dev/null @@ -1,158 +0,0 @@ -module Tracks.Sorting exposing (sort) - -import Maybe.Extra as Maybe -import Tracks exposing (..) - - - --- 🔱 - - -sort : SortBy -> SortDirection -> List IdentifiedTrack -> List IdentifiedTrack -sort property direction list = - let - sortFn = - case property of - Album -> - sortByAlbum - - Artist -> - sortByArtist - - PlaylistIndex -> - sortByPlaylistIndex - - Title -> - sortByTitle - - dirFn = - if direction == Desc then - List.reverse - - else - identity - in - list - |> List.sortWith sortFn - |> dirFn - - - --- BY - - -sortByAlbum : IdentifiedTrack -> IdentifiedTrack -> Order -sortByAlbum ( x, a ) ( y, b ) = - EQ - |> andThenCompareBools isMissing x y - |> andThenCompare album a b - |> andThenCompare parentDir x y - |> andThenCompare disc a b - |> andThenCompare nr a b - |> andThenCompare artist a b - |> andThenCompare title a b - - -sortByArtist : IdentifiedTrack -> IdentifiedTrack -> Order -sortByArtist ( x, a ) ( y, b ) = - EQ - |> andThenCompareBools isMissing x y - |> andThenCompare artist a b - |> andThenCompare album a b - |> andThenCompare parentDir x y - |> andThenCompare disc a b - |> andThenCompare nr a b - |> andThenCompare title a b - - -sortByTitle : IdentifiedTrack -> IdentifiedTrack -> Order -sortByTitle ( _, a ) ( _, b ) = - EQ - |> andThenCompare title a b - |> andThenCompare artist a b - |> andThenCompare album a b - - -sortByPlaylistIndex : IdentifiedTrack -> IdentifiedTrack -> Order -sortByPlaylistIndex ( a, _ ) ( b, _ ) = - andThenCompare (.indexInPlaylist >> Maybe.withDefault 0) a b EQ - - - --- TAGS - - -album : Track -> String -album = - .tags >> .album >> Maybe.unwrap fallbackAlbum low - - -artist : Track -> String -artist = - .tags >> .artist >> Maybe.unwrap fallbackArtist low - - -title : Track -> String -title = - .tags >> .title >> low - - -disc : Track -> Int -disc = - .tags >> .disc - - -nr : Track -> Int -nr = - .tags >> .nr - - -isMissing : Identifiers -> Bool -isMissing = - .isMissing - - -parentDir : Identifiers -> String -parentDir = - .parentDirectory >> low - - - --- COMMON - - -andThenCompare : (ctx -> comparable) -> ctx -> ctx -> Order -> Order -andThenCompare fn a b order = - if order == EQ then - compare (fn a) (fn b) - - else - order - - -andThenCompareBools : (ctx -> Bool) -> ctx -> ctx -> Order -> Order -andThenCompareBools fn a b order = - if order == EQ then - let - af = - fn a - - bf = - fn b - in - if af == bf then - EQ - - else if af == False then - GT - - else - LT - - else - order - - -low : String -> String -low = - String.trim >> String.toLower diff --git a/src/Library/Tuple/Ext.elm b/src/Library/Tuple/Ext.elm deleted file mode 100644 index f52a67774..000000000 --- a/src/Library/Tuple/Ext.elm +++ /dev/null @@ -1,8 +0,0 @@ -module Tuple.Ext exposing (uncurry) - --- 🔱 - - -uncurry : (a -> b -> c) -> ( a, b ) -> c -uncurry fn ( a, b ) = - fn a b diff --git a/src/Library/Url/Ext.elm b/src/Library/Url/Ext.elm deleted file mode 100644 index 48501651e..000000000 --- a/src/Library/Url/Ext.elm +++ /dev/null @@ -1,46 +0,0 @@ -module Url.Ext exposing (action, extractQueryParam, queryDictionary) - -import Dict exposing (Dict) -import Maybe.Extra as Maybe -import Url exposing (Url) -import Url.Parser as Url -import Url.Parser.Query as Query - - - --- 🔱 - - -action : Url -> List String -action url = - url - |> extractQueryParam "action" - |> Maybe.map (String.split "/") - |> Maybe.withDefault [] - - -extractQueryParam : String -> Url -> Maybe String -extractQueryParam key url = - { url | path = "" } - |> Url.parse (Url.query (Query.string key)) - |> Maybe.join - - -queryDictionary : Url -> Dict String String -queryDictionary url = - url.query - |> Maybe.map (String.split "&") - |> Maybe.withDefault [] - |> List.filterMap - (\s -> - case String.split "=" s of - [ k, v ] -> - Just ( k, v ) - - k :: v -> - Just ( k, String.join "=" v ) - - _ -> - Nothing - ) - |> Dict.fromList diff --git a/src/Library/User/Layer.elm b/src/Library/User/Layer.elm deleted file mode 100644 index f3aee3b8f..000000000 --- a/src/Library/User/Layer.elm +++ /dev/null @@ -1,527 +0,0 @@ -module User.Layer exposing (..) - -{-| User Layer. - -This concerns data that relates to the app, -controlled by the user and stored by the user. - -**Enclosed** data is data like, the enable-shuffle setting, -equalizer settings, or the currently-active-search term. -Which is stored in the browser. - -**Hypaethral** data is data like, the user's favourites, -processed tracks, or the user's sources. -Which is stored in the location chosen by the user. - --} - -import Dict exposing (Dict) -import Enum exposing (Enum) -import Equalizer -import Json.Decode as Json -import Json.Decode.Ext as Json -import Json.Decode.Pipeline exposing (optional) -import Json.Encode -import List.Extra as List -import Maybe.Extra as Maybe -import Playlists -import Playlists.Encoding as Playlists -import Settings -import Sources -import Sources.Encoding as Sources -import Task exposing (Task) -import Theme -import Time -import Time.Ext as Time -import Tracks -import Tracks.Encoding as Tracks - - - --- 🌳 - - -type Method - = Dropbox { accessToken : String, expiresAt : Int, refreshToken : String } - | Ipfs { apiOrigin : String } - | RemoteStorage { userAddress : String, token : String } - - -dropboxMethod : Method -dropboxMethod = - Dropbox { accessToken = "", expiresAt = 0, refreshToken = "" } - - -ipfsMethod : Method -ipfsMethod = - Ipfs { apiOrigin = "https://ipfs.io" } - - -remoteStorageMethod : Method -remoteStorageMethod = - RemoteStorage { userAddress = "", token = "" } - - - --- 🌳 ░░ ENCLOSED - - -type alias EnclosedData = - { cachedTracks : List String - , equalizerSettings : Equalizer.Settings - , grouping : Maybe Tracks.Grouping - , onlyShowCachedTracks : Bool - , onlyShowFavourites : Bool - , repeat : Bool - , scene : Tracks.Scene - , searchTerm : Maybe String - , selectedPlaylist : Maybe String - , shuffle : Bool - , sortBy : Tracks.SortBy - , sortDirection : Tracks.SortDirection - , theme : Maybe Theme.Id - } - - - --- 🌳 ░░ HYPAETHRAL - - -type HypaethralBit - = Favourites - | Playlists - | Progress - | Settings - | Sources - | Tracks - -- - | ModifiedAt - - -type HypaethralBaggage - = BaggageClaimed - -- - | PlaylistsBaggage PlaylistsBaggageAttributes - - -type alias HypaethralData = - { favourites : List Tracks.Favourite - , playlists : List Playlists.Playlist - , progress : Dict String Float - , settings : Maybe Settings.Settings - , sources : List Sources.Source - , tracks : List Tracks.Track - - -- - , modifiedAt : Maybe Time.Posix - } - - -type alias PlaylistsBaggageAttributes = - { publicPlaylistsRead : List Json.Value - , publicPlaylistsTodo : List String - , privatePlaylistsRead : List Json.Value - , privatePlaylistsTodo : List String - } - - - --- 🔱 ░░ METHOD - - -decodeMethod : Json.Value -> Maybe Method -decodeMethod = - Json.decodeValue (Json.map methodFromString Json.string) >> Result.toMaybe >> Maybe.join - - -encodeMethod : Method -> Json.Value -encodeMethod = - methodToString >> Json.Encode.string - - -methodName : Method -> String -methodName method = - case method of - Dropbox _ -> - "Dropbox" - - Ipfs _ -> - "IPFS (using MFS)" - - RemoteStorage _ -> - "Remote Storage" - - -methodFromString : String -> Maybe Method -methodFromString string = - case String.split methodSeparator string of - [ "DROPBOX", a, e, r ] -> - Just - (Dropbox - { accessToken = a - , expiresAt = Maybe.withDefault 0 (String.toInt e) - , refreshToken = r - } - ) - - [ "IPFS", a ] -> - Just (Ipfs { apiOrigin = a }) - - [ "REMOTE_STORAGE", u, t ] -> - Just (RemoteStorage { userAddress = u, token = t }) - - _ -> - Nothing - - -methodToString : Method -> String -methodToString method = - case method of - Dropbox { accessToken, expiresAt, refreshToken } -> - String.join - methodSeparator - [ "DROPBOX" - , accessToken - , String.fromInt expiresAt - , refreshToken - ] - - Ipfs { apiOrigin } -> - String.join - methodSeparator - [ "IPFS" - , apiOrigin - ] - - RemoteStorage { userAddress, token } -> - String.join - methodSeparator - [ "REMOTE_STORAGE" - , userAddress - , token - ] - - -methodSeparator : String -methodSeparator = - "___" - - -methodSupportsPublicData : Method -> Bool -methodSupportsPublicData method = - case method of - Dropbox _ -> - False - - Ipfs _ -> - False - - RemoteStorage _ -> - False - - - --- 🔱 ░░ ENCLOSED - - -decodeEnclosedData : Json.Value -> Result Json.Error EnclosedData -decodeEnclosedData = - Json.decodeValue enclosedDataDecoder - - -enclosedDataDecoder : Json.Decoder EnclosedData -enclosedDataDecoder = - Json.succeed EnclosedData - |> optional "cachedTracks" (Json.list Json.string) [] - |> optional "equalizerSettings" Equalizer.settingsDecoder Equalizer.defaultSettings - |> optional "grouping" (Json.maybe Tracks.groupingDecoder) Nothing - |> optional "onlyShowCachedTracks" Json.bool False - |> optional "onlyShowFavourites" Json.bool False - |> optional "repeat" Json.bool False - |> optional "scene" Tracks.sceneDecoder Tracks.Covers - |> optional "searchTerm" (Json.maybe Json.string) Nothing - |> optional "selectedPlaylist" (Json.maybe Json.string) Nothing - |> optional "shuffle" Json.bool False - |> optional "sortBy" Tracks.sortByDecoder Tracks.Album - |> optional "sortDirection" Tracks.sortDirectionDecoder Tracks.Asc - |> optional "theme" (Json.maybe Theme.idDecoder) Nothing - - -encodeEnclosedData : EnclosedData -> Json.Value -encodeEnclosedData { cachedTracks, equalizerSettings, grouping, onlyShowCachedTracks, onlyShowFavourites, repeat, scene, searchTerm, selectedPlaylist, shuffle, sortBy, sortDirection, theme } = - Json.Encode.object - [ ( "cachedTracks", Json.Encode.list Json.Encode.string cachedTracks ) - , ( "equalizerSettings", Equalizer.encodeSettings equalizerSettings ) - , ( "grouping", Maybe.unwrap Json.Encode.null Tracks.encodeGrouping grouping ) - , ( "onlyShowCachedTracks", Json.Encode.bool onlyShowCachedTracks ) - , ( "onlyShowFavourites", Json.Encode.bool onlyShowFavourites ) - , ( "repeat", Json.Encode.bool repeat ) - , ( "scene", Tracks.encodeScene scene ) - , ( "searchTerm", Maybe.unwrap Json.Encode.null Json.Encode.string searchTerm ) - , ( "selectedPlaylist", Maybe.unwrap Json.Encode.null Json.Encode.string selectedPlaylist ) - , ( "shuffle", Json.Encode.bool shuffle ) - , ( "sortBy", Tracks.encodeSortBy sortBy ) - , ( "sortDirection", Tracks.encodeSortDirection sortDirection ) - , ( "theme", Maybe.unwrap Json.Encode.null Theme.encodeId theme ) - ] - - - --- 🔱 ░░ HYPAETHRAL - - -allHypaethralBits : List HypaethralBit -allHypaethralBits = - [ Favourites - , Playlists - , Progress - , Settings - , Sources - , Tracks - ] - - -decodeHypaethralData : Json.Value -> Result Json.Error HypaethralData -decodeHypaethralData = - Json.decodeValue hypaethralDataDecoder - - -emptyHypaethralData : HypaethralData -emptyHypaethralData = - { favourites = [] - , playlists = [] - , progress = Dict.empty - , settings = Nothing - , sources = [] - , tracks = [] - - -- - , modifiedAt = Nothing - } - - -encodeHypaethralBit : HypaethralBit -> HypaethralData -> Json.Value -encodeHypaethralBit bit { favourites, playlists, progress, settings, sources, tracks, modifiedAt } = - case bit of - ModifiedAt -> - Maybe.unwrap Json.Encode.null Time.encode modifiedAt - - _ -> - Json.Encode.object - [ ( "data" - , case bit of - Favourites -> - Json.Encode.list Tracks.encodeFavourite favourites - - ModifiedAt -> - Maybe.unwrap Json.Encode.null Time.encode modifiedAt - - Playlists -> - Json.Encode.list Playlists.encode playlists - - Progress -> - Json.Encode.dict identity Json.Encode.float progress - - Settings -> - Maybe.unwrap Json.Encode.null Settings.encode settings - - Sources -> - Json.Encode.list Sources.encode sources - - Tracks -> - Json.Encode.list Tracks.encodeTrack tracks - ) - , ( "modifiedAt" - , Maybe.unwrap Json.Encode.null Time.encode modifiedAt - ) - ] - - -encodeHypaethralData : HypaethralData -> Json.Value -encodeHypaethralData data = - data - |> encodedHypaethralDataList - |> List.map (Tuple.mapFirst hypaethralBitKey) - |> Json.Encode.object - - -encodedHypaethralDataList : HypaethralData -> List ( HypaethralBit, Json.Value ) -encodedHypaethralDataList data = - List.map - (\bit -> ( bit, encodeHypaethralBit bit data )) - allHypaethralBits - - -hypaethralBit : Enum HypaethralBit -hypaethralBit = - allHypaethralBits - |> List.map (\bit -> ( hypaethralBitKey bit, bit )) - |> Enum.create - - -hypaethralBitFileName : HypaethralBit -> String -hypaethralBitFileName bit = - hypaethralBitKey bit ++ ".json" - - -hypaethralBitKey : HypaethralBit -> String -hypaethralBitKey bit = - case bit of - Favourites -> - "favourites" - - ModifiedAt -> - "modified" - - Playlists -> - "playlists" - - Progress -> - "progress" - - Settings -> - "settings" - - Sources -> - "sources" - - Tracks -> - "tracks" - - -hypaethralDataDecoder : Json.Decoder HypaethralData -hypaethralDataDecoder = - let - optionalWithPossiblyData key dec def a = - optional - (hypaethralBitKey key) - (Json.oneOf [ modifiedAtDecoder dec, noModifiedAt dec ]) - { data = def, modifiedAt = Nothing } - a - in - (\fav pla pro set sor tra mod -> - { favourites = fav.data - , playlists = pla.data - , progress = pro.data - , settings = set.data - , sources = sor.data - , tracks = tra.data - - -- - , modifiedAt = - case mod of - Just m -> - Just (Time.millisToPosix m) - - Nothing -> - [ fav.modifiedAt - , pla.modifiedAt - , pro.modifiedAt - , set.modifiedAt - , sor.modifiedAt - , tra.modifiedAt - ] - |> List.filterMap (Maybe.map Time.posixToMillis) - |> List.sort - |> List.last - |> Maybe.map Time.millisToPosix - } - ) - |> Json.succeed - |> optionalWithPossiblyData Favourites (Json.listIgnore Tracks.favouriteDecoder) [] - |> optionalWithPossiblyData Playlists (Json.listIgnore Playlists.decoder) [] - |> optionalWithPossiblyData Progress (Json.dict Json.float) Dict.empty - |> optionalWithPossiblyData Settings (Json.maybe Settings.decoder) Nothing - |> optionalWithPossiblyData Sources (Json.listIgnore Sources.decoder) [] - |> optionalWithPossiblyData Tracks (Json.listIgnore Tracks.trackDecoder) [] - |> optional (hypaethralBitKey ModifiedAt) (Json.maybe Json.int) Nothing - - - --- merge : HypaethralData -> HypaethralData -> HypaethralData --- merge a b = --- { favourites = List.unique (a.favourites ++ b.favourites) --- , playlists = List.unique (a.playlists ++ b.playlists) --- , progress = List.unique (a.progress ++ b.progress) --- , settings = List.unique (a.settings ++ b.settings) --- , sources = List.unique (a.sources ++ b.sources) --- , tracks = List.unique (a.tracks ++ b.tracks) --- -- --- , modifiedAt = --- case ( a.modifiedAt, b.modifiedAt ) of --- ( Just am, Just bm ) -> --- if Time.posixToMillis am > Time.posixToMillis bm then --- Just am --- else --- Just bm --- ( Just am, Nothing ) -> --- Just am --- ( Nothing, Just bm ) -> --- Just bm --- ( Nothing, Nothing ) -> --- Nothing --- } - - -modifiedAtDecoder : Json.Decoder a -> Json.Decoder { data : a, modifiedAt : Maybe Time.Posix } -modifiedAtDecoder decoder = - Json.map2 - (\d m -> { data = d, modifiedAt = m }) - (Json.field "data" decoder) - (Json.maybe <| Json.field "modifiedAt" Time.decoder) - - -noModifiedAt : Json.Decoder a -> Json.Decoder { data : a, modifiedAt : Maybe Time.Posix } -noModifiedAt = - Json.map - (\data -> - { data = data - , modifiedAt = Nothing - } - ) - - -putHypaethralJsonBitsTogether : List ( HypaethralBit, Json.Value, HypaethralBaggage ) -> Json.Value -putHypaethralJsonBitsTogether bits = - bits - |> List.map (\( a, b, _ ) -> ( hypaethralBitKey a, b )) - |> Json.Encode.object - - -retrieveHypaethralData : (HypaethralBit -> Task x (Maybe Json.Value)) -> Task x (List ( HypaethralBit, Maybe Json.Encode.Value )) -retrieveHypaethralData retrievalFn = - hypaethralBit.list - |> List.map - (\( _, bit ) -> - bit - |> retrievalFn - |> Task.map (\value -> ( bit, value )) - ) - |> Task.sequence - - -saveHypaethralData : (HypaethralBit -> Json.Value -> Task x ()) -> HypaethralData -> Task x () -saveHypaethralData saveFn data = - hypaethralBit.list - |> List.map - (\( _, bit ) -> - data - |> encodeHypaethralBit bit - |> saveFn bit - ) - |> Task.sequence - |> Task.map (always ()) - - - --- 🔱 ░░ BAGGAGE - - -mapPlaylistsBaggage : (PlaylistsBaggageAttributes -> PlaylistsBaggageAttributes) -> HypaethralBaggage -> HypaethralBaggage -mapPlaylistsBaggage fn baggage = - case baggage of - PlaylistsBaggage p -> - PlaylistsBaggage (fn p) - - b -> - b diff --git a/src/Library/User/Layer/Methods/Dropbox.elm b/src/Library/User/Layer/Methods/Dropbox.elm deleted file mode 100644 index 272421695..000000000 --- a/src/Library/User/Layer/Methods/Dropbox.elm +++ /dev/null @@ -1,114 +0,0 @@ -module User.Layer.Methods.Dropbox exposing (..) - -import Common -import Http -import Http.Ext as Http -import Http.Extras as Http -import Json.Decode as Json -import Task exposing (Task) -import Url exposing (Url) - - - --- 🌳 - - -type alias Tokens = - { accessToken : String - , expiresIn : Int -- Time in seconds the access token expires in - , refreshToken : Maybe String - } - - - --- 🏔 - - -clientId : String -clientId = - "te0c9pbeii8f8bw" - - -clientSecret : String -clientSecret = - "kxmlfdsw8k9e0ot" - - -redirectUri : Url -> String -redirectUri url = - Common.urlOrigin url ++ "?action=authenticate/dropbox" - - - --- ENCODING - - -tokensDecoder : Json.Decoder Tokens -tokensDecoder = - Json.map3 - (\a e r -> - { accessToken = a - , expiresIn = e - , refreshToken = r - } - ) - (Json.field "access_token" Json.string) - (Json.field "expires_in" Json.int) - (Json.string - |> Json.field "refresh_token" - |> Json.maybe - ) - - - --- 🛠 - - -exchangeAuthCode : (Result Http.Error Tokens -> msg) -> Url -> String -> Cmd msg -exchangeAuthCode msg url code = - [ ( "client_id", clientId ) - , ( "client_secret", clientSecret ) - , ( "code", code ) - , ( "grant_type", "authorization_code" ) - , ( "redirect_uri", redirectUri url ) - ] - |> Common.queryString - |> String.append "https://api.dropboxapi.com/oauth2/token" - |> (\u -> - { url = u - , body = Http.emptyBody - , expect = Http.expectJson msg tokensDecoder - } - ) - |> Http.post - - -refreshAccessToken : String -> Task String Tokens -refreshAccessToken refreshToken = - [ ( "client_id", clientId ) - , ( "client_secret", clientSecret ) - , ( "refresh_token", refreshToken ) - , ( "grant_type", "refresh_token" ) - ] - |> Common.queryString - |> String.append "https://api.dropboxapi.com/oauth2/token" - |> (\u -> - { method = "POST" - , headers = [] - , url = u - , body = Http.emptyBody - , resolver = - Http.stringResolver - (\resp -> - resp - |> Http.responseToString - |> Result.mapError Http.errorToString - |> Result.andThen - (Json.decodeString tokensDecoder - >> Result.mapError Json.errorToString - ) - ) - , timeout = Nothing - } - ) - |> Http.task diff --git a/src/Library/User/Layer/Methods/RemoteStorage.elm b/src/Library/User/Layer/Methods/RemoteStorage.elm deleted file mode 100644 index 62f9f9d1d..000000000 --- a/src/Library/User/Layer/Methods/RemoteStorage.elm +++ /dev/null @@ -1,113 +0,0 @@ -module User.Layer.Methods.RemoteStorage exposing (Attributes, oauthAddress, parseUserAddress, userAddressError, webfingerAddress, webfingerDecoder, webfingerError, webfingerRequest) - -import Base64 -import Http -import Json.Decode as Decode exposing (Decoder) -import Url -import UrlBase64 - - - --- 🌳 - - -type alias Attributes = - { host : String - , username : String - } - - -userAddressError = - "Please provide a valid RemoteStorage address, the format is **user@server**" - - -webfingerError = - "**Failed to connect** to the given RemoteStorage server, maybe a typo?" - - - --- 🔱 - - -parseUserAddress : String -> Maybe Attributes -parseUserAddress str = - case String.split "@" str of - [ u, h ] -> - Just { host = h, username = u } - - _ -> - Nothing - - -oauthAddress : { oauthOrigin : String, origin : String } -> Attributes -> String -oauthAddress { oauthOrigin, origin } { host, username } = - let - hostWithoutProtocol = - host - |> String.split "://" - |> List.drop 1 - |> List.head - |> Maybe.withDefault host - - ua = - (username ++ "@" ++ hostWithoutProtocol) - |> UrlBase64.encode (Base64.encode >> Ok) - |> Result.withDefault "BASE64_ENCODING_FAILED" - in - String.concat - [ oauthOrigin - , "?redirect_uri=" ++ Url.percentEncode (origin ++ "?action=authenticate/remotestorage/" ++ ua) - , "&client_id=" ++ Url.percentEncode origin - , "&scope=" ++ Url.percentEncode "diffuse:rw" - , "&response_type=token" - ] - - -webfingerAddress : Url.Protocol -> Attributes -> String -webfingerAddress originProtocol { host, username } = - let - fallbackProtocol = - case originProtocol of - Url.Http -> - "http" - - Url.Https -> - "https" - - protocol = - if String.contains "://" host then - host - |> String.split "://" - |> List.head - |> Maybe.withDefault fallbackProtocol - - else - fallbackProtocol - - hostWithoutProtocol = - host - |> String.split "://" - |> List.drop 1 - |> List.head - |> Maybe.withDefault host - in - protocol ++ "://" ++ hostWithoutProtocol ++ "/.well-known/webfinger?resource=acct:" ++ Url.percentEncode (username ++ "@" ++ hostWithoutProtocol) - - -webfingerDecoder : Decoder String -webfingerDecoder = - Decode.at - [ "links" - , "0" - , "properties" - , "http://tools.ietf.org/html/rfc6749#section-4.2" - ] - Decode.string - - -webfingerRequest : (Attributes -> Result Http.Error String -> msg) -> Url.Protocol -> Attributes -> Cmd msg -webfingerRequest toMsg originProtocol rs = - Http.get - { url = webfingerAddress originProtocol rs - , expect = Http.expectJson (toMsg rs) webfingerDecoder - } diff --git a/src/README.md b/src/README.md deleted file mode 100644 index 17b2300ef..000000000 --- a/src/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Elm code - -Elm directories: -- src/Core -- src/Library - -`UI` is the Elm application that'll be executed on the main thread (ie. the UI thread) and `Brain` is the Elm application that'll live inside a web worker. `UI` will be the main application and `Brain` does the heavy lifting. The code shared between these two applications lives in `Library`. The library also contains the more "generic" code that's not necessarily tied to one or the other. Additionally you have `Themes` which is a layer on top of the UI code. - - - -## Emoji Comments - -``` -⛩ Gates (Flags & Ports) -🌳 Types & Initial State -📣 Updates -📰 Subscriptions -🗺 Views - -🧠 Brain -🛠️ Functions -🖼 Styles -㊙️ Secret -``` diff --git a/src/Static/About/CORS.md b/src/Static/About/CORS.md deleted file mode 100644 index 5c72c453a..000000000 --- a/src/Static/About/CORS.md +++ /dev/null @@ -1,121 +0,0 @@ -> A music player that connects to your cloud & distributed storage - -[Return to the application](../../)
    -[About](../) - - - -
    - -### CORS - -There's only one thing you need to do yourself so that the service you chose will work with the application, and that's setting up [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) (Cross-Origin Resource Sharing). Here are the instructions you'll need for each service: - -
    - -#### Amazon S3 - -You can find the CORS configuration editor under the "Permissions" tab, on the S3 AWS Console. - -```json -[ - { - "AllowedHeaders": [ - "Range", - "X-Playback-Session-Id" - ], - "AllowedMethods": [ - "GET", - "HEAD" - ], - "AllowedOrigins": [ - "https://diffuse.sh", - "http://127.0.0.1:44999" - ], - "ExposeHeaders": [ - "Accept-Ranges", - "Content-Length", - "Content-Range" - ], - "MaxAgeSeconds": 31536000 - } -] -``` - -
    - -#### Dropbox - -_Not necessary._ - -
    - -#### IPFS - -Add the domain of the app, with the protocol, to the __list of allowed origins__. - -```shell -ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["https://diffuse.sh", "http://diffuse.sh.ipns.localhost:8080", "http://127.0.0.1:44999"]' -``` - -You can also make this change in the Web UI, you'll find it under "Settings → IPFS Config". - -```javascript -{ - "API": { - "HTTPHeaders": { - "Access-Control-Allow-Origin": [ - ... // Default IPFS values - - "https://diffuse.sh", // 🎵 Default - "http://diffuse.sh.ipns.localhost:8080", // IPNS through IPFS Companion - "http://127.0.0.1:44999" // Electron app - ] - } - } -} -``` - -
    - -#### Microsoft Azure Storage - -You can find the CORS configuration under the "Settings -> CORS". -Then fill in the following in the input boxes (left to right): - -``` -ALLOWED ORIGINS * -ALLOWED METHODS GET, HEAD -ALLOWED HEADERS Range, X-Playback-Session-Id -EXPOSED HEADERS Accept-Ranges, Content-Length, Content-Range -MAX AGE 0 -``` - -
    - -#### WebDAV - -__Depends on your WebDAV server.__ -Example setup for Henrique Dias's [WebDAV server](https://github.com/hacdias/webdav): - -```yaml -cors: - enabled: true - credentials: true - - allowed_headers: - - Authorization - - Depth - - X-Playback-Session-Id - allowed_methods: - - GET - - HEAD - - PROPFIND - allowed_hosts: - - https://diffuse.sh - - http://127.0.0.1:44999 - exposed_headers: - - Accept-Ranges - - Content-Length - - Content-Range -``` diff --git a/src/Static/About/Dev.md b/src/Static/About/Dev.md deleted file mode 100644 index c3e002d6c..000000000 --- a/src/Static/About/Dev.md +++ /dev/null @@ -1,111 +0,0 @@ -> A music player that connects to your cloud & distributed storage - -[Return to the application](../../)
    -[About](../) - - - -## Adding Sources Using Query Parameter - -```js -JSON = encodeURIComponent(JSON.stringify({ - // Object contents depends on type of source, see below. - kind: "ipfs", - data: { - name: "Music from IPFS", - - // Source type specific - directoryHash: "Qm..." - } -})) - -"https://diffuse.sh?source=JSON" -``` - -You can add multiple "source" query parameters, if you want to add multiple sources. - -### Amazon S3 - -```yaml -kind: - amazon_s3 - -data: - # Required - accessKey - bucketName - name - region - secretKey - - # Optional - directoryPath - host -``` - -### Azure - -```yaml -kind: - "azure_file" # or "azure_blob" - -data: - # Required - accountName - accountKey - container - name - - # Optional - directoryPath -``` - -### Dropbox - -```yaml -kind: - dropbox - -data: - # Required - accessToken - appKey - name - - # Optional - directoryPath -``` - -### IPFS - -```yaml -kind: - ipfs - -data: - # Required - directoryHash - name - - # Optional - gateway - ipns ← boolean, `t` of `f` - local ← boolean, `t` of `f` -``` - -### WebDAV - -```yaml -kind: - webdav - -data: - # Required - name - url - - # Optional - directoryPath - password - username -``` diff --git a/src/Static/About/Index.md b/src/Static/About/Index.md deleted file mode 100644 index f8f15b5a9..000000000 --- a/src/Static/About/Index.md +++ /dev/null @@ -1,141 +0,0 @@ -> A music player that connects to your cloud & distributed storage - -[Return to the application](../)
    -[CORS instructions](cors/)
    -[Developers](dev/)
    -[Privacy policy](../privacy.txt) - - - -## What makes it different? - -Diffuse is a decentralized music player consisting out of two main parts. One part is the music and the other is your data (eg. playlists), both of which are in locations of your choice. Meaning that there's no central server for Diffuse, all of the processing happens on your device and all the data is in your control. You can use the [web version](https://diffuse.sh), the [native version](https://github.com/icidasset/diffuse/releases) or host it yourself by downloading the pre-built packages from [Github](https://github.com/icidasset/diffuse). - - -### Music layer - -This layer connects to the services on which your music is stored, no data is written to these services. You can combine all of the following: - -- [Amazon S3](https://aws.amazon.com/s3/) -- [Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/) -- [Azure File Storage](https://azure.microsoft.com/en-us/services/storage/files/) -- [Dropbox](https://dropbox.com/) -- [IPFS](https://ipfs.io/) (supports DNSLink & IPNS) -- [WebDAV](https://en.wikipedia.org/wiki/WebDAV) - - -### User layer - -This (optional) layer will use a single service on which to store your data externally. Your data being your settings, favourites, playlists, etc. You can choose between these services: - -- [Dropbox](https://www.dropbox.com/) -- [IPFS](https://ipfs.io/) (using MFS) -- [RemoteStorage](https://remotestorage.io/) - - - -
    - -## How does it work? - -Diffuse locates all the music files on the given services, extracts the metadata and then stores it via the previously-explained user layer. - - -### Supported File Formats - -- MP3 -- MP4/M4A -- FLAC -- OGG -- WAV -- WEBM - -*Note, support may vary depending on your browser.* - - - -
    - -## UI - -There are a few "hidden" features: - -- **Tracks have a context menu** which can be opened by either right clicking, - or holding it (ie. a long tap). Use the ALT key whilst right clicking - on a track to show the alternative track-context menu with more specialized options. -- **You can reorder items** in the queue or a playlist with drag-and-drop. - Select the item you want to move by tapping on it, then tap and hold to move it around. -- You can select multiple tracks using the SHIFT key and then add that selection - to the queue or a playlist using the context menu. -- Click on the now-playing bit to scroll to that track. -- Double tap on a EQ setting to reset it to its default value. - -### Playlists - -To add something to a playlist, and create that playlist if it doesn't exist yet, you open the context menu of a track. To move tracks around in a playlist, first select the track, then drag it. - -### Search - -```shell -# Show me every track where the title, artist or album contains the term 'Parkway' and the term 'Drive'. -Parkway Drive - -# Show me every track of which the artist's name starts with 'park'. -artist:park - -# Show me every track from Parkway Drive of which the album starts with "Deep Blue". -artist:Parkway Drive album:Deep Blue - -# Show me every track from Parkway Drive but not their "Atlas" album. -artist:Parkway Drive - album:Atlas -``` - -### Keyboard - -The app should be usable with only the keyboard, there are various keyboard shortcuts: - -```js -CTRL + K or CMD + K // Show command palette - -CTRL + L // Select playlist using autocompletion -CTRL + N // Scroll to currently-playing track -CTRL + P // Play / Pause -CTRL + R // Toggle Repeat -CTRL + S // Toggle Shuffle - -CTRL + [ or ] // Previous / Next -CTRL + { or } // Seek forwards / Seek backwards - -Alternatively you can use the media-control keys, -if your browser supports it. - -ESC // Close overlay, close context-menu, deselect album cover, etc. - -CTRL + 1 // Tracks -CTRL + 2 // Playlists -CTRL + 3 // Queue -CTRL + 4 // EQ - -CTRL + 8 // Sources -CTRL + 9 // Settings -``` - - - -
    - -## Q&A - -### I used version one, where's my data? - -There's a small link, or button if you will, on the "Settings → Import / Export" -page that will allow you to import data from version 1 of the app. Note that this -will need to reflect the authentication/storage method you chose in version 1. - - - -
    - -## 🪐 - -_Part of the App Ring_ diff --git a/src/Static/About/Layout.gren b/src/Static/About/Layout.gren deleted file mode 100644 index 8c2f1e48a..000000000 --- a/src/Static/About/Layout.gren +++ /dev/null @@ -1,135 +0,0 @@ -module About.Layout exposing (..) - -import Transmutable.Html as Html exposing ( Html ) -import Transmutable.Html.Attributes as A - - -layout : - { pathToRoot : String - } - -> Array (Html msg) - -> Array (Html msg) -layout { pathToRoot } contents = - [ Html.doctype - , Html.html - [ A.lang "en" - ] - [ Html.head - [] - [ Html.meta - [ A.charset "utf8" - ] - , Html.title - [ Html.text "About | Diffuse" - ] - , Html.meta - [ A.name "description" - , A.content "A music player that connects to your cloud/distributed storage, in the form of a static, serverless, web application." - ] - - , -- Viewport - Html.meta - [ A.name "viewport" - , A.content "width=device-width, initial-scale=1" - ] - - , -- Favicons & Mobile - Html.link - [ A.rel "apple-touch-icon" - , A.href (pathToRoot ++ "apple-touch-icon.png") - , A.attribute "sizes" "180x180" - ] - , Html.link - [ A.rel "icon" - , A.href (pathToRoot ++ "favicon-32x32.png") - , A.attribute "sizes" "32x32" - ] - , Html.link - [ A.rel "icon" - , A.type_ "image/png" - , A.href (pathToRoot ++ "favicon-16x16.png") - , A.attribute "sizes" "16x16" - ] - , Html.link - [ A.rel "manifest" - , A.href (pathToRoot ++ "site.webmanifest") - ] - , Html.link - [ A.rel "mask-icon" - , A.href (pathToRoot ++ "safari-pinned-tab.svg") - , A.attribute "color" "#8a90a9" - ] - , Html.meta - [ A.name "msapplication-TileColor" - , A.content "#8a90a9" - ] - , Html.meta - [ A.name "theme-color" - , A.content "#8a90a9" - ] - - , -- Styles - Html.meta - [ A.name "color-scheme" - , A.content "dark light" - ] - , Html.link - [ A.rel "stylesheet" - , A.href (pathToRoot ++ "about.css") - ] - ] - - , -- - Html.body - [ A.class "font-body text-base01 dark:bg-darkest-hour my-16 bg-white px-4 dark:text-gray-600" - ] - [ Html.main_ - [ A.class "mx-auto max-w-2xl" - ] - [ Html.a - [ A.class "logo inline-block" - , A.href pathToRoot - ] - [ Html.img - [ A.class "block dark:hidden" - , A.src (pathToRoot ++ "images/diffuse-dark.svg") - ] - [] - , Html.img - [ A.class "hidden dark:block" - , A.src (pathToRoot ++ "images/diffuse-light.svg") - ] - [] - , Html.h1 - [] - [ Html.text "Diffuse" - ] - ] - - , -- - Html.article [] contents - ] - - , -- - Html.node - "script" - [ A.src "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/highlight.min.js" - ] - [] - , Html.node - "script" - [] - [ Html.text "hljs.initHighlightingOnLoad();" - ] - , Html.node - "script" - [] - [ Html.text "if (\"serviceWorker\" in navigator) {\n" - , Html.text " navigator.serviceWorker.register(\"" - , Html.text pathToRoot - , Html.text "service-worker.js\", { type: \"module\" });\n" - , Html.text "}" - ] - ] - ] - ] diff --git a/src/Static/Fonts/Hack/bold-subset.woff2 b/src/Static/Fonts/Hack/bold-subset.woff2 deleted file mode 100644 index 93d425efd647efff5c4243246b9be9ec21f2c0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23512 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%0Aqm#o$nvVg94)EBl9*fz&EBD2QCT#i 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 XOK_Gc@FbcEuG<1_lpgUh0RR91dzobJ diff --git a/src/Static/Fonts/Hack/bold.woff2 b/src/Static/Fonts/Hack/bold.woff2 deleted file mode 100644 index 1155477e966f2967366ee1ae3f658eef0448a51e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108008 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

    nBsD%Mg&;1R|sj`5v+!&9N1A@faH>G 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

    +{y5>Qj&blr~7F|ff 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

    +<#}>?RfSLWb^pdT4|$;d~i` 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 EKi!h~=l}o! diff --git a/src/Static/Fonts/Hack/regular-subset.woff2 b/src/Static/Fonts/Hack/regular-subset.woff2 deleted file mode 100644 index 1e3abb96e62162e52a5b840c481e1ba54de8e347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23244 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 NE|#bL1PcHF{s%4XDq#Qs diff --git a/src/Static/Fonts/Montserrat/Old/bold.woff2 b/src/Static/Fonts/Montserrat/Old/bold.woff2 deleted file mode 100644 index d9940cd116dd684dce8fdc2ea0aaf878bbdd1880..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85436 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

    <(a?CQuB=SbU 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 diff --git a/src/Static/Fonts/Montserrat/Old/extrabold.woff2 b/src/Static/Fonts/Montserrat/Old/extrabold.woff2 deleted file mode 100644 index d5022db1ba1d672e15f0455e166b2c280e2094f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85420 zcmV)TK(W7fPew8T0RR910Zps`5dZ)H1Uu{i0Zl{z2QxDO00000000000000000000 z0000Qg%%rx;4B>WLIz*}m3|0;SP7gJ5eN#1tqg~`ZUHs|Bm=x)3%q0i1Rw>CLkEGa za14QOTfpM8)B$)_gKz*k$F>#t17M;RHH-Lf#O>4ku9Gz2=oq5cB!Gx&*M3q8)F%5& zHQjB2zqmm-RpqR+-YKG3 zV2MSNx-9j1QHtZVEU1)Ik7}*nh>}<$q>`6RoHVJRWfg4*IznntINR-IuwKNWkAWl3 ztc+v;!BE(^0%tLbIvx&1tRCHQ5( zDs+bSWNxvxKz|vph~J(zih^XhFO{fE?Q|!gwH&$RsA?<%F%qFdgpu7nwM4KFRUrq5 z$ek0^FzU!mkBDIN7@K7KWG_{^#2UA+X>`Jz29hy#R+9mpkTYe)lQC6gMOabO^9%Np zza(2!kdP}2>t>MHue{8N^KeX!$Ti7?-c;9dOLeg6NbC0Qo)s|`VdeONRrYZn3wc6r zF`Ll!$rd-$h`Z2eKfsZ}Evc@VtNAncVraQ)PO994hBIL&Jz>>6^;UTCm+tiQEM$yA=a`Yti)>E;FXJfNx0aF3Zp?!>zHVV=(U4j z7xszl)A1{(8?R)8YQ*jiO}2LT%<7?CH0qqp_ApV0k6Tt^R)iI;aBAzUum_)a!n~%> zf{p2o!P^%f2iN7B19EVK@1lFq>!I5_lpw!4>?R);(6QSO>?t>8yfR_Y+G58 z;PzNKrU%V(kdb+0UW{1{aic*JVnerkCL|NoADJ#G@y=ZM3M&Du3f6|V_!dq>ykslV zT0j1y&V0b?DnhPcVT0Yr<)7m2_Q@i%bk%)K7z^R1=8li~ofLV3 z1^Vlae&oM%tg+b^E9N4+8jTEAW>Yp2ejbX!d>-go2s-?X6&ZwN4g?vuzp4a4q*AHT zWOjWJrj}FYW-P=W$BB!)*&a$u>!p>?Ta_;1?kM zF~2(_ux5DPZtwqF=H20pbLZonG1plmb7vZEA4%5GO|Q3fhHU^BaS_nc5hQGjWVxdzXtt^}GsVFkYO!#i?_9MaMu zNJ075w?%zL8+X-{55x2SzxR1J*V_BsmtGNu7(uO$e4XLZrK%{J#vx3pMxs!fev6=> z0RH)>=ZN2(H!V9z97sSbP{%_KI1IQzOE8hnpQ*Lj9-=8|XfG}&X74f(NhYZhGAVIi z&g`pN(uXSb=mXFZn5w&FD;s;Fnb8FO-umEVbWyJ3_iqb)3L!{#h`kH}0RJER@xOJ} zKJR{1n)r04Ln2d}S;VK)X(ka*CP}n1OsARdAMTfz?-m6zpaDl(6kX98Xx5>d(DWbu zimMI^aAVv3Kt&Zo36_%8uh#NO$3>;$uIg1HX%ZJ68BI17p@2UyDzpR+m=Ak)uWxst zQEnfK8yw355JgcmB}W&4!PT1P=G|SkAIKreG6PBp7?5OnL;CT;^jmb5-#_imJ>UB8ZM`i?Z%dMqjAoHu zk|gOTNs=o`l4K-Fl75mTNs=Q;k|arTB}tMbNphvPB}p=pktAsrBS|s@(o`=v$Rlg% zc@V@pze4c9*8YMs?)R@A9bse(PaSdGP&JQZ8Jd9hr2TC+e z&LUEfKE}$eb5kEYPdDGcyW(w@Qfvz(OCX>_eydCAzd%x zIQ*tx@ZthJaZ$usM=P9ha6gqph+JDNO0D9;uRf8m% z*W3PYwiSB)nqG+l_%hzEqp!q@OD^7k&h2GWyVq0CtN2=ZksNk#N>x1e)kQ4QIzmgN zl?h-)=fY1aY-e03Yp4`>R8GxVY|I|B-0M$kQ9s`@CEkOk$_)xijo_fiGEYnFWQl-U zW51^_7Ex^srO*yaAk>PN3Pdi=47gP=vbl4LOX?>5^Ij=TVQiXlsFtGL&knjfqOU6z zZIDT2u06atG7Xb2F-PQonFZ2IdcE7le& zLloZ(Nsqa?hFWO96;Vlr0uV@n000Q|!sOuc@cB!cr_pF21uDWun@AlOiqP{r0lODO zQ4}TJB>Kr{Fcc;ejP<+?K=^)c@~8KQr`8~>%!Q;3LwP7nW`XSJXS!MNsi>}FGPYt+ z9j>pIAr3l#9GkeAGL=I#rGz>;pkKBx5XgbsTb}>_qaS~2u-zc^=~2wb4u5O*sIZkm zq+M*7gagX||EWs-b^SVI-TU4vR=s*C0|kHriV&LwDSa@=20>6JA?m*>fK;JC$rPmTPf6}`WOq_$SwG31 zWQw9}iE{hP@`M;xv$EaY6GC3CI_%uL?%gbBvz`C5X_dBkk)uNj!j|09F(=`@=PvXJ z*On~5F%Hl&|N2$c>Tb2XGAwy!i8zf8FuHeP3KN0b78bvyEnQ^ZCY5Nl?q zwJ9BPLb8#}mg~>9=6+58(e|ZKe4OPJkrxw}F_4X9W&_9${=Z+AV!f-_jkbi=)X;?3 zly(36XRG#~zpL`R8HXOnS%-wwLQZk)OrQytkjwDTH~nTeOHEwdlPfIV?H$@1=m{kQ zU2SO@^@~wRIrQNEcmJRkganCCG=-2Ue8@^7JUsvX zjXbJjO%jln^{pEgG_zulVL{eDF7(y(G3u>$gwCP{glWb}+UKZoc;5o#%f7sq5=`hQ zOYkxfL?Yq&6${THYqgE?N3Ugq z3*ZoNhSKAK|9jPw++r7g?6)Emt5C+?tLw8~!}@X`=(_6~ zjrJdHm#&K?js4D~m&FjafE7s&jdUd2Au8%L4Yx(gSa=gDpqbo_cEuP+zO&wTI1FQE ztq&1hd&7^}Et;#^@CiXgL}Yj@SA?Jnmk#V8 zzb(V&0R1G8VGxlZK}1A?z3g>|eYM@}N#A#!IkWd$I`92&jWw#OA|fIpDn{?5uW!>$ z&wX}J_Wj0KW3;(w(ON`AM3hoWDW%PQ%=uRT-zD8`YfLbM2u2uTgb~366T%R3!+f2u z_jYqr;^Hu8${-RX1Q8J_r93|$B09%*sYi5GIYDVo7V^)C&b%bDLkykW`6yZ&Uv7(n zEgKAWF%7RnMG)-FSE5rDggEAF|LJ<{3 z2w{xrn8ukpoj3hm-j6@${|nVFwYPu0Z>vlP3Oj)WGU0@A*-W$G;DR`(Gp3x6(p6Rx zbO|PT{PQ0XfY|`>v0#Fsu?Ar)7eu}*AX?o9aaTWxLGM7!`T*jiFCf191;mb&zzE{E zQ4bJ*j_!cyum*?;F5?ha@P8cQM&8LGR{ZS&uR>UE0GR-rHH+GDY?71~C~gmCKfbom zMX*iz_b3CQRAY9rNR*hAJGFHh_P&Q1HJ&Hy)8z$Xd`W=BQ0QSWQrzUiA!!af?xX<~ zhMhLnGr~F3YRvVr=vC2Hq0KSv&bVWxBf^+xUYP4A(J!J)!m>3RUJrKtmVn0a;U7e3 z7?C*YiL@qESJ2O3R8U({d%>|Y*B-q32^b_~c=wA&2{DtT%vH3bCqzqyileH}xOlJT zXWK0>U%&t4Btc^HZxk_3#*C>C9>3s4ES8y@hY=#yw>Bq8Z+1R~yqh7E5m-beA~2JqMQ$)Bs#ETDHC?B)@1Biqb%6BkrfVXWsO6lY;a^JCpdN> zH*jJ<`X){tI{JV1Ew2%~i^qWr51w$CLqGzere|W~THmLBRyQOj4OY>F7?@hvW?v8G z)A{wY?#Ry3vGIw?spuG4Ie95+aV)>tN&yT&{@0TL1_e6&Y8ebzG>3x-f(|CEIr9R; z1{(btyYccLqASMHfAW*Re)sAZ&OJ=8e<Xs6Bycbz3%K(a$-P6c1xdEQ|B=E&tJ=yWA)F_bq{9X}axHYSdw$&NyVj zufswpZt5;~e%Up!W+Va~WxES2(ECT%*gNx==k@`Nq@iKar8Q=zQLU>|3$P$HqPoc0 zyf$d>!H%zN0KsGNwA|o;4=*E?v)T%%O!_V)9<0E9C>ih)+VVWRV(Ud(qZA4*+f6xt z-Jq?0sbRLdP()BuLWG4bgrfP=aDXPW&r%A%bCI;qWMxDsvr}2ia49-=X=Wwemy)?q!~Sv0;G$)r}vQ7it5snY*Z3xwnVQ^y5BCXF27 zZOA{P9OWR4xCBspnFl9i|7=i{VdF0KP!vXwK^WCdqfw^qkrVGs%2jl-7c`YyLJe00 zAT;vArG>eCLT|eQ+~!Hr_cmfaJ_)hAcs&iE7$97$hmuR;>+01&{TdwG!{Ir}+&2kb z!&8kI)Snh0L{#XBW#KerX0+~E0|{qAF@6Birjr+dX%*~dOANA&RAhg%my5I1FaBtR^^`68-U{b5$i%F&M7e<_-N?Hp&)Br61=TIjYF66 zbH_>Gdzr|{RqV>)M@gv-Y*GB0LSTx=RwJ_h`P2PU6ZV*vBq00FxsRhEIi;uNt38zu z%d-RTDM~4Vvn#MsJ6JQkde_#Ba>Wgji7cy?R8~`36}9+VuzppR^%)Ue%Jw7Bis&~d z753dop_5rKjER9p-v!{I|8Sg1L2c?r5#@|Bn>?oo~e6Au+^Uc4*A~2 zTn@ul zLL)c!gZFFf?AS}`!NZ50R0(i;iusiI+>#+SgMrG1FY}gS!PN@d<&7Sf1H>AOj=WeP z0}A`3Xd|OTpaS844V@OJXu@ImP<=9Ilg{pj%`d4H)0C&v=!S*6|B9yl>-Sye*RCNE zdc_i`SGub{cXwA`PPOt>5%NMs`I!EYs*}Nr6% zz~jP`g>C&>%jDgyr}2FnPCDt1WV`uC7Z$`$<65A%DE|mv!U9_u{T?sHi=TkgBeaO! zi^W18;I}M=3R`(iuXbN~`Kd!05vJ4G3kZL}-?F9EKuQI8T@{$Z;mP&0U3uvk z;Xn5?);`k6d%+zjCT&6@&sn$vSu~YLYOFdsNi!k&I#1x2$G~>A3mJ$sm=oX?-F~5| zNlh)^bP9V`90)T41|dE!%XB?$Q{KF=ttm}f$DdcZ$C)~lKfclW-_jP82|J=iU|n64 zi$`IcRA+tz3(rvpj3TR>z~XG`h#AwpE>w>nFWO%SN;pdSwb0;Z(+}}=dZ82P;J2r- zaa2a9s|3uhDJr-ETNURpRanKVP4GXHE*hQK2%q>RS zWRQ7sgTVnphfZ{u&M?I?+?yMyf{GERaansZKvo639H8eVa2wJGY zC(H2KFjaXIJ$tZ9k)!16RAGWxYOS-?XOIQ2^#))K%Ut5CExE7L1K4!6C_D1HO~Scm zHV`ku((KTY36?oyr1dQWQPpqgEFm`drPx6Q^q(^D%m{6_VaZk(16Rdv+Q&`I4nEX^ zayjiDWA-9AAue5IxW(*$E&xR?A2-3ie$xo<}-^0`w#27x~Q`K>D z8mSK(gGdn$FJD1K+Xa4~8-lylRuSx*5JvEtiM6e6nis-ro7C)&)qZ=rx|J5=emEwo z&k3wzC(S@*rXsPKh`^wh%DYt$o4#`R;H03Z1jooJPCc9m1@XXhDi!G7(^dDhsrplL z`{f=OYx~YKOCuUakQU!&AU{Eq73>znBmB-49iaGY)nmWKnIBP|0-^#ujB*Lb30^yqa3f}nl>^uA} z6TlJev>V1O_~%)!rHiqo%dniww_@lq|HH^;03<0=qs^9={4U*$%^k=wIo8LqC=6g5 zD0W_H))R49Gy9g=aX@0k)U5m zyF|@zLcXVQYpd36zHJ*V2B3kfJE`-z<^osUXrFf(i06VMw48B(%-#K;pKxlCtY2xm z#5CVf{7%ZBci&Ys*CB3_cbj?);4yv+kDmbDPs6X&Tw>t2SA6FSf80fv@1Z~UX9wLi zbk|9_k^d`WlZ@LGV*oWq-HJoOG3FjnYpeK;l0V6rc}hH`e{1ATKaSNRs$WU^4Ug-1 z+(dSpxQc@eNs<)*UNWy7^mHaNYdw}&xtGZ(J*apUfj&&A?$KWfw}#r9k%_?ft0Ec$B6H{boR?57p0)~wsGxnm3Y zw~F7k%U$B3__lR)^+1%q0UBdygtf7=cTgx*aB&>*lN-%ZDk!D@By@Uu-$MlQ&qf&r zM<7vX3>Jqc5J_YTl}2YUSvtCU`UZwZYz~*l7YIc%xk9N@Yl?OZ>Nq@sNFq~=sWixh z&S0|G9ImOExrHTTzg~niUcmk0`rch~g29v|(@dZMW zSR$?W6aWAKIy0LqNp zE)D8ehjr_IQ`_UzAf5C5`dn0`DDmwSxO(XJm+GZO`Zf-e zQsuhc)9ZnU#bouj`a=O6@Gn0A4VZp^o)-v-0Db?<paXSpv8I$3 zp7&pMg|1J~G$a)f_)U2Ka)DtM*Wg*Xs70A1x+EptF9wrmqFG$HkEv%S0G4oKuR1k( zl0A-SsEJ`lGM_}Ao!~6vsO{AHLF|sLrunT6{BtPd6lTSas1dRVmhnb49BgTgkiP3` zh*gk?w@g8qlUqeGDPW7Q4g8uCP(Hc2EGgJ3d3`Qcre#r@5e-J}4CSkEg9BQnbmNIF z@P~yR^f8#XK zYQSu{C*7|RLCw<(&H4(s`#nk(vXtx;66#4HBe}Tdi$Jfgrw#oJh@1CLu>S+xIPICT zWEMnuM`^^m$~RWCYcOYE>=Z_%OcjEEZe-1-8jN=4^#RpvS?aTSX#O07g(!WaSe?!g zD%8R%MN?nLCxG-eqb!%#QV_~wo{c>Q4j;yH`#Q4>5>EL}*6B1+f*}RDtM<@+lAXw^ zZ$U}@w&3WjQU$R#H}``@0}mS#1YWIA+SW$!lre+FZ4izhEyi%b!3h&5(m=EUb&s|Z zKWs~ajHAylJKFzx<5|w&JzTCb4XYg3CLZ>`yTRMAQELLFunxxDfGy%W^+9kky*nD@ z0{4c5*g~NqxqblC@kJ|>kEEG%@V0@m@K+ErcbY(_fm!vV{*c)ipU>r{cgmp)j{xO4 zbV#W+YMV!j3ti>djh^3ar{6!FjCpM1a1>y^c^v=r2*N;1-(aY^f>Da8nQjIc7*Xz< z*Yb4gGW=}z^T(czwAY-psBV9v0>+57KGbn={U6f*Kzp1n0IkpVm7tJRDl z?m9j#*AJZ*I!eA6A68~NJW~r>NZ!pwWx~>mF_Gg(c!JA(c-HHdV;pTDbKB+p2oKmJ zxzrkc=9KgFc}j;ZhZ~T=AO)Ngd`ddedJG@`p*VWQUCC`DG$rEE)E>%{9CQhF!e0h!j8RSh_ZtWe%58t)gbBad z)LJLqiEWK+A8wwRQIr>JY&m_V+|+1Ft5)TNY2dr}-rczzUhN=4f%$a7{Gpe^hn0F`0axv`{H*YZIZ*SbRx+8T}GX_m+4b#CFF+D{V#{bM| z)DpLm0CeBMxK(q>O5h_9%BE=68D2}~$stsqm8h#mXiam_*sBDbKr20D-^T@r9DX$H z=3(p8B42Lfg$~I^2wfEdBG@oc?pr&s7Lhv-DLRz$7y$l{O$x2ZdZa7vp6Zvd@!Y|+{o%5T+YCm0C_HRd5&b!c)7ueFG>u0-NA|au!vEnFqYAm(W9JEXYVsN)9ce$H?z)JG@WL> z)?(teqp48qo6SKUKf|h-P&euwvWx7!>mBkFK*yCsZU|D+G1ASLz@KJ zMKgXXz`R|=GtnTRcMA?>tjPTFDA1(6_;)?_&7}Lcf0th65$<}G)({_fI+3mM+^7f6Zow%Zg*R}R5#lGd6>3w=|uF|xG+9Avz zvK$-EIRQ0w7uJxot+zu{APVA6Mn;ZAEw`~w6LsQE8fj^4Lj#9B6DqM_q|3x!qS1dM zm9Hx)w~H7AP()Xi05hl=eRQbLxhKK@iCjRF4{rgmbeR(uBL)WXBgb>-;do2)#;!b@OI&Lo4R%L}iZpy}R}qDC4BS|BEC7Xy{IHly$=}Z0{wO z3#j-DOCPiI(q{O5Q-ngoz zfXa4M!XPiwu)1lEoAev~+Vp{2MteNlm4WpepB&hYHH7+5jOsCjb_#70B%b20c zK({Ow=yDjGp*+VSMGjewY68Z;Ppj2W(}CLJ zK^edi^4%(3^qPJE>AGMnAVyaKymyeLb(g_3j&sNmiG75D(Fi&ml%sW;tOjTgd zQ;7eFG)z0DE(Gg7xGPj+rmckA1GAE+ddrqfVI0`#d&Z3NdI0?+;`?Tjt9BsVs+BWB z3mj%C0`I3^WVblxrXyl9MF^JFq#_uNCS#Zx0lI>fR&Z>wnutDVQ`S@yp3}G?#|-8= zghG%Y1UMNHvHqoJ?zo^JpcCC01(y}ztvjCFdST-#PxJ1`Dy}>)-t|33bWw6}y%`^M z$IR;DnMJ!?VdbrdDU1Ri%Lo{Y;T@@9* zU5*jsv&O$(=}9Dfo~fH@&5(=Kjnx!Dw>QXv)fqEPK)wk+H;0-s$Ou zT$!$kh8NH;GK4bSStQ_?2g8J?3YePgSqf$VvNBu9Lw+u_80aQCi#M@}Dxy0JBiOv> z-iEr*wA_`Bwt`F?WnGRyh9lXk-yy9~gCrTIT{8i&mNVnv)@1^AuUzy{+kRc2ClhzU zpq;TRo4E}~Nu;c{W)X?(Z?;O`b#xYKxu*R#B>cBo@pcx8YF&346!ELq6fUa=t#K}|q{cWA{V(5!ayKlL*x7C!p{w2OVeR#``{PX-ka~2n2@lWdeXk2K~ z=<@S~yX}LV-!a0s{XID1VbhjzMXkR!2ZFx#JJ@q0Ba$&w(hVi08e!GH(n_Vq7HW3t zYb~T?B}w^Rnn_A^aOQU;lUI8^{XqoTRxLTBB!OYEWjgCxx#n-vd63)$JpkJPF2d#I zj!nPgKmRi9QL34x%hzFl%T*?q+pT#^5PtA89{q}2g2A^!gtB7o;dUC=|};H1f)SzHfM9GwDu7NjXVoKI1u=a7Bj70PNtyY zDfv=tRXokrsjgK)-ePCLBXis0sWE^|;v==8edyPvkG3@2y7Q~6zTtT0ork6)(pA<|Eg+g;d(it}(S z_glD(h68B%;#B<6j7#b5ZM~Suq6hh(+G$RlUlE}ZMf+jyLZAE+WLL(sv_i+=vpoHN z{1N~ENa&FNc6slO+R87>{a@t4+rn+$5#y zA*XFFrqv)eZ_<~v?`dLs2X*Z*%SDssTi8L`GHu$M-B`Kc&|FFA%0W5fZs=Hf7;2+0 zN9(e17u-L3D>vW%MED>1-+l2wnf!rnJ2~!hbJR2_9`{|7|!Zp8#_7?hx3@0_t;seUC!_Y;nECam$`V?B5g-aKjR!>a@kV z8j@kPb1_Q%QvMS|3N4XYxQ<~yGc&`ucQd^~dD&TD{&-loVrEVQ*p*P#&eUb)v3Vzv zJ;~~<1T%8*ol_?DCtX#8sa36~Idms?Ogd9z?d!=<^ds;)l)Rcqf#D?%C2rq3Rf8ie zyQo^r??Lpag6j^>Tht?Ia;gg(zx%p=cyGGpEAZC3Hn4A}Ep+5m>1Eg*CEJ#TDt?6~$6xQXK+B z&Rpa|={B{P&JvO7!XN&HkB}thm-Y+fbCmX~9!zKrC4EftC20IdQKzh1jkbrgGeB z+~>Yg{mJbC=Vna70e%*cOlxE4UJV6DXltgd!|P{=0i;7fcc)aWQofR~RJgYVtFVt>2uwzq{|k(`fiz`1TKq zu*-Sxqm>a{>Mr}se>Y#Z9yK{qs@3_$pnF%~WQ2->8!H2Vxebwc!kH19^OtS7>Rp(i zz`WUJH+zBw1W2ak4jHdh&Wh!Al!}eXT*dAAWT0)a#&rT0%a*D27s#_ZC%mcki^DZq z?c&RFU-AUMg4r;hb0At)!rw`muSfWC`|%gfA$+(lee;K^N6YU_9=SxzzD~qicLKRT z+l{{#2=EzY{>$W0mQy9hlbA4bO%|P_@t6osbMtxrRX^U@>^xc`iMNBY;vzd=)zby7 z9Aq8O^{Vg5DS$#}eJ}JluyAQb8rV|b4_UMobllk+=yQB2fY*>35*}p>KwIc6dVu?4 zsMYxU5Tz*l^>l{xVx?m3?_1_kj!ZD#pA7AcE$YG60pnb-&C*7h6caqz(n_xd;BXB1 z3t!~x5qNWqv2#-3boRU%i*T9WTYoJ_XU+6f`g8G zE*-KM?$7oH`cReybKbBT5+02w0SZGgBE`x8G+rk` zBfkZ0yzLg{F!vfL?td)(28D+Svb7ZNwE!H>;W}q?)@iFSGvQ-x8-lYv z?FWy$MTa(o$c7NNw4@ry4>Fr);4XDlE^TzXk$T*3ZZq8KN5!ls`w(~sMp?pJ`uBNe zy&*i*R6^<5g~BXUyaG6Gh-mI2iUar(5W`(0Y>4==o<{PBJCe#NUVcbML5RN(0Uq|q zg4+&kBQP(4*;nN!g}e<>IM=J`V+H0N5!kDy5SWFgXER7D_;C%L!L^uKV@UJRfs&&Y zJof7B1ovE(??L$}NAsJaALCdm?c<%mxIRuAfHjEdVkJ;6OnP#xmu0P@0@tTOHsR?U z8|J~i**2Ig^~m>^mPYVR*@c|qI!DjeOLH15XERTry*SlAOo4p}iLiV6nwp6eIFmu! z+nmz8#D^4Vmxq!Hs!)5gsT;6%e-u~g7`0J5t>pPSXsLp{Ct0}I7MY4w22{RD%hfu% zvICTg+&&uveY|Hi{1NC|`K+m6Me=})cw2sa7JLHvQQ~ssJ3;gJP1^&OWXs zE6;EVV!2d?0(ITcSq4}(_RTogQ4e1*gnv&0Z$9D_k;FbvbR=g+aI8dL2OL1OoL_-a z^54!#Ntz&zKB`vx_i_V-8RYPH^>Zr=w@$lg!e)DHMp$$i`k?TGct>lDD>+kkn2J@P*!o8E;vN~wg~tJ4kigxzX$ zozzlQLsD-w9a6c7+{BJC)gm~ZRYbrT`%$Q%M!`s{h|Y&p8neJpe5BiBZi}Mb)3YMPYjJM)VD@M44tj)J{5wVq3Vsh#d3x&z1|Z;B7Pf_lqOOu z)Kbm}=Twe_)5wj6$HawN#Pxd1MgpaVCgU-Z7V-ZybsVsVK)}R7T4I9{7qY@?8?sW2 zd!`GP*E2c*c%+9>p@Eq}C0oxRRnklXkyE)VIE3Y!xEoiIy&3u%`6h zqfd!Q-3GqE*E+d12NUwZL!;GOj;bMm8C)&{@(gRTKC=$7_ldzRrmIjK`YeqQPVQmS zHeijvK#O&O;|Qg}@6KtNAq~I>?^24?AiajrKd9fI$%93!hTY|?rWdV28x^`dEUWMt zfV>lq9uc0hWn4rq>Wt2GGtP{`5aP5vUmKkulK29jU=b9%*;HZp?A_^Fi10e|97a2a zWV6&}M=?*Xm!1zxew>3paHu@!M*m2MEP6C;Z=erlSupxzH6%Q0bR*#H@LuvTJEx&O zpT7@LiW)uH)A@Wa_8+nK_btm&qgSEUI{AA5y>{*vC3C( zTZpn|-ZX2ov-W$z<$%;$e_;H+Z(^PAy9Q^APcy9@E68EoINZJ(W7OuJ4CdcXFV~G3a*f4ujREyXsSh^x`_z$9(V`4O0gve98;Jx6<;{BZV91 zcPo*ur#XmzJy)eb(~tl$WyQ`#=rb#NZCS68(j{Vxp7 zryj>aiy{f*EmOC^W-U>5tr11GDch@IXb{a}9AcQ?nxXagJ&~BWkF@JRTg? zU&s(D}m8g3x`Uf>28jtH1 zc=z&^Z~Yk$o|pO=#9PgsX6?mqIAR!|Je=wZT>mqO@7`w+B(ZH1gVMa9!O)3?Toi!V zz6-(X?U1b~mMc|pxDa~0}Ps~c#&&jGOMX6Ke zPip|8-F62Ozhl^(5HpdBeUWQ)`hYt)uH~KVPf9e2-wl$0DzfII*735>*yX#=iY`C% zT1rqJN6AQ|@i6)-V;|P$x8Rxi?k(u@@T}QddIbXrqG&6SJMhiRL_`fTt))+F_DF9h zgZjJoWkIlPQDv+%_b*6|*T&~YeFu8tCmHQg7@!!7B(;(uGr+tlYK-+l&03+>QbpET)1nw%`{wnd z^iQV&VL!z!w;Jn?R-g2&tq#cg{Phs)psOyN?}$*)6)HrwQs$Y zwz`zK8g3sZ8UfpSUrb#)sKQb+>d@dbQUvcz4gGPyMn+O0j8f%!mgvTo3>UozY7jEHY zz$8X)QCznk8lL7XtS4TRH~2YOHMd2naSyYrCu{q_gsr(N1g*bDWP)X@RT=9pXtzaU zxAtB1HEXK_xFy=46F)Bv=tAeZ%w1^%Dr$JVZpsd*mp=t&z!6S;^Lleh;eaHh0Il5{ z?Nb}Fd|bcAo<31>UgL)d8_ZYh#37buIRgg1w65W3&NOSOAB!llhf`g1>Mt=gH$iiU zSdXTP(Zbx2$ymvOZuCLWz6-(X?FrvG2AIqwiTHkT@|vkE*ZW^LE!nlozR~zpIcUzpdcsS%Z~a`XXRx25oXf@a&)Ww3y?J{SCl(A?isZ+5Yw181 zayt=JiQ7=-Q+Sj5dc*3-e7$pR(xatypI>AM{m91mYEn#?jRP~%lsrsT+wh*J{h9#4 zB5{5*s~ieW)@Eodm?GM{u6WRTc=(P(X?JMErOBPNd{5x&%hqen|HkYvpqP8 zEbQ|T5+`r3zbaJMD78rQ7^k-$hn(^3=Q_)I83S>EwQ8d5Ow7AZg0<1MYtl!s+vsxv z(L}Wrn3iA!PTQ`Lix>j>EEQnNsnn^B&k6k|;J%W)3jlDviQ+f!{sKp4s)6c-T5e6; zyzrbmi(8(5g=F8neiY<%x6uIk#aeOudlER!0Zx%pyr$FmKmjZcnYyn>wb{-XXPpMj z8l`87IO&i#I+~ovhLUbfXW0CajIMVbYiJqr5B< zRd&(M`>G9U`-97yV7OSiJ;10MVU|G_gTyW zo4`rviQ{K=Ux?yH=830od!@@rlZrKL4U-jw?R9f$ht=wJYAX%oSIHmU%ubR7fQrDWK-WDO4#4A(seiU#V)Gy{o_Bi9tP%4}zZ^g0 z@5kk|)xD0Z5%poBk#b)D2=afAhq#pS5*a==5l;$%5|pFTXteq^GHLP+8C~eL z*H(eI{v+^5*PZeLl>r~HuKjzy^fXN8)NWNOmSxjndotbDD9(G*--eyx+&|8cw%HtF zWiWGIkLyEW51aZEbzL|=*<5&isM65M>!PtbY2<3tiwxaxE}S#AFF7~#;&6Vq`kOP; zTAb{Xv=*e?-p$3UiU<4ceJgiL$>a^2H~Zf3Vr{=T#s^$|=QnL7V|xwAeTeBiUVrFy zEJxg4BPSJz*EuUvx5yi1zVvx>iTMkz)-APvn^FCNJ6x&FZ*8%02IFuyJIA)e;e$|I zaU~Zu7^{`LeE!>T@&lA^KW;hi+br#H{dv76g?b7$YGrAX9So-<9Rj-(s|>m4}6^2vT7#!B6yi@=yB_K!lh9>~vV_>o;!u<={0iPO7|idok}w4KmV# zUiJ+&d)XchGQzia{<&yg7(})7XpSImH3N3k#5_B*0h6#vlhG7Y(`2@j#2PiQngbv) zzTKr}+so=kKwL+=?hIVt%2S^+2LP5Hw179dECXdzwKhwZJT zEp~a8IL2;`QwLHQhb|m^9Gq?(@OH5-VSTg+KrQQP04c_FTBqx;rEOqtEnUxjtP}ea zExF~9aBcdFDND2-L*;0@K3eS<%0aB0xRFN>k0SP1AE9wu>(}Wj=_i*0> z2v1cw;j=T3m_No#Kppsz{IwnD$pVWhut*JyN?RY92efqIAKRSS(ZT?=udQ|aZ~=(( zhmrRBF9317rFt2#^(GGI*Ulav0qHlOo^GNg&7HiU!i%Ik=dDb7Q0CTB%y|JQe*Igi zHwu=0HPdmp0$dhBgE7 zOvNNzQih#B?+YLXhh}vMj89fgF-JD^+B$X{b(?G}f152jUi} zSZF|R5W5oG+=9dHmtVqT5LCy4MbBX@LK=W2r$oKSsP?t#5YlO=*!w@~ z+jpse`%IK3^6)_!Iu7hG+6?D$0c|k$L>)9g`y*-+G?5EvR1=56qld#zGl#-f2_qV- zp{#~Pz-+4@G&Y>N7pNWhs2Blhnc4o?D+m9KOX==*g6E@!&?s(Y~x6^(D3>d z%I2m1cyF(qAY}2}-S_7d@Z6zDxNLA8VW4W)OQ`Y66;-%QS_(YVCw0Gz(|dDd~}@4rVYQ6%7Lc5?x*k&w5ZSk&Q_D{THpEJdWUBx1LI}O zNB+4xn!xxK@l|g{W>*f-Bq$*_Ks`-Akx?U4$-_KbZgIV^Xex z&?q9hmc$p2qL{g5(z-O$PqzpzSsTD6KMu)?DprcAdSA%#{U9Xl1QxT`+%wL+CswJAnK9NTb>`|@vo1Ey zUR~^EtPTZ~C8Y%^?i5AuizCZYBERV_P$^Z)MY8~zWQsbmuI9{-5Er*R05{v#e$~f$ zg7m%f^Z+kzSsh(PVq+NN1euPK7S)b&z7E86kF;Ws6k8OR4=9!wW=u9LYefMa+u@@n zJsdRBZc$o!KdiDIO9m%4WvPry8@|(BkMk=TcJL=g6nxNH?J4iQWlBG`EsafQomaWR zwj*C#Qd`OxJ|__JS6#_D3X%{KI%W%E^sBsZ@pA3X0J{uP7Zyl zTz$8iE>1?TmX7#=K_Gbia*gl?C1bpSX@6nFnV|t`FkKu~nd3|11F~ZRLpUt*r$?5a zPUuZ~FRjpF}o*I>vT3mDe}ESqm%q?yGQ2+Ry%;po;>0r=)Y{ltPMKPQHP82uovoB%nz}(UKfd3BHB{Ttl%~kysx#uvECxTta zJt3w_acQ23np+LWDWa29R;)HbfhF%-DT*q))815OkT$WzTK3l&+vOW3Tan$!HpuLu zqJ-(U`Mb#sF*rmgRVsy4ClrWiR63p6CXDBWYrkAcHmj}wx>3bw_tS8K?GkE~vL7R8 zP@n#b|Bj}E9DS!y4JOi{f%j$Xpgpgs>}5HJ>+Gh(%~SRk6S&KxwNI)RB&;t2!R=%0gS(fWIFv?yOO_h~a0CDBliwKuKF~0#!c4u6%RFrM|eo%_30cH;ZQG)?JR9PzL zDFAnzE=5J>{5Bg@`tUOA(wP}Lh{3dyNv#?KW!Gb`yEBz(ppD$U$m z%F|3_IhgcJD0sePE_a9;$?fXv%SO6jLfjqA@gk#spgD8n=OGKoxvIMQlK= zEVg`j+5FQMWHzUNCCdb_o-d(?UtmRlvq1P}P~xMzJO8Mtt-fhPNGW3RqZKmK&tEs;L}}NWT0c!Ez63 zphFN=plWHM{#vMGzIPT!Sx3aG=}CPa4tsHy+0lUgD2mBQhdfMgaUsFc(bCv%i#A3| z0hB5;A|zs@5XQuKu~52!G%xlK8NCL}WLDTV5VIUT^={`8X;ZGmJl5qR89j%YzHz!w zdGyGK(P>QS#abM|2ZcAUc*tgeov}eB-G0-FE32Ut6G7x$0v1wBgsLZT??e&RLWJ7#@m#_M%3)5bsqWa+MH$Ig0_?m(dUfDrG@$A( z{b=X;4{Iq`3~A^LbK%38l)j0a#nKcy_lQLWHGmM1&W&9 zmmJl{H`k~`myZv%oz-utdB57@a92TEN+xuk2dg>bUI&i11FAf>KQ=b$*vm~F^#u%Y4ldGrz5997tex~r2 zf|Z8*1c{k+zaA?S-s@R>+?b=~H&R6L2V-#w3s;=eX8#gDM>>cPK$@6q4PT5L($5P~ z&!yKln#r`l(l&CxPGbaET@gujd`(sqT=_~28x`{vA-4sW?Qj;~$s;8poMma8F|}m( zk++NO;WY-lap%Suh?l?J2J3B1QhiQMGoG$#;3)?_fsEdmpQ*{o>IwVOCYzxcdW@1% z-pFm>f3X&wto4vDuTZUVy(G1{H)u0}lv8antyB3zsUTSA8l7MhvNYca5i>>GCBUm5 zhSk6X62R{*GRo**w)C5T!<@Ztue{yH+r4fFOyCDh>+&CXCyzcMlI2_z-?&o-PM>-g zdp9!f!*arA;yfD-dBW$+0w->PPT)l~H&$LYjjLUa+Io+1hP$BV-|c>r@_N+pak(SK z0tj>W3!%mhi-Q=(kd?bhtgoi{JgV%Fei3Les;~*Uy%6)6i;NQr2SgJ?uJnz-Gs({z z6^)}qqyXSa<%tg!Wi!h+$^bS)fw2@$M>R6FO@~fV#5{u11rmy#<$nc~cqREK24drx zwG+49oi~!yGSPY=)zesHQPY*!4`DQ35(+mL);Yi^#vjLabtF@G;jBzZ z;)xow9gkPo^#nw`u(ttk3QLbJYQN%gKA&)4jKYCCBaIhAlz45Btd2tWMJaDWvKD%y z8{Fqt%pG{H8F2olas{TrJT0?~z{0u8t$v#XNlb}G@o`>k)(byz_PdC53dyoL5Ut=4 zm}+Tst+hNK5AxjXYg)_`GIPiMv3m2MY>2x^*g|n`vbejE)$CfTxp7QWw!ATIPRL2f zQKnJZ>e`U8byZ?cDf+85xpRGPp}JX3UT<@#Nc?x}XjnP7#9YX5>_rtW4ri;5ni4q) z5gBvQrEt3Lnlum!Ca84Xz*?Q!DaE?|VKBB$AJF@1OxBK-DMd(;NG>TLXNVY(@r2-=m=Y9fB1&6yABrop%9W7D{XWTu z*j|PVw|B_v&?Fy333t%#9pf<@fDSuQ`aS-bS1=xtSK&=(4fM@P$G^`|4FJF3_p*cn zN|vAySigV36z*>(L7e%)e@UvDMurwfP|2@kE4+ z(aovR+#rqQh!=A}H!wjQ-3hWW3So%AKo|l@QrTiCkG)tJ!k~5Cz?4Z*V=W%O@i(i! zSu^NqB8Epq&TKq^IJpU=R|famCpNp?)eQAD6nYC6N3z~f?{30XDExt}?AcmVqjnZY(IqR z5BTYiF@9&nAGC=N07A_SQ+MQ5%T?Nd#|kK6J@gY#kcw*cf=}FP@cM0dur}{ippJ#v zpuIwfrl}t>g02S_Xw&{IL{h%*k4#&bH`+P*$QR@nz9R(vkQ=S_`SydH-z zpQ})Fgm!_X^ARCn@r&kVgkT2T<%xb6L&!S+$bNol3;cD_56)BcgV;jgydVsgefiAp zeG`7zrDE?KD**?*%)bjAM^%WQg816JwHzh460Ja`P0sUx5jTBt!sjrt*I8X=L|M`* zQ-_ZSeKF^5*y&&Dk6vUWkES0$!Q+~db)e&c@~yW2Ze3AC9XcbW@ZF(&)QpjxfR68p9Ukvms}z9U9^K`=xwI&|;}Le;SDLKG zJt+g@BA@S$O>7%#D8x-acyKRF#D`!Crqb-)#h5_k4!zxh4bKKOx-XY&_)L+L z#6|=W$X%`aM#phaSC*AZy<=E!_0D+MqXz?{feHc=Hk#Kzf=)SWTM}FWx8J<71g+{O zCn`xetbjQbKQ0;0gsolNtYFfO65^!998Nq?pXO#(Ngo~zJ&pEfC+o;Y%#<{)F-Evm zkFES$J1;A#La%O)ob~5eaFZIWSVjuBEQHlXWyyLbv_gQX_(X7s8(s&!r6fFI^wTX7 z&dQ(2k&7%5E;=Gangcl$q8Lh)%4C(e@q9>BhG8*M0c2Cttg@}jF%+gcr?Q<)hyzEK zLkn!!-^RX*^rQ=A!?NG={wL)7L77(bDd8g8DE%j0B zePqBFhEm-4E&)+G zp1LDGpe&R>c~b)z6>k<40*OK#2A3NF0=Uq4TnS$eFc3=6=3@gbGR0mLn2KW4y?xBzmu;<#`gPLp^8a+~5;vQN;I+Pnh6 zTlv*J)D)ou5kBERuGQsn7LCh zk{AR*5)zL)cr-BBQU0yJLqGfaMh5)`w(TeS#sR7!3Iko;kkw_r2OI`+X@!s3AXP^lxVQ2u(=S(U!rs0#*z$zyjm-Z)=H=O{TL9z++}Oa zpizw@(=ME&2!$h<$`F}yG$s)2+v%Tyr;5sj9O`^LFxaT5*I#enpi7 z!n2y&j`sqVSbl<&uNGc(bnsaYx5Mqdy_KD{p;augZ8GrJqc7qff#I&fG1j=0xB)1z zDvEm7ss_}m8v2^nKlJ*TFn)MG@T8Wx9wX1(FU>I%*xD0N6N#kIxQIxdHOa!ogd21= zuNe#X^EN7sIfD-5n={=j-HTRGMHvb&;lvthNSzZZ=c2C4YN?@$?T{&|go$zbjEI5} zB|*tA3ZCEvsD4?a4VaMjd$X+^=yGF95SvQ#hj(?bkHXdpaM!~~xxLv0W)K+}uKC6d z?%i;1i0_gaWHUuNxj$(!;aka0sv_J+8V}USCV7&?3UWe8kM31tm*QQ*gCvt)m|Nku zA&f5|ai3UWtX_X&654YM1Q2BHxN z7WILBLZ3F!l+6c%VBV@)YHDU0>zvMVjP|g0?Jt&7kZvHn$<9E|WMyalsxZ;mE{uk_ zG61=RNaJIZU@`(YW{4SN9Wfp*Z2Z@R+H`r$^>%WmFBa2psvso?sxmui?eL?D-a#nv z^6>NWtMwxf*|sKgy%Er04$v!s>LLsLl?jdoVMI{%RpcRR2+A3i5sHAy;v)+n0+@jd zqA9IIjaPP+o@vSMA5<p0uslf|t)T+D5=vzT5 zf zNQVkyPKP2okcbqskH-gH4XvQZlgL^ZvV!L>Xa)h-uv=LykRQZ{T@59xU@M2dDd-=i zhfq?5Arkl#T^xXd(OgRSyssiMC=NOIr#0=IUtA~+%5VPTEjXgSXXhilr*)=SNplE6 zF)da&FK|9R5J}P=xIkhAH5q&$8QDsODp?yDR#;(WlensqSS=9Cy!$Gl##pgRk~mqJ zn7I^$DPGbE)F59?7M~j;CIuEr@^n&jMU0fvK_%p`6v5PCd6Il!u=hK!w$TCiXQ{Xf zRlN>zAOB)u4qKz+0PrXG_Az98f(w){U17-E2a-uKIjcMp3OBebXNUpHv~1`R z%#ir5$P+ubDjb{s$5pa>Rh09ubkcGU&-U9N=wz`0bNO?P`?;WqvJgyNQi9d>>3f!> z>jMczQT$?s;A4iy<$Q-l7@kvf3@F29u^oOjx|7kBef*GWEf4H{#ncl1xh%bIVdrULN zyG4EK8sm5d0z;gJKn$)Jo+HQlwTDAgW!!c4uhC6c1zs$_UdJxya19KnH8#j7{$sOl)_y&Wf+EQO%Aj=dQ=DI zGH37|H9EMNnFDZX7`fs`AIpCWz8)YO20wl>bUrXbL07we$NAmzeZ8*@1=4> zfs4#xWVmYUh1hqoCv*)~7Y})2&gPVjhU)UQtIoWlTbFqBW$$OnfX2I9!2mBM$5l_y zSN*}X403dsVGimg#6sY<0nn!Ge%e9GVVw%QE8EjNE?;Q zO2#MR6Kd*2`7V0lYZM~XwGGp{cJueP(XZ_5Nm@z+Pi#p=}uV6 zWwl`9+iQ8Uo{ich$((!7kQ=uRTf5XC-2(TJJ<0ZW1b`_qGnrRN1h3%9-E5;hM57MY+YGwj*=+j*h5p z9rLS&u;1gR>3q&)*cNZub+Y#EVlgc@xvdY~%hXS5OlN3WckZ_GGOkN+H80mEKO0C|)D?ylx_XaH zt<`MOy7}eUd$Fp|M?gv#1k{Mev8GOD7!1h6z>H--YTUw2Z`9WT$OI=)l$HrBqQT>; zjHSG)QKlbF=u;2Faa%=o<7U22f~BzvM@m@~aLG2<6GTOp1sa}k9^_ElVL2?BV+9rB zMoMx#HV7Zqh}Q7479S1mwmvV1bur5)LE_bcRhk7FnR3*PvMthmHGV?cU=UnxxswgEYuSe`sZnS&gW$R*A~E`Hh^?Yu5grzd$jv@(MFFTfuvY8 zgsQ|R?Az!gh@D)eT*KN!+TCKTr5>*5T;b*dV5BDqEoCc6GO1KL>mnUD{dO8>AMa0G zA`r&>Legwtk4`Gl>-cPY{<|2b=ZUFIt&LX zp{eP-{x2T7RW4yMx$@saS76c^%~mS7aB578rGR)JNFHnVjoWy_GUf~V^9l~WZ)7rJ zYK_111qm@Fysh0Lk}6ltQk<|Jr$MN{BcKYzWI7%@`#-B&=$EdJPNJ%^x&nxhnDvdF zt-EkHPrt0W=^E-@^-~RyP=CO10Wn?ZZa=P(!B}w#AUQ~2d5EC7&~L$RT>Fsl3CgM~ z%#3Z5e3sVg!)MdpH%}Q(kP`yS&3EV<9PJ+=q3o_)vb{2s6V#Ly))rUT=v^;oE!+G$ zZI{lnGYbw76c!vHCd$telDqng|#Kos*5WNVDGo)jm_-dZ#M=vgLGnN6z1vg zAjZpS8B)J_w`k4~6XTT@=b0Moo$jHu_tk&N;u7OimE={ImKPq^#+Sb|e8Kg44<>la z(CU2rpHUYwoYvCWr+#^N6vD^JEil#D-9ds!N={OCH-9DeXgWW@Ms0UAHauO&rS4bD zMtGiI4!Dq@{&1qv0y1ENvfvD5=DlO+9~~c{BO#_Gf>Kpjn$ta0Ux)04lA5Be;$AsY z|M&Q$e0ML%QZJBzvEt%`vlBye6GD7+=JvXupa2Sy79F7`Ei*Yie{hSA7+Kny?~U`6 zlnnl7c#l0lzP`8V>~F%w_>`J#($(18-gUbr0_Y;r4jI9z?kg0CX4@1)K&#S&$-}^J z$gx7mHsi$FMIK=APllf>Q#CW)3ThS1$m84K_ei=%>fiSq4|zBo zz0G|=m|v*!`^O@#YKKIml`3W-&P}VoXbH>L2ZTM{0oZ!S>^FYJuqVTTbl!u-vjz_g zu7F%|=aQ!16d|FjhrislAs@oA#ezZdK}ry{?AiZy92no^scwXWw>sKs9AoX*eZ|K< z+u+V#O!0AOh`6(-#>>5XNV;R_?Nax}^8Z)^div5w)g}=d0z?EXzZG{=b!?!h(HStED*fhy-iujhE8HdF1R%tg1SX5WkTqvZ3g z9p^1c35BD0n{>L^PgcfBe=wWf2!i^3cRE=9QjTxLZT`?0>yOosr4(m65`rS>{;;sG z%^l76Mj}mnJ*&m8o1_a=<%2WMeir!L=_kW!12Vh2xE#3ItvgD6`A%xi2aS+x7F<=LHB@ucfSbf)!Y6~cw zE|3N@gK@kiG@pN&yPNPBhK1m5Pf74^Hfx0WtOY9M$KLu)K!k{xIedwAOy;Pvz)#U z`6#%`+qG9JgVc7_Wv=9;rWS4r4p_@N82b_AVzPx>lG(KFIqqljJM zWN9%OQ7Kdl6_RYYcp;!5v2dadb0$t7{#&lHdhzez?fiZD2s$u_AtDb&ejMTW6GfI- z;S5OTQPDN=q{Yj+x@45Rv==?{;QfBNaFRc2N8X7x znMk1DPX5Ki#%C85S@~ zO}MgY+r};*wa&^sAQ?^+*RD5TW+`L2a%Rw_{%sg?SyhYH-Q%sDANgcd-qrsz+d%S( z|C#IMy8yEBA1@%m3(ck|)$20HV- zbL$B`C*0?dUugcYgAD`4{&fGn^F~_#J%4&0y5i7O$VC19meb52@L)hofTg^bCprUVDoLbI^1E5KSRZINmLW zoSiK?4K$sD)1w13V*@f`lEU=F|8JsZFmkd+fE4Yd!9o4zZs3dMm%P<3D! z#?Z{VAwh^S*;|~Mrn$GUuLb_$>MRybCRFm(|M^rdn9Wy9mEwGb{v$*&8O^R2nNqFU zLc4DhBAeCTPF$;Pmt|4Cbk@a#G1SiR*Qm#+hSTcLwMWT@T?_pLnd|ooy#@M3Jw%RR zr*K$0G#Q>t#Mc_!on3U~5|8z!B2+Op>ZqJg7H3ho{3B#_LER(66+I<;5S{f1J+ye9 z;l0+6-N~@rvS2r=A8Beli)L7%I>6bfo3Luj*3aP%s57WG&f*!gbLa-bA8af^ZRR z;M&!-N5B;!yVr0`&^2Lu*SVMHRiS&;0Gb7 zBBGIdMu$5ws_rsxQ}44cw68QELb)ZXsjS)Se+YYzPpLREf8KfhK$vH2Yhi>J(8&Rz z8^F2pIb8eDZA3fjbcnLT40l=$@wCPi@0xY;wo0Sth*M=RS2o@=I=tZug*_GD@IIXs z8p;Zfl119J&hkR6{KhQVmHUs3+G^+4Di@l{Yq)M*H5EgI*5+}b``b(Ig(X%Fg}{$f z@We7W5B&k3Ech~7&;>!yRJ>AL5eC7}S^#MuNyCt5AAxkRWP#vUA%gT!Wqy$-BLjB} zVN_{jKGgdt%E~Q&;1{Qbff3~Zw^Q1gjuNCsRnw|L-ISs~W-hgV=FVz0+~82-Vp-|% z`uy|b>%&K_778jgk&Nthj7jxaeYPHiF1lL|C&Am6#pFf6%J>BPc?yv>-*+Z_b$W&E z0ouO>=miJ%&fvZH@_P9DKayz>K(Ydn?RwQKR%I_{ZbnS%9NGA%tm zaMm4pxDHOVDFu6nVYU(~wBix%;xL=1{1c@O)ghaGNh{y4a1fj5%ctoQ-veEk#0s@}p9JL(I ztoHPdw(`m9=RZ7k1HPE;_%en*-cf3rxC6%po`FUOiNKwO2~=HCqK$m^n+hZB<%Y~x z$iF-L?q$p2;n;g8H`5(Kj0Bis$&ZoLt6bBO^;s^aT-SjHh|;silu}U3YSE2=>9Z@R z((uov!3rk>x2EZip&8oln6hph!kg2>zV>f72Q1)d`_%0xUH|eTnZ@)P+OIrOA@|B& z2fymdzTLPeQ`@2XvQ&Urf(sDGi^94vFEq|_F^v#2`JA8SThNb2{*&h#{KBJ}U+76*pSho^rwo70;Cax=eUaE1iiNO~Wxy z-1x0Br&)*P8Sz{F?(t#;&Zis>J%krQbZ=K;Y%QbepvSx{54~;|xed-jnu5$|r=O;l z(muP0Hr=CAj+XeCwqDd7IbnA+tJdJ??9hr&+FUID;$D)aY&D)z>M(l|tVI2q0OblR z7RA$4>^kDg;MB@3miU{Y&3n&ep)f~Qa|%1bQj`_D3D**S@lk*(;i4W?)9I5Ob%VWQ zSnj1cmH30~1!u~im&2{hOIl=RLW;aOdYr&8k~J1r>3a&9Zf`gaAbV`XJ5;-g0~<#r zCu}&JSMyn25lpcfILfkv;R$2UG&d@?WaYim%@?FsTax9cYb+_PYbv14Yc_T8HCvlx zpwB9g2|g|4;;mXnE2H&iyz(XYWWl{ITZ2dAMNfxn_HF1?SVK5NDb+E1aAT5VYnuLS zrQ1?oheQz8QeYH|_bvwSUJGq-QT}xRt4R#lp_{{tI(|^AQgfu_Z^hwGp-Sg-v)h1I zlNpfBRSpkV=cGR@Kk6%LeWRWo&LN;rb>X6=3b(Q%_NYX5DDYmk4h6eU(aYUt)Y{p! z&D{%I+CGkrJ36mke1^T5g8kzUkH%gJ0Q3hnm?d^>tsz29X$I+!A*QiH8IM z3qhNt;wP#Ea1d3K^{?e8ZF-}*$A?ep04hQm1`e`&^?of@9gb! z+K<++ZSOOlhYj1)UX%ATUrU$k)BKU`yzKcGS6*wA^W2vIz(Sc(o*z8aaBE5{bO z^Oy}vmrjhOn2lwo3pTJ#3n1t&y4PmRuVc+oEnqJAPaoHaQLkxb$n^`A zXv~hIKR2m6L%tpGJ_Xb7k1`6t?~NV|)cK~!)AX(XDYQQrVn25BLdZe~!=z$Hl*QbR zv?(WFV*R35@*8-&&v7nQ!BMo0fzQLviOOzoJ{58 zYyCTz?fIznBgw_Q3Uq3ZZH-l9Dp(u9nY7Q^9Eqj~o_|T5`ji8Loxh6&~!pRDt zrJfJ0dl`OxgCQqs#0s7nNby+RlqY40nB~B}6}c$bjdPjpBQF;*xCRJxPme!0tvmur zXo5Ygn|}r9Je4GX2arxIDFk8a*?WBkf_%{^$u2?zjJniG&>k4CX%qtU7hh_ z2FO$EsBM9!K>_Rl+wt}d{KxEvdHQT4Zk>PI*kAj)`tEmwM4CQ1-*>|x@;vwO8~hu7uWORH-j#S$n7&hNXczQ$9`ej)n!&-MsB^&`iDuSG7GyK(BeJ?N zw|b?<&gNiYxgg0F+!$qV@{&G|T_fifoW8QTOUh20b6c6bM`w>coJ;}8*;GO70QCsu zF&ehguzw~~4xpeEXYJmOyh--SGSl>X!;&muVEekh_t#2&U8Hz&c6O;c3{wafK-Y{B zm$0zMwOK(O`!?pGm<_{;f}mKf^v&Lr)+to-fp%W3*)&m> z&iY+4J$;Z=y3T~KF+FD)K+EHe*qF=~3H2(nw5z-G+YDz7&s%%td=yFD9m5rTxJYL1F+kEIBiVmdmcOxn}55PQ~E;QkH+!B?6SD zuBMDHsbCmq9jFYfpE1`ZGXb~Yl5h{|ZliDy)4)|qnwVEe^^n}*h4UDqtz$O{HQId` z7yD#1^J5J$%dtZfF&2{NeVolaw~m^UbtO6O8?JX}@=Ap22ag2HFah2;0ns?|-w@Ds z|A(^?BXl6ZtSuJM>f9F3yZq}wrNpDrfj+cD%{@Nyoeg_tT&vC`k~uzQ&9IAd;IqK% zGT)|1^4vF*Z8i1Inxh7;vf!?Oppo2j=AS&cU;hQ+FJ;C(nI*N`G-uWDUPT~M%@lHh zTG(nSjmdin;StdbpK*%#OAR?yxk$cDJT(JzJ|0f??z!dLqv4fK^*T)@7d%y=gg9t< zG=5bJSXzZ^axqC9HVTUcD8&BeUfXv+?kq6_1BZX5;j%8lX`wtrGg5y!hns#4cee zxfzQLL`X{7FBCeyHjT%$*v;+0MWZ7{Y;uQ^A^JT#k$n~l;pEu__K{ksb&`nifa zGG%tbk9eph)6u`)MuFr>Jrz0kY5VVi1+oraVi%&{sRylTg5-oLk+|lJ7Eoqaj+QD# zV;dzxMspXP;Nyh-^~}qKH|HW|rV4DTW>kndvt698Cv1`9(;K}AAFLpK!sa~wN! zZ>-s$(QXPP3Xqc!k+_)t`*u%a2|+Lj$@3e8H3Ty2#9CC6ZMpi^Ae71gz2RA-64lD? zECmJ1&9-&^T2I{>C4Y-%?@+CcQ?$kb0|)Aj_@Q9@4s`I%cyTYb?-+H@6I1ej2y43H zN3>4uT?{^|c?at*<3%Ihd5iJcGFYYrPrbgN`!!svv#qIQyH{k)A3{*XH#Y=bmKn7q zzpqCKTkuwPb+j9TqR+{Aq?u}EuaiuOjG2Dm1i}lu&m(Kt!`n2i4V$f}irx^Nj@1#* zII6CO_<#WoPgp5wc~K-J_z_rNiN?$Zq{$=da|A9%j$K)+Km;P0^E?d=nzmx_5SxI6 z^Nr|exdNFiO7YF-!CO;@=)qJBt7J2hzaTom8;WX_Nlb@_!@+F7ZZWW#j`3Prt_CQj zH(+XH4hQOaVUG_=VvymlPuvQRm2e}=^E{~CJj>tN>t|V)$;z!Q0>>93d<>;4q@L*8 zL`@^P)(rjc+o-aw!Bth7c8e7$UxmPO>?#aI^C=ZOP(kfK8xHeHbFob8%0;ZaEwK<8 zDzWc9PuL9k2n2_U#>T2ual^Q86j*Mk;@iV4gcBhMxqn+k2Z?9qK8Y_@5)3`aj2q5J zK0%~-9F5g?VWze)X4gwtrZR|#u5Zvvb1*1#hl$)_O?k!8F{I`zB}sx~;xAc*6HPNEUHYGy@`FxOO3nFG}Rf zbNLqzLb&zg^Br~TGcCL1Se+7rqx6X<-;xV~Q$?W@~Y z$qq!UbuhVP3mB98Tr6GmXugJ?F_s<~&Awkv862r!89K1eFxET`J+2EpgWCK_*7Jb$ z5OV&DN*ZVyd#S~6Y`o8mH;G(5B&+x2($txK|K|7{$ev6Y{v$ z0(d}~Dp4heg;G5Ok1L}~{>{4tC}WOuzpi9m44nRR_|I%QaU)AT^NM7aLa~Zn0RRXV zbN&?d&%ktr;#|SGyYWzdefac%f@ZH9H;GrfM-VW7NWZ{qhVMMmHMTs1HOAOSV@b3K zuZ+joz2t0NrwQw3pJuJa`P>JK{cVa$Hymy^0rYWHb9sk7G77Zp&b_FY0Bg?l(_bh( zpDqD*D-}tKC!U*kJHjrO$9*b_*?+1r5I@Tzu6hHT3eyWURZ%R73qc^dl!Dh9IcgRc?vVmuT(fyd_Y3U&Sw?*+kkk|EA_4>CD7SH z8M%Opk{;d_`$a%$18O66I&Og2_*=#Fy%l@4pxW#Df#;1HsN{6^F#$@ZO#R&7e_jNx zBOk)V?CX0UqdknUdS;Hd@H=F7R8XMiGF zqud3(!2M_QosB>a``u`0PIO8!jszAod8nS4l@mrC2rJG*rUMvAg6ZQOR*H2W`3=0L z(_KPX1aPEO>dFa{vlLA>;@FHb(T`&&@V7eIKuv*3PP8#cpyoV#^=Oee^%=vx-xViNaS^iq-LsF&}(DR&9 z_>&%VOKIXib1Yp+e8~+0QCF%5ns<`~JR{`_h!3kH z7`gq#eKPp4+5dBcd;Q!&ps^4^Wp8^9;+YHn@tn%f57$yGL9hx{s1p|L#fPP|mrMBW z#6R(G9#T+bZ>@v0C&n+VDmM9@ib{dKsvPC=*Sk=xf&gYv8DIcpsRho5sWew~#M^)| z(rO^|0z!iTrwB1*53M_|Hv?s+^7n(XpYo!)shJmC#&xi43{DqVQZPVP$uQ)I-Whi7 z>LXDN6^Ge&L3lKc10Pqov>C9V!o7Fm#afJBfqybU(G+ZPQO8RUr=CGeD?i?k*^p*Z zfS@a$FU;(lPkTBuG2UJVawR1QjXq`tzhi=-7lQEzHW%%foliPUU#RTXHbYuM4@Z}3Hc>jCm(uJwdiSjZ z=u#(ml+O(a+e(OtJ&GoA_LpL{n2@71JrYU!%Da0GUL$$46-K8 zT}wc%DqQ%NOlh2Qy1KVMd3w)SeA?gZh%gkU|P&VnpJI}1W=0( zTDpn_c>GhxWtypMc@dc2A!<@Te!_sG!Yt|JSmnX?jozHVq|yH%LYP7kT|xLXwu>79l!g6H<|VB7UN3o1G7kSsJ>fUf*a=Mi#-C@O*R6}L7Vp0RH9*S0n zwPNmi5l+Ela(rb*%*Dae_5ZLZ?e+nTT)h>j?Gdu4ui|)MI8ScDP*5(t=X!x3bw&O< zhg{6om$Dm6n=%cvO9qCi!-V{2cIICUDz#ai0HAp^l#Wg!-O33v2tIZP8Mxz<7b*%^ zX)h=B%i*OnI#0hDf^M)+6}xg<3soaDR$UD~VnxFbY#@+4Dl7V1bi$<7Rd3G$ff`S! zS3XJs+)~CPqlCt%VJJ`Hk!{fi|1AJTtV)PKx3b6Jj6hV6sopGaE#dn}WX2-jsMqle zMy`?EP9}L*kqF9%v==#`@XTr7m~>ctWh0Xf*y-5c>Er^W6J@Y8^zU%5hdJ%;QBQ^E z;fy5Y&Vkj5j^)mUWK*VHJ&s_Rw${n zaU74PKsc6!C0H*DF@lktg<5aTUQrzRb&rEDYWUI)?LT<lG`!b4hW5Zbbd*0hkA* zPq?Fdw8EAPaL44orU*lzyT69>ErMcglysZGxWP%*AJAT7uB&H(skzn>{W|@8n;dB1 zQvvb-jft7t!FFAdT4wpn7^8Hb`^lwKu%X(50qDwb9?XD38;I!TB_wwA%!F|Q`n@JI zcrbgWVhE9KUOd=J{fWy$+qW~IWReW1Ypkk?OSP!F?-`ZmB$*1aud#q(HED(B?$;(S zB$e)(rjsBFW;~HmjvWx%leimpQBlzKAziiH1=g&;?nyocrC&P$B+eRsh?y9mI4v_Q(m^+>DT>b?X07C!D?c5Oz=q-!^z0;&4WT)Fz!a(wz zDsiz$OWggFR;=BZ>a8QkBv+VfRwI}wDVW=XzlQOtur?R<>L#+c-m%EgQ(>GDck^e9 zTW1nnmogEdoOv%EdW?zltWa?e7rES=jd<~$C7Ti$|7gO(heNZ0)5<&mHzQ|MXZ-`b z(wvyOXWr~V@1j_@i151gqQ3d_1(){}F}5PnJ)vQm*YY&Bmd`Ox5oJcF*0Ak~BmtZ6 zh*?y@{5T)JRqpW?XB?|n7VvAMuuj*-qwR`CUw)Z1)h0T2XK0F2Md`S3+!4xQ&sMd= z>qWfKR_~PXzWgnxRHAbPG2$lyFUP7_!wVTSGYh~@yz8_acNs;~K*=!p`_f)d0huVV zBIe_m&nlh!DAN#jrwX9__keH0vDALL0nkikitz74yzIY>33IAds>DzW)_L{oW=2*A zthSJhc=te1m5Id|;c`y7d9(W9N@zmz(+92ELzfvXfA-OM6q$CtB?C1_ zNE1Tt6oh?a0BP^g0=OgS*Gj=AL>w!|F~)6LgCs&S%paAElJCdWR%zeXJjz5G#n`BZ zf_Jb1lSgrS>KMyR91bV7(ZGj_)9@TbR&o>JMvj{|O;3UZdpp8&dNjrPn$?jD%sCM5 zI~4<>T}dEWX7#;k643Hnj3J+6RBMH2aVk!BGjEj~m7;fBI6&8@`*!E~h*KSVy7Ww~ zGesgVRC8~)itP2=H)}zN3899#!9wZVotx}arKFsVbbp2iYg}G(kvaci)75ZTU&fiuz*+D!i{BhQFp7E4pICmF#t%P;QwrFcwhlQ7&xalMOtEQIm#It| z^^j(J2dbuN=HnXlG0n6|U`SmG06FGN3+tAHXjjuIg9c5yZcS9GRUtftf&42KGC|eu zOf~gYrCddJ=UtgSRz~dZDIjDm%_{#~3cmyDi+&1tss_ET2zM#~69Fo5&x81n2ClCq z(+;%v*LuT*V?7dCC=ki%8MCtvigK<9AKkGQG3ULs)%d&_vQJ1rZBl3HS%Z>plC$ua zXfRM7z9PA*HhtP{R#e?I!~EK{}OEf8K%SF+C+u+Lk5K&yfmr{S>_jI zgz+}0)rOfiIW?kxsWZI`m7JY=kEX<8-N9DMxs?`Ods2HbiWluD2yoT$NA!eMb+#TC zRDzjx&fTkGa)^-8<(%w)*&FtOmyBc;Ogo&!&}%KBIbB^*M)aDor!wAJs$!bc&Oq>* z6^1~7{sh38K`x@pECsv}L!vz)Q1~0M?6$Tj*O)IG&aXxr{BOR2^e_p6VD8&D<_|s> zcN};@gxpYuq@5vMcI@~81e3L$*h-R7i9S>ni}w4U7-S|+wR96}p}Vty4ufR0A==+a zcDoo_T%RP?aw-lxXHIBMiM!QS6lXcWoRR`4ip_0Lpej}<2z*NFI~>8eIRmmK@F`HTn?+k3oQP8w8Y?2|V_ z&oPK6+h!`w`q*Ji&O!uEg^bh>8Zs%Rv4Es}%U^X5=Hhw(VFj0TPP&grX+w_X0{w=SaDcG;-&ETlA_`KwgO z+(6{5a(@W^%LN(T$fz(MUhK0@Bp2`N3`g73_16`knJqy(1qUZ0`lj6VpC59}K&|q8 z+YzE{tC?}G%_yYWE)oegDPu)b<-W{orOb#uKnB<+H?1?v)9XLS&L~Z&&e1Y4MQvuw zcUfm@@O`1K`v`w}ja+_W_J8)*p11tB44;L8DZPa{1vzs>HeBj&7wGJ$&Q%i+@^m*%-a|sYB4zG$ z?o;seW5GaW21PPkWH6u^V7{Z_b$v^VX##{qVZ|rgRyV+9K&HMJdnlvLaaFIg54Dxf ztzQZ+FH$2L%8yK+`A9KkR*gEpD#WyFmqWwDDQelY@>dw5FU|BF)H3P#8F$!WkkGUD z${s*9ygU$0lY_=H2o0(d_Q{Kh51wt)yOPyHOo5Y7WGoNT>Y$n>0Ib_f|MPCK#~KJw zHV~1R(iz|xFq%_^bSC09he!HE@*v(R%xrbQial0%6#hsue#NeGtPY^t1LzJPsCckO zhUxZRSNf`(nUsC%xpUq#3(sI=VNgBqNz9cw$iSr?VCwdx)~jMyVt3JHC19T?ckj8g zdRl+#(cicGxn4?(lOej!edLTxl8`&5IqGrG3Q07jgqvB7odMEn8kjqpRBb-Yq1M~S zLam<++_yPA`*=Ku(heRPGj4!AdF8}#9d)dR4xYxKh%PeREpr&CbXtBPB->~e45~@v z(8lN1@+$)`A`ORMvxW*LfvLj;+6eFxu@j{nFH(7^6rmlk2Ct9Q3%JvpuFa05KN9sr zHa2UU|3Tk$yX`SjW7ZI*3Kx2KA2`rzj6eh7co&z>o9+Q<{hdR=9;-x$bQQtbeU2>H z4CJil9&r>FZ^Kjs`K*X31-bjCu9f>KRD`FZwF-Dr!xsQLe^6AVtVFAK3GZAbb(57Y zBB+XzUjR|n^1=C2C**94!vQM&(8<(z-7#_O35i|MWAq9z1goE-!H^Ys8lTn%Kt@Aj zk1*eA*iRD^8*rykZO5IZL3dqNm)D!tJG1e&VNi+6s6=ziR&+$Nv>`2=cs}PE%$q`5 zw5%Ba^Iw7ubKh zzK$E45{Cs5!w3b;h^P}k?!Y)b?A$hRM0<7u zO?4>i0%-kG;0n1}At!iMF;90oW}j|3Nt`ps_TOszxL_a}m=V;f!e1GRIVbAdSd;_wsivFm!Z8-P(?DO!g3_LL6~*%ViS3IV z#}YIav=4*DAt1c%E_d(Pt9QMJ6ADULRCzFSM=KFElim`+TDj59dE%JIDdXJG z8baKnb%0D}j_INlpa_G&yC>hGgfHXv@|$(~Nv#-us%&X9FH!xM?US=fz1Ca4N))iM zq^+S{9@_?hUX(a*6MC9sBi4`;>$HurEY7rrfrQ-W*CM}`<>f(0!a2{S;R&7>F~1MQ zf@$|6_t?HCsjZp7O>x#B7;GG}LCO;_;;>2H(ky}ZCC4C}Hx{7)45@<6uZ=ei>%zN9 z=T^J`5j97Q+xaVL6`*kL2_fd~Z7{*Bz`4{~|-qSvFEe z{j1Q|@G?vLznihJMm|}C$4-`9H6NiBX4mwBC>$iOFo~1+ps`qbj_(T?7D}k>$l9m$ zxKK)9be91aM&wajxBEstLp<&`#2XdSu`K-hrR8WKv+CdeSFlIq7*f_1Y4VVj&2ibw zX(MZ)?5!xXh{Y7T;{{@M4sw{yJuk~&rEFO`dFUmXT3$d#7tubeaY2ItJ-`(!^=Dj} zEAP}F+w4Yhxi~n^Pbb9jXZzA-oUY7>S-wH6nIc5BK)2dWO+4IX&AI&aidl;xBnoop zW@MOHO-VKJOA>i6qYSBzn`F63N`Z!8*y^+Tm*9sS1>NWGU~nK0a2Fw1pvWoaYYqX$ z$uqESOp!!pdenQ)=k#FFh8d8ANYb;Lr@Oi58~dZ8X#r3ksz;p@H>(@r{?Sj{;AW^z zEg^R?9YT5+5vC{^NzVT*4R*8|9VLx?hdVP3O1i+@%Re^&dG$C<>kBK#l7;Xh+lApm zdXR4uXjPZ4@HqYdI(dy)VBq0lJTqc@yo90yH`XFK*xu=W!K1=V7{bA@OFu2Np^51< zY&VCYWqM`#oKEM?9{(AENUag=8iVd^(Pg5ZpsFo&rV9zs2c>x$==yU%maQ)CzVe(f zM4dJesh3=~ck|rA-@1M3@NaIcl_9!H|1+X6AqcaWJu2V){isCLUWI8&`<$@1vC?%f zpcQG%v~HxlZ;sw4n6qcEfzikQS%wBApG$Q@U28m-Z%1(0R)lD9h7i^1Pg`)G$LaDA zhe0f%C5b&yD@{K|10JIGU(uN7s2%L{?lLXtOj;i%hih%2dF!<0cHFEXH)(@dG#;ze z$h5le8m1K*vW`Xjuo7I_ji%_W72>&PtNh;>3zc zvd zYELYdS?-mcS^ZUm>h2k=P^#MpW<~xjy9Lk4ZX624>wVw))W;5n$DLA$n(cLu5Dwql zg&;`;E57uDlQ)(whl}y7kL&Sh3+zHwmiWb{49b37A?-7INv2nf^5he4GhBt2nPI`$ zxm}tA4gr1fJH9`pxZI{y#(?_wsouN#qGQ2#~qyUdD@)#DAo+h*syFi`ppHn}3M zcRJ5BX__(3T)~@UOp3D5PZ)%GG(gWvWJGfVaP=J*2R%q_Ad(neAT4aVC)ujcH-$>hPB5AfF2xfKmrrT(QttDBy%ZaRg;IdaB zx!4*>xn(J+HFmZpUj8l~dt*kX@;KdpPn>fncy6v@K&PGmV>MiJRiXZpM-W>4S`K$i z+|LcTIAr;U^73`X2aN_&>x7Zt{N4FBBFU|)5M_fhh7BU#5CC@(9Y&7kZ!a3=MG-iw z5Zc3I)~$(`98e6C6D&05NYc@t6ux^Qaii8}InMN+eeD96S=YY}K10Z#d-BcgyN*@$ zw|)1^hIPpNuw!Dd{r+(Kc!iwh=x65BfB=&f1EXz#J> z@mSTW;c`c(Q^0q&&5FfY2l@{%h~77>j{Vu$rpCA+eTt8%FXn4))Fd3%LZ^d5BC3tA ztuMw*@zaR_Ht(^EPeK3fH#4tmJu?Hs8WJR-azLo;Q4~HR6b;#CHE->IXQ)2faIDHX5Eh%<63F5_g!)DUGL-%wH=uO_tU9ID-U*l0fTYG;VByyMZAcA!-S$MZesNo$dP2bY;xq;y#F^O9*eiy2R& z2GIcTCm(m`=Dr5E#u1}cqp0I3o#e^kwWpni|i^hD3Ragxb~k(DZ%{FM2=|$ zf@pcrcp4=^?)TNIZ*Soogwy6zfRBT

    ^V{SPiLLh8>AhDM6ln1FxqnT^7WO^ql*v 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�{F%GfMJZ?M>2# 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 XU}%(o!aKqBV-Fg3r+j4RYis}j*3{?# diff --git a/src/Static/Fonts/Montserrat/Old/medium.woff2 b/src/Static/Fonts/Montserrat/Old/medium.woff2 deleted file mode 100644 index 50b35aa92a1592264cf5949b3408d2151913af75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85448 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 diff --git a/src/Static/Fonts/Montserrat/Old/regular.woff2 b/src/Static/Fonts/Montserrat/Old/regular.woff2 deleted file mode 100644 index 72d13c60bdf28d94eb46595d99c0dd5f499a6e08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85240 zcmV)IK)kBT?c`! za14QOTL#;+6BNL+>BPg(Im9GaEEE)Q-ybQ9z=q6^;Y_1gHYT%UNGnG|#`^b30jXmf zDCIs#=h#e;qc2cqF4_P8|NsC0|NsC0|NnnONkyDxE3KTQFoYh%4uBtp$jm$lUSbv` zFQWL8HLr_Oe7%ekBop)A8qHQ{$BelOr4OATvC)k|0;$;ZLhF0+gIbg!V>7m7G|sXp zlWbaLnKEg4@pBerK1!5@MYI&8MQ!t`Tdr1AF07iBlxm?^g=BK$HR$2WIvlGwM>W+e zin5_%5bqmOtW!cUlH58HfLEO2%~JZ*TlqkI#@coPNk~F+jLhng?mLsNlx-D4K(=JE ztG$OLBwefK+@zrF#aLGqlOZHgt7Fhl5cdt4%H^O4`6lF{DT`{c84{Q!egvaTU31*P zOr!yqj+vhzOT$`1r?5P$yKTb}@itmc;M~h#Z}&pt`V#de9VS=Ym}v8mgd`d!a9wO6 zyD^n3e@m%rMo2=scVX|YP_3Tw;+0o+FT21VAPGs={0tr39Ut#Y|8Qx+{has_d%O(K zPamEn9!d~@Zn7zvpIOkSvM$ehDA9Yzy3-KkvsSZCxf;m}$CL6k!#CL6>Hg-jxd9B% za5wQ??$_0e%!hF|Y~98&;T<-28a9VvO_lEkJU53Ma*e}F>zF2BLi{y?(6F|mdF!8Fx zy4q3Klf(6DRZV6%cW)$CU&QD65eT?Qph#{t{Z|#)wLHzwUM;7a)qyOiYIA(3e*zvd zfsQlr3@$va&%aFzmAlU{lPfCW>_T{4sZvT=Pp(rSV&b1uiBV6+y()sHsWyCF|moU6dMs|5B!@t3Umq=7nNZFJd~(lxdSg zG50;$VY{tvigBl5FA}fuDkl8+gO{D&Pt+zJ$`RyW7F5L zxa~m51g{~fz3e7= z`tKl00h=!;!);LoXafW<*`D61D;(gj`7aNFmtS`msAc{wPk#}c;}C!gx^(HHE^rIJ zyrfm|JY%c>b3w&vF>;LD?U%)`9MoAV$A&m2lw`&@tb+pZggEXUAKPUu^#8vfud`?0 zpC=O;mlCL~dIDnzTor*(6$Z%xvP9NI2jXq{Iy!m(ZJx`@=l!-%Id57iurxp-1C|P5 zs|bXKp+Qv{DV{!n)49Q8C7E@W3=19SF{F<_jjHFQE->5{B_pwwq<_ z8H+_IjKM<{-Sb%2^C5s3r?BPih+CPE3t{3aOiWC#Os`ypiRn$KF;RP^3llYJOia~R zCTi4PsZnDf)EEdg2EsrX2sH-Y2qSB2qeNQql+H{;B7TB5HD7f4#i1I)cZ4kz{XVv9 zRnH=~4BHjJKmP#t?r-x5r5H&-oY?$hz6t*yYrh!9-{NP6P|VwJED28}ri+L2hc1>$ z$@Sh9sI^st01iB-oAQU!{IRKh*Z+6-bZf`$hf}GyT2I?=rPnE~Iy2)G#|d$Qi%c_? zF+v~#qC5m5jK%NQ&gRSB;fcHvN&1kNzMmwT=%9m!P74qLK@bIpZq{~&t){5vb4k$S zO)EMv{Zy)CqU-aIB89*p1lkaQr%%=Vgm#GKaIGcbIgpf~c{t%2ZxwI>4i`gtPNB}N zE0?+R?3uoWPp~1~_C~sL%UkK#=?W!36bT;*pL9w1NUlgI{w3Z&2}Ptx_=p4vMdTyl zBk~dX1St|e@+fwBE4Okhx4e~Gx#g|g$_=b&Fo%W98|~_J`RD!HlY0Vf2?hl1L)3y4 zD*ywiY%)1Jw@Fh$nu=E_6bgm2ScFiYx^6NApwoXj1QMm%e!cQ*GG)&yQXl|eNYCcA zn0MkK6pVGbz=a_)TUj%___uq<{fM@eBewDmlF%~zHzpe|JUG1hVIeeeD2BNed%5J* zQgvFnk=8rsdF|?6>-XvZ?lSB400y80H5wktr7^WH3cOF@`AQyU_B#u5oXA=I(} zz~FwVelHObZGfQ&AyCCmv12FkZ~bukyL&j53jdpiL^@437HW=Y$By-a@8`0qT_v?X z_n9hW2A8p4q*PMs^D>LP0mZV!sF-sO-72^;c^3ilUKQWe;@#Q0V8@yuGa0RH`k?pz zI#BVQVxqb&PB# zc3}W4hk4WOjk`+jqG@-Q>>8AfkV5#ot3?hoYyk^wyM;zt87Luf({7Ig349>bMHO~s zW~DnlV&|2Teq&~EPc2Ovj@~Ybp6;IhnSmhC5WAXKb*peIR8>}WPft$+HyB`V+KYU7U(X+9n_WnEy$D>92J-T!)y7K>5HTxEzJjvrdJF{`@YGW!& zhuI&CDx{`JdhfpXK;Qx3fFLOYAV(%aNoLU46eZcDr11kt(GbO%<;Y3nD9=yYEPGQ_ za*#I7##sHP(+?rGziP&vw{!V_>7xAI^6>pyZ?;dRI++fjQ0)RJTv+O!7rfJXLDdN_ z2UtxQ-2!QnD^$Ys-N;3!*UGFz|7%&(U3GmGG6)qFSp2KIS)xojL}73G`V$wjq)?z( z$2r3GT;K3(`p?`DvM@s)QdFFFXtAIchm&{-{QtN7U;5ue>{bsHIFMh0Fj!etw@9^% z)b~9^KghD(Z$h4!g&j42?v7 zL}-Wwc*wu`--2G$0;AeVA20lpa15D6?cl#}`82zI?go%U9AgnKS}|3m?ta8BLd_Xc znhj|-e_@bFnSz5=5@GO?4g`@%CYgaqfCxPQKUdnBd2<(8mQrxt6>8G5TX1G(=O+uv zD^9k=3J6mqS6w0N0LY`zb%0LR$eg;m6}GnU-~ZAQkG{$&$swZzplMxaC^!hV`v2af zscoka;A$GxJMExhf@{DGeYpRh>1NXExT1Yr`M~D|G^7@Fny~-7iMveNx6RS})_Su; z_2H5|AT}Z-R9xJ>dmhzvRdrAP&eYDQ3C(VJ#pW=?{pSbfb$C^P)uGReJ0Orz>V!OD z@80R_yndJzmvZB-&4gj>~Nz+Yh^@~5+x#{ z#TcutxxY5=vnN%$-Rr_Eo%{Y86%i2;5m5sZr^Ou)xVR@z_1pLUpM|@-uCc~A;~C=_ zRaI3{Q4tXlwUC+3@k3G}mdK|RC9jMs8`*`b0ID&`pFL6YqM@u>aU4g82)-&jrBE&< zkzF)t`c#K8;#dZ;2yr|q!bgD6X-NLZu|qkE3BrgHx*YzmQwime;H;@QYg)+}QNIts zR+W*v@yW9CP>0lyY|6KXRFLXg)=@kO0TKvOw=Z`-`D=a?sli}ms1E)MWRZCG8K?&p>$QR z&~MCyrCJxYDQa8TcjUzNm0Ne1Bm|NY5{V_1$OwrmDtCGYGg)jY!SL=8QL6_nZorPVtN!H~w%e{P6&12M5VMb;)IIS209*p%uBi{7Q z<@x}<4-ROo39x*jeREwvArf#KeZZp_6C>XEo;Drxx7C4EI=!>8$nL$j9noPje?Lr@ z>H84`%+o#k9>(^jKgJu^f|_6)Y0g*raS|k+H?0Zx}8Ec6bcge{Dt_IKJRzV_hKm7%S*N zaS-c00|1z=`&~J z6<5AK3eBZ|+9H7hnf`IIU<9)K!zv0xeoQ)yc?uLMUK)&r6v~`Gk4as+cUsSQ8}2*r z@t^%%LbLg2Xuu0jmM?z^21pzz8fRK@4e!Pe00;5*6;Q6Z0t6~SENoq1mV}iUc$JG%`k%i~f7D~J{y7sF?_W*s-O{r* zHYL>)M|XSmjW()Mp68Ls*GD>BL&-hjF%*047 z*O_pgN{FMtVf!t!(}a54O)bNU;!rdgXU{fV-rgXE9t1Rp!&(N60Mw$c(O?5;Ksd@B zG58C9EB;yUwYFWtQk9typuS9;^FMx2c{{ZR``*PKU?pd;aCX5gCi>@`k~||q)`_6V zNh1kkmS%uRh6=S@J9mlK0T+kh1wd#@&p2mIboxNn7%tP><(F!gpi}`Cu|g3wgy=($ zfvAl6X0aA$@~y5q1^oYc&!O`W410#4p7!mOHGNxJ+YO}{c&-xsvY&Fffu9I_OvDRb z8+)Jh{A{Z6zkfv6>9AJa7A_Ei$ll`o^ol`GzYoBPH{S?lP)Cr>ikKqDPKgHWeuDcW zT{>a>n+X6DRptn!q6aLwCXY}TFD0t1N_ux3A2fY* zb`IDT)_vqEMcC_ErVY9f68m4KCYU|jRMNmGf|OIB;DUrYS9LwDTY8#|mP+z@ghevy zS&3RvL|y5!(CCZQ824mDEiADzR;JespnrTzCC>viHc?A$C!`0+mTFreY|s!#A(XBI zwW@*{Z-OF%*q)>80Fnxe?Ii1I_K}!~ddx+X+-@Gw<1q$;>yb@I)}_4m;*6nt8S=kx z{_{VzT+>Y!e>z^)y@*C9<0te}M%L)=hF_>kYl`c0X1fWokCL*~mK{sn(XE!4>~b-! z3;zh#pM=sD7B`K+CqwJ=yng^qwJG0?u_f z9AEpX^K!&v3S%0BYmy+O0gI`Vqy$7s?)(L zI#J^y_TDM_LN>?Xp>ZhON%z(g{`hbs^t}qZ4d{r{&F|duvFM)8V?wVoz7c!iv$+Gq zKgwSJ1d6|rG8*b`U-N#~A&}lq?TI_Rhu2)HdIR`C*@zM;OeapT^)8R&{sTfd=S{FQp@Mzj7xK)Z_fEfmvLASWH3HP@;PADSD z$=+e!^pw~OK82t*0R-trQ&LBZju+)nu17fpsg}kkqo+bVgBA91d7cqEZvtTF(3bDU zd2L2fPjyUTttmYkXp7I67!*bawn6I+kJV42QV`s13`yIHo-D~ixz|e&8CS#l>#nm} zFjg<+01+cY6+EcC%%7E)JVy~HD;(6yqY8U2LCX^9?M}imu%jvYy(59HN5atJLOEBQ z(_|bK(o`y}im-&yw}1@fz?qqP@*LN{{Xk!xg( zzRdvhS#jAcylC=dhIEa~C7b6x1!Wa=j`cR6lwLyt;%dO*(^}F<1Wm<}l{#KR9cU__ z2vQr_$Exa6007iQCeTv?C!R@?MJi`zf=ndIOu|#91nefvGU(!>0~<&|SQZ3O>y|8N zw{-^kq%*D5f>|dyid~AN8=OdS+Ed1`B&KX2gHAk7z!LIpGBX|G zPK*|p$k!EiVsiLWTN@b}iYj?@^uA-;4pKo;XJ>mfuTL?}9xYqLY^EDd$&Hp|gUN0} znzR_d!wsqDwOkR#pE10k*3etZc`C_TkLgze(0YET013RCz3v+dfL=b&^F0m0mbxkp zFJ@6M>wg+E!w&gBetGINk<&1VbnRaE4@rLBlACk+*Lri8A!b+u6syrot3$YrWaK-KkO5hEm5| zDp+_E+h!C#@B_c_2VXR6wp;66%Qf}EepuML|4Fj;|MPTH_8z?k)=h*9e2L0-^|-A> zLvT4$Y3H3^8sA^7`U|TddVzQ5yHRWQ+bWvXj^zAUcC!7IajI20op*{+h#mUn)VY56 zfZF2RY-MZJX#8JerV|NPYdF$B$Lsm0^|jB^qVyd4=yIp{_bOj!yECQ)NZnm5>uxJd zdCvLx-oz5;`wTG&{7F3)(lGa0Vjyxa$~{)OoOjxPvD3!W3Wul9j&JyE->2+{eAZE- zq=!j`^VaKn>#eum@$WMR#WuS6*H#@47c=qi1 zNk1RZ*+9D4zctSmELyT`#i}*yHf-9mZO5)X`wkpBa_q#ZGv_W`x^nHttvmM~JbLo% z-G@(KzWw+u{wjnbiAf~p%i{}#BC$j&lPi=ewMMJc8?1rK$tx%-DXXZe zscUFzY3n#~>dd(dm#$p9aqG^bC(mBIdh_nXr!U`r{QC2+tEX>ZXk=_+YE~?Z>u!*F zc&<#Nu%;gGhu_mz%zICs+wz&<%Sp}|ojkc1$7k5$2&|$)fBjM$SSPz>>#|~ANU(fG z+ROPC%V5twFX;!IKPXBFN5Hj#kcPl`ji++y>b#-b1yrzN>EHx|zU_UCqv(Nl;Ujkl z#r{q~a13u}$7uD&TduVa-kBKH5&`!9yqJtrHK`r&J<&g= zr29D}jT;}DH5u6DTE1A9$k$t#J61z^w1_I$!5wD1V%Hw3Z$;J~5K?7G) zsJ#PJ9i#@VL^pLAi4~Qrgr{UDaGwqsG&ZfFs}y!$27GzqL?*zY8bn@z725RWFG zyf=b1>^w{)_C;5=gv8qHTUr^4!kJ8yK{9Tt?x;GE$i^xo2Ys^CBe+^9d-V>q!*hK8 z9K!U29*e7%U`wJphBbge@1%${y2$yBUd0|VSj$@0HJAhRT1i627UhU2gfblTwCe>q z9i7gl?${+TAET7vTTz;*23-mju^m|p)&p#DWZ1{ehZ=5jbtI(Q5SF$Gj^K3QOxxW) zlY(@>enkb5s+TH0h9fc0P?@z{GsqLKTbp^Fb+kvxHL-IG7)!vE>pkQL&<}kI3xQlXv(NaQbN5PwhR2 z%3mY*=tO_7XXjTcshuQn=7CQ4_BI6or_;*Op`wGJ*IiO8uLis5Y!Q6UGXh4EPnA1ZkxWxXMcr`{Ms);&CH<1O_EJXeNocBE zZcsQ}zU>?_qF%11NwJ=n@u``%Su8t#64)t3XHPFzG`iDG@#zcoaQc z6dmVQ-HL#%QU#(=ur0zQp{xiuZj4-G~+H{l#p1Yl_~RH-Gv z4w!S;g@{D*Egm4gdrk~9FGZNOE)s~aWzr^XqlFugY>wMFhWf)1eGJK{qQvBh_>zsO zG+{;aF1f8Yh|3V;u-H>4*j8w2tB`++DGA7dob&-ot2jZ>91I)uCvP%lCD^4-2N=ge z0|Z3n+bgmbOL8;Am{g8T{7(|2mlQ!$i5&2o;W0^`Lxg7RIr;+BwEWsnoV}%FTEaU191}!>n#tXd5I6oKi z;cbH-T^H59H^!8XP99N87es8U$4E6Vh&j=H=e}mxb-lzk=nve1MHxy?NbdE@Nm}li zd7etDJ{>^VT%JHXsjyTIak%#&WR73}?0{l0_%g1jjGh0UZ{@kVOD*>PD0=!o>eCZ& z**e?*+M)03dwBjUvJO6>RsqkNW+DM|yH7+G$+9-F6x2O^46V}JREYG-$XE#tzL<0^ z^y2M@DX5$3YJ4He=_1$j2~b-PdmZUm9B)OY=;GC?9nba-8gP>VS|(@p-7eMv^vr*^ z%0w}3I>DjLxr{EST5#}65?d`1q7ge=W4k~KdS>?GM)koxI1P!=9RuK+@v)s}ZHwbv z+XUp3fu`ayI)2^ALWl5(N|Q&B@Lq#pRVXrIy$PeuPT7b^j$tn!d$(sN;P0#YD<>X9 z`O%eKm+r>B0yk7fYxgq@XEaA3~i-2S&(HwuX z#HN%`v8In%buR5zIpY!z2F3G}fi@IjJVL2Ck_47R1AqmDW6sYgc{*(cvJkzd0r4G+ z@m?xJJDCK%nzVIZZ}fJ8Xcd>`IwdIO!kx4V5;*4*k6IwK?t%8KRgNr?+SWP#w2Ajb z_{Zz_C_sK`&&P6*ARVhmVsBw+%eB(EXD@#TiRcLz&r-lh3!V2NQ*SILC0O9-y)D9p z7h{8Dr*ox2v>`3l4gjQ9gabvI#FtEDIWHL}O`JU{Nd7`VpCbrw0kBBms~pv_4KxqN zWjJD%AbA!b6JOG5+Q!*oOb~ilxb%>nKJU^5Wy%B|_R56M8Adw2Ti=+lHctCdqD!;6 zdorXAWiulBxNSQ|DFyd7JOMoqW$B^-$x+Z1-}d5CKHK=n0PhUuMVeOw=r_#9gbH-=onnaa%Y$5#W$BIr#vX7la) z7F)h)B#-Dvn_j-O6l1Uu1rWNpTs_1OgxLj1&?SQB$f$iNIAETzTCulD6FL20Ng!+0 zmge(Ls4>tS%eEglHRi&kYFzLn3C_Tsa&K8)+QxaKM@b_5Rt+5ih6=4BSh`rO&|zzx z5)IUtHg-rP{>r;;Qvu&DpZo=D&pJUpaZ9ZJqY?LwLW4Z8cOop@ zDY6gdROPZN-xfY>{o)D34j;;X}ea%Xd4W5Y(?O;kyh^bh_*ZJBz`B( z3mzKLpGZtb|3K_9+ounQBgS0W&EKZ?IyzO8g_-(MULSG^1*hPeR`>>5_mM6?`uPGJ zTbN1sa_L)}I58362fMYn2QPVRZ6FEWSGRRv!1smI4;Eez-(%&Ha`TFFx|Y>0=|7W1 zZb>0P9;i$-5)YdBnSqaW>wUP-VfEvZN}p@4Uy3m!Rm{K1JyQ)cLOz&SN)2X>7_=1g z_Wx{H^E~H5d!c}wBhj?kf79QQKNvSax1)+Z9SxZ>$)du{Isv!x(vLWj?sz@4aqcLq z9#0iTJhxRI?{!%&(wcwBG^;D|r_o=Z4RBMW@=%!r>S^~BPwF)UcLK##(DgeVPlZvW z$gmb-LOOLU}X!&1Nw7>pzv5k!SrF0ly+6P938 z3W~=Z3bwsi%Ei_x&6^6`;|t=`ai}vaq|NlEiWtMt`X1N8AkW^tAY&QDo(zluj6*pg zPU~t5_y>6ROc!EWXgZI~ZIZ*=dBZHnwM8`mMm?KcE)B4O)_4ut!ILi@tRi@AQCc;6SNHVwaAgz`JW*2+b7ms_A?w*SY7n%%ULy*(BH*Na__O6NB4mf*SZG9sn5UAeSDkzXsB?-xQG}~3t z#BN=aqnDS6rpfDW!t9_)K~eYJ;ior(eWLEMBN$#dav||x8q$M1)8A`bwOU;CsAH(c z+ND`Eemi*2U7ul7Fk^%bm5ai-J&m_6XJI{ugWqzsG-~syKw)8NkOvu;)48VKd#-wm z{LCB1-lE{JwlISr+pRr-?Bgs%6;iyxukRe))n}T^)rzQ3)lV8Q zDkF}oZfE6EsNTe71<|Ot%#p%t^C5d*4TVTkq9g_8M7ChFl0Z?vc{xY~C_2+$0!HX_ zyfF5B5Gt>x!cC{G=+FF4?3b9MjR7uXQ`V9;Wm7OcXDT3b%F;!Y-jLi{b7#sZa>eVp zb$4|p{S?sqcoZL93ov>$E+8$begyOKJ4>MkC5=a3>|bK{p4e`|J+TsPFDGZXGr(7+ z@VMtf_?e1CIv0!}G3BHi6+x1>A|fQsJcY6)(@Obaw;@I4UAL%k&BE9bci;u!j% zD&=l)(-Ud8Q51DtW`*|7828}IO&(U{M8#s<$jp)R?WPXuuAYif^eYYxM*sGXYk)r5 zul#(K@+8qxJ`ZyLcCSFAx&)~@82hZCNH<+gE4ES|nrlR6zrNV|PsKSfCh2()qj3$w z0PSOEwvRit5mwwZmIaVuo%b{ z73LC{T@54G`V##wGaX?1Xtu7%tkcgSA#V3TIXq7@@mYCG_`xVvlb9 zPfU0ni_!GmiSSffgFo-^rFPRF3i!&NtVb76c8)Q(B-+CV&RiDwqSC+_BJ&lc?gR(G zP6;Y`<7;;H5Mk4fG`Es~xXLGr!k`cY{W-da&|Gs8p+8zSA|LwqD&YcahX|;8cA>DQ z>>re8^IQ;Nhz}HL27}ikLd|mJ<2kb8pjNiw0@L zl`?)<`e9ONy=O+AB_#rv5e3_j=vn#8TuY(R2mjLq9NfH91=nG{X2~k-nm*?`fIge1 zP_1Q@s2WDRks4&cbypNRd*&vHX4Wj^I}UBNyysD(rK>SvdJ?j8x96S?*B{k-Bh+q% z(Kg%FULkrrn9}F0%Ylcwe)jH)@#wK{4EdBA;D;|y5V=eL5IJO~Ky(G&|1}VezrN-v2251HNikhySfp=N8;VdgD|G(49SQ!4HK8RuDEv@A-VX*(*dfp@{ z2a`VFcgEBP@`zoH*Jk2b-O7wJiHM)(Tb~^WT=vtIYR6t!23V`cOxc zqfgC;HCwblsc%6xuU>IKnJAu1L6Wr`PR)9B*>Yg*UZldTC(e4ZrA;ZYZl1Pn*K4*V zOP#v)^dz4aY>yHRYvS%r(cX0R8iA5}Inx4$aqS&R6!VTD9hDZO zS?66yTAUX~qst<5P3Qf*psj6dQS66rA^9yJ-$Lph4x-uo7Ef9_s%{yM-7ndDsNwyru2{-V+2w_R%*_!|kys^pva-ococsyYQbp*?pu z_&VT?AE#b$Tcsk+tTb!V>j^y{-{R)gA#ZJ4-}i|xcjvq4{_OYS)%rtmz-oJ~eGCp< zPa%S6PHY^vV%=z-hVPNtG6F?}NRG))veTkr-lc~I+O5)L$PydFI^>4P$2F%%W9xH4 zm`F`dMQXofy?%#Y=U=!{P`JuWAl+#b>O^W_HKCGQjEv2(ym8I3-(wujx3`Stuz{&SJjplXvML@ z=TP6oA#1GrkTnJ%o=p>ti0k0CL5`ub;l-?i<%W|zS@YB$M4FW!rF%ru6V;K8I{Max zXlwL09%B^nfXf>Ua~->o`5wFkPje<1E1*rcws5o|GamDPV^~s@XiDj3ZEs%Ucue*_lrWFrRiLRZ|(YZbLj z2R5~hZ}W3w(l&kdXTh5;{<^jh4ikXO&~N!Z*+pRr+7ym<(?)_4&!_Ua(+#Lx{PepW z$CQKCbLPdVv6U%?twe5vi>AXKw+CL{E*`Pytb*Wda$}3&2Ze}$rQBi>JI7Z*8*`$L z0=P=LN?0V6eb7-Q-O{Dv!7w3JZ>bn7ZdRq{Zfj8f4Sb0!5`L z1QpAH-q;-yuZ%(MT#eO(SQNe$3y{T`nm>Beck(vx zrI6+S-Q%aH_v^QNvh26$)A(Xq<3rIa>8b!CN&Mr#n}vse!GTwK&9Z3Uw{_Qh?p^~c z=qTJVx&^|uyBLd~h&qNpZj0Bg_x7B9pp_OQwi9k&p5&PIFXQ*lwDl+)Z^n=D9SIyO<}n9F{YFp5BBz8ExQQmCG8tZkmeV?#s&%u%&N(#sKwK%oOk z-}*fdY-l43Jwo@$p|TF~?gRDF#<$^6&J)*({{n!AL$$sEx5IO7`JH$IpC_qEB!?+= zaGuhj;F2U`m1J1ubY2yGITPOAQ!n_d{#KFiTYnk9j%iEs2@{_7CHy<6pO5@;X1v7zMU3H+h|z;S zkP4=EU%lWRese>|Vbd|(?BO%r+@;7Ttd+eqq3kt$i#U_(4DPbCe(wMPhzazYaAfjq zH6tzpVv6`>Qde+JvXCPbaTWTSWYOAwX8)<4l8LiC1Xpl5))DD_B5s7ljm4 zh5;%OG-@kZCl869^A@Kjn!M%bWtBLs9Q!HZCHx|sXiSp)<k$9sTUYXN}G z2v(7A*65&w6)?Wt&IK|D$eStSH}ljEI-WGPXmsa99V z1AWAzX$g~yVc)OUR(Wg$UVZ1{db$w@$mbEp=Y{7QWh#q*38mbuC5x@M~5*m9o5|UCFMFBa#b~evtqac?`8h0g7g1kqZdazm~WN zlu(Y11&4KR<;5R!HBkmPgT;?%?+e(>|MN^Y&>Y58dt zK+lw|V7l7;k=i-pOiO}o%4Icl9}KrDX-bqgn~ zRq_CpF5p0j)+J2No4Sqmb6VuAhnFrHtIt_TI7oOQkE+m#2rVgDUsp4zpb8p=L^%3z zmR8m)W(;MY^Wx;RufoM?VxC#~CND3wA12zGcySi*Aq;RHL7^6tb@GrrmGc&-CI+1N zd08c*l_KlPYLK`7Lv30L016NQL2o- z)=`>p6J>NS3@gX;xV!*RN#|Am=Soezdnjo}rjNM|>xda1C(G3()tvp=zKLoej|IM$ z)Q~DkO+h1yWv#a%oBhf0&e3KAud-gy2kPT2^d99lWao?^;MNGd`p$8?#S);-3B7=x zS7W(@Z)JR5sOl}~{ft(vzJ$I5{;dCy{HrJCtaY6;R(oQ&&nA}KM-g^VaPnw#Ph)rUFAqsQ4 zrPh_}o>`3G3@Ra2R~lae>S&;;ZK+d+UdZ=TA&&`D%=9KJt+jG>quI%xz$>(L$)h=M z>bB+Qw8&o`Ub^I6U-I#me1*!Y*>P}DXiOE4;AhDhm&lS?ief@K0!x&vlZS-Md5cpM z1upt|StW8SITSXJ0jkV7OO~#7rZdtAo26S(2#J2rV&2wu2;C^2qlbKo+L@#q2RhRk zlJweYx0Y`p*zXy{XRDzb9=yIs?_Xu{2yY9GZ#E#T6In@Jg5-2+qJ!k|=IQZAZal-7 z*C4CFq4Ug2SYXHs&J=($HQWL| z7*($%Mu}X#%&JL0T6BGO$n0~@$Ei(gdYW>?6e^mhD>l35Lh5`rHi_3s0{jn5^=|wrO0F}(^xR(@caOvN-3B|fLI60w8S<>HjbvhphD5Q z0^1l(=XxF1{@dn1@fP{dLqP=P6vVRRS1kLSSK>M*WmX@J2lbWfpjA)(T*yHV@_Xd# z+ePGvpNZrg(TS43;eu~(CinaDHQZsw#}tYD@t=!txDZS_=0#8}tq%r=kb}Xn6>Sjp z%I~yd>3s7+757-T07+}jhIvX$E>`F9s6}nx>QiaW0y*9ZysTWWDPK_+sne>#Z=-mDBAP#CCJ_0a_f(@}IJ&j)QEiY%g;(l^SRG^E$#`>_qH(bjOrwQr+ z>@;~HX32;eb2mQz6%ZSaO*4enZ-LmFv$^5LL28Cx%-=xtnu(A?{5bw9c`FdFKa&9L zoM@*u+a}lFwFlB9AW?DBoM9?WMI#mnn&c=1%1%IDkQCI9VGy2>Ap5jRM9m5F`4K2l zK=gzKN`#fstaBPc1pYk-h$CTy5|<;YA);Qvy2b_53qC;FF)qNRrd;qTz@-md>f_Rl zT!FaF(aW_DX|&NaR>Wv4qnohNSq$x?*J!0FP1zP#y237^fUdxf z#54yAm1lB@t|vmKIUpb3d>AyKb|i-J(Qr8EA0Iwvm~hn-hR*o3+IXfyj2{5w)6Mu?t4BT7 z6VrGYGZ6s9D)sqWA*`B{m8@ie)tt)1ES_}|ahP}{VHmH^Nh|HdGz}X)8)5*6RYu%d zjT|%|6=C7f=S)J<+P*UUwhu-6Fjgpk{FeZTKzG0M*$5xNi8zi@K>Wt_LPXi)$1i*H z+qm7AXO@Rt3j6QGz!vAu;e|!S)aSWIf&3o-L;I7jw0}h_qUBfaKY;vOZ`01En;RZq zuT@)awXt#QY8`eaTlbo)7eSx1*3s!M({#TM_3NG;?s{Zsx7)~D9qbMY^HzkOSSERY zwz*S^j|z4I;jdU1W9%&S!&A^UsS;cek3Bcx69k>P5S^2Ca!%nXKBcGpRGyksd&bYi zIXuVb?3`aXfaxBMV+78-91EN?{8;0kj7Q~c1A=1*;cv1PL zUMG&>sXvYUPP2|6@N@@)&c(SDeBp5mgu;k@B>?-E_ZoDB%>2JdDwV}L9M|WBlTJD9 zj7J`O;;H{V^V|zBz4F={Z@u&02PBy1c@dk~#xC}8NI~i{nyIX3E898DNzQU#eC$!f z8u$M;7rWxdbG(khF+4`c_*k>m(XH%`L6z&c9iQWO0?+#sbz)BbDLTkwX&X-CneKCc z0nAWje{Ij)!LSiX;lNwy5n^9t?226UA|8W8Mk9@_UxZ~k^9j#-E)&&ehc@obc9JQm zd2NH}tGWc)PYq5(Lz|V>=4NEBo#b~XFXc}cyPEm1Ym2P3zFCdFW-T-nEVfj+2t!-DI6D8fr>d-KFyhz z5V&d*@apKr8W^YMW9M9>O4ajYr)3>_SeL%v?1RMX%nRMen{z+*IojG{U-#nn?Gkih zp_g*$3)6JTeq6;>E#_*kZVA_*$t4~7T9$mBx4nPf0Kxu$Bd6_zbXcBDmM@zX$PI>& zuV96WV8u#Ui3(N<8LZ5Zyu|z5}Fb)U~8SoH#Zdz;MiQ7cnROdvc0pv$B&MuRg5}d`X3C)!Z z#DQ%I>`tOEUy+V+Ujt(E(IRc(}ahuf#+@DMOeK2 zDO%lz-fr4W=iO%BFdrz6&FL$}%MJ0J;@<*(P(oYOFG^u6`A0q5YQdpYTPJu_>^2D@ zrP7vV+6D!yx=SVlo2z=l&JJ9krt)yyFQXx)XPD#C8^w zk=!{uKT^ANmq%__6GU;h?)E6142bF}`)BhE5@OwlN~1G`;v`6tELECZ1rSPAtI-Ut zRhwS@7HrzK<5&kilp-jK64kdM0Rame7Y{<09y8%GWJ0Oes7bT_2HXyAH}4&6)rY%# z{g&_Z%{uM0$3FWV(C4yiuDfBtLyvv>zt4bKAw_~ng~HTWZ@ay&yXo#NX)gs7Zc!C= zNt8@!flkV~a;vaf=&Nj6m_qHq*qA0WMSE!;mSD-6p{u&DYg5G)n|o;eX?kJ`Egg6 zb>=(kAHPTsi+z6M3GZWZ&PTUwcFBK8--^WiNWXF2{89eruKAnpO}{vPK;&j!)<|;5 z6;ddsR7z4#Qc10bq_%JE(?zSjUyL)@oWnMp8Sq+j#+1PtLz~8_H9^KCDN`g(YxfLF z&C=Bzq2J{Ep>6Y2S)jrqX-m{u)-|u7%&PF3$%Zx3R9ab#&Qq)lf*vIL&=~Yegjq=T zblzq_tW>rp`~s3KTAdUxm0gbdx+q;Kk_MV2*WvmLiZ*FZRq@E&Le^HrZG_uVvQr*+ z>&f1Sh|Cn8g-FaMo-;|{Fp;UPB0nNxaU%jRq(_<+FDATCAB0+JNkR>nH|@)b^iTt_ z_v^!v?YgJW1w|LWsG@qb_~Js5)C!L}{m2U@T;oF_cx z$>LJ0xcZKU#oH~DNdl0ibzVY$=fNX9K9F8Ks@{0-wI>I6PJ~B0Zy22$op+chIbZkd zG3mKa1y}Q=z0HP(M-XS{jt@)gWTR|!2F}1tdqsPtLvg)9rI?JZ< zEF5vsEJLe6rD zm)})`rO>@E;|D`9Qv67?v(q6A4f>y^4OEPzpP$hny`fq0e_d75-;Q;l<3IJA@G7cn z3G4e-&23Y;C%IrcbD_+20ezP0R3dvz_32!dRnL-$5DeENLK{pLf3k&%R&+^UG+w4` zmg|a6iCb~(r>{&&&y`%rxM)?9tbQNJ7N)KEuhBKfcl}540HMw4Zn*Gy=JqMo_A0m8$5}%tP zXf6$g#f(yw{+UrbH-F0Dtk{ol%@Nsy#cTj`UIEQ(weoik?W0xHb24YAd_(cA0Av2l z9jCc}DnGa)%B>0r0LPotX%bv8CJ8dh6VAe%Q~K6(;Vfsm*fM6w7| zEI~7=oQlB!ve8(f#Y&>6X;Sozj!n!#F>7Pnsm2b@4lat_sGga; zqrRD;sM@w_ZwH;a8{3MiL$Cg6Jm6ci;rgInY7rmW&N-4rJ;D5SPxWJfh5BYjqwi2S zySC(vcr@Wn2sR6EC3~CC2HO>N*r~kQy{gJ*P)em`mygxAbsrys6RPx++EY&HTl6=` zqC7MiaoW98HCX7FGG$Oo1xrUkX95z#G7^FnpvX4^(F_P+M&Rr#YKXRHM5|EircodG+6+DoSQ&CfG@R|`-%FC`(t^i%|4TEtMAVr4$YT%oi zn8hUaQ*0W5l8o5QAhf}V2~aR$rB=KQIXLlFif=SsRMBmYIcO(Nay(U=5OZr(3}YFq zBv#D%jozL!c1l)}#5I9BoSX<^Vyp~|^^(z&;gX>&gb+gP+WW?+!6}IeD?@LsCWH`z z@xqPuqww|tsoa#!r>veieZFGP>ugD+ov)WDR4F3Wgh)e>B}V z`DW~SV5$!VAq0>mHBVSM2jHi4u$$@3mdR1DsBdn@n707~0RnU{HDBindwvQC3+SMS zSo{k%oYdPy3t%$=1bL*kHpK__jad8$wHfYW{|^uX0000006-Yqy~ly;83HqeWCV;M z42uB^aAWQRzhv0ak)GDR2x1sMn4>3CtJ_BiBYU4PjHm-D1`-vVR;jwC>mfu1A3Y~k zR`vViupHsdHHp#6E(Em z9c+iJ}HP>lhnVGr7f!cd4hPC2GEv9(3!kI#$ zj-Dae8EmQGAppRVVmH|}#|mmpFu2!*Gc6En&axXY=Fr8J%FUQ~7N6S%bor~$lAD|_ zOnyFfb$5VpM|TDy#ufSAPMyX1TtK?OqB0Q(E7#wKqzh$B3ll16KjLu!BpASs{aJWP zi8v)s>Qb94FU{hipaooiSK=wj1(Kmhf`QDZvq;gv%Jqg!cS>fr1Rx+`jIGJ^s`tB4 zq;xPq#oAW`*VLz3J69+32x5k*+^1E-+E- zXQ~l~1W1P;qbA-hf-E|mt|MzsF{cEW(a`43g+w*Tc%B*&?V1erQ0Y{&jI)DhwCJKm z{H1 zXK+rm>-Mx(RBVhyw{eNfYEBvBJG89LRkosT(zrm^vJO{8OceW?Dv@$5wKz~4S4#T% zUESxt@~yA@fX8zg(R$>AT0ZAq546R@Y$n#8&9~A?#^5Ntj^6djE%yxOr0i|HZxaD75JJoi6(s?rks>?V8DWe| zQ!6EsDp$3;@0}<$22~#VyTP9vai5arGt$Tc3o1GWMloAW_a9^D_`(};yx`#z5Q2ns zEc6USGLey3#zyq@Lt}N?bXL>MxDFYXA~b2Lhxen&(@am9aY4IuacL58xVdC>>^;oS z!U}Y60rimRA;m*B7f9R!go=7i)0xC1$rfu%H%&LKtu0YhR#9zYkxj2qg3|J`wPmlA zc}xN!fpuqK3#k_JEacYnuQ9Mtw7qx8mFHhwU|}Od)pi295h zda4G~s20VL`mu*b(mh@xQ)4b?oX#(fb7NE7o;u}lw@H+zkqIT#ESih-WPkd*C}N*v z7q>2M%_egb#==`LSkQOtVLQHX%Uv@%!F#JX!Aq^R0<^i}Ut}(IM_mrBKaUQ(>saaX z_E>b(>U{D3)5Y}xtn_-2I+yed~LUFW;K4I=*)6?p&j2V(EoT8TiY9 z0R=`uRhh(*g6z~p8D*T?wNlAfv!fO=oxQYTk-KBvMask5)oualOvBwg?R5lWEx|-< z!;V^_C0I|iSZg5KqhNwbLM+zc)a*+gjxo|1zr%-)Lz|9w4^8SnKXestp<|52G2y@s ztymMF0Sc)yh${SNG#s2myHkB}W{L~+R~Aq*RumeU0u@jo(*#mVP{k3RA;Od(2yigb z3LlW#fjCsupb;6+UoWUiD_HPM3dosY!3Y|F0Lp2uLrz2P0#Flu=yh(XQ=1YU>9lz| zt5TRzJo|}RuC}UGB>^R^B_)*!u^P69ZRX@~-eeLA8-!JISKNw1Jr#nzGE9a>FT!!e3br2*2&T}8Bf5I>v=6Utk3mX^U&P<_cpn3 z(RSMd>NcW_Hs808Ed^Ln%m)30qMQibOpsba>LjE#0wpS^OHsMbn{*FC>rfCObr+Br zk#H&uUA2Th-!j&TJSp15>BMu@f{7ee;zLE8?`4{ZF-nXKiIF-RL?-75FzKW0E{a1! zOx%((OvG-hFu=eaY-5^g;HVwu(@7g#TkEMsjk+-o=B@F-RG)dT(7lG%YgUTlbNh)s z59#4}Pz;Kpb95->2Faewk8XD!>>ZsPofKIqw|qUh+eKgIAT9e;W*pb8RGC&FGnAQ& zd1ZT50zJ>=j7P5(T%jroE9+PS~e0EK!X~ ziGGM3?m9I!?&A#rCW;j$QJSLHJPH}7aEjGpypGiy^mAaR#p(z_RBj^xpnQ}A--@5l zR{EFGtM?-pn$R7x%D_4X2KLog^_dty3ZpdbqcxnKK#J>p1zVegU-qkKo|r}o^kEh= z>8svQ*i?6QnV{<_a(Dl_h&&ErV1UROyAKwE{+-rM!k~>X`%($|xQ##9eWg0=?>~4t0JJX?`#Z>b^kHf|Bo(w zjRqhv36N(qe%{Q1c{Yx0bB&d^_TQl9mOCy|@F8XYBvK~K zlysWJ5`>e?4k%}`AfgUSEGcpsk!Zq?OsP~?jrYAwE4wT0MZeEWvd0aavvG(T1O*Ce zfHt212MN`7JMLKL4%|M zDQRJIOOOen31sw#RuIc*8CYdV5R-*Q5=zZvdN*54D{8m4D z6*qo#W4Zh+wJXuUqPL5SPYpK9Xfm2y{OaP@K3J=LP`oXa3+Ix9tKpL=nem(`jRJ~p z;{f@%KB-+0(jViQ2^8>?1CLQrY|>hT872%8Y?O|q$m3)>S`%-Qw@iL!lY{S#4UXHJ z&70lhr2a9_uwPmrNmHZ_A%P#aamIVainH-QiyX5%=?&QU<8wTUMTixb)&VAfLNpNEy4qHD-4e797s^%UKrz%`0jlt?pV~@ z6)QAg0N|reIYKA~P{~;b3D>$pnB6R)cvTr7sN`9%1puI$RM95PI8o54#Q>^JPz{1k zEU4c`*hH1AN`KbTLQ(fXHGn$Nt0Fh$jG-=g)kMx=%urN(5N&cNt6CRq>V#oKH9V;2 z5PJ;0^i8VgFlJcFhVtFiDGHTVWJ!PS%HorylJXP=GO#4OlIB=NDG9Emwz-Z6=6Zg+ zqg7;*B-@{)DN|U5yb@IIkC%%j$(?xp zRfJ#>o;YWniPu~m2_r;`;3TZAezdc?67IiZ_Wv-8Cqg*8xr&e^LO2M+JNuU$p2uh; zVgWf>YO8lJg}-J|eK2q9)G0d(zCi30zP^WxJ-WQCEUPI@6)5eigq_||4iR7AGp!w# z<4=2WEH&@*^8bF=MCGx}AVtVA;hCf0LLiS9d_hNoMi#|2ED?XC=WttCfI3}rQ12)C zTwx7llN@^<&q#`<9Hk@x-~5@Z-&<|sc}4e@WRLmH;PiKfA;bEPHCdTd=r&*H>S zv=ItbTVj)LCtgao`3InLMn>VAQzM&NZ$i#rj0{C4skPK*Jx;peiH`_Ck3z=bug&u6 z20Cw9V_@sGoCSzAQnAVAYqP~(r}TU36KXEi2}=a#HI}wMgo{9NMk!Hafn~PZ=d_#t z_Zi_L-9RH~a!c~1P0rq|_CvVDQo^NS$@Vn=T_H%k(MnCRT)X|wxaFBI2oDJYi_kuu zj82UuSHTjDG0s%=R_JiRSp$ZAMfgYG zD;~9vfNTIuNJ69>-1I-Jw$I4PD>$#DtYQYEidVa&mHw%3h^on8vDN4`ue@jZ!u3<| zL}&Tk68R@j(FQ zvzfAM1+e&T+0Ogd2ki2wr|fssDOo5?5spAEwY@&i(pVgUNT$%}Of3$VxBk{1-*$BM z1o{R-!>}?ciGXYXOKkGX?}vg&IVde7C$HeVlCp{!%vQgzB@mp4xMzQ<)CIAx);kfcqWA{o zme&51G3lL%{Va-)`9EQJLQOO3ornWP^Ccf@V`qDFYdx>kRVvMdQZyeC#XbHt!gJa| z??k*(G!Kd91ETqwXdV&GU84Dr=uP>!oQJ(MW8|weU7coa*6Xm_L4D4^Dcgq_lcaj ze$$$KB#?AfB$xDZZe^$oSNRHc305<)gq18mSewQoS~)^5Cppb!E^_{0XD!^;Tg}bt zU)X)-y8#-{4NDJ3Z$p3%+DUH7G0feuD-G^+K)Z8J-I9mL1kZd;s{R6qu5Vq}{$3F9 zQpx&X1%Bqw8fP!*$DlvS$pH9A>wh}|hF_EXH#+>S($6{*=$XF2KnyUp@_)c7_G*&f!JkZ1lqiq+#|~{%@N}VVQa!d zGmWg)tdX7O*6Yt{hw5gTnpvSvEuIc^H_9z7K;=fMPM+62*1ACRHDbOoux5?cG^}EX zRONK-KKDzBA2x|FafZU0GlYsFqB&i7a=vQ(X8dXl*-$Wzs$s}Q70d?Z`gY?FV{FWf zsUrXA8E*yPdv!es>6=UbPU;?)F9_%vueu7ay;+Z6e8$U?@ZyvQ@Y3)zo(V{YoT_Gx zAJ%`gf}Zh6fEA5*3|;y3|AYSlu_T$D!MO2;-?Ql{-;t^vvtxJMW=xXMmXdbz4oaca zown00a^ka~r~lhLI49J`2vR_JC!~1%^nbzge&-(1e^N4&4(9L1PIV6S^nU=`-1t}K zKY{e6_&tb+pZ*)5bp!`;Xb;_?KMaTQFdgOtLf9IpM3RIO*c%-b|Av8 z=LcaFCux=!Rc&r%(bwKEPV0HI-R%#@6A@9IASs$*IbM)tMb&h}w4BKG{2)v}(l|-8 zyerD8Zd(8K(+`HD@nkxiFP5wIX1m)Tj;FJoy@MkF2m(W(FgOB4?VzP8sM9e=Nsi5Ai9i(Dnb zPD*c^y@vZMArt5yc)5$rt=s=o25T+)wO-7uOt}g!Zj~DNH0ssoi?0?r7F;j4M%a~_ zI<7%zYH91}LZnAhuK5DmjZnm}oLhJ9J$UpamPloCg;M3KJ%8_O;trNYK>N> zHyBBZh78M@oXrsPqO9ts?fPMy*7F9Z&w772o(NJfN~|I*<b`OW3*;_Bw^;pye=;y zN1?sVy8q1K2}BZ^LZ#6e025@fIb0rJAQXuu<`$M#cJ}Bv3wMcE-r6St4I{?mBo$d+ zlu*gKQSEW}l3ZdiVlrE-HoHS}ipwpClB}qjZkU$sK!jb-55g!;(kw5^s&3k@AI51t zZ??Pr;dmklis1xF(G1J+f+)#~s_BMl*^cY^K^VnJn&m}V)lJ*=gW+gA`7g4(C_z?r zqju@D=4`_2uVvqwwOYaL=lU{e@$av)!+n(kxXc{K)7sszMt~K6RnQ$kgFn`>HuYJ z5~OyPw^lMNQf{y+TcW&AVA~xQM_Lpm>}SdHVvxAyZ;cG-$2(I0o>sc5Rs6% z&I}4F8cXOHnAkXY_=LoyWNcDmB5GI-%_%GaLa3oIMK}V9LSu0RBAG&?GqpHe9$!aS zPoQrgG=$aPpeYGSh?IlUGIH_?&MPUan8B#x)kqptO$Ljt4Y2uH>V#5`;vg4jL@Q;31-keqlOnxCjv=M@gskm}&9;h&glP@j1SeZh8sQ&mduj z8P!?>AOyl7!t1y-Xn-D=fDA0bC%YVwmZ7I(a`Fm_Tn{pjV`o%U)m&27(A3t^)6YH{ zo0_?4dPGTu;bh1h1&aWJpyqqPxE=7UPeMV%!XY3s_(=*HIul>lpEpgr&?=CNi0eAwq@<9X5Pwk+Kvs?cB{MPFNZtFXt*+1`>s}sF+1@ z2}vnwSvdtoWv{EMxvZh-s) z?}(p_--^GE|A}FXamBR9e2V3q=_7ke5sgY{R)$vPXjg$wmC&tn_9&keJSATxPzyC8 ztyrf=uV9cE6-gyZnO1?Sj2f%XX_z#frDiRQUbZM;OSlTLMru%6)DEpjA23GD32P0o zqO>Nm0of7TlQ@7KAx@+Ssvu*?l@yptMNMc}T1v;!t2s5ww90iV^r{V9MsAZzGmk|T zEWCV^&ov2Z#I{z-G@X9!QaAcf(Pwt}b_Ts&VPn&%I{PHf>`m-T?ave*yC6NVKEwcO z2s45kBTSH{C^PgFu?I60D;N%rM-Y%ANYZW{;a(O~ji?jywg5lqd_LBrB?>8>VGDuIC%L>2NdPX2Q*a zn+-RoUu%XS9$Ft=FryEJA;K7AN-(Fu3`-7LfR*4C)*4%by~WYt>~RgaM?4eW8Q-$U zzc#1D-lSMHS)2Z|Jh#1Y*tl$$*m)cK*8O}i+9#>0$XBsnuf+dKXc$lRGi3(zazpJJ z?HC)N8FXOC$go2rj*QZc85=h-VQSLM6lB`m48ttb9LsOEKOFNG7PuFSmig6z^z5$M z-s;94t~mRzeXib7MM5Y^#i&56N^z>TCn?NIR-`7C0mb%A^<|d}u%K++eCFlVLQs%4 zJ`dcxjs-*8CR4qeIB;}fS@dofVMX5-o8G^8Y#7?+(7Q{(jW z-|GnaKxXp2`Tk}t*%_N5YU3d~qanuQu>55(s$RflbeTf1^lU;<{>1VVU#2vXbim1~ z*GPd+XO&FggiiFP+w_}hL-!}j6xPkQITjbs{ur54Y?CFnkCIQK@d{=yfA?lJI{;dMUxiU0pV2$;%CJcLXS zzQ`lMrq>U52J#<$1i5{Jqg7YG!FnIcXTIfFD@%)f}SOB;wusnSj zLvrDas3dTcrjWmR=`lf-*%Gn;<7meW8WTrEnZA94IhsVr#c9mAT{=WMkKF5m=9c<3 zgN`@rRxc0!fn_~W`S~Xw@ow*ZCII3f79m>vA=?c1PPqJENrz`CEzJlo?PVGn>y`(i zwj7pA)HNg@i18{~eKCn0;*ofLu@*x{{xPVuv@||wm-*~lKLOBDv{C0@6yulZVkJo{ zQ8jUtrll}S2Ra`p!vIW~YB-~OOml>=vK$pd?4uIpgi)!!%wJS?Ovh6B!H>NvMXtHJ z6MP`lNuPX;xa0#Job&M=!qTI2ka2Wr0y!E47Dq#>5T7>u68hOjlrJoYDO+GQE4I?Y z&uL4fp`%EtY3$#fNZ(xT%yrr?+(Abrdz2|1u+<2(_TP|^(li*EiA*ZWbk>w)BWEV( zBDd;GfLYMmCs@~#QdQLIidW6iYE;+Nn%C7W%vSF$Q~$3Y*trm-AH0;P$D zrg_V9*V~}{NGF563ws{vMqDkemPL9wrH>ItnYbB!a-x)(3VT_)vwV!c%({|FW+Sv^ zQ}!P@I9|s;hk$41Jiz5ruH<^o%{a_$Y3X-iF8BK6QBtPcB~kiR8I>suma8mB`igSG zY(jgQV`UxVKwo16oJ?j?%To5_#jF!9g?U~sC1D`g^LEt%Ok*yqi2Hs?M1r4blz~AM$K?PCXU1XoY;l86V&of z&D+WF{~O)$rJbj?$Az9iav`Ck=Mj(d{zN`SumPW-<=O4{AU=$b;^X)vK8?@f^Y|jZ ze7YmMymeZlQJ|kwOW>`Go5}l8L>Bxo=8yJl_)!3s{H|{!L}6$BUyOJ5MgjA#AvJ}* z(gpem+(`dG!>Z3}&}L`L#cvNcy~IZ_<;>gKFTG8_4un}X%3 zP@>n^*7kO80mMn5?i$v`Q7WznoX2m1W|)$f?(QLNr=Ql8!*>!AFZ=!|Pq~3iAQWT+ zc|ZYB0+az&Ksi_pI=~vR4eWEIV-s^WL?4tAN(W_vLLV;zl{Pm+`^H3?tguB;;I@=rzk+=5@B-j3fWHC$&8Y+A{D1o6Sy=0_fAM}<{^G^3 z>xCl0gF2^Otj;>V@m``nsZ5?3!9-Yk3H} z>Q>rVM>G~(=&9C!fO*Mb$?MMc+T%W+<2`|cob5=&I;x*a4I2GA^hM?LGn-K1zWXUs zx)NnN^~0ExoMr^n{eBr>Nt7zH%ZdhkHy{qzoTN;jc*tAwH4G+5fX3a4vX^ z=rLf-QUDijd}T_PVH7*FEi_l14Vq4qb*?(+qRU=ruWoV@o#YfHD~J@QG6QK&TY7Vl z&1_{SwWTPuRHdmF&%!tb$vH2}EtCF%LFQ;;HY(%hfb7D+349}6mTq?;;Zk6Ruc^>p~ zZ#+%~xLgumkOeQvffv=nYVM z`ZDk^XLoz!e3l;c&h1{g-~XQG;bnfi)cwO>X-B^2IqQqYw#;;%B;lLVOh^kvEw_WiUBho-cw$ixDR_o+Y1T zDW1=afs4N-+{Ps_H#sFObs@P>c1~8HTJ_+xaE5|>?I=Vz+NRS5<(!?AX zT*tTUew@M11!T0VuF`tS>MO^jqMFJ^kS0|cs++25rfzug+o>LthH4uBr^%!_XXrLs z+G=g5J)k3~)9K1|XM3$DrZ=uHp+EV*o|A!;!L*@_;jEDyOx|e0SkZXNMA>A;RMm9N zOx$yqi!yCxI|DvJlzC4^}uhUq1NStYlz!ZuaJn(|p)UOOvqcNO(k%i(J4 zsfztobEG;>*VLJs8LW$Yee0Rb{ojSV|Lf^>1AN8bh>}f`T-sSiCuww(PLK@zEXPbM zb{5gfVw^0&%0m9>7nnie8RMRIp6TS3F5cR?z^p0Y-M-jg-H2y;&Nm8)E0x)}z{oK=Ew-pNDkSj5e>L*TT}Wal7?v*SDsVxLB@-u+=r02SaqjZNh12~6Twq}yMK(LCvM zUPyQ13DR<^I4(+irn}C2;2EHfdhi3xF@T^H76F2KFkAqG%=g*+l{0aOP02Y{njgkm z??W7Mb1CHICw5ro@T+A{j%WlacW?Osb+1Kdf4(KZDviDEli+j;T%|qhJ+D#&Jc1c6 zld>6)!_Z=#%!Mac@Z?vY`V+^qG17kWFtzpH2~q93(-jV{++vX=6yE9;ijya|i9N#k9aaBNH!kU@rn9&%Mo zl=+j9r~=4tfwBeI1_N>{kb!VYv^)XMOKd-j!NT2nB+ryZpP6(V#}(gbM#!NN3HbzO zLsNio%`)z)X@#Ps4HN)F$AK>33u&GA2dv6=`L3=C2GLJ z*UeOUXJq$LySfb6__~(9Zup4Kca3&+2Nhn&b8x}c8Ghh>%iptrhYFDed{neRU?310 z7>EoU#0CL+3=$|9WRMsXP&8yN?1NT|gGxK_de<`62#?r%rySFYBn!mU+F5Lt2@V{%r|hc^Q~MbFB?b z!udeXU}u>^B^RqSG6lqB+CF#h9ZL9$q+MR*4@&GOy+oH+0@DEEZ(kx@Us#x|HSc!G zaj@47ib&hx8(;>wrMcfOND_Ny6fR#SVevZc^UB4+)f~yi+G128OX;e;ucb~h5^Z){ z7SKYI4riV#f@R+3<1FsTXLr|Qf2pYSloFlDmne4M1kw-o0;6VG@d}7GlKkmIXnE}s z0%5~5FeqW~oICAunJpHW<%3PU1(AT=w0#+vt9O&_vQ3C5#1eGOvky~Z;c_Byml|o+ z2VJg)7m_$JNJx6t?{flU5n!*H&PfW9IzF&KL>)!t%;bOzdadFOE<&Z@pn8JOwCV!u zvZb}Ac6>SrEOmVBb+h4l+j)VCrH5*s=eSfdx~rjT%b zTOluzZmgU;tF+SSOWeDzqh|Xx!XHR={u?pXV7wgc!^BqIR99W8_eLVvxDZy2BV_Yz z^O||xa|@}ZA8rYe$-8>6?%U;3!+0yO-PE>&3jPq8SowCr)Ca%ELG`{$Ba@B_(o@Wy_OH(_dv`yj^|w2goxK|3GNwdTxbKMEsS|4Ji)+oBe=JsFH0=pwPL~>48C(ag^z#< znt2ZvcptyH|F>aC`JU$rNwd4gJiIrH1C%aoWp&w7cMJg)1W42WO+n~p=%LzfXJ8pu zJLv~F^IPrM4*-Y#8=wFEH&(e~q`$1ej({{x0cm=M9AKX-SzIR}!8N~lpjsT^r;tAZ zl)jW;#zaB`aKKR{>@<$9kHCJ=T`5b!2z>*af^Uewl2V{*Ah6B~25W`QktxND(6DjQ zta-&3NZVq?LQjMis8Xp~1_L48q^Xd26byNuiPx3@G{Ar0>$9E zD+P^?*i5zdDVfwTyoC~Nv_mC%iyE<6!(~#IFN&tKU;)f?#Z6Hzk*55*RQ%eS43F4E zMfncUG+>ybh^@6cMN(+sJmyB9HYP##sg#c-kbGw-H3Bw)ZDbiqBgLMEHcl&WkS}c&ZE-fjAQ-NsP1QOFh*9QK-MO&?F%q4k~_$^J5_+ zc5s?zg+YNRsR_DFiX5bFYD&9*NOTvOXr$|GNVo8O1UrOTERtjq{RzJLTc{m zQGfmDwgVuESmhg}o z+Pr_b{6wB4H!32rBBt9eXZPW&Y^;{zf(9r0v@w~iPuKR#OGiilN6E#66qq0e%gqm|!42LSOfH8{# zxFQM9ysI;hJsNuN`K+y;%OiAUut6)PyL*6qr1U+Q23nm`F%@^XUmWj!KlGrE@t|nP zyL+Ro>QQ`oH6hsrog8|IVF{>IN%f*vq}j*5p0p9$G@3GMo&gHY!@Ojga8I%m}hb+3!mt|Wfk|7 z79>yAO+2Mg$2>NKG*e4k&ub$G&>eAGI#=E3Vo0lw>j z%Py@ab^_}+nqP1RuHQJs5wVRkg@B+p2?&!#0mQozAYIh@8&k#uFQvNjq)ecYC=bI z|N3jBgkE5l6lqd2a5(%2f&w&qx*_Y0ON0iomPky(8AzO!7ZyxcA?&==W(X%zcoq^b zZvec&_i(*wsYyn_E04xFC0NG+w(Y)0ydam^;=h~ANtLt0>tiQ0CwP780&xHHd%D8{ zjy_r2Kp>W=(o*R1{>Fyn9lje2O(XabFm~Id35LvQ;#*Yxrp!y`XHGHX`)4fV9sqLX z{??c}HWVx%K$z&VgJ}w+c4~Y=nl;_EzEPy}aQUpPK3N;I3vmr(9WV~b{)`!_Z%3Bg zHCaMO>0nDH--IcvHA?8UJ8uYaDMhi5ajc_BRY^JK6}wu`zHDY{E_+2Ty*n6HnF;Uz zmb`48A(}L~--7rF!;LVf8AbX}owC?QeJdwbpLj6^mev!Huuf}}qsGI`W|HqEfq2|7 zY!4N)bPMxWj7fX&LhtF#BJyL(%z&x)5PMi+t{y<_>7$?@rHL`JVR1euld))3UU6S!9V_u1FA% zDzJd_vj=T6q^EsW>ZPclZs03F7GiB&FmJOyq7oyQbxrgKZWiJ46U*GMk@?z4?tVFn zuKdo~T*zq-QH-!JAr__T$*PnQ6(zD%uEB8ib+Id^viH;RdpaQ$Ba85kl|44(F5^RW zaVnDIbZPavp#hi0Vh{NbLWqST<~u_I83FPxtk$L;w5a7u?4(JX_=p;Zt80v`Yqm=d z$Z8{sps&*qwVYnZKeY;rq5gPNCu@Ha(N*zw%f#;ErakU}ED%#^>u{FaJUbRE?(5WA zhiGMwzoiuyqy#(`njEBY#I&K)f1A;`8hg#!&7PDZLSD3*S{rqS+YHcvxFylAbslIj zX?Etl*AF(5pIHA1CaaX&ZYzL(B^LfAA@BCCV+6=pM{M@~F~ zSlc~hSSd#)C{HM&Q#3tAcTsdbaCX7|lgg5m)j zROKeUC1wF@)_a5?4u{MLyJVa9dGU_QPuL`ua)Jkkae~x+L>u$l@Z-TcHj}|7wQzUA zph11JY<9`Q=|=y&-aSvudC(s$04E!3tD9#7L@(bL?JRI6AoUsFj+8sf+>+$#cTdUK{K4WCYnREs5;JRAy zyqBA>h^2MaoA#8iiVs1Cp^%T}$cMfi$}EN}9;emu*Xg8C=(J09Jwp5yeX2Sm?5rh4x&#Mb&r2b3F3Sc9TA$zSaPbE@?r0{YW@Na8$GvU6GClC zeok5HzSKuhl1uM{_dWeQk1v!;X8emMRD1ob&+m>d&Mt;o5Hw*HITRcW!*J>+7#nTGrW?nMb8r20)_mz*5Nz5&Png? z!%@nH7BRA?IcsfVa%)9#nv1sh8~vH61H*BE8yqj1Se9i|^i7k~H1%ZXjR`4{W`m|; z9)^?GcVOUh%c?onO1A>$m3;=8iXs{)92X-V>ch85ZRo2RhzX-dn8HGoeoDr~Oe{^# z#RlB38pYgueG($(AQ2s)@sM!?fdTg;5k%-MMu~Yg*_?A_y`k{O_qI)6%Hbea=-}Ux5s=V^|vDvremF@YIVr>;Nss651oE)NVF)aBtx1w5UCyi@1ZzYK+IJP5E=NU@%@0K0 zT1{?!^&U{FWo>ivu?-R+$jFIvL1mnhf+&RCjc5C^$~V{o;N(qg#N-x?W%;X#5KGTK+MPz&lUh0v4one6LL-(`6x!0q?P_zeGY5~z!y(W z?F)JL7g&W#N`2hp{?b?d_kZH|kBAN&P{z0@ua=lU%=;dH0W0Ysm-$}RVxQr|LhOJd z%3rRJIiQr>+A{^x>*k-MLQ4+cW9+v%W}U6|Ka^*5Wtos^4;^8li6y5q$z$;&jW(mX z4q|c(^zY{;gEsx0mUNNLHNptwb4;fAhcaZeD$r1}LKryRXxY-f&p4^Z-E}~y9A-RT zh5k)r4s)=iRJxbg)0j;beMHOr`k{d>1tZS*m18C?)&*N$ADgiGM2q2!QLK8hNODDq)Plj#-OGEsH0r}J8Xl*?6Okuhx1A!oIF4(i%dW~obZIQzGV;6Nfq7-2m28;OrwnlomLn z;|izN4S5f)9_MQA@BR#euL(zaxLNLA#)=$AxDSrm=`t32w{JMKZ7psq?!G?A#C^K}37VGeL zJjqaQ48w3M5*aS6oCx?@cp# zbj2MKI&bC~`WmvsmAH7JM8!l9om=SbvJ^cvIg)qCInt(->5RAS(ZpQOgkrB7rF=%V zSpk|aK-^*jfyn6vLt{NuM;LRskcTJCG3UTe>83FggW|IwfhS3QLud3$84R5ePQo7W+jwsiRUvHTN`jKCgIY z7=N*Y$WO{%#15(2oNhYJ-Eb(Vr)CKy3rUFX16Yizx>=+y}GPY(N5 z6$-0(bOqIB!G9hdrK_0wEBln}8bw>vl*kfDAAmNQe1hCt+QP;TUF@i8*%2?feq=Z7A%f-S-@A@?(|pxu_r$KQqc36zsg(;Zu+{(o^(1M0Fo`4 zBH?8McSBmK7HB`!nQ=j!xXFlXuf?#$MTv4`WNl(pmOY6S~Wcs5drf1|bvm%f)n#o0r>7eFnZsv~(;fx+-AcZje z3N+KQfuzE$zg^mZeA~bS9TulBAgCP)Ty8_U!`Hwj#&ur#VRZ030}wZb^*ApK(r#no zo_nK7{Un{`o4I?cG-~_n#98Rs;aH$UB!zl#1G8b~{AQF07lH>B*P5I^?GJI52n~Kr zmV-qS9X^{uNE>E5Bq9)5GH9Ubwd!&tv|kV#Or|Xdu~=EVK}XYZVT?{+{F0-EM1ajh z{&^7UFt{~%i3Ql&^b|!i$aWW#VlE~eKvn<5Q`R9gHONh1 zN;#NjZ960}W8iL|Y_bm-I~Hz$*gw`e#a`0zPZ zN(4^C5qXw~`RJ^7>i|S?z&ch$v78X?rtK2+-l#qMDRVF1b~uEaL{klqNEwXG1OhC^ zX<`ju3_;uZ*q92#Y3tt&mIXfT0I{EhJB>x7WyS&;Dg_8&8%%?0Mqu7cqyyapn$T)w z6JN@IO#0u*U!d+^3PucNHi&8MnatJwu;fVnYga4=4*{J=iUEvW?zLFWG~q@Hlx55= z;$vs=+q>gB+CKagv$BoXL&`t(xAfj@dF@yfAK*apAtd%Nb%aYN%Nk_i|QT>WP zS2E*}!BZH4YBfYn&lsV1VIW-Cc!{A+kZQ&d;=4X2bid8sfftMNlG5n2^E4T-!_r+! z%c5Fg)b=rDs^;gGNLr|1>FSBb+3<26XGGTTPo>jcDHJOPOAO4yBCvA*(zymSdk`xB zfKt_#MGbaOkaOwubb@`uYV^()Nhx>4>k6YJ>4F)A^G;p=+vd(#5BVqX`5c~``#pd2fUSgtw=z^s zP#tWT$WSB=(8{U}m{>P*P!h!kFmi-{Zp!G!QeQMXaL=rAgt1zgaby+ue3G>k+56zb zn9~*36TC@+PZ^%~dGh zZ$Ca%FS)Y*8xlXWCLECpWS$rbGBf90*io;v%&K%wYmduDQqCqsl%!V(^ z!8s3v)>!0zZW+zhZ~!KCzr2Ro&wb992*Y?v;@JC0V;rMXxQ(r^&W}hc`}VTNp%~GU zU5(2NYfuHAT!wwvhke{+VIENKBwI4Sr6#2RP@u3ik67bT-vHT%$7&!pY{!QM4#WJ> zh}ocqN!&99lka(9-m7<@?o$ryb)8RSQWlHk#T`%jsVSBOuD zjAovvr4f*BajC1$JZC%gyPCfobZ9`=j*P z+5o<(k@?k-@3mIjiur20aRH~kq6vX=QX?AR>jDYa&Wg7muYsmP7&==qcC&`#ovhmc zd=tb<7;2|Pc0th&7p_lY2xluMUb98nwzNPV(*cI15 zAL$#_P)ZSOFOg*+JuErPgniz78kAW9G~$pNF0MLTl*pv0Mr7N%nA1)*KdPqxmNK6# znQs{ut;UyU)C`D2&P7>)zzSj`20Uz4QxTSX0yZs^Mvqq6PuDi4SsdQ3guWE(-_IYw zNMEQq59xwHhtw4R5#b}OKS#XGn8EET9vdU$byI3UiqgjP2}*e@k@SkR&_iV;NBF&# zdgV+jr-@LZY8Y>Fc~G5I2RcC})MRC*(ct|SK@(uEwuwG*nuQWNaq5gBN;fX~qvnW> zPr3S6d-%d}YfUvjcfy#HT2Ld;vCa9Znjh2h^qZQu#6b;@o38N{pX;7wov}VJ&&W#b zTh{?HdktT!R31Yak-BvMrc@slYm>N}1)|yzzO{tBt7Kt97P)$C^*qXad@1jxAg6Q$ zJ?j07X75Kmpv?!Tj2mJ7gfI$vYFG*@21w1>dLktg2;YIUiSaIOi;Ur1PP=2-MXrLS1}wquVCOdLmH92h^=QhnGdag5!@J<(s(`GUQ#-H@35+bg;A+3fs%tuOs0&N#FBb3r zX!^}3m1}e&0nAH?0Ns`mSW8++LgJD0P~Iy7h6m5-H9Zlpr3!}7*~WwLmmOH*oZqFX z`{nG!!@ZHjbMe7=ejI2Rdp-$pZZ9QWeGKwG3qEC*xM{kPXN!cq4otQu=gf;Sr}t>> zj*F1L@%Wc|4LB;9w3cJI@X-$YF^w9;o_?#0g4enq2v)Mjd^NF#Zo6zSX0|qZDbNA+ zEHkK7U;loZXYZ1|nSPa6hoHfR$_vC2;8hJxB<7=9mw za({?_Tj3J8R=WhByJ3Ejm2(&z><<2@7Jj$k0KWarXcVm)CHPgLqzcLLnP)oQS-Ia{ zZf*<7dYa}8Y4J{@_!6H)_3u`79C+xFpA{iYFK83s7oFta`oz8E@3oU3ips;z{DE=)IDov5f<`le11!<$O+u=#>A zA3t&_dAaZvle!dgiQd1quw&y8+V{u8_^N+w7{IsrWV!sjAEib4hohy(scPaX1@`pB z#@ly8LjSo_$%isS^G~s`FFB$P^>NbYKgQ}PZ9s~t-=EM`1TaAXuIezd$^D@-kg$R~ z0+S7X3LzFgFb7+n2Yz4~zu>a~)^Yv^$!YlKRC#0njNk53BU*_C`NxKJ#}tAwX|^fr z{@m^tGh@Fw%^;BvVr6!k=1@qAcA6-Oo03;Hu{8R0dNCO8RRDNBmez1gv1=>>SpL3R zP#uIEnmPSNFjQ|r&647wk^#{;-rr|8vYG0rx|k2&7_0!Fubd2ip;G`2p7<;DFD@&1 zo7J(&b<*k&WLKD{1HUxV!mH+Rxl*e$?bj+dQc>Wt3v_f^i-&{4T5B?92h__u=lp5qmG zg9w>#4B|v`$T}=`T?jeRAO_OjoMvxhjQ%P5wynVbEY#FwsgbfW$g0Qt#yX?CfVTh* z)-Q0_;g6=yEJCZcTb<<%of*99ndEDawVFP|2&xzYRD3;Qs6lB|;@itrortGoJI6hz zhxJvWV`Jk|@DPZOqs&9hJo1u|st{*hA=TXK4z%M?hqR;W0O!!aA-Zo2;Z-UsIJhPI z%KdfjG-idjrEM{~VEKx5gZC%U1t{^!StvI@umI|c9!JL`+fx$OMMZ}peZelu|5efk z`@rfQ0f5$zb?!PB4n-C$Is!d(`|525JQwUSrzITIH3D2un1TpuNoXR{lyVe8r}@o^ zD||Q{b;PVf$!V`F38Y2yx?$Fr?mm{xhT!kMT{AdJ*AQJroWmD>z$!|Z@NY1FQUNp!>)e(4ZLe0jMM1eE z);S2;uh*gdb6_j`zpOn8)Pe85XuJyIW z`up!9=P@dU$obQlPvO^bA-H1FM!R)GIj`q1BTEKK_0#2QnX-Oy5_gD>Ylu^fYKu6s zdc(JyQpO)oN`|MIR;z80$M1S`D!JCGo8q;P`9p9d$#c%ojRzfeh*6j!O%zU7M%lAP zG9is&Y@!&sjp=LWjF%@9Z8izBFjJlgOqWMGvV|x>V;cQrBS|+V4P7jZVpKO(HH4h7 z(+iMeZwk>$S>Q0qcz9#o&soyvEh`=H)+u&g%7>L^sYGIts!5z5Z~ZLHwfg*RjVsYL zbJne0AZ*RtNZNH|(#P*6wp#5QT^06Co9yN8O*ZRhcWh4(s%-0p6eA|}r(ttQYVE9c zK-L%{C5NJDV~0S_d*AsdKnMQpLX*JGkae6O=&Ng8NX_U3vh(qTb@f*HCkL-sv&>}M zI%-=zRhq410kU}6@--tF#9uE8ez#QvjkL})H*k7JP--^k$x>o2X4lx_r=N0{k`;>l zP53j8O!*WC%L#o!3)UXOHu!&nOc=w`pd74BBN$SM$U?g9ElVk z8SWLiG9u~lBIUlo*;@7Tlm3vDSZ|{=5)pCN+!nduc-`9~qgo^GH1O%#!1>G zwpgSq>T$RQ>fF{nf7#rP=!W_lUs+{iTl)f2+{D`T%jZikAGwUoU;c`n_2A&Jzp2IJ z(I)>e`FtqYqN<>s?czsZt-)Z3VpsXwTptDls0D&IcfEJf`HPpX8)*})_@{ zUs_e$-t325svQe(CR-l~FtG%v>5E8)mPz9pJIE%WEqRyMN~tS#OF0~^K)x3^U@Qj! zL5anIj>>t1>CmsL)Kjpr%KPi1iB9~5x=eI;i zU*X_UBVXvqP3EP{OYE(%nah-bvH-oGh`b9HY9@4R!AO zC$)WlXr|7h92kIP40pDx3PTFO{C^qRhkV8TDrTnf4ovFgE&yD>g7*mp!Br7)^&jZ3 z*Bo{*7yT72Qr8I)6vuk?Z|E;l*uk7$l!vcwe$=$zh@|#S6J)9Dt*W5>A2T4s77ebR zc7RgNiUMBashP6}KbIbKyUOCIs%h9Fm!G{&rn1!`GU z>nry(q0Uf?sB@RR_PgVpI#+!K!;bq|ycEgB3I%fI94KuUiTJ$gd_HI!A^tfi|5plJKpFU!-`%`uM9Z^WBRm(4~u!@qFq-PZsPfAymn{>0al<@+OQ-7X2F zZL<{t=1QFyEYWzkr$aJ{lx$6(_Peh>o1gjEKnIOmXF2dU=_FD10LB{OlA>O zIm^NCs;MBpnzbElQW|jk#%M(tH_Y@&@OVEbIId5wRM+U?DF4$pKR$&#zk3)Wv=yZI z=0qsqrcUC{*-c#!loo}?j&E5tK3`H#7nF-cf{F&3RNe?}h|bj!+yANfXBot&&dEF( z95W6_o9bi)b2jnZpwNKBA%#VFL|Z^JmKmi;sY%_4+3F~FUifRt=MSk5b+E3SYM#Mj zw&C6$A<+0LOe9U_weA8BR-oyE#O(@&sJ$7KN}E7on-aa`E(uZilUYwmL4R!tF(duw z89aC(1FIlR70l`j&f)*Roki-^M}$lwl99qqjhM0{;M@S86#=tvCXm(M=Z)wByNr-d zyE5n~jjpp6vG%6xJ#Ptx0>?dfNvNVFMD8wC@V?vogv8&(9lZ`;cW@m-M5~jhHV~Sh z5m?f&%b^2(L(+l5nKVsJ4!6Q?D+2?)6d~FMK+Px$HMI(4U^Q)$YvC~~k!)fz$;M(L zn^jCW0@DnvrrA7wg1Ajof<3kMyBC(YRGExG|pv(DMNmP}U zK-M!D>|n*SSjG6`kC0*lOMWe)xv`D}7iu*IxuLAW5)D6vsh3|~eUDPdTVr2)~}akW~iaeRw}LnSB6DMC>RqvdoBTSBBHAsi~b;-*3cjVd#$Hb^sw zE4xn}SkoiGc@-3(AMxV$c2F*F2caW?Qb6(^Gnr)Pa!DHBP5V3G!j94F#NEmAaVHS1 z#cWE;pOuWAGHCnYG|Ex((4Lmq!4ZChRtFYSA>RO{L{;nW z)LL+RM0A6|Nl-LpNjuL1ZEmNB4E(j5~pzB7$ zKeQrBn)Xq&!T-H#hGk~yt1JzXTN$$sMLuse=j~{O04i^bNan6oIq+4;^P3;5EzC9x zQv4!QoJ4#=fBD?2rDMQl3snAY4I;deLA1DB`PWqFP-U#g!QRvl6Ztf(Uu3 z<%{xP$l@#%aiiKz($9r4WrFx~s!FwW@`=BHJ)@RXX5Pd2hOs}k*;pnMaIMuu2)r`3 zjv=?oAkc}b*gS23-2mchU_@=Pncu;`whi^wKoumKfx%)J&-T)vHxP!N;ft=34mMZ2VJ+mdCJW&ZZ75acm#R-d!B ziml*d>O4SNl6K-tj9i$#N0d?pl`V}ff#~e_YlF^NQ5-E_oIXDCpxKd=v^g~C&Y%XU zMmW64EjjENiPq0y+FzbLdoqLG7=D&Sb?e@k1w0e>Y|DuqCwSXWY&((nZ#ip!y6wUC z2kI+fJr9PfF43m!1&zxb$zdV#G^viq$rZ-62DLJ?^PFYRr)i%#L9L=&Y|bYHbd#7n zTE5MMoA<8_+}yR-2d_5o)o?gGdUik2f1ixKPNcysM5#lXpNm~axvI)iEROl-GZ_}h zq*5UUKWEC#;zKOhYays^Z@l)>$zy6nbs z`}X+n1?$KFn-6tM4L$O1o^79xjbwm76*B9YkfdH9Yz#yW==jwLdgFY!H~f*XL@!~Q zNkj{4^kFKvc|kKv>o)2&-4VP9KPZzl2t>X>WS>spL8QoPBbivtnI6)J<2jb2)QWA?*&|k(q;?nK&w^9zuvw`xIGWp=`tZ*M=E0j58t(5i?-x zrz^tMWtd^c(cgP|Tf~USZm?;!N@Ewn;+F1SAN)76Fde}?VCXr;5&1(sW1E;JHZY5a zJpT52Euz-z%}Q;t-6AoaTg($K&Tv#LW*}5<7i4Om zn&H43L)V`yv{eaq%9HT++lEixt~BQPUZxcojEDNlF;{~2==ErC$2wj;% zZ`1MIuc-d}OfqL0|9MsWE-K5(t<0@wH*qnOIovh0h2jd!=478CV0@&v{cEn#llw1h zIF7}53Oeo>Ms~zsX-bALtnlj3!z|+r$z+2XwREUYrq=YM$V^@ATZCgRrEp3hwoqG@ z%@YJ!iA=M3#}reO*TkD8@E9brR!6dnKz;k*x`-(O|!UM1H)iLY^HIfehuB^GSTY@q3A|o!kQ-Q zMmxDbcIvmcFG|>4HR~M4C=sVIS?wZ(-`Uew|2YfcBOqpQF22QgOlAKJQEX~s_=ObA z?OR^&5lKU6#pPidf{lg47mEOdn#hx0<;L}meS*VaQUhyiKh8V_0>YX<{+AllxQTzy z;SMHXrc8NZCH?}Er&h=Ukim`gslCAU9=ubXamTesOyj@#`1Qy905QCZO5>ItIf_i2 z*%-eYD(Z}KeVJM=xt%s6iS*M{^PM5>RLqp%IjazuLyW7Fc}SxTphke#cnw0AP-w3d z0>g2b!8X-BUYi6x*+55?OKVQIAlJbX_CJiJeX_LuTz@)%?RIehu$slI{3^ZX{*04x z$`bbiU5Yqf1{Nf7x0`I!oFXmRs|}nflMkp99t$v;u?_;=O;)p*l_~X-9Kg)bG%#3x zF$wZi2u!R!cf{qH6=97s0hv4RNkS>8c@|~3k1Iqm15HMN9Cxa1oYm#;^2^=>i^D$N zpCYNt{APqA>&@9Gw?FTQOw8aVbDF?6H|@^9?ra7sp%kRI9K?Q5q}0)1pV>_*Nr+no z6xm^zTA1E)n)6zbTuVh7O&$`_b^OM>OkW&wBJqM!PSoZ8N6*=gu|mJT`igs-`_+3S zDe~Rd-OTR4kiUAEJzx7=H32i}c9dt@d-MQ^c|x!os|0NZ`}-K}Hc(QZff)q1LW19C zcn0#}^vk|2#mT9KRIygj3?vzH_N6Co-Yg5(Er{i$>PhXrO{7jL#@ZCrf2nY0P~80H z);AeUE$s`cY~!^c3M<9>J6rBRo9=DAmzQMI*{WBghUP)$cnQ|anKVvtekU_9Z`P0 z$x&P^!hGQJTe2k0oo0l@5{LKh!{I2fyHH9ikE5By`3|LuiN}4z{+P2;h!RO8J;T7M zOrOSD>-D(%84Z7QVR=D$CO4SGiQby!)4Z9#9)HMuH2C^5^fWDnycrAa`I^qAYB|be z8M1E*jn6IX-kqK4ewoU#(3NbwG%>dpmbk>CUSnOM@Igv+#>kd^P6m%#!lYLKgunk) zA!1}2Z`yOsy3&@Kda^O*$BtP>(oSpnNi>p(?p6=O>H&im{hIe0s7=H@Dw%=;dGd>j z`)A0Kt@ds3KH5_1(nno;_wVnHdvFW54aXbaFO9sw9DhfhE}Jx~v=$A7CN>;*771k-XIsA6SvG^i zfKy~F2s$JoPvLTVX*)3UFGF2z3VCQ1QZ<=-0@NkBtR|6xnrAlf4tvvLm54!rd@Y`Ny@6GzBz8r@M_C@_Z8cdht zdm0)rB5KB5uf;q)_to&F?UUM*5*^cHG#sdt>!+si&}7&R2+bf?Z86xHG;>``b2V5> z?CB{XLe;I!b!MqatJb1YrAB8$OuD5;QI%F}Dl%R)43D~~v%jwiZosw$BQpQqqavoE z*VEcwe-b%Pf8s$7W(^g&2l1c!h8v8&Hj>Y7tMkebXcEt5)-5=r^ZOrqT)GfJ#|rQP)LtcGr@iNjIr z3^BJgMxj8U{{?7nZxqiO`ux>L2jb*Te?X_!`0)h)Slc4;)#ff~+B?A`@w)PWwc>z> ztk7iI_23SowYjcMzvN!NzK^R4-bvXDEEXcdCAR?M8_y%H`W$O18(}X#&r(0qzVR4I z&uvPJfG4wd6H&=9&bH;YKcCBTW-�o>ORA&Rv3P`Alw=SVgK#c{q>Xl**R)agdJ1 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 diff --git a/src/Static/Fonts/Montserrat/Old/semibold.woff2 b/src/Static/Fonts/Montserrat/Old/semibold.woff2 deleted file mode 100644 index c9d70ea598415b375bc02aaa73dd47001b7a4b45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84968 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 t&%mvNL%wrYNp{5Vs8 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�vL4vrW5@_>`OgvF%)peGqJlD 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 NWkip<)T8%DTLHGB0wn+d diff --git a/src/Static/Fonts/Montserrat/Variable/variable.woff2 b/src/Static/Fonts/Montserrat/Variable/variable.woff2 deleted file mode 100644 index 2a938cbd6f5f057c1190cd166276dd60d8bd4e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122820 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

  1. -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

    sn*_pHybXi`!3SKHb!Z?y5cd4hY5Cc!1y( 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

    Gpf~fX}~}d9?8Xf`$kW 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 hgaS&N4xhU|HTzD004pm-?ab$ diff --git a/src/Static/Fonts/Source Sans Pro/Old/italic.woff2 b/src/Static/Fonts/Source Sans Pro/Old/italic.woff2 deleted file mode 100755 index f384ac680934b236490b2b26028116c62f0bf628..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101572 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 z 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 diff --git a/src/Static/Fonts/Source Sans Pro/Old/light-italic.woff2 b/src/Static/Fonts/Source Sans Pro/Old/light-italic.woff2 deleted file mode 100755 index 8b8e01fc471a870c741955f791a975b18425ea53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98860 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�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 diff --git a/src/Static/Fonts/Source Sans Pro/Old/semibold-italic.woff2 b/src/Static/Fonts/Source Sans Pro/Old/semibold-italic.woff2 deleted file mode 100755 index caa153ed491c9eb73b8915c58cfe53e09f7dafa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101984 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 =>462^yZMO=^w~?9xQ8y{#1% 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 diff --git a/src/Static/Fonts/Source Sans Pro/Old/semibold.woff2 b/src/Static/Fonts/Source Sans Pro/Old/semibold.woff2 deleted file mode 100755 index ee29125c67870aaf6ecb67fc5b436a9f76f020a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128584 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


    p?N}fLOBKo8MtVm#9%uHryAU9 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
    WdBQo>{!?;&Fn=GWKZL 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 QeM;IA$Ibkz$3E@=072H0QUCw| diff --git a/src/Static/Hosting/CORS b/src/Static/Hosting/CORS deleted file mode 100644 index 72e8ffc0d..000000000 --- a/src/Static/Hosting/CORS +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/src/Static/Hosting/_headers b/src/Static/Hosting/_headers deleted file mode 100644 index f7e3db34b..000000000 --- a/src/Static/Hosting/_headers +++ /dev/null @@ -1,2 +0,0 @@ -/manifest.json - Access-Control-Allow-Origin: * diff --git a/src/Static/Hosting/_redirects b/src/Static/Hosting/_redirects deleted file mode 100644 index 4353d4fcb..000000000 --- a/src/Static/Hosting/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 301 diff --git a/src/Static/Hosting/privacy.txt b/src/Static/Hosting/privacy.txt deleted file mode 100644 index 71e9526be..000000000 --- a/src/Static/Hosting/privacy.txt +++ /dev/null @@ -1,20 +0,0 @@ -Privacy Policy --------------- - -Your privacy is important to us. It is Diffuse's policy to respect your privacy regarding any information we may collect from you across our website, https://diffuse.sh, and other sites we own and operate. - -We only ask for personal information when we truly need it to provide a service to you. We collect it by fair and lawful means, with your knowledge and consent. We also let you know why we’re collecting it and how it will be used. - -We only retain collected information for as long as necessary to provide you with your requested service. What data we store, we’ll protect within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification. - -We don’t share any personally identifying information publicly or with third-parties, except when required to by law. - -Our website may link to external sites that are not operated by us. Please be aware that we have no control over the content and practices of these sites, and cannot accept responsibility or liability for their respective privacy policies. - -You are free to refuse our request for your personal information, with the understanding that we may be unable to provide you with some of your desired services. - -Your continued use of our website will be regarded as acceptance of our practices around privacy and personal information. If you have any questions about how we handle user data and personal information, feel free to contact us. - -This policy is effective as of 11 March 2018. - -Generated by GetTerms.io diff --git a/src/Static/Html/301.html b/src/Static/Html/301.html deleted file mode 100644 index 8f1511c90..000000000 --- a/src/Static/Html/301.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/Static/Html/Application.html b/src/Static/Html/Application.html deleted file mode 100644 index ead34426c..000000000 --- a/src/Static/Html/Application.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - Diffuse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Static/Images/ep_naturalblack_pattern.jpg b/src/Static/Images/ep_naturalblack_pattern.jpg deleted file mode 100644 index b06aa8ff4b6ce1c63e9a92f712b11a5603af9382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48330 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ΣICA0bi5(A`VToN6+3_U`t3W*FPN=c#;s;UOFv^QEIzG+2`ae z;T@!46?4>2OA{jQpG4&sZzi$z;23#VtZUS~gdcx4SLECWg?vOeKKb?<(rt)?2HsI- z+d$J|b!UHD-5SzIKCJCjGFZ`u)Kab94~U7Nr3mny2P2*alG{rJK&qRulerCI9S$8*42HB()m zgP*im^q4>?1O8oWBF`5vk+n-x$Y9%`R~yh#4lscf7GF}(&#FLXl7V)aNKdkK?qJF9 zR{F^1VMrb@CgdQ>eiCKbxU65oEJ)c#P01HFgV|bGjqBb1(#n8Jf7<-GKms_*{2J|# zpq$BU8XAuU1lQnvAu_E)!J%@M8`8i0pk(XjVew!R=gO$r*Q&rS_4xht>6<6g(Wt91 zqD9SaUS^^@kfCuE!tEko)91jZYD17ZVcdWL;6nwIZU!QI(sy5gnbU3b{&<(U9|Z;Fqr4*1)39=6N7a9g_3yHdJ&-O}Ig> z7I{nxibvkgaB+yot}i07%&s?2%W69Sd$TOK9x9KZ6PJ(l;1uZM$-&v7i+sG7YikVG zp9K$BQjYrl#u69t_xIid*><0;3U+q725~f#&ZO^$0!ozabRC2l<5yD$!bc{!NY!@J zh?gi>V9IAjSOURXp1Q)TOT#O59{hQD{!PN*l7PrTBRQ%-6X8}S<(f}`+*&<@(lSHL zH=_;37o2LUZao za8WeRrg(RSpk%q>!eur)a#_3r59oA-4c*`SI(@v7AzT|@uQROlffiB|HoWOg=urcbz?C(F%f_V$$qB=p;Tr3iC z-)}bBU#@WD$gg}cny~m{Gn#enoGs57*VTL;XJyzyXqYZM&LS&<^65QN9P>p&Uz^G! zOVIs~t3mcv^dnnvm!_~#F{K;`nSyi=G&A2Ch(nL`cmOg|1IxW1(Qlx>dSt4;vhI_v z;I+JUYAv-5%{(9gViT}hi!LH|4cuhKXt-DT5qVCd0??Pvc31uI>}h#X$VJ*nN^N3| zP~oobSh(S5rj5TDh!9#=O@y^8k{ETD5`Cpj!8$CIvpOac3}$DOmuX0MNmpf96I}}i z_uXL#X9$^foDsS5xA->#C<=3)rOO`5IHRvP-E6#1KN$IF?Ur^tdj7YGb*6v)#JJN4 z*K4crlcCkCgTHwCd8+Z(=_18(>h6N zx{Vd8flxq(Z~450NI!f2?|f1-mv=AS#r?O}qaftcc#y0^K7yBXLuHpt<(d#jIppd# z2)>Q8i#m<(e|(*&WFOzBVOeuc0v`$*Bd)#)5|%+tm|EmYu^y-?!*zi3avBG#dBBI3 zw<*VC-=urRMXu5SE=Q!H;e7J?Pps5xqso09H2YK;)ztHprBO+cly#DpTqY%vJ7EEm Z{{^=%{OgiY*Ixht002ovPDHLkV1f=imH_|& diff --git a/src/Static/Images/icon.png b/src/Static/Images/icon.png deleted file mode 100644 index c8a86c342e879eb1080fac593fc1daed5a4399ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410630 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
    w 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

    WfVoI*!?g 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

    >H)Z39$-k#8&1?FKB`v#01;SXU~}l3y?QD ztob>WeOBdiQ-ShOZo$b=W>HkJvEKkdH1!er!Zo73xFjTvv{ywCwFD3P@TW+GW>(k|aQ6%zCjt0&B`eL5i z28iU{VUvW;yqDd_gYnw(e}Qr1saHyQVnZYo6jiR*gepN_W&ECwKKH$_l*&!$Pz`== z;^ya1La~8J+#u4|F6$(y;X+A%&kp4RH1{--vm}zMtdyO9*4xSM8(NF(o7v=*|GsEX z4IHwsDq1ee`O}5f1kVWILll<5KFfSU6BkSKNgJ<4?-n(lpMwvN;_Z?ixl7VqhLzmC zd_>Fha^JA;(~<2e3vgqA#(x=iqs@8#WMXdMB~Kana>-F|EY!n18}x;6eMbqsmdJRk1|M5$@fvXGn!(nA7S z)_`{9=%kyhR0d{Inw6O|rP3pM!eD%G#qb!m7QmkxZnrT&GI zz^l0hli}DUKfI!>H8XkvY4$EAelgVo!Thz8GBmCNY0l%bbdQOYAA#={1(zd|)}-TQ zaM6)+>)3y;LTH`I_Yy@Kn^c{tJ*dWT`dld+Px|U!vAW$e=nq9)@y=OfR;yaJ`u5Pa zd|3}3<+~EmLw_mR{73!r?!CX}mGIQ^;uEWB0)MWEq6`(Ch+-NZ$63cqUr1sW+grK{ zl+R?4q6t3Z$Km1*7yR8+v$FZ$vTOX+GK=KC#%%G4&yq54m>`O)OtiDi+xr_2fWV-C zQB(yC1$HgWFf=(vm*VJZflwSPb}zehuhN8stAmKxZa5fL6-wgxWH*-SrC7fRGM4Bd%X5F25 z3Y44VjIxn3Lq-QGIgHKztj+y}O4wP1x6llbG`=FA4o^VI9f1cQC+1$xrlVh`DwL`A zH^xk&iKDQf1m_smR9o09OsKh8eQWpf2yRs8VX;8bB)LZ$`h@AOT64x8_Vn@70dB!x zwPMv-xPIN;4}rKSJ4Fv=&1@g6<_ip*=e6a2#<0-64M=ilf0vV_-_X1#Q8hmN1RWA2 z(QS>^BQ(>l3f(1HG@95riuQ!Y)t(*w5kWBYPlq3c*D)Drrw!@_vf`syX_L(%9zf?j{SLrSR-)R?Xh%6_Xv?k4ldr`w8(!_^MnF%7(B(}-tDNKgB+Itqlo5} z%5XRZ&#Xm**kIkWICwG7UkdyopyyF?qBfHcrvITGXWPaQ&yz-_a_#8v;eN5IZvXWq z(-|Au6%K4cg(Q^e=dHB&GQDUsC#5Ib1+9V#zM1G{8&>ff7T+NHQs^NOpx?Lip67|b zQkp$kbM)#|hPnGgdtgwdn7A=Xd*p-dI|AoK&f*}>HZJr7@*h1 zpT|z&C*;oF{}{|Gs;S61>a&C=#oLq+_jzQalSbdFK)yJ=?B(r(Fmw1C)U5u_+N-^H z`os*JvD6rC#J0GsMKa?_p>J4jl~kp+f%QHv7##2 zF?I4@vfcRDQYU;U;2#fpn7Y{}OC+(twe3Ui^%o59>rlsxH0*Ef*x|9$8V#GaWx3`@ zSpHGlfyJeYeMnPO`L%qz>$TYgW4Gkf6=w~m?i1?I3id6@6c^|z(>e;z5jzf10;B#t zT6S~j#7$l2)8Nm7#Vx#Eg8^zP@fSwZMKd`fwtbKm=x=)uX?tQ zm`?kAl-Z?!9-I1Pu_sL9KKeKR^e!ygOzH)GRVap0QjmI6hADbfA6_$^iqB;2TAkW{ zkj2#1>+(p4fH<)+C+9>dr6Xlh8wkIA?`oyQmUH$>pqmYs;qxo~rW#dccsghB;qrI@J=L-LOEGv#lZMAITBlglu#X zt{w#-sISEwM~dgMS#b{h{kUuqPtVD~1BtelmbrlCl4y1@2;qqkd*LpGXX^O8aOS^~ ze&P0*a_mxCwS#9eHo*tWCW@)Yn{<$tb7eFsaiTe2vbxI%o7XRd1}Oxltur^L&FFko z`ulh(>`Tedj)(qmu!zaey^8;J#Zjg zE78E>Yag?!WdC$eKE8(K=VNaitTR}BnHYtnsCTNTMKdC^PKs_G`f!unxdl$`HJ_T@Qo;CJ-_2~TtRKgEazdcV1Q+2!ePyG>s(##`- zVAq!5BiU$Xj|Hi|6{ClmMj0CLO-Y>V)=;5`$fFNe7CosCTXapZ5Enz@JW`ndY~sF3NB0!4OFVl zO>2s{cL@lU}tSW^IJ3txGpSI@1n!>#y8A_zbUdoF4R73%)`L>6xx(+C{_=JeO%@2GvB!Rn< zTn!l{`8o^K)EmBYt;qJ*QwNO_Pzz49#_;WW3b^5e6u@j_hs$|w8U4`-p3f7hLIN)7H*-p)UP*8|Kju3E(@r%Lw$UMU;cAC2% z%m*(2!fkzc=5uhBly=iC3VKy*XjkCIqGN;i)+iqc(kYFdJoe@QEmx{tS_Mk8idYo+ zW$c)0Jj2;9BcnOsR~jN*hi6h<#bP$Nvtz$A0QRrseX5-D;13(CJ^?A!M&)q|>+yPw zNLP!|vlT4g5ZTMTpKGthHE(QXe0&5^*ryw29E8^XfdR2(3| z!RkAw$I8ws{a);kM>N5|;_C-!0_`mM@uMh>4d+>^udHt zDqW%2B6iYuDp9n$H|P2s+BttFBwIS&=ezl!ZZ?q2;vP9*-EAnl4CI#ZDKgDS#!)CC zT~;<)XwJFH zrAlu6$Km82PQIptIIW-RPd6=O=>z~EDIIXvsDsv)LOv5F`>a_JbSu5OGY#XDG`G9e zGOO-c-k^~u-ffL=R2~#W8w&ioT~p&q@pfl^X_-r?h@__>+m@wHP#C8U5Lgn@v32(| zhPzAN?dqR04Wqd!n~S1*8Rgf;Qs^{xG@lsGRx9j-sPve#h*yl#}!Z)$eaV9_$ z#6O@m2a>OIv9fP*0iPqlNsb!)8)sHqxFmP4uH85_ORTNO8cZ`)Il(}N-b#wOYV-vZ zhKvze~yT zwbm|zan}7B>3JK)Hlh4aU-0FLJePTQ_*Lh0#ubc#HVuB1`L&{Eidtwztg~3;!RjPr zA2K@4hxV%ASaXwcN$&?ZXE?Zfm_gO{4RyZ97)3p(SwdoQ9*JIs=B87(kisW|&ZYnI zv|H@vmoEeNp1~2tK0tiQw6xi!P8PZ6FkEHs{&TCqY)#LzEi+ANfXlqG!MWozs=}8ZsCP~Ee~)d2+_df~p#g=X z^QRayDPc*G3teGC#mAi^a)lYMMq~)FK$Oxx6Q2pLt29wNVuR>WYz>w4>mGr{XI8Y6 zM~B|(ZLi*@?9Rf@h`x^NAzK39Z)3V+$5SpTvxprE^8XZ}Y*6Lw$#=D|^CJUz|7jvU z9%(+(-rjuO+cuB;b5W94^E6w=nLa@pebhPtF?%6M?fvIlq=V7AQ)tvN#(%~79}Z5# z(cNpZJb*Xr>}iXx=H%x+y91ErETZf-ciW8%&Z;OW*}f6}149<_!<0B3C4*=`f(>yhe@Ee=e&B6D+mmUmDNG zqL@;4rgY!4qf*g(BN8)LyaY6S%u4vVf*mANXU1?u=mt5W8v`1P=`M)bPTJx;l<(d} zg~{whRdG8xSN^HLe`XJ?q%G#8;NF}}B)xj2C-1^iNZ4?V=*Cgx^el7rSYC3_Q)sn7 zvy}R2bR(iY9`g;)tL`u{(7uS81zQ%*)61ve0@B!|%r{xbgQH*~xwO4Xqx^L%74fygK{QWmQboeSe}f*Ixg&4LXO2>QjUmrFP2gJ^76jhI zn6a)S#CNYO6jrmt?w4+LQbbRyQzOBr&z12ZLuEL-X|ypFtN9BDDz=`N@mG_^5wvEk zjP{F6uX{3x;!Yzu0~jF|mmV`b_x|yCZ&LM2?;`=EcFGYeyfxOzeMrq%Ea+(Mc`SP| z?d-%wkf*b#F71WvvY4x+L*ef-NM$JgO z5@xMiVxMy+vS*m^4eQqDo0~fk`wP0Q@9P;dO2lc z^iLw%s0v@rB7_<()IpiQGT0r74a72^Cm9sQi1TE(0aYA$gIEw>fNT`n^KyyA3ACgP z0!z=Dr5Frs#dr=pLju&K))vISU*uSZ15_|=@&hEbJM^RO5QBd^OPqajEA#h2X_aYK zPMa9OzB+}sPD;${1>8r%+oDYYmo)E#HLq-O8QJ&mpS^r3eBVMDm0CR$z>3(Kr6>!% zi?YquBg|J({?ckYrueP;f$xHD7Aky)?edqfcY zn=FWZ0q@EnM0hcqs?$uAmLe7uN>o@(i`0FQxKlkUSMjDtitONw=MSsnE2?vhE18oT zi-*2KCc>1FR%6^g`oNV@PNXSjFzUR$fm7 zZ`v)@r}CXeJhMblTh2GSh%mFn{jC^0?7^c(@rt<7=lhwl`#m^m6uf&TZjk#{u zBLch`FGSpLJR1?N{^E-=NKjdT&eAb8&6HzxNxYit)hFGUOmqajR@*K0N$e-8eQ&A< zeP=a%*%?n;OAGB+Acgsg&Q@herHGE~cWGKi_e}}ed#G*GMIN5QS->q zpN=h7`zkrf>0epS(Jv;e7PA= z7X>WZBTl*Y>)yA@i&0EC!<}j^0R#Ysr>pxOBXw%phJ<3b)HZ{s{C)u(w8GRCkF#A;7+6>sw36 z(1BS8?cRk^yp_z~&NkqWlM9PCR)u(Pbt|$ZFg4s|D~u@{UakyIcxsgUX59Q)R!XP& zvt2#=4E*2o;h8$rcCpPFb%a&c*x&*8W&*zyIhXmRdj}4YEV89*v=Zs4D-{KQ3bE_* zOv1Oft;q~i0!~man-th7bA|1^$%ZDkR}-}qe(Oavl1v@d7R2P528j&m+ZwrNIC@tN z3hBKju*S+)ls?ADRrdS^d+VzIRH>I5={^9b)119i|LV%a`ii;A%kxL3y1Ld}r%V2F zMsd!pPEK3t;PKG5gr@XZF}J8>z1YZY@-T*8m=PXR{3NFK`|4(!efxYN*r%)9b9yhy zJ-UI9uhs?Ct9ug@j;%t#;q&j*VY#+=nK4^&tWXBv+|{oh5ws~3%-EBNlVx5I+o8pi zslE&`vS^x_oQCzA5q5S1PKl$$Bu<^u&BMBjiJOpjHJJb9KC*yj_@MKhkPby}mHVrZ zujsR;cH7dx`9E!|clQJElqUU-k{!pSH644sQ$EZAl*xEw4OL5$?`u{@E+)2)8qt|0 zhGFn@(?kpX>qPBE?Ku~Oh4yx?AKJ>w5btKD_TxN%6*qbj1b}G=rKTHQZ00*c77E8h zwAvMQz>NOE10p9B9?ow70^~iSLI!DjgZ*g6wld5T;N2-tujjMxija*)=uqnJszwL- z>1cExs;2G&B6WpyjlR`HQ`S=YSySl8hXUdg(0PtbKDp4f$U14M7NHex6+Jh`!<*DI ziSR4&+Ji)ZO^Uq)<-dCk{(jw-!Qq7>UX9_XwIWlZ<<_NeJM8w*b-}ju0^vTiv_za6 z3dXNbANdzi8bF54d`(v@1*EPm%qB>Y+I4X;OQPz%p@F2;G zFhA5R-f0}SSa-iIS|-qk^AuV>l5yB~;m3$eVJBDr8sTWasI1UObs^9!}s?~iEo9=BA?wL<@F)9AE>|8=?X?eH4kWh?+Zd9ZNU z_dTSsUX{azeLG=A*@o=8CrH`b$2{9i%wDju1Hgg(~F#9y2poUtDxKYYef(UM0Q`($Q*W-Gs zxxLXw@K{Y`Y3*0CGp{Vf$lnbH2A}kJfrZNYtn?gz_cAz}Qz{7f1OX^KBZzVPz&-2jdHFRFoBgOa1$Z-C@NJID_UPI;qorfJbF}^; zX+!(*H-Di)*Imno=Hq6@8Jkq_iQplF=3fgt2XL}un?~(_eREGeOq+$(y=W*U?t&Qr z=pgYzU?E#5wg^^v1kpTv%Na^c8rn5{`^)9`XDX+I*t#k#*!$l%CXJPdBw*36XTCu* zsA6Y~Sy`yPx{*~}$A)1>4a7T_;xdziR$uOzHJ10IjvLVq-4H<%u6Gtt=hAS7VI)Ig zypo0lCGR8C%FlGdeb1J!I3$6yV97GQMG<%0jzmvDks~Fn`@8os>>>QYjAOSz`-4HL zE&A>6O`SBSl~GvItP!P=q@Q7rb~aX-zoUlx3b1-PD`TfD>QB2>CfpU!9ICTl3|e z((*P}m&YaVUsJA}Qci!I(vVMbkeS5kk(DHcxU~tF z+s>ACLsvhZ`HQts$Z+VOGlTFAZrFx9kwE`Kqm!HBbz zw(|YtOBV6K-(I7}8|RX{A>HTQ=^Kxo8tmr3w^T;)!`^_C5i>G=hG(V}hfME~)$cQ! zqkI7gN!U+=)YD^DsSxdn8bEd_-D$m$skw=~risbGRWyiidPcJcKR$Sj!wuWIQ)MZ} z#b!=k)gE*xhn6`va=2V0UW|~+u>Fuu=;z{oVR0`ba9S#j!eW4`D>*X0f^$7GUMZTM zs{-?wH5!clYAfzuH??J=fh0P_^L8(KhfsMKQ)(sAS_SaD^jhUO+mQVVM;N* z@=CeJ?sZ%9$$_87K`YO}jSxlo(5mX*&dlF*chw9m)tqAG^VyD}K*L*$}- zC>Q!qCfEl}R>YQWgW>=c1)XMQjj?uBR){Srl=3Sdg=zZGUNvmtpzT0hXVx^Ai)YwA z$4=0AujB2=#$ZDNDo)~|O*B9oPvrLavm{SD88Ub-1P|aC^LE_9SE5Zk!x|W{upQZ5 zcpSn*O`?mB$6KMdANu@4+;~EsTx!&zoorK65*a-aK9^oCx)4|NIk4MW=mmQxq%fAD z;>aW**>nlCF;~F&ZiM-EkZ^av{Eyx)Vc}i##RJVBdLL&*ihM_Hf3S4k^i~otH_QGv zFLr_2nJ%VR_R6UCXHipZ5tl9h~#CdoJO% z`9MO~beeoF^U$O0R5l5Vc+Ni*h==wwBGYH4bMyBd=A2zBATvq_P5Xly&!RypMI2s6 zvzmkQ%L=cWW4-LV;ZjhjcCn9H(w6=pU)gV6BM?^YOATML^eA!ts8mnLhw#j_eY}&e z_?ZrjM_HTE{vLqu?vX;UX-GaZ6+ zXeQRYFT1zHh>nsciX8fBxVjwong4IKg*fYIL6d0ak%&lz5~HgO~CwuN_|}wSJE77cI%g z&!7kS4(oKKFX5_VkM<#jP8{V)=^qYDvrh=HX($DFaWbZ{>>NP3=i;`ys;9h91+@TZ zRWE4ITz$>*L{~@~-V4UQWAt^IuA=hj{60b8^#Wv>jl|5`3)pXi<~u5g1pkJNDuo{5 zr=Nusen+rhdJWiU~cDhm1?c_z8bdkL+%pc8%1ju7}%kuzke$xIyLpvxIIaJKC+F6n!@`mM7dSIwb{iCWNH);)|F?K>^( zjCK!biOk1TdvqnnYe|AK6j#vX_JKd%cDXo-|1(OnmBjw+2>ag`h+yt+?Su&jgl7q> z26b8c9*an_rH~Zve0=~8hC>OXyOk4r{OQDWg&vhhHwx%(B@_*f{rax9pDM9e*Cjud zj}zO6o=H`^B!Pq=4GAr7lz-IhS`e6dgzfuOzAi)Sq0y|k`Sk0}B*~v$ud|;q!oQ&N z)S>*~Qnfv1KQl_!My>l1G7&vE`23@sR7;wfyF0Q)j4?i=pP$g}IK zOuKBP^0fxSm)2|?b_=gKp0*2b!!i(3?F~)RI7A_rJlA!7VWWAeZc^dP5?10W#BG>4 z0>C!#qp+|2jPI?dy95`CGFkcqh|;b;c%Xi{>zy_J*>Cyx-wGIiiVqT?vW#lvTgPq0 zE+EaYK7yu-23eL8vbW2Adr@~=rTr!{6~09cKE)2|o`ljA5jn|FR8tBH+|I>YE_ zbwl*%os^zTxa$=da3+;4z2=bKAyf-!#o6mFasC77_Fl!)UucV0-;iXFZ?n2LRxTz3 zD3AN3gwuV*SICk9_asOBuHSgxlMjzL4AUrLO?ajJ1aRhIgDmEreTbA_Q^p;;2WnDZ zR0OY55=xL+iplbfu?71%7mX&?Vw0Cr616U%)fp`6hl9iyB1d+q-YRnto2=(}*gefA znrnuhB|YYS5&4^GqZri!%XG%JlsOkaYj6cnOnfZUoK|RnIwK*-J!26dgo|YmG0kBc zS&bV3L%9PuLsU9rT^hJ2v3`cDxTJX_O+_N`G%prh=K)5WumM3B#CO(0@g{}A?wT-t z))$PG)Wn*Zdb3(oD6+Ror!(G}8jM%w+eYkS#zGt=KBdt@L1VSw*3ynaGuJ5kRq~r; zc^y^fNg*Mi=#U$nQSnEGo$W&!$}AZz+D9SyO9P7HV0{OKtbAUfkYawhgM&=X4oTEl zn%$}&=2liCBq1@X#5eZr7lkUaWoYfyVl=?Gsie8~!BR<)O(cJ8gxzG{qaxbEWk zcvHO+U@m?gE76Uw(gl^!Kq~qs^mSwGq0V&Mt3ToaOsshf-A>QmoIhq~{Ja(s+E#0F zzSQ*757$o(wLsuS1<#SQVObs3g9^eHAJCfjS{~JA8CqTY01hx@BiG310!rNb5XjH=EiLM^B7SrPe^GAv89EN+<8 zauDisIMg`h*4n>E(*Roh)yFNuSyz)C(RuF0R}h=T%)*-|?wYg?041e5&>b%^B|L#LE&`o<5>!i~1>Rznp@?uGkc^bYqCxRfvEIl-7ANQr*g#vfA>7 zB8~$C6<1oIe70L`YXa>6uIbS1oF2#w%mT{DQb{8?K(=6M?B^5<&splGaFU$R+Y4%F zV08{^@0Wsc7wY?C;~6VLv>z+pTsrTqHrZPXSx1T(cewX=l~OZLVMXU}Q;TuyR`@b7 znycE-y<6j``ufGcjEZJz`4`T+>m+Rz6Cyskis{3|;;Av_Gipd~&{F{>rd}AJ_Vz-f z?N#p1$R|XLg#Wa~*RYmnLQZ*yy@GEY8=dk3)Yp`Y8U#+q=g$;Z!+KDN=WgG<*4>FP zA{9JL@ukLRg)vkfZSH%^uqx;ATW8TYk_c|U zjHL33n(LJ5Pp!_mIaiGzmn4=Q?lgH24psmONbQR)uSJN7Gd85FN5D}$EXpU18)9gt z;flHX3-#8%AAgFQGefI$d3WPdk;Q%TZUSeG$`oHM-oAN4=Ijh%Ew1>Q zkIWlOm&LtnfwAswAoGc{M`xVqByzoKg@ETEx-Xb?E?z0uSSur>Z zWCTjj+(j%Ssh@8cfCH)dnwyqDqo{iM;0=~sBN*)X;}08wuV~JR4K4`p_lMKZ`N?SE z(`>7e~rFXl^Ee%rm0>s5TtSA$2kAY-sdz;?tOfDZ0$bo z`a{7g1K8HCxrEq%qkm}MN%kR{I^)wE|K;Fg*ehh&IRilff7a5NyjXa|s4Y0ct6j=Hm@eQ2mg=T<%p+|C5sslH96}#XXVJ_L;r5 zCd@X-6t>A8k7wZ(gHrdL(uki5qf5apB&_HvZFNr_<&d=w+q6wjl zmTzY&t#1TKt!4Ngx3#I${Qk*YvHka%icDFhq3X-xHNU=Ky0jand1lwalPqX{)M!8o z9o)^g=dJOY)S>u<+Kh+{+RyMK)ZM>F%*Req9Le~)tU8No4z`vrAHr;+Yx6E$*7M2s z7DO=?%NA9?ab^}m_t~bJv~Rz4W$>qDEV*I_``+y5EXh^xKdtNimxi=}#!6IsEiBJ@ ziNBNW#!7x>I`Z}^J0@3c(sf4FU1D&gcR=+kNWj28wFpBhCI`Mi2A#9nBOQNeYF(Y+ zE4D1*b-UK2J;<4NQCRYld=s6oxZ$Hmhd`oQeD4Jl-~wBEyFRWEWaeNw!;p~$YiEB& zRW%;2-ob_H^URiRgZ~6W`7{U$Y7!x)%E{_V#_055v*;a~HLNL`eV+3YKrDE+^UgBS z1RbO^9N;!JHmB+iiW?Bd`>#u{ZA$*rTEoDVJsaw6oc(uZiIG3N6S|lE*Hf6S13-O5 zw>g$bO}$WgO03Y$;V>!z6=v{65hr*6o3A!pKiDPdx?I6k=#1Yun!laWT6ceGoFjp~ zV3~puVJYT_nS1et6Tap(#*#JPOIcKLPeukfb&5|ioAx@wch`39Cy3vn1n~t64VG3? z>iB&>Ynb5sjy=}(td%lNb z+qN3pwykr5#x%YB_+l{-60ZT{$U5h?qu|I*XkXcim` zC)%;bs6Ed0i4De^|26qShWVRC8ij6(=zh?=`i&nP_THg@T!)q^S!CP?k;jabS~dhf zi%XQ<_x;(B*U+Z4^?rfo+&9i4g@=wV{AT+5h=U%tq{r@MgOZnwtv0!BDA2hiO6%8q zYg(+Df-@^TcTOAj9nCUV9}Jb9+Hs4k^D@I^H{(8eq}|YQ5mbZbnuVKONX@aKR90LQ zqt+-A{n=irBv?K$6Owt!r81c3#KF`Q*5s`!gSUeFc=-LPX2AlX6U(r0uKID&B4r&W zPJd;s&0Y2~O9vX2>kcfWJ|o*Cv_F6HaQi8O%+IPnj03=J#;(!BgK@^|>_djB+jq46B*& ziaBinz-_)3_8Ml=PuyAc#Gk2rWjlFGyUHDz2_fs1SQ!%H69>+)2G^S;@X~FvKh3wD z<_|r&TM8O7j#I`VVsBH=9PjiUf06LrPvEOUmIiwi;ss5vcf}B}5D6;h=vlYZ6@}K1 z^R#qmIGRv>)D}P+hl%qpj-mDE?X)RY{yhW13sSS=a|2(@D+>dyrSW6ye20Y2Vhagz z*drm}5hq~oo0(A#aGfW6!Nov6pn> zeXGpxe&A7vo}2As{tQh{Z4q_gdIW&f>vIYUwDv=>Zsn>UyT)%~ezyWrCA^0e$QDxW zJXbtA3Ks0&C&#kd5n||U_EKMKKE1imqgG)4@=hYs)I=*T6vPLGMbbk5vll%3g$IGt ztTrrF)Rd4mI6{|LP?B7vcIC6`td9R-FM7qa{<0#uNGX=SsB7iCzeu0-&!T2DZR{-b zW&_5(P0dhp3$tmUeIj0xW@4x}dRGnbR(Mp6_{Kcz3c$;(>s&Wc@6767alpv@qU7bS z`|>K>tdDL1z3u>2hOML7TG6?nDw(ZH`kT?LGBd1AWrog^`m4{@aCcE;e+^L}Ue$I} zpsTYpdOp2R5Mf?p%X^vVl3k&w*dMFJQGS*$%Q3WenS_}cqg*Z<;Xq4|Q7Dr#!hXYg zBTEn60rUuKDW}oZP>%e_dYkd)mTm*;|8ru(+{is0b_fRF4=DiO60!}Ow$*J3dAfzt zH8787e-lr5#+Fw=)IY?l3MnFT|LIv~bUFxoD!oy{Nk=9L=9Cuz>Y|re@eP32`#>Sp zqrG(E;q-DAxX(hV|J-Z3?Y=P-zS?L9cg^>>7|omZn=xeJ&Q!yd!nU>aX}4ns z$%`)hu=jX`z(5>4-tdqhn@NQzW3_eoJ|{C=Q~@i*w`15s0Vzy24gV1QbG!?vMUolT z%TA0=(Y$xZtUSkfNz>Xs6}KE&4mDT0l@+J zbiU?thb#^U@qRo157#s7zss|s5{v*`Jd*Tq*@IW+@-F)M(D`_^TqqkYS`Uu0#H2|n zo|8?we*stcZ#p6k2&Y?!TD*vxjZtewGYXEMU7#;?JEJHc3M zjfSnorJcb4a!9O0{BjtM#&b?v$3Mou{YrkgyQ;L$#R@UP?2xb!uJh@Ay={PCq0iyf ze~e259PN`^>EJ7bJoM zQ9BM2ISCDyBu(Hx+(W2fLuP`^a;f}3iyD93$kzkrEEB;x-aqnc>i^uIn;G_K3#H?l zd2`MhvZn!8bKqoP!4!a-)1Fl&psGfI6Yfz5Y^MJjJIqth4@#MOM4nnCv=;OacVmN& zs$z^p=nQChwIg&rJR6Tmi66;QUX9ew2?Q=4!>amkVWH+$E5;i5XA9yCAXvn80xjoN z#}9N!Y9rsumKwUAYco<5Mg-P|-RYj)IUC*2bHzS`mxgTPM+d9l=Ny`xT$n))dM*-* zl-({5GPZ6_G_*`*v`p3B?D^-TRBaT-9lq!enZxWC6GO=+z^uZxfeFX|g{E6Er z;+IkT(n4gthXqTRV9o0W*Ji!h$;>wrydszxSZZk3;7IAeSBz3Cd(i}sjTr@;hQuXq zr@RsT;Nk;2Q&4JJMhQzL!Jm@pnCX5e%*1TVB|Dl2UNE&q&IQ`H6HUkpUWp`*7dCu` z2W5K<^_2@9%j=g|rj+3FHAA0YM*I>H>@NKWnz-kDFQkL~R0OZqXll{$>h%E|xYixZ z@xrM(4Pm_Eu>!*LkkAPg2-gu5ZkZnr>*eb{t_Pm$q!Xjv-^U@46`2Qd#OrR;2>mx1 zQcYik*i`}(lmRc^x{Nrz>G2#-!UJ#mFD1I#CDqpZ(E$u87d||>*5k(+HiZ}Cg@kH! z0&-rQ36=L`e{{VJCx6}I*sz>H)OY=XBp~UrQ6++{yV2M0x=-cBGbxUEmD-YWQNz(7 z47$VqB5yvE0}EX~kg~-x?C^oJdLokhQ~=!U3RF%Gb5p;i1N2ZG*xw;y5H5Nu#7hQ?XZ#&8!6~6WZ`P)3uxcml3sn4 zj&I3`1iN5I1}3})%$~2`+8t|-Y9jd#DR{1CZj#P{rvf3i>LNyI4l0pWqRw+^1+F~e z>*}h+9X`HM7lfSA5K_|2u&C~!y&<65#W`DjdO-B!P#>;Ktb4D}IUXvO@NbW`ySj6P zW0ssx+dig^E1EdRxb|b?^`A8>9he()_K;U1{Qwq!gDO34I0y=@e;?9BPEt9`n-k-@ z{v8h4H=Bycn!Sc_R$H^&XjUZ!R5AU0+d;45`Y=)C1uVyWFSTBd?yvizSPwCb!hlk9 zWY0sxZ-L`TP(ZNssBI%-)N+T6)tZt~R8iw!aJ&H5MM;L6T^ze_t(j@`5}SK`z~3VP zFvC!8uh{RL7MS34YmHyhQb0aT|LzYe?6a8RlslvN6FbA3Y-!?AIh=l~uXk=st45kD!ua!NH3eH!2}6FJux)c3 z6BxWcIwphAQ%nqB<`mk@X4o0LsL8Y|6ld>*!}~%fMvPnUDV#mhI&O=tgL*5v(t+w| zg^L=~ZS&0>(1`zoy`>9o)KPHVm*`0+nAau&3~E*EOsAKA(pwzGbyKPO?c2 z!2tapt8eqYIy*Z=|0OP|?F>lb2{lhyg6qbd4)MoP}YKIOec)S08G5s*s%7teZ zLVQzUW{>%sBtaXJX|gP3<|kG)%k8Hf9}OLdW;*|NIg!20Kr)B2tze*@WciQoU&Fk? zq?C!cgQ>*^>~@sy-%Ki}SQNzxks3rSP37o6^YL;xhD;B@7+ zAlvEUnO7V|zM<19o|ia>&f0BgQcWA2dq)aumM6?;3nrT8ut{e}oN$+~R*zQTL$7-F z-NF~g9g}%~%GK(>X=~K-{Dyfa@RH zi6Xb~y8ujI0;|mkZB$gX|M|| zx#_|?ma`7wq>OEO4HW6bv2kE(SH}Jyn!PDM=TM2u;sQZzh`#--IL-Y<`4F#Ra zPAu61|3Ec4++ob6GoX<_j~$=!Qo1M3&!v=AJ9*TZi?x$WL+r?s&h-}R*SU&Fn_A`V zOy?lAg<6Z*;K@#}ST|Ho-B?dMh(E!Jo0s2=cowZjZTBBK&Uy+(Q_cmlPOokhO_Dty zQ(naf8j^Qh^~-O6c*xJenaf-#?|~D)p21gT{>Y_~Jep_V-*8W|&$q_8Dcd>zSq%r_ z<95|29e$hw&~Ca(T7Rl-x9)MBN||bsbqwp3Dq1_J_R|&`gsF_}cZ!)AOz~GXiEY$~ zC})1_A-()=vtVwbdAj~@buB2zL_lHFFwG!5>1?GNy@Sr#4D3{4e@jNW&aF&TI2Oli#!Yk8HLtne1#>3tqjn7U5b#YO?77=~nyHu)t{vSFz4( zx&a7fE#iyi=KWYDDe~|%OQ);rlz%PiysROt0X|J=eNzZ2*>pEC*}%lh_ugc}=uMV0 zvKC|`bKeH@#PL#WG4s0@n>F({%iwYjL|sgWJlZhNUX*#A-mKoupeE*fVSQpA=87RM z1w2YA$Qey8yP4sdj2A9C&{UT3Gm&RBIOKxM1f{7CHf?F6bL+VnnGg3y`KxKVam>GUBkB?v?PSCb*P zOrFHR&2Hm=2-S0kXsJ(gHzJ_zniX0MN?L8XS`J3voBYNG-*5Nc5uBM3z6KFf6QI-)S$b1E zuHBMfaF#yblKUcxbS3~&eo0ID6o4++h8yvG85v$D3@F_4`9+Sja81QT&~3ev zbwDB`oa{9Z5$|Vl7#%~Xh4#5UEW6ASrd68RswA@SWmu?M>LXY{FKlq4bc6v2#DfStKY*s_yOr)*2v3j?$D>- zZy#l*+U^{NH$=$bA);W-c@_Nh=|urv&^yW3&@;Da&Q`cUX;>-OHqaLz@;{csoh4l( z?&lJ-qtFvG4!rXq<%UqHDoV9U9PZ9tSq3gE;wflFT%$O&^@SO?hmx=h?zX*t!A6lh z43LPg6^b!$6Ul+Vakr#ZhI9Wbl4lGU485>GxK)cB!hS18m+#kxGh!7hRS`r6ks|0H zWsV^z;LOTA+(Pc}79{eH6FjqqIz~cOP3)X-f|Z~_b!3+zQKLvGr}+JC+}K~$8AD;f zQ~#ZI51yhbO#}g5zp3gqyOFzBY(MhP>!wBU!OM_yyopeKU+5gI?7M7ZPLCGgGb_YC zWK(PL+P{QQ5ZorTJ}ky2T z$@XJ;j*#}`W%FHo?0-q{FfYYy{#pqA9v&ewwmF<(ZiE}AQ;57T&zlzBsGvB|uo{M| z<$I(Z(bg;d366RJ!QIl}`ePv!i^%jr3ZUyz_v*Z!>QE6vQJ;6r!hx9=<^0&7k!-F8L56A3#M42 z>`UbLbJFkdZo+lHLX=;Ag%fu>800Ex3Cz9nidMz0&&$?G8M9kC9W!vr`|9z%E_a;s zOfs^N6`Og>3K&~BD{grOm*@f8>j?N+XT{&^E!H2DC~pn;d>}1&DVeu?zTzg<^*7!A z{c<)N-PQsdVRx;9DbTJT_eA$UBnZO-&E4D3@+8*T&jjXr)f$-V5d|K`InVuPad5!9 zy+1e;Osj+Sw;S%@o@G(0l}Eb=wQA_d-CQ_&_}9(sNg7p5PhIf7F)q1Gq^#Jv8CR&y z?}E3sE+x9(DtsUvGc$JOc|2Gk*L~@~uftr`K}bUYnzgA7?Yb?`%-2{BtFp>g2`lda z|0R2=qih%-calV=X{`bg9G1iH1Y0PHIJ}5}HF@XD+E6s_sR6Yh`KQ6-H#SBUSXL>} ziomnNl7)4YK99Fw^c@lAW2)7efoKzwLMe`gm1J95f3m&5wc^F|XmGznbq?UtK)`T6J8(Wd(A8b1JS``Y6QU%AGfj^+>Q*MQ z?fhea;}i!BVPCk`EwW>3taJb-aaTCmhPE03cNqbV2ju_Z`v)T_yFg;&cOd93$Pyn5 zyg%kbh^e(7`z*>*ri|bWf}O8j-SW%c)gNI|oYH9si!Z+l9Ft4%f_K4! z0DBaF$aN0TUJvZ@KBXLzuF}yL^&_)I;W&V&qqo$jNV@n~alIcI+$kh1gIe5 zyFsVD=hVgM!InJv<=wrcc0I!n;z9ZWZ^@+C{Jd+|%|R21gg+hG{K3f~(}y^XY(uN~ znbt=cZ$P#_{N1&b5|UK2!$q z1TE~S!`t3XgJmya(Q{XkZ`9B2T8bkLq-iZXJ-<2+OP(>X*}k%@^R90kYwgTm2K^-5 z)wWrO1!9tGQ=38qrJ!Es`T6YR@VB5hlf?w%8z2nQ+0GDp|cIvP<@U~ zI6G&ScSMTG7zqOB*C!UJh}T>d%kG9yHhwSh*qrT&PUOu4O}#Oq`A+6Fb&JBi)WOVU z-i16<{>zc(ySvfPrB0aON{+QSGGmo{y>%3FN_^`v%o=4;+*$}gV4VFde-5;;Yl?MaH%*aL)Nn|o-j;Pf7%o{7cob_HuDA1fN*!>xx9&zXW zs9Rm+NbzmJ`n#`kkc-(0iHir$Rzd3)0IQ%XP|0cLNN)e<{_*J2JeA8Kmu^l(ceQ0IRL>E2!V4D-<8iNJu)wd)utzH>feq~a zv$N%~LX6df*JnAOi>(WNTQwgCd%8`kZTGJP3P_?y+>4qtyQEfTu2FyoPrg^3h_qRU znsv7`PzT9iM{c5&LWTq%tI5#HuDm?%(ZQQTIP|+}y#xF^|A+vVvFA#|WwQgfi4w!j zIz%6YDZyj{wHI@2Ff;Wy`G5SFc;T5>0)`O8k1V31CT6Ai1HsoRGsIEfBIiqH7J%T2 zC5fydA)O7M{^^FMLDrpaw)9Vt-Ws}a4JpH*#gn5Fv=0er_`KI4k)U_NOt!*c6XHSJ ztFAn|KI6i@cY=&l2FLjn*&yO-)WmZ0QQVGsT+@)9iDx=Hhp#-?f&+LN;VHklQ&q`g1$=LzK#7+?e)!<{%6lq zf{#!O)#_0nOKt1aV@_5T5hLhg!rsFteEjDnx#w`j`h|B-hIcaQBgblL=qSsNWq4$M z61-3vhvjULE_C(1jVwRl;NXjJ`~6d+fSefBYAEWJBF8IG~25Z$RolUGL-t28#xOcG~-UkM>f~((ZfmFKXr+0l#*1 zZ1Db+mHigP1+3=7-r~jbVdaycjpMZZO!DmOsP#Ar2m>odaiND`SqkrA=zqRK0zmw) zTX~<7-lkIM9Kw!I3pxj6gK90f!AX20(uWOA8 z@7C`$wOk?WvzjkwK}%LighFpO5-6f(mZUQlk)Xb1hK=X(O#IC`7%6I9-pdW-45&i8 z;IHr@HdQ}E&aQy%WX5J~o7dL4I)Z=(r{W6`QMQ|8T zkVeMfXwCG}f`kK_n??bcP7jRoZ}qbzua1H)V+**~FXxQI=c!bbc zDv4qfMDELp@!#{5IT%OkG3wT@zWP+ktk3@R)0`aa)+USW+msD|+&$5`)su6c-!;6* z9`r5dPAqLvm*j1p62yESqW~OK2$FdVc4_=)K&`XS2X$( z$rGUy&9FzXDvCqAILozrUi*|SXCZ3cKdi!`hUo(`SA z%7u7RnF;WbH-Mgf&4OlYat$OShD0GGQO8r%{t4HG(#aWjR7NN z-N%$RqWq}Haws~{w|h?HE1ki#*R>ls-wq=t@05Ao(}50!$V0odJh6s32l#p2m+~NNUz<%VOIk^^p~cq`Ov%$t-?jPwzJi`(aNxjcdS46_em?fggJ_g6|=c*yUXav z4enKrQ&LM~LRU1zt1NAV`i7R~w}8tN(f#=pNXnav1-nb(*}c3WsXRGMZ5;ro6X=-0 zexar*8rm+)FB;XBNGJA^5J&?z7rADYw8Z(n#HJ%c-ml+Wb?OFVGc$|0>l3G}z|NnQ z$7VBW3~2^QDT9) zyWVTA*30~!_)~`;wL4#Plgl%^b5YBS68FB=@2rckr0*-A>TN}}z>j*;a-L=4M`&7l zMiq$L@3>`ADEFp2?&5@BDzdP7V>dF}V$cO8GV91_PK%-w@hM&ov3Pr)6E62Rp7eT3 z+e$mW5b~lUKk7dU#JDZtBGmhiyVH~^wHD; z__USrU_xGX__dwB#6J^<0>FgIK4!&74X#y|bPlR^_%1W=Tgz+w zm?>s98ch+c9`zMX8u=*IiL#TR1;xh514uPbMq&w-$1lln zX=KYxZM^EL(MOV@XyAd z#-C(JIU>t!kEsalLTXNN;m>{L&`M4f#S1S5Xfu&t>el++#vQ;!mr|+fUF`EEd4M|i zwJj+3>y{iUoCdhP!=Oq$!#48;be}~lB39TYgE4%k7oG*;oR7xTRd&|V$-fkYIUel% zBO$5m&LH0WDuDH#10XK#$yuH4DMPf-0LHLP+^G0FX8jNz;P^}oC{SW??TqzXOnh9j zF`p*N*~DV(5c8QYYWV<#jih~5Ll!lyJu@+f$v#U<1EW*Xckx>Q^?-kF2oWw2MnZDB zNz&d`j~lWFizUtSevyo@q;h7SS)Wy{3FZ&+lg3~mnxg1?tpk1gFz3;| zAk7O4t@)=l(T!VBZ-$awzqO;MQ~eN;=F6iV#ftTr9UW7&tEMv@#Ic>oN*_ZEf^Ne)c+N; z_w^Pbb&2u@Q>_1>nLbW7aOlJ={j(z{mphrfsZnBa7Wn@2g`V8{D!j5 zQr+_?4U98J#I_BNCq|v#{h~iZ#~*3k+&sbQ>ZP0a!1|(8u%XM^yhTUV|8;9!7`l8s z4g=!4xqK5P5-OEHXq+nbtVFCp<<%t+&;( zAu%is2Z3O>&h@WZEimyT3P@rDO9_=FmJ>XCHwi@!%tWe`;*F>;I;5o%dounCI@)A# z4$IqM!XUDYjGj-^{~(%-A5z{s$#|2WBcm($M2GJ!!Zji;Xk;S`>K}KbyH~d{^}*!m zls)YxxZmaE5Q%ftay_X^K6~11A2yYn&I!e>H4rOB-jQlf|y9$f@_j;4u zB+pna&s3dttj^@X2Hguldk>Cc0gcoSHkPU*Du%ndd{eO!kovwIE28f5$4{ngXIK^? zXmt_)aWoP?kH;bY7r;m_`N&*L_e`I`Nnpk#stWMyfE4Uw^ogW@=_) z{@l##3*T0>{=%v5UZ>Xdw$gf^20&@&a^kC+(cEGZY$TPyplMZ( zH&rkiO`kO!EjIeOG!-;YMjG+dGIR?+$H_Umbax{m4W4Pl1rlJ#`4{Rs+0wPDUghCS zg!Iy*TIO?EpT{enRSFqS7Ha1nuJ)RTP&qh76Hx(Qtyo_h)*MZbDt^NPll0IB}IHu$@+dm{!(yynB zs(d03i>j6jop2=)4tRWL78ZUQ85Qny8+0Wy-~&?;w!rn;N{xDA`wsCN`~{5f59A4k z{W_;-#$Pqm25RIBnf3l`$!B2uimD?dsP&M(Tld_HBfENp;BeL3n3lf;>^xD8$~|Vk zBVo6_{?yYzQN4XLX(II7zKgI)!&_1^Gb9_$z38pw3eVYf2ZRqd{pL1R00@B-n>_auCPjs+Q$=O+=7tuz?Z8AqJ zDr&R5pM7Y6-H-FH!^4CzjbFI2Pp;k&{AO>ziiE1J?)kXCR>Z(};UP~@=iJmvRO1Mw zcHi9EgdsRKYKcG$r6{qakyA2**SBjQt_871=vjyOs5^4oGsUCwuJCw=80tLk#ya;dF-Guf})R1>R3oDQ66wz+^!D(})^ zwB8wHoVHT(D=5K1zNzytGJTDF>lZ+jchsErP0ADcCk+=qktJEX{>+PRcun$4yIV?* z7OB2nF%AGELG<33bMCSFR$}kl*Uz9Rs<`RG}0oSin5d(Hd-9KGv10-7b|4a(eDa!*nMYiR1-N4vQyA zI;0COrro?PkBh%nY_f~`QQmtNFkUxW9F}wij7c<^VL|N)HPWGoH?#qu!-mFCIcsjG z-oCPx?rFQ7S1OKiWf^3ON(xS$m5mr{lEH&L@F>>TpM#z^Gv$lX(HJ>Ff{%BRwUQY; zUq&2v8xJ=obC^Ar-an!hb!-2+j!`i~L>PR)?)4+1uNsLl<-}a+KU~`3K_R)|$8hQ# z4yq-BK6fJfG5(&+GLUy`{p@cnIa9O;rTt!BI5Zy?{KFrnm;KgTx@pbZCJPgMdqVO^om2G zNkWN1$I`LEF5itpOQB}f53XCN<4Sae`@+ztI-LhcQ?M(i3Ocf=pq}sc5-HQ?+D(lY z#|m8E1_re&LZ7$FRT|}&v9=7OcZaX=fsgmpLSne~L?l>S0pQoM+J&KmIGRh<8WAO} zH2N`krY<(f%#sKb$)zO8&~n79P$R8qaiK58bCutM*)Y4yx9?=6r(&GPzQ6zF)>k(U zA(UO##<%Zmi#bW%g2`|06A`W)`%!z{?Y-)Vnd1nDpl&SYrTNw+{fD!P*YEwrK)Y}U zVJ~TPL))aYUM+aW@4_Kg%Zl%c!jLeB0qoeSxbwXL_Fph)@C;2cxUsG*K{BWf&*+Z(iB$#XUp@B7#@hP1h1DK15j;3+7J z?ffJv3T7e95dNVNqBfZcVM<_(A+WIZhyxHRkaylp|bf+}JY&_9 z$(#W0YwC8Hz*e*SWP~TQdnrR5Ln$e&|#dVGi&wA(2&Lb5o4!;fc4!!Emsj*gV^P!f)F3&gI_JlFsOV}OB3^7iY_$Q+vq;N^vzs1>+225fAMT~IluUXa<4soit z&^^qp=G&c^Ja3s!OwNlBR-Onr)5U9ogDsN%x)B%LF}?JT3m1TEljo+Kc2u?Y8NmsC zb47uV@S)>E|0RgeJ26TOLspBeQ~E~p!&odD;{*-{wN-3Tn_{u(-3L29| zl*WO1b*OlmB4{ps3{+w73NS{p8nB7A(d&a_w5ZrUK92iHLU&(ZAKv9_$`QUZ}yB$ zCz)S(hJK#m@b%wsUx75i(V7Dst%dMl*NQ{70R+dUMo!`hxKX3Ui*5zsV7Ve|0ctmN z&k^X*Uh*7LU&4xsL&GQkmEZU?a%KWd+^Dz!AO7M6R!NOhTs#cMLooe{Lp&fyOLVHZ z({27w-JHT)z3YM4W&sEaUH^W_Slv7c&NCnFgftz86_H9%w56TtN7bl2#{5s0v$y}9 zP}2Pvgn%x4jf0d*X`s(887_y-nn`pqHYty3ux`gJH5Gr0^s`oNZR%ivU(7+iS|&nO zBD(&`DcfIYf%Hp~0QZVIJy%4VB*?KgIg6@@1GmW{Oc>;*-f2&XhQhjYQ&aQ1-r(~j zf?xXAyGbz4H$#X?c+F2vu%<#c)T_xuVU}p?5bf#i{H1m9#He_9kzOm@-xE!)rbt=EvzKhKZv4z9LHN0ip$U~*-gKE=jr1y_|a|1UZL|+2Rn*?=}9zS z)*?GlPE2v#m0#|BFeQqbr+OS%h$wFXOPOOOS#`*czE72Tej8|KDW)2+Vm%Rz(Ir{E z{+y?czovWGax_U&(>g}v2d}T6YPsu=%7_J|@MYzW)es)*S~p{`4l=L%M<(vQl+rJlqXU6Yp*8J+H9UM>m0Xd=l!ebw#7IG!hTZ1Q*mexmgc0f z&@Wa8%tzuefos@_FL+*FZtKY=k_Da(h019JOC~g}2%+JbF};<9;NMp zCa!{jv38w}m>WP{xsn|}0+(Z3E?$nOLwT_=xP{TGq@?9kN`7xA6YDi#aT@-sHJ?%3 z-zxXrKfaZy+;gW@Jd{2N?x<7K*BC(6J)l(q>15~b$^adhWvZ0i$7nO53gcz2FTZ*& zjJ#_+4(7t@EQ+fXbjD0$(Xy1Un0Rj6G_2?=BA?Hp<@qIYvc6s*0Yh=bA8~kZ)((~( ziAClAHs>IoiIDSFd0HJdxrArx>ESd~`^ef8YuZg(pQ=XNTv+sgH; zS7eP1ukv3WV(?3;Yazyz#tgHG&=;%slXax4KXJdAu_ztC6Ot2m`YGm~UEDI+wXM|+ z^FRX3PrIY7lvrRbJD(1-GOXD8IH|chqX;LRER%FON+anPr7cG%R~Phe*$E$giPr zTzm#&P%_rYR&B>^G2gy~8KwOI>2*;#WZq=bR&uhrV*J}p3K~ZG&#o~?;pku9!4g`S zlPm`u^QcaJNy&Sl1nn9bhBQHtv*yo^&qKb!A6F1^lSh-_zsMR9fHNXtp>VOfsw%zT zdOJVEaImh-a#r-&)EX|&{n~e>0cjLlzA#4S?J*;sg6pE4G95rUS*HkRB(5Eua1!@Y z?Jqht?Vqx0=}H&Qi9thuWNLY@&Mgz^IOExe9*Y;;2H{n#fC=QuTFXb2*_$JT3_eDB z`Pp4~_)89KAWu}Sc)&-CA*ppANd9HJ$^>z;r?OA&d5cu7M{#mCIdjWIs-~vf2`<-X zHPfYz#ArIp!3UZwCcMQb?BBs;YFOBt79BYPIj$%7>`%rwq!^79KSn~JbI@v(J}Ec{ zWhj9)lMY0+FKF05OkX1mi$8O>4S?7Ur{m6%XZ@IUCe`y?~>KZM)sL1SuYFh>0;n8l*;FUc2k!DD5+v`ppKX;!gVl4#*E zd2x3>1?0z5O4$P?BcrM@C1lp;eh6talk`S`V{->ey|Aqd-6jjLzBJSAHp5 z^{{ecXPn2;gqKz4!B7mwf$Q{HSc~(&5oT7NzkWd{J^JYjMMA{#c$Ci9=WIKS?v50A zwdm+WF<;q(*Hg7B7hE@)U7!8^=Kgm3`89Q!5^VioY}*CaY1y7Y$(e^CeTw)8@2eG7 z@LdnF|4M0N8$!jiMg{P{b1sMD{xCDDpakk)_+pqVEEV@6U0P}(Fpt#A} zT)YQu?VKVAuFMkW-2JBDyVg|D(i1@{4Y@e7J6nms!IC`2>EZp}1-#38?4*DgNdww~ zO0@4WFR}ck?o~L{%N3X=W9A#Mbx+UBp;LlY#Aq%hR-3C1uG5tKBYck-Q^SaPBf96e zeW?Azb?;jqNgi%!{*|G>;WA16XZW1`_}|{A(-T^ArKE0N`XCdmz#L89CPK^UoT%;f zhP8^^H(CCrn!-T28ZlG03eF(Y*n$7rPR?U1|P;V1K z=U}i%ElW}5(D^X@n$@5;G z``3g+VC1Ra9M=D!5O`#~j$TD3$SzA0BjToPN4gHE*e2OPQpu#m|Kz}{o_sXZT2=5m zx9F*W%_`R)S!86Jy=xhBAy-+7MkYPG@e=41hzbtpp9z7pE7MdR8hKZ3I|K;of5X}` ziT&$eg3)IkpCehygt#YFUvAy=cF&JAGxtN;9X`uw1ag7c#CnTg1(`y7qv51*WW-l0 zr&b(QSfr-aO8B+a61lT6NZI5lW2ive0q&TdSh%)}tkcQE`8uDA*{Wz&J^MvWiVK*jV9&JM5>6n5MnprBn| z!k0FsZt1a@LL6zg?tb_!aek^|Wm&-ZEw?+iD$@qyvalm{X5enRbnKooM<*ULok357 z%}?y-PPi^OGyZec8epPl)0Ykg1Cugy>t(bc_C!4eKTdM5%PrbUO5#Yjve8L8#n6wn zW;muH^l!FJr*3`S7+ql}-hpaq-1W0<6V`3Fl?=%ULct z(3tPjEwyA0@6S6O8j@>SR?|uZ;6+(xN&HPB;_~QSQMg^Yb0ElwOCjPw^*I^SEp<;F zoWW2E@TtpeclH3}b%pZAF^fvKC$=6=c2Tx3=+N};5qLooXdtK9;XeHSF~5hdV|`32 zgiu)Btld=@Os{z9rtu=ft>v?^C=tKGD+LUg)y>X_X6pj{;fpfM9FVDwWZjHQ zX*m-IX{!jUFU@D*n~BZh#(+}iMYY+OL#^ai-kkNqaEGkva`1L5uH_;6dAX>}qhf|# zFju`r;nCB)(#uz07E4puv>G41#P~@cgT`_H>n4C6q&zr~XDo^VqX+DrS#+Uj_tpw& zb+c!0!pG}bp_g!^rFVEBZlH!b%xC7-l@)As*s^{5`!xwfB#i-sT*oQNB*|&dK;`e$ zm`~8L$8ug276czk(YZrJJWG1mR;x4?r76(a)lz4aplx)}8j7l9r9w;r(vH0|zRF{` zOmZ5r+m_SNqUzF`*gZnP%lwPFXR%bq>KOUYsp>85|3p*GEkgB52Tpa2M)(OjNyt~j zK&cHt^lM$~r+jtp`zbBS65M|xjx{951PxLr3++mTHI7F|qfw|%;OZ%T3P$HyRf(+4 zZZ1`H0QaGLars|PT~r-srq`LDYFagQ434iJ-DlF-7g#+r!iY1=Wn59j^iS|FL+^=x zE`u_ZYqK$7^MM$!Wj{lNV+9W6HUuZxj;t_YhM?>@!&gkctyf(_?#=a`hfK(#-HITD z{_?YL|D?k5SlR7|vwoEut8TPplyzprqdzg+9^-y7Gx{q>lvBpVF!OP^Msp>;*Glv% zmpX2agt56M(;Y75$T_9R<3Q}E+D4VKnbRMtk*28XbaZ-X<|oX{Z8}W`BzxUk zk5BLb*bj`aB!}Y>9Vag$E7_j!&&@j)@G8-i$Y)(zW<87=<6V7=Il8p%cH z!brIE@$^|$Uz8=qa}RcPebT1pKVHv6Z6Z@6&b#j&HK~TnJ^9*?+d|L z-;wcToK%Ds$h8wc-8(l#tHR)}2R;%rwr4P^Ovy&CjBfjW$Sdq!3yj2i*2}b~byFGO z#V7pyZkUXh8W{XVZn&8oc~f01hs;RW_S5l{$Z)Hd`O8xKt8y}hWI7L6QQqU!Xg#zM zvu-*gU;XW#C{_fxH*-LL^S@ljfM4f|ra-{c&v8Ef^G{CDrnuu_B32V${Ca;5c{C_dccQKYe zC*!9}U>Y(Pd{hY9&zb6*;Wcf)wXEFMy&Ql@eEdwTBIO}I1<}fWzLe5%W81ZKR)+5J z>c+BsH(VbMaB=!&Zz1UF>y`C=)c+3TuC|?_5QJ2VnN_#WUk5jGwEK(+n0Ra9BL$=Q ze&vqg|KsVa0^(|#D8CSby9Rf+;1=B7-GUD8uECw)?kVzb(T_{B z{F2@K@N(;CWVZir6-{u}x5TPa5)yG1CA6S$g;kL%UBp7N(drM;q!A|7EynO@i|8IW zXE#@YII|S$DmJrusKFS{vQd~~%XQw51N%TigO3NNCn8F@_-CKydA~i^`e=qx0n`T^ z()HaIn;c{VXV^s63+|L4@IAKdWbnIf;~)KBt{059j!p;LGY#iA%GB7i?P^q@f}TR9 z?EU~=YqqMc*)_S48G5yxlyuQ?uLu--Ek{C~`|VQ+56HvbOVQOVzQ+u}Co~A7D(6B< z!4M%9T6YcR6)UMFn>hn6Q`JwAZ8hy|=tD?Zr=?%^Tuy|C=-31fr^}NVVs^uyL{cBo zC`oJ0?lzr%tS){VOFG%75Hs8Mx4nC~1EV1FEJ4+w`bbv z8Sf4FTNNXy$%VhSsAxnM9ess1#~EcrL7_0{E}LG|XFcQBkY?IYv``DodutBpsK?ah zBcO|mrwGCAx<9z3oSV|*cH5mbs0F?4hYMK@LM(uxD>5aDB5I>w4{v2=&#-vHSf+|t z>B(W#8|J8AG#f=4u?uWTnbIj~#_2L0m>BFIIlD4bu;YP+e)OfbLvus8sr!W}Zi)BO z$<6?~3ygXJl~3_)3@x@t+rUV*XDeEW4G5`IG*=D0EL7u>1&_N1yJ>5XS-=0qtBjxK z&T9!KJ1QKaW=vN~VoNE1rUz40iCOHdmc#2?p`~T55=*sePW+ishbPZWjDK6+D z%+#b&(bix-lk$BKlC$i3W4Zw4dOuld`oR4qi1OP|pE=#km%XPAS$-%4LW^Jlx|(nU zX(*bB)$3;&Xv{8YK#w(4-;gg#vDAo4?FcBEYCgg{y+)1@M~&Yl_RDwcB#KwzR%mnp z6|EJRE0dIxqCzxRykgdbApWnFZovB})Ea>U$S=ZhC*`5MkL8%<=P3_JeS z4o`gyTU*ngyNcfv-|T`957F+@0F1CKL#7+>p~bXJs1u?>5c|%Te$J@8`3!c-yjOOk=$oZnObZG{k_xg<8F8}q>Ul_qPD5Q z2YD$`!!UK3!owu+OfDfyuEK1HHbH4Y=;F8|)%MFmOIKSy!>~Y_T+c*o$YK*&>bTYv z7}&IU!foA;u6s5lu4l;Prvl-C&mmVUpw-aY59Eww=y zwyD`%mgPGxKMx#+j^O5do57iaYZAd)FEfJ zqSH#{ps;lc1z96XEG9YOsQnnY&*IC2eqd&=L-j=^jQhD~)9rrk8wCSDv`BI3&&tG< z$iTP<;EKev9-TvL&Fo4~5=75HE+Zgh*Nl zNu`0jRAzsHcjUQSaH?&F(n)ESrdvtMx%`)xDJN~?B*lGEIcWH512k0j!$6(aU8<_; zf#sO+wz=x$LImfW*#%H~D5+_8ra8d^t6DZs#YwiYjfVk?5|aRym3D050xB1az?_nK z7;Me}HWG1WCu8G7JqyZB=MJio1sc4e^a!O|YbRle)u34IrFPe=6r!f%f>v!@FG~t8 zepaI^YkN6YXC%#KgERX&9g<2roP(#-O#UEGD0rcbgyJ-$&|^i3{PfHOG+iBp)5-aC zq=ZqJXK73V8?2CL{iSf1TPASamUq%^Xn6OK?BCs?YJ8&93^qOuO>&gv(Q8~wJ`9xY z-qMa+yob0`-i&I!`Mt|;CkyOl6TUq8=arL3y22N0hSxau>yh>5p;d*=moRW_W=2|Q zTikxSKsbQ{sR~bGUH74o(dk~9AJ(EdtU}9e{56UjU=h%3<%cg(N|O0pzxhdEylAsn z(lY1u@m0|0U=YVS5qrDESh zh~dlx6^_~UF*j~4tnT`_wuWIEaj{LMu|UpR!uSI%f8C_vE?-tMpyM2dh{&|`jP|T@ z9gJ#d@p_r(H|PCws8kmOp^Z)ufuvqfzD#P%62mT;Td)GqDSjl2f83Rn&+cd-0ts>T z5S%Ft<3)7EtlC!mb6LT*X5$l_;JDAQ8wUs?ScU-@t&a-a4(-ppG*I*=5bj{W560^| z9~yAY@zwQoGwQ2ZJ;}!ulS+^*vzM=~SZlzU&8loF6>=GfRXhI#sR{VS0lO5eU)7Y8 zEjyV5JK~GhCcbq#)TQhn(nO$c5b-T(5LaK`J(!bI6r5d%0DxqRQSs`uP0fvP6<;V& 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

    ?S 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

    -S<#Bq$ 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 V4GSvgsUAGm?TV*!y<^b5{{aglQRDys diff --git a/src/Static/Images/ocean.jpg b/src/Static/Images/ocean.jpg deleted file mode 100644 index 747a64b640a8ac34489b7eac8665873fcfce8d43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132807 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�?xqbOh8%v`|aj6N{0B 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 diff --git a/src/Static/Manifests/manifest.json b/src/Static/Manifests/manifest.json deleted file mode 100644 index 9246ea266..000000000 --- a/src/Static/Manifests/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "Diffuse", - "short_name": "Diffuse", - "description": "A music player that connects to your cloud/distributed storage", - "version": "3.5.0", - "author": "Steven Vandevelde ", - "icons": [ - { - "src": "images/icon.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "images/icon.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "start_url": ".", - "theme_color": "#8a90a9", - "background_color": "#02070e", - "display": "standalone", - "screenshots": [ - { - "src": "https://icidasset-public.s3.amazonaws.com/diffuse-v3.jpg", - "type": "image/jpg", - "sizes": "2840x1602" - }, - { - "src": "https://icidasset-public.s3.amazonaws.com/diffuse-v3-art.jpg", - "type": "image/jpg", - "sizes": "2840x1602" - } - ] -} diff --git a/src/components/Applet.astro b/src/components/Applet.astro new file mode 100644 index 000000000..5a6bdac8f --- /dev/null +++ b/src/components/Applet.astro @@ -0,0 +1,15 @@ +--- +import List from "../components/List.astro"; + +const { list, title } = Astro.props; +--- + +

    diff --git a/src/components/List.astro b/src/components/List.astro new file mode 100644 index 000000000..478b20419 --- /dev/null +++ b/src/components/List.astro @@ -0,0 +1,17 @@ +--- +const { items } = Astro.props; +--- + + diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 000000000..6cf35bee1 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,8 @@ +import { defineCollection } from "astro:content"; +import { glob } from "astro/loaders"; + +const manifests = defineCollection({ + loader: glob({ pattern: "**/_manifest.json", base: "./src/pages" }), +}); + +export const collections = { manifests }; diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 000000000..5b0a7e0c5 --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// \ No newline at end of file diff --git a/src/layouts/applet-pico-ui.astro b/src/layouts/applet-pico-ui.astro new file mode 100644 index 000000000..a1ddec0b7 --- /dev/null +++ b/src/layouts/applet-pico-ui.astro @@ -0,0 +1,24 @@ +--- +import "@styles/reset.css"; +import "@styles/variables.css"; +import "@styles/fonts.css"; +import "@styles/icons/iconoir.css"; +import "@styles/pico.scss"; +import "@styles/applet/common.css"; + +const { title } = Astro.props; +--- + + + + + + + + + {title} + + + + + diff --git a/src/layouts/applet.astro b/src/layouts/applet.astro new file mode 100644 index 000000000..e7016c1e3 --- /dev/null +++ b/src/layouts/applet.astro @@ -0,0 +1,17 @@ +--- +const { title } = Astro.props; +--- + + + + + + + + + {title} + + + + + diff --git a/src/layouts/page.astro b/src/layouts/page.astro new file mode 100644 index 000000000..2d33e4249 --- /dev/null +++ b/src/layouts/page.astro @@ -0,0 +1,21 @@ +--- +const { title } = Astro.props; +--- + + + + + + + {title} + + + + + + + diff --git a/src/pages/[...manifest].json.ts b/src/pages/[...manifest].json.ts new file mode 100644 index 000000000..934aedf95 --- /dev/null +++ b/src/pages/[...manifest].json.ts @@ -0,0 +1,19 @@ +import type { APIRoute } from "astro"; +import { getCollection } from "astro:content"; + +// API Route +export const GET: APIRoute = ({ params, props, request }) => { + return new Response(JSON.stringify(props.manifest)); +}; + +// Generate static paths +export async function getStaticPaths() { + const manifests = await getCollection("manifests"); + + return manifests.map((manifest) => { + return { + params: { manifest: manifest.id.replace("/_manifest", "/manifest") }, + props: { manifest: manifest.data }, + }; + }); +} diff --git a/src/pages/configurator/input/_applet.astro b/src/pages/configurator/input/_applet.astro new file mode 100644 index 000000000..b73e235ba --- /dev/null +++ b/src/pages/configurator/input/_applet.astro @@ -0,0 +1,92 @@ +
    +

    Input configuration

    +

    + Here you can add your audio from various places. +
    Add audio from: +

    + +
    + + + + diff --git a/src/pages/configurator/input/_manifest.json b/src/pages/configurator/input/_manifest.json new file mode 100644 index 000000000..1353834a1 --- /dev/null +++ b/src/pages/configurator/input/_manifest.json @@ -0,0 +1,49 @@ +{ + "name": "diffuse/configurator/input", + "title": "Diffuse Configurator | Input", + "entrypoint": "index.html", + "actions": { + "consult": { + "title": "Consult", + "params_schema": { + "type": "string", + "description": "The uri to check the availability of." + } + }, + "contextualize": { + "title": "Contextualize", + "description": "Provide context to all inputs.", + "params_schema": { + "type": "array", + "description": "Array of tracks", + "items": { "type": "object" } + } + }, + "list": { + "title": "List", + "description": "List tracks from all inputs.", + "params_schema": { + "type": "array", + "description": "A list of (cached) tracks", + "items": { + "type": "object" + } + } + }, + "resolve": { + "title": "Resolve", + "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.", + "params_schema": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method that is going to be used on the resolved URI." + }, + "uri": { "type": "string", "description": "The URI to resolve." } + }, + "required": ["method", "uri"] + } + } + } +} diff --git a/src/pages/configurator/input/index.astro b/src/pages/configurator/input/index.astro new file mode 100644 index 000000000..f6d027092 --- /dev/null +++ b/src/pages/configurator/input/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet-pico-ui.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/configurator/output/_applet.astro b/src/pages/configurator/output/_applet.astro new file mode 100644 index 000000000..5e1117e1f --- /dev/null +++ b/src/pages/configurator/output/_applet.astro @@ -0,0 +1,86 @@ +
    +

    Storage configuration

    +

    + Here you can select where you want to keep your user data. +
    + By default this will be your browser. +
    + Click or tap on one to activate it. +

    +
    +

    + + + Just a moment, loading storage options. + +

    +
    + +

    + + + + + Data is currently not synced across different storages! + + + +

    + +

    Export & Import

    +

    + Download a snapshot of your + data. +

    +
    + + + + diff --git a/src/pages/configurator/output/_manifest.json b/src/pages/configurator/output/_manifest.json new file mode 100644 index 000000000..7c59c47e4 --- /dev/null +++ b/src/pages/configurator/output/_manifest.json @@ -0,0 +1,18 @@ +{ + "name": "diffuse/configurator/output", + "title": "Diffuse Configurator | Output", + "entrypoint": "index.html", + "actions": { + "tracks": { + "title": "Tracks", + "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", + "params_schema": { + "type": "array", + "description": "List of tracks", + "items": { + "type": "object" + } + } + } + } +} diff --git a/src/pages/configurator/output/index.astro b/src/pages/configurator/output/index.astro new file mode 100644 index 000000000..f6d027092 --- /dev/null +++ b/src/pages/configurator/output/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet-pico-ui.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/constituent/blur/artwork-controller/_applet.astro b/src/pages/constituent/blur/artwork-controller/_applet.astro new file mode 100644 index 000000000..2995250b1 --- /dev/null +++ b/src/pages/constituent/blur/artwork-controller/_applet.astro @@ -0,0 +1,795 @@ +--- +import "@styles/reset.css"; +import "@styles/variables.css"; +import "@styles/fonts.css"; +import "@styles/animations.css"; +import "@styles/icons/phosphor.css"; + +import "@styles/diffuse/colors.css"; +import "@styles/diffuse/fonts.css"; +--- + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +
    + + + + + + diff --git a/src/pages/constituent/blur/artwork-controller/_manifest.json b/src/pages/constituent/blur/artwork-controller/_manifest.json new file mode 100644 index 000000000..adb681f3b --- /dev/null +++ b/src/pages/constituent/blur/artwork-controller/_manifest.json @@ -0,0 +1,21 @@ +{ + "name": "diffuse/constituent/blur/artwork-controller", + "title": "Diffuse Blur Theme | Artwork Controller", + "entrypoint": "index.html", + "actions": { + "modifyIsPlaying": { + "title": "Set is-playing state", + "description": "Indicate if audio is playing or not.", + "params_schema": { + "type": "boolean" + } + }, + "modifyProgress": { + "title": "Set progress", + "description": "Indicate how far the audio has progressed.", + "params_schema": { + "type": "number" + } + } + } +} diff --git a/src/pages/constituent/blur/artwork-controller/index.astro b/src/pages/constituent/blur/artwork-controller/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/constituent/blur/artwork-controller/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/core/types.d.ts b/src/pages/core/types.d.ts new file mode 100644 index 000000000..5fc2d6438 --- /dev/null +++ b/src/pages/core/types.d.ts @@ -0,0 +1,72 @@ +/* INPUT */ + +/** + * Consultation. + * + * `consult` can be "undetermined" if only a scheme was given + * instead of a full URI. + */ +export type Consult = + | { supported: false; reason: string } + | { supported: true; consult: "undetermined" | boolean }; + +export type ConsultGrouping = + | { available: false; reason: string; tracks: Track[] } + | { available: true; tracks: Track[] }; + +export type GroupConsult = Record; + +export interface InputWorkerTasks { + consult(fileUriOrScheme: string): Promise; + contextualize(tracks: Track[]): Promise; + groupConsult(tracks: Track[]): Promise; + list(cachedTracks: Track[]): Promise; + resolve({ method, uri }: { method: string; uri: string }): Promise; +} + +/* OUTPUT */ + +export interface Output { + tracks: Track[]; +} + +export interface ManagedOutput { + tracks: { + cacheId: string; + state: "loading" | "loaded"; + collection: Track[]; + }; +} + +/* TRACKS */ + +export type ResolvedUri = undefined | { url: string; expiresAt: number }; // TODO: Streams? + +export interface Track { + id: string; + + kind?: "music" | "audiobook" | "podcast" | "miscellaneous"; + stats?: Stats; + tags?: Tags; + + // NOTE: This is a "semi-permanent" URI. + // + // Tracks are cached so you can't, for example, + // use an URL that expires in several hours. + uri: string; +} + +export interface TrackStats { + bitrate?: number; + duration?: number; +} + +export interface TrackTags { + album?: string; + artist?: string; + disc: { no: number; of?: number }; + genre?: string; + title: string; + track: { no: number; of?: number }; + year?: number; +} diff --git a/src/pages/demo/s3-tracks/index.astro b/src/pages/demo/s3-tracks/index.astro new file mode 100644 index 000000000..af7f863d4 --- /dev/null +++ b/src/pages/demo/s3-tracks/index.astro @@ -0,0 +1,59 @@ +--- +import Page from "../../../layouts/page.astro"; +import "@styles/pico.scss"; +--- + + +
    +

    Add sample S3 bucket to inputs

    + +

    + Clicking the button below will add some sample music, which you can then play using the + various themes, abstractions and constituents. + +
    +
    + + +

    +
    + + + + +
    diff --git a/src/pages/engine/audio/_applet.astro b/src/pages/engine/audio/_applet.astro new file mode 100644 index 000000000..5884a7d15 --- /dev/null +++ b/src/pages/engine/audio/_applet.astro @@ -0,0 +1,360 @@ + diff --git a/src/pages/engine/audio/_manifest.json b/src/pages/engine/audio/_manifest.json new file mode 100644 index 000000000..200987dd0 --- /dev/null +++ b/src/pages/engine/audio/_manifest.json @@ -0,0 +1,131 @@ +{ + "name": "diffuse/engine/audio", + "title": "Diffuse Audio", + "entrypoint": "index.html", + "actions": { + "pause": { + "title": "Pause", + "description": "Pause audio", + "params_schema": { + "type": "object", + "properties": { + "audioId": { + "type": "string" + } + }, + "required": ["audioId"] + } + }, + "play": { + "title": "Play", + "description": "Play audio", + "params_schema": { + "type": "object", + "properties": { + "audioId": { + "type": "string" + }, + "volume": { + "type": "number", + "default": 0.5 + } + }, + "required": ["audioId"] + } + }, + "render": { + "title": "Render", + "description": "Determine the active set of audio elements.", + "params_schema": { + "type": "object", + "properties": { + "audio": { + "type": "array", + "description": "The audio items we want to render. These represent the audio elements that are in the DOM.", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "isPreload": { "type": "boolean" }, + "mimeType": { "type": "string" }, + "progress": { "type": "number" }, + "url": { "type": "string" } + }, + "required": ["id", "url"] + } + }, + "play": { + "type": "object", + "description": "Pass in this object to immediately start playing one of the rendered audio items.", + "properties": { + "audioId": { + "type": "string", + "description": "The id of the rendered audio item we want to play." + }, + "volume": { + "type": "number", + "default": 0.5, + "description": "A number equal to, or between, 0 and 1, that determines how loud the audio should play." + } + }, + "required": ["audioId"] + } + }, + "required": ["audio"] + } + }, + "reload": { + "title": "Reload", + "description": "Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.", + "params_schema": { + "type": "object", + "properties": { + "audioId": { + "type": "string" + }, + "play": { + "type": "boolean" + }, + "progress": { + "type": "number" + } + }, + "required": ["audioId", "percentage"] + } + }, + "seek": { + "title": "Seek", + "description": "Seek audio to a given position", + "params_schema": { + "type": "object", + "properties": { + "audioId": { + "type": "string" + }, + "percentage": { + "type": "number", + "description": "A number between 0 and 1 that determines the new current position in the audio" + } + }, + "required": ["audioId", "percentage"] + } + }, + "volume": { + "title": "Volume", + "description": "Set the volume of all audio and the default value, or a specific audio node.", + "params_schema": { + "type": "object", + "properties": { + "audioId": { + "type": "string" + }, + "volume": { + "type": "number", + "description": "A number between 0 and 1 that determines the new volume of all audio elements" + } + }, + "required": ["volume"] + } + } + } +} diff --git a/src/pages/engine/audio/index.astro b/src/pages/engine/audio/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/engine/audio/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/engine/audio/types.d.ts b/src/pages/engine/audio/types.d.ts new file mode 100644 index 000000000..afbbd4207 --- /dev/null +++ b/src/pages/engine/audio/types.d.ts @@ -0,0 +1,31 @@ +export interface State { + isPlaying: boolean; + items: Record; + volume: { default: number }; +} + +export interface Audio { + id: string; + isPreload: boolean; + mimeType?: string; + progress?: number; + url: string; +} + +export interface AudioState { + duration: number; + id: string; + hasEnded: boolean; + loadingState: + | "initialisation" + | "loading" + | "loaded" + | { + error: { code: number }; + }; + isPlaying: boolean; + isPreload: boolean; + mimeType?: string; + progress: number; + url: string; +} diff --git a/src/pages/engine/queue/_applet.astro b/src/pages/engine/queue/_applet.astro new file mode 100644 index 000000000..cac59300a --- /dev/null +++ b/src/pages/engine/queue/_applet.astro @@ -0,0 +1,59 @@ + diff --git a/src/pages/engine/queue/_manifest.json b/src/pages/engine/queue/_manifest.json new file mode 100644 index 000000000..8c64b832f --- /dev/null +++ b/src/pages/engine/queue/_manifest.json @@ -0,0 +1,47 @@ +{ + "name": "diffuse/engine/queue", + "title": "Diffuse Queue", + "entrypoint": "index.html", + "actions": { + "add": { + "title": "Add", + "description": "Add tracks to the queue.", + "params_schema": { + "type": "array", + "description": "Array of tracks", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "uri": { "type": "string" } + }, + "required": ["id", "uri"] + } + } + }, + "pool": { + "title": "Pool", + "description": "Set the queue pool.", + "params_schema": { + "type": "array", + "description": "Array of tracks", + "items": { + "type": "object", + "properties": { + "id": { "type": "string" }, + "uri": { "type": "string" } + }, + "required": ["id", "uri"] + } + } + }, + "shift": { + "title": "Shift", + "description": "Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list." + }, + "unshift": { + "title": "Unshift", + "description": "Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list." + } + } +} diff --git a/src/pages/engine/queue/index.astro b/src/pages/engine/queue/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/engine/queue/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/engine/queue/types.d.ts b/src/pages/engine/queue/types.d.ts new file mode 100644 index 000000000..fddaddd5a --- /dev/null +++ b/src/pages/engine/queue/types.d.ts @@ -0,0 +1 @@ +export * from "@scripts/engine/queue/types.d.ts"; diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 000000000..f8c0cd421 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,244 @@ +--- +import Applet from "../components/Applet.astro"; +import List from "../components/List.astro"; +import Page from "../layouts/page.astro"; + +import "../styles/page/index.css"; + +// Types +type Ref = { + url: string; + title: string; +}; + +// Links +const WEB_APPLETS_HREF = "https://unternet.co/docs/web-applets/introduction"; + +// Themes +const themes = [ + { url: "theme/blur/", title: "(WIP) Blur" }, + { url: "theme/pilot/", title: "(WIP) Pilot" }, + { url: "theme/webamp/", title: "Webamp" }, +]; + +// Abstractions +// TODO + +// Constituents +const constituents = [ + { url: "constituent/blur/artwork-controller/", title: "(WIP) Blur ⦚ Artwork Controller" }, +]; + +// Applets +const configurators = [ + { url: "configurator/input/", title: "Input" }, + { url: "configurator/output/", title: "Output" }, +]; + +const engines = [ + { url: "engine/audio/", title: "Audio" }, + { url: "engine/queue/", title: "Queue" }, +]; + +const input = [ + { url: "input/native-fs/", title: "Native File System" }, + { url: "input/opensubsonic/", title: "Opensubsonic" }, + { url: "input/s3/", title: "S3-Compatible API" }, +]; + +const orchestrators = [ + { url: "orchestrator/queue-audio/", title: "Queue ⭤ Audio" }, + { url: "orchestrator/queue-tracks/", title: "Queue ⭤ Tracks" }, + { url: "orchestrator/process-tracks/", title: "Process inputs into tracks" }, +]; + +const output = [ + { url: "output/indexed-db/", title: "IndexedDB" }, + { url: "output/native-fs/", title: "Native File System" }, + { url: "output/storacha-automerge/", title: "(WIP) Storacha Storage + Automerge CRDT" }, + { url: "output/todo/", title: "(TODO) Keyhive/Beelay" }, + { url: "output/todo/", title: "(TODO) Dialog DB" }, +]; + +const processors = [ + { url: "processor/artwork/", title: "Artwork retrieval" }, + { url: "processor/metadata/", title: "Metadata retrieval" }, + { url: "processor/search/", title: "Search" }, +]; + +// Demos +const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; +--- + + +
    +

    + + Diffuse + + +

    +

    + Diffuse is a collection of web applets that make it possible to + listen to audio from various sources on your devices and the web, and to create the ideal digital + listening experience for you. +

    +

    + These applets can be used in various ways. The main ways so far are: (a) through themes, a traditional browser (web application) approach, and (b) abstractions for non-browser systems. +

    +

    + TODO: Figure out how to present this to users who just want to use the damn thing. +

    +
    +
    +
    + +
    +

    Themes

    + +

    + Themes are “applet compositions” and provide a traditional browser web application way of + using them. Each theme is unique, not just a skin (eg. not like winamp skins). +

    + +

    + For example, most themes here will limit the currently playing audio tracks to one item, + but you might as well create a DJ theme that can play multiple items at the same time. +

    + + +
    + + +
    +

    Abstractions

    + +

    + These are applet configurations that enable certain use cases outside the traditional web + app experience. Just like themes, these include various assumptions of how certain parts + of the system should interact. +

    + +

    TODO: Enable intelligent user (ai) agent use-case.

    + + +
    +
    + + +
    +

    Constituents

    + +

    + Constituents are UI applets that are used in themes and abstractions. These are organised + per theme or abstraction, but that doesn't mean they are restricted to that theme or + abstraction, you can mix and match as you like. You can even use them on their own. +

    + +

    + Some themes may be constructed out of various applets that are not listed here. The reason + for that is those applets cannot be used solely on their own, they require an external + context to coordinate them. +

    + +

    + There's tradeoffs to both approaches. A particular tradeoff to keep in mind for constituents + is that they'll have nested dependencies. So when overriding applets dependencies, the + overrides need to be passed down the tree. +

    + + +
    + + +
    +

    Applets

    + +

    + Applets are web applets, the components of the system. These + are then recombined into an entire music player experience, or whatever you want to build. +

    + +
    + + Applets that serve as an intermediate in order to make a particular kind of applet + configurable. In other words, these allow for an applet to be swapped out with another + that takes the same, or a subset of the actions and data output. + + + + Applets with each a singular purpose and don't have any UI. There are specialised UI and + orchestrators applets that control these. + + + + Inputs are sources of audio tracks. Each track is an entry in the list of possible items + to play. These can be files or streams, static or dynamic. + + + + These too are applet compositions. However, unlike themes, these are purely logical. + Mostly exist in order to construct sensible defaults to use across themes and + abstractions. + + + + Output is application-derived data such as playlists. These applets can receive such data + and keep it around. + + + + These applets work with the tracks generated by the input applets to add more data to + them, or process them in some other way. + + + Additional applets, such as scrobblers. +
    +
    + + +
    +

    Demos

    + +

    Just some utility web pages to help demo the system.

    + + +
    + + +
    +

    Build your own

    + +

    + Ideally you'd be able to mix and match these applets to build your own music player. There + are still a few todos and unknowns here: +

    + +
      +
    • + Haven't tested this idea cross-origin. No idea if the applets work when included on a + different origin (though it should). +
    • +
    • + Currently using a fork of the web applets SDK that adds a few features (waiting on PRs). + Meaning that it won't be as easy to write your own applets in the same way as done here. +
    • +
    • + I wrote some custom code on top of the web applets SDK that makes the applets talk to each + other over a broadcast channel. This should ideally become a JS library or added to the + web applets SDK. Though you can just copy-paste from the Diffuse repo if you want (it's + not that much code). +
    • +
    • ... Probably a bunch of stuff I'm forgetting, teaching materials, ...
    • +
    +
    +
    +
    diff --git a/src/pages/input/native-fs/_applet.astro b/src/pages/input/native-fs/_applet.astro new file mode 100644 index 000000000..07bacf333 --- /dev/null +++ b/src/pages/input/native-fs/_applet.astro @@ -0,0 +1,82 @@ +
    +

    Native file system input

    +

    + Add music from your device. +
    Music added so far: +

    +
    +

    + + + Just a moment, loading mounted directories. + +

    +
    + +
    + + diff --git a/src/pages/input/native-fs/_manifest.json b/src/pages/input/native-fs/_manifest.json new file mode 100644 index 000000000..a5a6ff655 --- /dev/null +++ b/src/pages/input/native-fs/_manifest.json @@ -0,0 +1,56 @@ +{ + "name": "diffuse/input/native-fs", + "title": "Diffuse Input | Native File System", + "entrypoint": "index.html", + "input_properties": { + "scheme": "file+local" + }, + "actions": { + "consult": { + "title": "Consult", + "description": "Check if a handle is available to be used by passing in a file uri that uses that handle as the host.", + "params_schema": { + "type": "string", + "description": "The uri with the handle to check the availability of." + } + }, + "list": { + "title": "List", + "description": "List tracks.", + "params_schema": { + "type": "array", + "description": "A list of (cached) tracks with an uri matching the scheme", + "items": { + "type": "object" + } + } + }, + "resolve": { + "title": "Resolve", + "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.", + "params_schema": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method that is going to be used on the resolved URI." + }, + "uri": { "type": "string", "description": "The URI to resolve." } + }, + "required": ["method", "uri"] + } + }, + "mount": { + "title": "Mount", + "description": "Prepare for usage." + }, + "unmount": { + "title": "Unmount", + "description": "Callback after usage.", + "params_schema": { + "type": "string", + "description": "The handle id to unmount" + } + } + } +} diff --git a/src/pages/input/native-fs/index.astro b/src/pages/input/native-fs/index.astro new file mode 100644 index 000000000..f6d027092 --- /dev/null +++ b/src/pages/input/native-fs/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet-pico-ui.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/input/opensubsonic/_applet.astro b/src/pages/input/opensubsonic/_applet.astro new file mode 100644 index 000000000..9c46febbb --- /dev/null +++ b/src/pages/input/opensubsonic/_applet.astro @@ -0,0 +1,80 @@ +
    +

    OpenSubsonic input

    + +

    Mounted servers

    + +
    +

    + + + Just a moment, loading mounted servers. + +

    +
    + +

    Add a new OpenSubsonic-compatible server

    + +
    +
    + + diff --git a/src/pages/input/opensubsonic/_manifest.json b/src/pages/input/opensubsonic/_manifest.json new file mode 100644 index 000000000..7814c483d --- /dev/null +++ b/src/pages/input/opensubsonic/_manifest.json @@ -0,0 +1,63 @@ +{ + "name": "diffuse/input/opensubsonic", + "title": "Diffuse Input | OpenSubsonic API", + "entrypoint": "index.html", + "input_properties": { + "scheme": "opensubsonic" + }, + "actions": { + "consult": { + "title": "Consult", + "params_schema": { + "type": "string", + "description": "The uri to check the availability of." + } + }, + "contextualize": { + "title": "Contextualize", + "params_schema": { + "type": "array", + "description": "Array of tracks", + "items": { "type": "object" } + } + }, + "list": { + "title": "List", + "description": "List tracks.", + "params_schema": { + "type": "array", + "description": "A list of (cached) tracks with an uri matching the scheme", + "items": { + "type": "object" + } + } + }, + "resolve": { + "title": "Resolve", + "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.", + "params_schema": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method that is going to be used on the resolved URI." + }, + "uri": { "type": "string", "description": "The URI to resolve." } + }, + "required": ["method", "uri"] + } + }, + "mount": { + "title": "Mount", + "description": "Prepare for usage." + }, + "unmount": { + "title": "Unmount", + "description": "Callback after usage.", + "params_schema": { + "type": "string", + "description": "The handle id to unmount" + } + } + } +} diff --git a/src/pages/input/opensubsonic/index.astro b/src/pages/input/opensubsonic/index.astro new file mode 100644 index 000000000..f6d027092 --- /dev/null +++ b/src/pages/input/opensubsonic/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet-pico-ui.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/input/opensubsonic/types.d.ts b/src/pages/input/opensubsonic/types.d.ts new file mode 100644 index 000000000..997decc38 --- /dev/null +++ b/src/pages/input/opensubsonic/types.d.ts @@ -0,0 +1 @@ +export * from "@scripts/input/opensubsonic/types.d.ts"; diff --git a/src/pages/input/s3/_applet.astro b/src/pages/input/s3/_applet.astro new file mode 100644 index 000000000..a2755bd66 --- /dev/null +++ b/src/pages/input/s3/_applet.astro @@ -0,0 +1,109 @@ +
    +

    S3-compatible input

    + +

    Mounted buckets

    + +
    +

    + + + Just a moment, loading mounted buckets. + +

    +
    + +

    Add a new S3 bucket

    + +
    + + + +
    + + + + diff --git a/src/pages/input/s3/_manifest.json b/src/pages/input/s3/_manifest.json new file mode 100644 index 000000000..f79b7c9b8 --- /dev/null +++ b/src/pages/input/s3/_manifest.json @@ -0,0 +1,63 @@ +{ + "name": "diffuse/input/s3", + "title": "Diffuse Input | S3", + "entrypoint": "index.html", + "input_properties": { + "scheme": "s3" + }, + "actions": { + "consult": { + "title": "Consult", + "params_schema": { + "type": "string", + "description": "The uri to check the availability of." + } + }, + "contextualize": { + "title": "Contextualize", + "params_schema": { + "type": "array", + "description": "Array of tracks", + "items": { "type": "object" } + } + }, + "list": { + "title": "List", + "description": "List tracks.", + "params_schema": { + "type": "array", + "description": "A list of (cached) tracks with an uri matching the scheme", + "items": { + "type": "object" + } + } + }, + "resolve": { + "title": "Resolve", + "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.", + "params_schema": { + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The HTTP method that is going to be used on the resolved URI." + }, + "uri": { "type": "string", "description": "The URI to resolve." } + }, + "required": ["method", "uri"] + } + }, + "mount": { + "title": "Mount", + "description": "Prepare for usage." + }, + "unmount": { + "title": "Unmount", + "description": "Callback after usage.", + "params_schema": { + "type": "string", + "description": "The handle id to unmount" + } + } + } +} diff --git a/src/pages/input/s3/index.astro b/src/pages/input/s3/index.astro new file mode 100644 index 000000000..f6d027092 --- /dev/null +++ b/src/pages/input/s3/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet-pico-ui.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/orchestrator/process-tracks/_applet.astro b/src/pages/orchestrator/process-tracks/_applet.astro new file mode 100644 index 000000000..12c0a006c --- /dev/null +++ b/src/pages/orchestrator/process-tracks/_applet.astro @@ -0,0 +1,118 @@ + diff --git a/src/pages/orchestrator/process-tracks/_manifest.json b/src/pages/orchestrator/process-tracks/_manifest.json new file mode 100644 index 000000000..dbbbddfda --- /dev/null +++ b/src/pages/orchestrator/process-tracks/_manifest.json @@ -0,0 +1,6 @@ +{ + "name": "diffuse/orchestrator/process-tracks", + "title": "Diffuse Orchestrator | Process Tracks", + "entrypoint": "index.html", + "actions": {} +} diff --git a/src/pages/orchestrator/process-tracks/index.astro b/src/pages/orchestrator/process-tracks/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/orchestrator/process-tracks/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/orchestrator/queue-audio/_applet.astro b/src/pages/orchestrator/queue-audio/_applet.astro new file mode 100644 index 000000000..17a1dbf42 --- /dev/null +++ b/src/pages/orchestrator/queue-audio/_applet.astro @@ -0,0 +1,97 @@ + diff --git a/src/pages/orchestrator/queue-audio/_manifest.json b/src/pages/orchestrator/queue-audio/_manifest.json new file mode 100644 index 000000000..abe028f0b --- /dev/null +++ b/src/pages/orchestrator/queue-audio/_manifest.json @@ -0,0 +1,6 @@ +{ + "name": "diffuse/orchestrator/queue-audio", + "title": "Diffuse Orchestrator | Queue Audio", + "entrypoint": "index.html", + "actions": {} +} diff --git a/src/pages/orchestrator/queue-audio/index.astro b/src/pages/orchestrator/queue-audio/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/orchestrator/queue-audio/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/orchestrator/queue-tracks/_applet.astro b/src/pages/orchestrator/queue-tracks/_applet.astro new file mode 100644 index 000000000..c5acf283e --- /dev/null +++ b/src/pages/orchestrator/queue-tracks/_applet.astro @@ -0,0 +1,79 @@ + diff --git a/src/pages/orchestrator/queue-tracks/_manifest.json b/src/pages/orchestrator/queue-tracks/_manifest.json new file mode 100644 index 000000000..5e44c9177 --- /dev/null +++ b/src/pages/orchestrator/queue-tracks/_manifest.json @@ -0,0 +1,6 @@ +{ + "name": "diffuse/orchestrator/queue-tracks", + "title": "Diffuse Orchestrator | Queue Tracks", + "entrypoint": "index.html", + "actions": {} +} diff --git a/src/pages/orchestrator/queue-tracks/index.astro b/src/pages/orchestrator/queue-tracks/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/orchestrator/queue-tracks/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/output/indexed-db/_applet.astro b/src/pages/output/indexed-db/_applet.astro new file mode 100644 index 000000000..8e356eb79 --- /dev/null +++ b/src/pages/output/indexed-db/_applet.astro @@ -0,0 +1,49 @@ + diff --git a/src/pages/output/indexed-db/_manifest.json b/src/pages/output/indexed-db/_manifest.json new file mode 100644 index 000000000..2ad6f9ada --- /dev/null +++ b/src/pages/output/indexed-db/_manifest.json @@ -0,0 +1,26 @@ +{ + "name": "diffuse/output/indexed-db", + "title": "Diffuse Output | IndexedDB", + "entrypoint": "index.html", + "actions": { + "tracks": { + "title": "Tracks", + "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", + "params_schema": { + "type": "array", + "description": "List of tracks", + "items": { + "type": "object" + } + } + }, + "mount": { + "title": "Mount", + "description": "Prepare for usage." + }, + "unmount": { + "title": "Unmount", + "description": "Callback after usage." + } + } +} diff --git a/src/pages/output/indexed-db/index.astro b/src/pages/output/indexed-db/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/output/indexed-db/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/output/native-fs/_applet.astro b/src/pages/output/native-fs/_applet.astro new file mode 100644 index 000000000..2b0c96415 --- /dev/null +++ b/src/pages/output/native-fs/_applet.astro @@ -0,0 +1,75 @@ + diff --git a/src/pages/output/native-fs/_manifest.json b/src/pages/output/native-fs/_manifest.json new file mode 100644 index 000000000..0a95370ed --- /dev/null +++ b/src/pages/output/native-fs/_manifest.json @@ -0,0 +1,26 @@ +{ + "name": "diffuse/output/native-fs", + "title": "Diffuse Output | Native File System", + "entrypoint": "index.html", + "actions": { + "tracks": { + "title": "Tracks", + "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", + "params_schema": { + "type": "array", + "description": "List of tracks", + "items": { + "type": "object" + } + } + }, + "mount": { + "title": "Mount", + "description": "Prepare for usage." + }, + "unmount": { + "title": "Unmount", + "description": "Callback after usage." + } + } +} diff --git a/src/pages/output/native-fs/index.astro b/src/pages/output/native-fs/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/output/native-fs/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/output/storacha-automerge/_applet.astro b/src/pages/output/storacha-automerge/_applet.astro new file mode 100644 index 000000000..f1dd698fb --- /dev/null +++ b/src/pages/output/storacha-automerge/_applet.astro @@ -0,0 +1,124 @@ + diff --git a/src/pages/output/storacha-automerge/_manifest.json b/src/pages/output/storacha-automerge/_manifest.json new file mode 100644 index 000000000..c852ec0c3 --- /dev/null +++ b/src/pages/output/storacha-automerge/_manifest.json @@ -0,0 +1,26 @@ +{ + "name": "diffuse/output/storacha-automerge", + "title": "Diffuse Output | Storacha Storage + Automerge CRDT", + "entrypoint": "index.html", + "actions": { + "tracks": { + "title": "Tracks", + "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", + "params_schema": { + "type": "array", + "description": "List of tracks", + "items": { + "type": "object" + } + } + }, + "mount": { + "title": "Mount", + "description": "Prepare for usage." + }, + "unmount": { + "title": "Unmount", + "description": "Callback after usage." + } + } +} diff --git a/src/pages/output/storacha-automerge/index.astro b/src/pages/output/storacha-automerge/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/output/storacha-automerge/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/processor/artwork/_applet.astro b/src/pages/processor/artwork/_applet.astro new file mode 100644 index 000000000..ea2cb7386 --- /dev/null +++ b/src/pages/processor/artwork/_applet.astro @@ -0,0 +1,35 @@ + diff --git a/src/pages/processor/artwork/_manifest.json b/src/pages/processor/artwork/_manifest.json new file mode 100644 index 000000000..95a62a2c6 --- /dev/null +++ b/src/pages/processor/artwork/_manifest.json @@ -0,0 +1,38 @@ +{ + "name": "diffuse/processor/artwork", + "title": "Diffuse Processor | Artwork fetcher", + "description": "Tries to get artwork for a given URL or stream.", + "entrypoint": "index.html", + "actions": { + "supply": { + "title": "Supply", + "description": "Get the artwork for a given URL.", + "params_schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "cacheId": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "stream": { + "type": "object" + }, + "urls": { + "type": "object", + "properties": { + "get": { "type": "string" }, + "head": { "type": "string" } + }, + "required": ["get", "head"] + } + }, + "required": ["cacheId"] + } + } + } + } +} diff --git a/src/pages/processor/artwork/index.astro b/src/pages/processor/artwork/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/processor/artwork/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/processor/artwork/types.d.ts b/src/pages/processor/artwork/types.d.ts new file mode 100644 index 000000000..3a987db17 --- /dev/null +++ b/src/pages/processor/artwork/types.d.ts @@ -0,0 +1 @@ +export * from "../../../scripts/processor/artwork/types.d.ts"; diff --git a/src/pages/processor/metadata/_applet.astro b/src/pages/processor/metadata/_applet.astro new file mode 100644 index 000000000..1a26ee128 --- /dev/null +++ b/src/pages/processor/metadata/_applet.astro @@ -0,0 +1,34 @@ + diff --git a/src/pages/processor/metadata/_manifest.json b/src/pages/processor/metadata/_manifest.json new file mode 100644 index 000000000..715b945c3 --- /dev/null +++ b/src/pages/processor/metadata/_manifest.json @@ -0,0 +1,34 @@ +{ + "name": "diffuse/processor/metadata", + "title": "Diffuse Processor | Metadata fetcher", + "entrypoint": "index.html", + "actions": { + "supply": { + "title": "Supply", + "description": "Get the metadata for a given URL or stream.", + "params_schema": { + "type": "object", + "properties": { + "includeArtwork": { + "type": "boolean", + "description": "Include artwork in the output." + }, + "mimeType": { + "type": "string" + }, + "stream": { + "type": "object" + }, + "urls": { + "type": "object", + "properties": { + "get": { "type": "string" }, + "head": { "type": "string" } + }, + "required": ["get", "head"] + } + } + } + } + } +} diff --git a/src/pages/processor/metadata/index.astro b/src/pages/processor/metadata/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/processor/metadata/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/processor/metadata/types.d.ts b/src/pages/processor/metadata/types.d.ts new file mode 100644 index 000000000..39cf74c28 --- /dev/null +++ b/src/pages/processor/metadata/types.d.ts @@ -0,0 +1 @@ +export * from "../../../scripts/processor/metadata/types.d.ts"; diff --git a/src/pages/processor/search/_applet.astro b/src/pages/processor/search/_applet.astro new file mode 100644 index 000000000..341d73432 --- /dev/null +++ b/src/pages/processor/search/_applet.astro @@ -0,0 +1,34 @@ + diff --git a/src/pages/processor/search/_manifest.json b/src/pages/processor/search/_manifest.json new file mode 100644 index 000000000..9b3c08009 --- /dev/null +++ b/src/pages/processor/search/_manifest.json @@ -0,0 +1,6 @@ +{ + "name": "diffuse/processor/search", + "title": "Diffuse Processor | Search", + "entrypoint": "index.html", + "actions": {} +} diff --git a/src/pages/processor/search/index.astro b/src/pages/processor/search/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/processor/search/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/theme/blur/index.astro b/src/pages/theme/blur/index.astro new file mode 100644 index 000000000..3834dd506 --- /dev/null +++ b/src/pages/theme/blur/index.astro @@ -0,0 +1,10 @@ +--- +import Page from "../../../layouts/page.astro"; +import "@styles/theme/blur/index.css"; +--- + + + + +
    +
    diff --git a/src/pages/theme/pilot/audio/_applet.astro b/src/pages/theme/pilot/audio/_applet.astro new file mode 100644 index 000000000..90574c885 --- /dev/null +++ b/src/pages/theme/pilot/audio/_applet.astro @@ -0,0 +1,147 @@ +--- +import "@styles/reset.css"; +import "@styles/variables.css"; +import "@styles/fonts.css"; +import "@styles/icons/iconoir.css"; +import "@styles/theme/pilot/variables.css"; +--- + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + + + + diff --git a/src/pages/theme/pilot/audio/_manifest.json b/src/pages/theme/pilot/audio/_manifest.json new file mode 100644 index 000000000..70cb090da --- /dev/null +++ b/src/pages/theme/pilot/audio/_manifest.json @@ -0,0 +1,21 @@ +{ + "name": "diffuse/constituent/pilot/audio", + "title": "", + "entrypoint": "index.html", + "actions": { + "modifyIsPlaying": { + "title": "Set is-playing state", + "description": "Indicate if audio is playing or not.", + "params_schema": { + "type": "boolean" + } + }, + "modifyProgress": { + "title": "Set progress", + "description": "Indicate how far the audio has progressed.", + "params_schema": { + "type": "number" + } + } + } +} diff --git a/src/pages/theme/pilot/audio/index.astro b/src/pages/theme/pilot/audio/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/theme/pilot/audio/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/theme/pilot/audio/types.d.ts b/src/pages/theme/pilot/audio/types.d.ts new file mode 100644 index 000000000..abb4cae96 --- /dev/null +++ b/src/pages/theme/pilot/audio/types.d.ts @@ -0,0 +1,4 @@ +export interface State { + isPlaying: boolean; + seekPosition?: number; +} diff --git a/src/pages/theme/pilot/index.astro b/src/pages/theme/pilot/index.astro new file mode 100644 index 000000000..157211b27 --- /dev/null +++ b/src/pages/theme/pilot/index.astro @@ -0,0 +1,11 @@ +--- +import Page from "../../../layouts/page.astro"; +import "@styles/theme/pilot/index.css"; +--- + + + + + +
    +
    diff --git a/src/pages/theme/webamp/index.astro b/src/pages/theme/webamp/index.astro new file mode 100644 index 000000000..45e58470a --- /dev/null +++ b/src/pages/theme/webamp/index.astro @@ -0,0 +1,30 @@ +--- +import "@styles/theme/webamp/index.css"; +--- + + + + + + + Diffuse + + +
    + +
    + + + diff --git a/src/scripts/applet/common.ts b/src/scripts/applet/common.ts new file mode 100644 index 000000000..0604d858d --- /dev/null +++ b/src/scripts/applet/common.ts @@ -0,0 +1,488 @@ +import type { Applet, AppletEvent, AppletScope } from "@web-applets/sdk"; +import * as Comlink from "comlink"; + +import { applets } from "@web-applets/sdk"; +import { type ElementConfigurator, h } from "spellcaster/hyperscript.js"; +import { effect, isSignal, type Signal, signal } from "spellcaster/spellcaster.js"; +import QS from "query-string"; + +import type { ResolvedUri } from "@applets/core/types"; +import { transfer, type WorkerTasks } from "@scripts/common"; + +//////////////////////////////////////////// +// 🪟 Applet connecting +//////////////////////////////////////////// +export async function applet( + src: string, + opts: { + addSlashSuffix?: boolean; + container?: HTMLElement | Element; + context?: Window; + frameId?: string; + groupId?: string; + newInstance?: boolean; + setHeight?: boolean; + } = {}, +): Promise> { + src = `${src}${ + src.endsWith("/") + ? "" + : opts.addSlashSuffix === undefined || opts.addSlashSuffix === true + ? "/" + : "" + }`; + + let query: undefined | Record; + query = { groupId: opts.groupId || "main" }; + + if (query) { + src = QS.stringifyUrl({ url: src, query }); + } + + const context = opts.newInstance ? self : opts.context || self.top || self.parent; + const existingFrame: HTMLIFrameElement | null = opts.newInstance + ? null + : context.document.querySelector(`[src="${src}"]`); + + let frame; + + if (existingFrame) { + frame = existingFrame; + } else { + frame = document.createElement("iframe"); + frame.loading = "eager"; + frame.src = src; + if (opts.frameId) frame.id = opts.frameId; + + if (opts.container) { + opts.container.appendChild(frame); + } else { + context.document.body.appendChild(frame); + } + } + + if (frame.contentWindow === null) { + throw new Error("iframe does not have a contentWindow"); + } + + const applet = await applets.connect(frame.contentWindow, { context }).catch((err) => { + console.error("Error connecting to " + src, err); + throw err; + }); + + if (opts.setHeight) { + applet.onresize = () => { + frame.height = `${applet.height}px`; + frame.classList.add("has-loaded"); + }; + } else { + if (frame.contentDocument?.readyState === "complete") { + frame.classList.add("has-loaded"); + } + + frame.addEventListener("load", () => { + frame.classList.add("has-loaded"); + }); + } + + return applet; +} + +export function tunnel( + worker: Comlink.Remote, + connections: Record>, +) { + Object.entries(connections).forEach(([scheme, promise]) => { + Promise.resolve(promise).then((conn) => { + return worker._manage(scheme, transfer(conn.ports.worker)); + }); + }); +} + +//////////////////////////////////////////// +// 🪟 Applet registration +//////////////////////////////////////////// +export type DiffuseApplet = { + groupId: string | undefined; + scope: AppletScope; + + settled(): Promise; + + get instanceId(): string; + set data(data: T); + + codec: Codec; + unloadHandler?: () => void; + + isMainInstance(): boolean | null; + setActionHandler(actionId: string, actionHandler: H): void; +}; + +export type Codec = { + decode(data: any): T; + encode(data: T): any; +}; + +export function lookupGroupId() { + const url = new URL(location.href); + return url.searchParams.get("groupId") || "main"; +} + +export function register( + options: { mode?: "broadcast" | "shared-worker"; worker?: Comlink.Remote } = {}, +): DiffuseApplet { + const mode = options.mode ?? "broadcast"; + const scope = applets.register(); + + const groupId = lookupGroupId(); + const channelId = `${location.host}${location.pathname}/${groupId}`; + const instanceId = crypto.randomUUID(); + + // Codec + const codec = { + decode: (data: any) => data as DataType, + encode: (data: DataType) => data as any, + }; + + // Context + const context: DiffuseApplet = { + groupId, + scope, + + settled() { + return channelContext?.promise.then(() => {}) ?? Promise.resolve(); + }, + + get instanceId() { + return instanceId; + }, + + get data() { + return scope.data; + }, + + set data(data: DataType) { + scope.data = data; + }, + + codec, + + isMainInstance() { + return channelContext?.mainSignal[0]() ?? null; + }, + + setActionHandler: (actionId: string, actionHandler: H) => { + switch (mode) { + case "broadcast": + return channelContext?.setActionHandler(actionId, actionHandler); + + case "shared-worker": + return scope.setActionHandler(actionId, actionHandler); + } + }, + }; + + if (options.worker) { + context.scope.onworkerport = (event) => { + if (!event.port) return; + options.worker?._listen(transfer(event.port)); + }; + } + + // Channel + const channelContext = + mode === "broadcast" + ? broadcastChannel({ + channelId, + context, + instanceId, + scope, + }) + : undefined; + + return context; +} + +function broadcastChannel({ + channelId, + context, + instanceId, + scope, +}: { + channelId: string; + context: DiffuseApplet; + instanceId: string; + scope: AppletScope; +}) { + const mainSignal = signal(true); + const [isMain, setIsMain] = mainSignal; + + // One instance to rule them all + // + // Ping other instances to see if there are any. + // As long as there aren't any, it is considered the main instance. + // + // Actions are performed on the main instance, + // and data is replicated from main to the other instances. + const channel = new BroadcastChannel(channelId); + + channel.addEventListener("message", async (event) => { + switch (event.data?.type) { + case "PING": { + channel.postMessage({ + type: "PONG", + instanceId: event.data.instanceId, + originInstanceId: instanceId, + }); + + if (isMain() && event.data?.isInitialPing === true) { + channel.postMessage({ + type: "data", + data: context.codec.encode(scope.data), + }); + } + break; + } + + case "PONG": { + if (event.data.instanceId === instanceId) { + setIsMain(false); + } + break; + } + + case "UNLOADED": { + if (!context.isMainInstance()) { + // We need to wait until the other side is actually unloaded 🤷‍♀️ + setTimeout(async () => { + const promised = await makeMainPromise(); + setIsMain(promised.isMain); + if (promised.isMain) context.unloadHandler?.(); + }, 250); + } + break; + } + + case "action": { + if (isMain()) { + const result = await scope.actionHandlers[event.data.actionId]?.(...event.data.arguments); + channel.postMessage({ + type: "actioncomplete", + actionInstanceId: event.data.actionInstanceId, + result, + }); + } + break; + } + + case "data": { + scope.data = context.codec.decode(event.data.data); + break; + } + } + }); + + // Promise that fullfills whenever it figures out its the main instance or not. + let pinged = false; + + function makeMainPromise(timeoutDuration: number = 500) { + return new Promise<{ isMain: boolean }>((resolve) => { + const timeoutId = setTimeout(() => { + channel.removeEventListener("message", handler); + resolve({ isMain: true }); + }, timeoutDuration); + + const handler = (event: MessageEvent) => { + if ( + (event.data?.type === "PONG" || event.data?.type === "PING") && + event.data?.instanceId === instanceId + ) { + clearTimeout(timeoutId); + channel.removeEventListener("message", handler); + resolve({ isMain: false }); + } + }; + + channel.addEventListener("message", handler); + channel.postMessage({ + type: "PING", + instanceId, + isInitialPing: !pinged, + }); + + pinged = true; + }); + } + + const promise = makeMainPromise(); + + // If the data on the main instance changes, + // pass it on to other instances. + scope.addEventListener("data", async (event: AppletEvent) => { + await promise; + + if (isMain()) { + channel.postMessage({ + type: "data", + data: context.codec.encode(event.data), + }); + } + }); + + // Action handler + const setActionHandler = (actionId: string, actionHandler: H) => { + const handler = async (...args: any) => { + if (isMain()) { + return actionHandler(...args); + } + + // Check if a main instance is still available, + // if not, then this is the new main. + const promised = await makeMainPromise(); + setIsMain(promised.isMain); + + if (isMain()) { + return actionHandler(...args); + } + + const actionMessage = { + actionInstanceId: crypto.randomUUID(), + actionId, + type: "action", + arguments: args, + }; + + return await new Promise((resolve) => { + const actionCallback = (event: MessageEvent) => { + if ( + event.data?.type === "actioncomplete" && + event.data?.actionInstanceId === actionMessage.actionInstanceId + ) { + channel.removeEventListener("message", actionCallback); + resolve(event.data.result); + } + }; + + channel.addEventListener("message", actionCallback); + channel.postMessage(actionMessage); + }); + }; + + scope.setActionHandler(actionId, handler); + }; + + // Before unload + self.addEventListener("beforeunload", (event) => { + if (context.isMainInstance()) { + channel.postMessage({ + type: "UNLOADED", + }); + } + }); + + // Fin + return { + channel, + mainSignal, + promise, + setActionHandler, + }; +} + +//////////////////////////////////////////// +// 🔮 Reactive state management +//////////////////////////////////////////// +export function reactive( + applet: Applet | AppletScope, + dataFn: (data: D) => T, + effectFn: (t: T) => void, +) { + let value = dataFn(applet.data); + effectFn(value); + + applet.addEventListener("data", (event: AppletEvent) => { + const newData = dataFn(event.data); + if (newData !== value) { + value = newData; + effectFn(value); + } + }); +} + +//////////////////////////////////////////// +// ⚡️ COMMON ACTION CALLS +//////////////////////////////////////////// + +export async function inputUrl(input: Applet, uri: string, method = "GET") { + return await input.sendAction( + "resolve", + { + method, + uri, + }, + { + timeoutDuration: 60000 * 5, + worker: true, + }, + ); +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// +export function addScope(astroScope: string, object: O): O { + return { + ...object, + attrs: { + ...((object as any).attrs || {}), + [`data-astro-cid-${astroScope}`]: "", + }, + }; +} + +export function appletScopePort() { + let port: MessagePort | undefined; + + function connection(event: AppletEvent) { + if (event.data?.type === "appletconnect") { + window.removeEventListener("message", connection); + port = (event as any).ports[0]; + } + } + + window.addEventListener("message", connection); + + return () => port; +} + +export function hs( + tag: string, + astroScope: string, + props?: Record | Signal>, + configure?: ElementConfigurator, +) { + const propsWithScope = + props && isSignal(props) + ? () => addScope(astroScope, props()) + : addScope(astroScope, props || {}); + + return h(tag, propsWithScope, configure); +} + +export function wait(applet: Applet, dataFn: (a: A | undefined) => boolean): Promise { + return new Promise((resolve) => { + if (dataFn(applet.data) === true) { + resolve(); + return; + } + + const callback = (event: AppletEvent) => { + if (dataFn(event.data) === true) { + applet.removeEventListener("data", callback); + resolve(); + } + }; + + applet.addEventListener("data", callback); + }); +} diff --git a/src/scripts/common.ts b/src/scripts/common.ts new file mode 100644 index 000000000..b303d9c23 --- /dev/null +++ b/src/scripts/common.ts @@ -0,0 +1,274 @@ +import * as Uint8 from "uint8arrays"; +import * as Comlink from "comlink"; +import { xxh32 } from "xxh32"; +import { getTransferables } from "@okikio/transferables"; + +import type { Track } from "@applets/core/types"; +import type { DiffuseApplet } from "./applet/common"; + +// export { SharedWorkerPolyfill as SharedWorker } from "@okikio/sharedworker"; +export const SharedWorker = globalThis.SharedWorker; + +//////////////////////////////////////////// +// 🌳 +//////////////////////////////////////////// + +export type WorkerTasks = { + _listen: ReturnType; + _manage: ReturnType; +}; + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +export function arrayShuffle(array: Array): Array { + if (array.length === 0) { + return []; + } + + array = [...array]; + + for (let index = array.length - 1; index > 0; index--) { + const randArr = crypto.getRandomValues(new Uint32Array(1)); + const randVal = randArr[0] / 2 ** 32; + const newIndex = Math.floor(randVal * (index + 1)); + [array[index], array[newIndex]] = [array[newIndex], array[index]]; + } + + return array; +} + +export function cleanUndefinedValuesForTracks(tracks: Track[]): Track[] { + return tracks.map((track) => { + const t = { ...track }; + + if (t.tags) { + if ("album" in t.tags && t.tags.album === undefined) delete t.tags.album; + if ("artist" in t.tags && t.tags.artist === undefined) delete t.tags.artist; + if ("genre" in t.tags && t.tags.genre === undefined) delete t.tags.genre; + if ("year" in t.tags && t.tags.year === undefined) delete t.tags.year; + + if ("of" in t.tags.disc && t.tags.disc.of === undefined) delete t.tags.disc.of; + if ("of" in t.tags.track && t.tags.track.of === undefined) delete t.tags.track.of; + } + + return t; + }); +} + +export function comparable(value: unknown) { + return xxh32(JSON.stringify(value)); +} + +export function endpoint = WorkerTasks>(ini: Comlink.Endpoint) { + const e = Comlink.wrap(ini); + if ("start" in ini && typeof ini.start === "function") ini.start(); + return e; +} + +export function expose>( + tasks: A, + opts?: { + ports?: { + applets: MessagePort[]; + consumers: MessagePort[]; + }; + }, +): A { + if (globalThis.SharedWorkerGlobalScope && self instanceof SharedWorkerGlobalScope) { + self.onconnect = (event: MessageEvent) => { + const port = event.ports[0]; + opts?.ports?.applets?.push(port); + Comlink.expose(tasks, port); + port.start(); + }; + + (self as any).connected = true; + } else { + Comlink.expose(tasks, self); + } + + return tasks; +} + +export function groupTracksPerScheme( + tracks: Track[], + initial: Record = {}, +): Record { + const acc: Record = initial; + + tracks.forEach((track) => { + const scheme = track.uri.substring(0, track.uri.indexOf(":")); + acc[scheme] ??= []; + acc[scheme].push(track); + }); + + return acc; +} + +export function inIframe() { + return window.self !== window.top; +} + +export function initialConnections>(ids: string[]) { + const connections: Record>> = {}; + + ids.forEach((c) => { + connections[c] = Promise.withResolvers>(); + }); + + return connections; +} + +export function isPrimitive(test: unknown) { + return test !== Object(test); +} + +export function jsonDecode(a: any): T { + return JSON.parse(new TextDecoder().decode(a)); +} + +export function jsonEncode(a: T): Uint8Array { + return new TextEncoder().encode(JSON.stringify(a)); +} + +export function postMessages({ + data, + ports, + transfer, +}: { + data: D; + ports: MessagePort[]; + transfer?: Transferable[]; +}) { + ports.forEach((port) => { + port.postMessage(data, transfer ?? []); + }); +} + +export function provide< + C extends Record, + A extends Record, + T extends Record, +>({ + actions, + connections, + tasks, +}: { + actions?: A; + connections?: Record>>; + tasks?: T; +}) { + const portsHolder = { + applets: [] as MessagePort[], + consumers: [] as MessagePort[], + }; + + const allTasks = expose( + { + _listen: _listen(actions || ({} as A), portsHolder), + _manage: _manage(connections || {}), + ...(tasks || ({} as T)), + }, + { + ports: portsHolder, + }, + ); + + return { + connections: connections || ({} as Record>>), + ports: portsHolder, + tasks: allTasks, + }; +} + +export function sync( + context: DiffuseApplet, + port: MessagePort | Worker, + options: { groupId?: string } = {}, +) { + port.onmessage = (event) => { + if ( + event.data?.type === "data" && + (options.groupId ? event.data?.groupId === options.groupId : true) + ) { + context.data = event.data.data; + } + }; +} + +export async function trackArtworkCacheId(track: Track): Promise { + return await crypto.subtle + .digest("SHA-256", new TextEncoder().encode(track.uri)) + .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); +} + +export function transfer(a: T) { + const b = getTransferables(a); + return Comlink.transfer(a, b); +} + +// PRIVATE + +function _listen>( + actions: A, + portsHolder: { + applets: MessagePort[]; + consumers: MessagePort[]; + }, +) { + async function handleAction( + port: MessagePort, + action: { + type: "action"; + id: string; + actionId: string; + arguments: any; + }, + ) { + const result = await actions[action.actionId]?.(action.arguments); + return postMessage(port, action.id, result); + } + + function postMessage(port: MessagePort, id: string, result: T) { + port.postMessage( + { + type: "actioncomplete", + id, + result, + }, + { + transfer: getTransferables(result), + }, + ); + } + + return (port: MessagePort) => { + Comlink.expose(actions, port); + portsHolder.consumers.push(port); + + port.onmessage = async (message) => { + switch (message.data?.type) { + case "action": + return handleAction(port, message.data); + } + }; + }; +} + +function _manage>( + connections: Record>>, +) { + return (connectionId: string, workerPort: MessagePort) => { + let conn = connections[connectionId]; + const remote = endpoint(workerPort); + + if (!conn) { + connections[connectionId] = Promise.withResolvers>(); + conn = connections[connectionId]; + } + + conn.resolve(remote); + }; +} diff --git a/src/scripts/configurator/input/worker.ts b/src/scripts/configurator/input/worker.ts new file mode 100644 index 000000000..b3218e051 --- /dev/null +++ b/src/scripts/configurator/input/worker.ts @@ -0,0 +1,140 @@ +import * as URI from "uri-js"; + +import type { + Consult, + ConsultGrouping, + GroupConsult, + InputWorkerTasks, + Track, +} from "@applets/core/types"; +import { groupTracksPerScheme, initialConnections, provide } from "@scripts/common"; + +//////////////////////////////////////////// +// SETUP +//////////////////////////////////////////// +const actions = { + consult, + contextualize, + groupConsult, + list, + resolve, +}; + +const { connections, tasks } = provide({ + actions, + connections: initialConnections(["file+local", "opensubsonic", "s3"]), + tasks: actions, +}); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +function isSupportedScheme(scheme: string) { + return !!connections[scheme]; +} + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +async function consult(fileUriOrScheme: string): Promise { + const scheme = fileUriOrScheme.includes(":") + ? URI.parse(fileUriOrScheme).scheme || fileUriOrScheme + : fileUriOrScheme; + + if (!isSupportedScheme(scheme)) { + return { supported: false, reason: "Unsupported scheme" }; + } + + const conn = await connections[scheme].promise; + return conn.consult(fileUriOrScheme); +} + +async function contextualize(tracks: Track[]) { + const groups = groupTracks(tracks); + const promises = Object.entries(groups).map(async ([scheme, tracksGroup]: [string, Track[]]) => { + if (!isSupportedScheme(scheme) || tracksGroup.length === 0) return; + const conn = await connections[scheme].promise; + await conn.contextualize(tracksGroup); + }); + + await Promise.all(promises); +} + +async function groupConsult(tracks: Track[]) { + const groups = groupTracksPerScheme(tracks); + + const consultations: GroupConsult[] = await Promise.all( + Object.keys(groups).map(async (scheme) => { + if (!isSupportedScheme(scheme)) { + return { + [scheme]: { + available: false, + reason: "Unsupported scheme", + tracks: groups[scheme] || [], + }, + }; + } + + const conn = await connections[scheme].promise; + const result = await conn.groupConsult(groups[scheme] || {}); + + return result; + }), + ); + + return consultations.reduce((acc: GroupConsult, c: GroupConsult) => { + return { ...acc, ...c }; + }, {}); +} + +async function list(cachedTracks: Track[] = []) { + const groups = await groupConsult(cachedTracks); + + Object.keys(connections).forEach((scheme) => { + if (!groups[scheme]) groups[scheme] = { available: true, tracks: [] }; + }); + + const promises = Object.entries(groups).map( + async ([scheme, { available, tracks }]: [string, ConsultGrouping]) => { + if (!available) return tracks; + if (!isSupportedScheme(scheme)) return tracks; + const conn = await connections[scheme].promise; + return conn.list(tracks); + }, + ); + + const nested = await Promise.all(promises); + const tracks = nested.flat(1); + + return tracks; +} + +async function resolve(args: { method: string; uri: string }) { + const scheme = args.uri.split(":", 1)[0]; + if (!isSupportedScheme(scheme)) return undefined; + + try { + const conn = await connections[scheme].promise; + return await conn.resolve(args); + } catch (err) { + console.error(`[configuration/input] Resolve error for scheme '${scheme}'.`, err); + } +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +function groupTracks(tracks: Track[]) { + const grouped = groupTracksPerScheme( + tracks, + Object.fromEntries( + Object.entries(connections).map(([k, _v]) => { + return [k, []]; + }), + ), + ); + + return grouped; +} diff --git a/src/scripts/configurator/output/connections.ts b/src/scripts/configurator/output/connections.ts new file mode 100644 index 000000000..1188bb11f --- /dev/null +++ b/src/scripts/configurator/output/connections.ts @@ -0,0 +1,25 @@ +import type { Applet } from "@web-applets/sdk"; + +import type { ManagedOutput } from "@applets/core/types"; +import type { Method } from "./types"; +import { CONNECTIONS, CUSTOM_KEY } from "./constants"; +import { applet } from "@scripts/applet/common"; + +const connections: Record> = {}; + +export async function connection(method: Method) { + if (connections[method]) return connections[method]; + + let href; + + if (method === "custom") { + href = localStorage.getItem(CUSTOM_KEY); + if (!href) throw new Error("Missing custom applet URL"); + } else { + href = CONNECTIONS[method]; + if (!href) throw new Error("No href defined for this connection method."); + } + + connections[method] = await applet(href); + return connections[method]; +} diff --git a/src/scripts/configurator/output/constants.ts b/src/scripts/configurator/output/constants.ts new file mode 100644 index 000000000..b6a50b938 --- /dev/null +++ b/src/scripts/configurator/output/constants.ts @@ -0,0 +1,11 @@ +export const METHODS = ["browser", "custom", "device"] as const; + +export const CONNECTIONS = { + browser: "/output/indexed-db/", + custom: undefined, + device: "/output/native-fs/", +}; + +export const DEFAULT_METHOD: (typeof METHODS)[number] = "browser"; +export const LOCALSTORAGE_KEY = "applets/configurator/output/active-output"; +export const CUSTOM_KEY = "applets/configurator/output/custom-applet"; diff --git a/src/scripts/configurator/output/context.ts b/src/scripts/configurator/output/context.ts new file mode 100644 index 000000000..af056273f --- /dev/null +++ b/src/scripts/configurator/output/context.ts @@ -0,0 +1,4 @@ +import type { ManagedOutput } from "@applets/core/types"; +import { register } from "@scripts/applet/common"; + +export const context = register(); diff --git a/src/scripts/configurator/output/events.ts b/src/scripts/configurator/output/events.ts new file mode 100644 index 000000000..6a0b86dc1 --- /dev/null +++ b/src/scripts/configurator/output/events.ts @@ -0,0 +1,6 @@ +import type { AppletEvent } from "@web-applets/sdk"; +import { context } from "./context"; + +export function setContextData(event: AppletEvent) { + context.data = event.data; +} diff --git a/src/scripts/configurator/output/signals.ts b/src/scripts/configurator/output/signals.ts new file mode 100644 index 000000000..a4d343a02 --- /dev/null +++ b/src/scripts/configurator/output/signals.ts @@ -0,0 +1,9 @@ +import { signal } from "spellcaster"; + +import type { Method } from "./types"; +import { DEFAULT_METHOD, LOCALSTORAGE_KEY, METHODS } from "./constants"; + +export const stored = localStorage.getItem(LOCALSTORAGE_KEY); +export const [active, setActive] = signal( + stored && METHODS.includes(stored as Method) ? (stored as Method) : DEFAULT_METHOD, +); diff --git a/src/scripts/configurator/output/types.d.ts b/src/scripts/configurator/output/types.d.ts new file mode 100644 index 000000000..f89ab0e6f --- /dev/null +++ b/src/scripts/configurator/output/types.d.ts @@ -0,0 +1,5 @@ +import { METHODS } from "./constants"; + +export type Method = (typeof METHODS)[number]; +export type List = Map>; +export type ListItem = { activated: boolean; icon: string; method: M; title: string }; diff --git a/src/scripts/configurator/output/ui.ts b/src/scripts/configurator/output/ui.ts new file mode 100644 index 000000000..d929e88d2 --- /dev/null +++ b/src/scripts/configurator/output/ui.ts @@ -0,0 +1,252 @@ +import { type Signal, computed, effect, signal } from "spellcaster/spellcaster.js"; +import { type ElementConfigurator, h, repeat, text } from "spellcaster/hyperscript.js"; + +import { applet, hs, reactive } from "@scripts/applet/common"; +import { CUSTOM_KEY } from "./constants"; +import { active, setActive } from "./signals"; +import { connection } from "./connections"; +import { context } from "./context"; +import type { List, ListItem, Method } from "./types"; +import { setContextData } from "./events"; + +// const h = ( +// tag: string, +// props?: Record | Signal>, +// configure?: ElementConfigurator, +// ) => hs(tag, scope, props, configure); + +//////////////////////////////////////////// +// EFFECTS +//////////////////////////////////////////// +reactive( + context.scope, + (data) => data.tracks.cacheId, + () => { + // Export data URI + const dl = document.querySelector("#download"); + if (dl) { + const json = JSON.stringify(context.data.tracks.collection, null, 2); + const href = URL.createObjectURL(new Blob([json], { type: "application/json" })); + dl.setAttribute("href", href); + } + }, +); + +// Mount + Unmount +async function mountStorageMethod(method: Method) { + switch (method) { + case "custom": + setModalIsOpen(true); + break; + default: + const conn = await connection(method); + try { + await conn.sendAction("mount", undefined, { timeoutDuration: 60000 }); + setActive(method); + } catch (err) { + const msg: string = + err && typeof err === "object" && "message" in err ? `${err.message}` : `${err}`; + if (msg.startsWith("[user] ")) alert(msg.slice(7)); + } + break; + } +} + +async function unmountStorageMethod(method: Method) { + const conn = await connection(method); + conn.removeEventListener("data", setContextData); + await conn.sendAction("unmount", undefined, { timeoutDuration: 60000 }); +} + +//////////////////////////////////////////// +// LIST +//////////////////////////////////////////// +const list = computed(() => { + const a = active(); + + return new Map([ + [ + `browser-${a === "browser"}`, + { + title: "Browser storage", + icon: "iconoir-app-window", + method: "browser", + activated: a === "browser", + }, + ], + [ + `device-${a === "device"}`, + { + title: "Device storage", + icon: "iconoir-laptop", + method: "device", + activated: a === "device", + }, + ], + [ + `custom-${a === "custom"}`, + { + title: "Custom applet", + icon: "iconoir-globe", + method: "custom", + activated: a === "custom", + }, + ], + ]); +}); + +const Item = (signal: Signal>) => { + const item = signal(); + + const colorClass = item.activated ? "pico-color-jade-500" : "pico-color-grey-500"; + const icon = item.activated ? "iconoir-check-circle-solid" : "iconoir-check-circle"; + + return h( + "p", + { + onclick: clickHandler(item.method), + style: "cursor: pointer", + }, + [ + h("span", { className: "with-icon" }, [ + h("i", { className: item.icon }), + h("strong", {}, text(item.title)), + ]), + h("br"), + h("span", { className: `with-icon ${colorClass}` }, [ + h("i", { className: icon }), + h("span", {}, text(item.activated ? "Active" : "Select")), + ]), + ], + ); +}; + +function clickHandler(method: Method) { + return async () => { + const currentlyActive = active(); + if (currentlyActive === method && currentlyActive !== "custom") return; + if (currentlyActive) unmountStorageMethod(currentlyActive); + await mountStorageMethod(method); + }; +} + +const Options = computed(() => { + return h("div", { id: "options" }, repeat(list, Item)); +}); + +// Add to DOM +document.getElementById("options")?.replaceWith(Options()); + +//////////////////////////////////////////// +// CUSTOM APPLET +//////////////////////////////////////////// +type CustomAppletState = "waiting" | "connecting" | { error: string } | "connected"; + +const [modalIsOpen, setModalIsOpen] = signal(false); +const [customState, setCustomState] = signal("waiting"); + +const Modal = () => { + const Header = h("header", {}, [ + h("button", { + attrs: { rel: "prev" }, + ariaLabel: "Close", + onclick: close, + }), + h("p", {}, [ + h("strong", {}, [ + h("span", { className: "with-icon" }, [ + h("i", { className: "iconoir-globe" }), + h("span", {}, text("Load a custom applet")), + ]), + ]), + ]), + ]); + + const Content = h("form", { onsubmit: submit }, [ + h("fieldset", { role: "group" }, [ + h("input", { + type: "url", + name: "url", + placeholder: "https://applets.diffuse.sh/storage/output/indexed-db/", + required: true, + value: localStorage.getItem(CUSTOM_KEY) || "", + }), + h("input", { type: "submit", value: "Connect" }), + ]), + h("p", {}, [ + h("small", { className: "with-icon" }, (element) => { + const comp = computed(() => { + const s = customState(); + + if (s === "connecting") { + return [ + h("i", { className: "iconoir-ev-plug-charging" }), + h("span", {}, text("Connecting ...")), + ]; + } else if (typeof s !== "string") { + return [ + h("i", { className: "iconoir-warning-circle" }), + h("span", {}, text(`Error: ${s.error}`)), + ]; + } + + return [h("span", {}, text("Enter the URL to the applet."))]; + }); + + effect(() => { + element.replaceChildren(...comp()); + }); + }), + ]), + ]); + + return h( + "dialog", + computed(() => ({ open: modalIsOpen() })), + [h("article", {}, [Header, Content])], + ); +}; + +// Events +function close() { + setModalIsOpen(false); +} + +async function submit(event: SubmitEvent) { + event.preventDefault(); + + const input: HTMLInputElement | null = (event.target as HTMLFormElement).querySelector( + `input[type="url"]`, + ); + + if (!input) return; + + const url = input.value; + setCustomState("connecting"); + + const apl = await applet(url).catch((err) => { + setCustomState({ error: "Failed to connect" }); + throw err; + }); + + let missingAction; + + ["tracks", "mount", "unmount"].forEach((method) => { + if (!apl.manifest.actions?.[method]) missingAction = method; + }); + + if (missingAction) { + setCustomState({ error: `Applet is missing a required action: "${missingAction}"` }); + return; + } + + localStorage.setItem(CUSTOM_KEY, url); + await apl.sendAction("mount", undefined, { timeoutDuration: 60000 }); + + setActive("custom"); + setModalIsOpen(false); + setCustomState("waiting"); +} + +// Add to DOM +document.querySelector("main")?.appendChild(Modal()); diff --git a/src/scripts/engine/queue/types.d.ts b/src/scripts/engine/queue/types.d.ts new file mode 100644 index 000000000..6038dc1e3 --- /dev/null +++ b/src/scripts/engine/queue/types.d.ts @@ -0,0 +1,11 @@ +import type { Track } from "@applets/core/types"; + +export type Item = Track & { + manualEntry?: boolean; +}; + +export interface State { + past: Item[]; + now: Item | null; + future: Item[]; +} diff --git a/src/scripts/engine/queue/worker.ts b/src/scripts/engine/queue/worker.ts new file mode 100644 index 000000000..5a3f161fa --- /dev/null +++ b/src/scripts/engine/queue/worker.ts @@ -0,0 +1,147 @@ +import { getTransferables } from "@okikio/transferables"; + +import type { Track } from "@applets/core/types.js"; +import type { Item, State } from "./types"; +import { arrayShuffle, postMessages, provide, transfer } from "@scripts/common.ts"; + +//////////////////////////////////////////// +// SETUP +//////////////////////////////////////////// + +const actions = { + add, + pool, + shift, + unshift, +}; + +const { ports, tasks } = provide({ + actions, + tasks: { ...actions, data }, +}); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +//////////////////////////////////////////// +// STATE +//////////////////////////////////////////// + +const QUEUE_SIZE = 25; + +const _internal: Record = {}; +const _state: Record = {}; + +function data(groupId: string) { + return state(groupId); +} + +function emptyState(groupId: string): State { + return { + future: [], + now: null, + past: [], + }; +} + +function notify(groupId: string) { + const d = data(groupId); + + postMessages({ + data: { + type: "data", + data: d, + groupId, + }, + ports: ports.applets, + transfer: getTransferables(d), + }); +} + +function internal(groupId: string) { + _internal[groupId] ??= { pool: [] }; + return _internal[groupId]; +} + +function state(groupId: string) { + _state[groupId] ??= emptyState(groupId); + return _state[groupId]; +} + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +function add({ groupId, items }: { groupId: string; items: Item[] }) { + state(groupId).future = [...state(groupId).future, ...items]; + notify(groupId); +} + +function pool({ groupId, tracks }: { groupId: string; tracks: Track[] }) { + internal(groupId).pool = tracks; + const queue = state(groupId); + + // TODO: If the pool changes, only remove non-existing tracks + // instead of resetting the whole future queue. + // + // What about past queue items? + + queue.future = []; + fill(groupId); + + // Automatically insert track if there isn't any + if (!queue.now) return shift({ groupId }); + else notify(groupId); +} + +function shift({ groupId }: { groupId: string }) { + const queue = state(groupId); + const now = queue.future[0] ?? null; + queue.now = now; + + queue.future = queue.future.slice(1); + queue.past = now ? [...queue.past, now] : queue.past; + + fill(groupId); +} + +function unshift({ groupId }: { groupId: string }) { + const queue = state(groupId); + if (queue.past.length === 0) return; + + const [last] = queue.past.splice(queue.past.length - 1, 1); + const now = last ?? null; + + queue.now = now; + queue.future = now ? [now, ...queue.future] : queue.future; + + notify(groupId); +} + +// 🛠️ + +// TODO: Most likely there's a more performant solution +function fill(groupId: string) { + const queue = state(groupId); + if (queue.future.length >= QUEUE_SIZE) return; + + const pool: Track[] = []; + + let past = new Set(queue.past.map((t) => t.id)); + let reducedPool = pool; + + internal(groupId).pool.forEach((track: Track) => { + if (past.has(track.id)) { + past = past.difference(new Set(track.id)); + } else { + pool.push(track); + } + }); + + if (reducedPool.length === 0) { + reducedPool = internal(groupId).pool; + } + + const poolSelection = arrayShuffle(reducedPool).slice(0, QUEUE_SIZE - queue.future.length); + add({ groupId, items: poolSelection }); +} diff --git a/src/scripts/input/common.ts b/src/scripts/input/common.ts new file mode 100644 index 000000000..167a7b218 --- /dev/null +++ b/src/scripts/input/common.ts @@ -0,0 +1,3 @@ +export function isAudioFile(filename: string) { + return filename.match(/\.(flac|m4a|mp3|mp4|ogg|opus|wav|webm)$/); +} diff --git a/src/scripts/input/native-fs/common.ts b/src/scripts/input/native-fs/common.ts new file mode 100644 index 000000000..0a4e1a7c7 --- /dev/null +++ b/src/scripts/input/native-fs/common.ts @@ -0,0 +1,86 @@ +import * as IDB from "idb-keyval"; +import * as URI from "uri-js"; +import QS from "query-string"; + +import type { Track } from "@applets/core/types.d.ts"; +import type { Handles } from "./types"; +import { isAudioFile } from "@scripts/input/common"; +import { IDB_HANDLES, SCHEME } from "./constants"; + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// +export async function fetchHandles(): Promise { + return (await IDB.get(IDB_HANDLES)) ?? {}; +} + +export async function fetchHandlesList() { + return Object.entries(await fetchHandles()).map(([id, handle]) => { + return { id, handle }; + }); +} +export function groupTracksByHandle(tracks: Track[]) { + const acc: Record = {}; + + tracks.forEach((track: Track) => { + const id = trackHandleId(track); + if (!id) return acc; + + if (acc[id]) { + acc[id].tracks.push(track); + } else { + acc[id] = { tracks: [track] }; + } + }); + + return acc; +} + +export function isSupported() { + return !!(globalThis as any).showDirectoryPicker; +} + +export function trackCid(track: Track): string | undefined { + const a = URI.parse(track.uri); + const cid = a.query ? QS.parse(a.query).cid || undefined : undefined; + return Array.isArray(cid) && cid[0] ? cid[0] : typeof cid === "string" ? cid : undefined; +} + +export function trackHandleId(track: Track): string | undefined { + const a = URI.parse(track.uri); + return a.host; +} + +export async function recursiveList( + dir: FileSystemDirectoryHandle, + rootHandleId: string, + path: string[], +): Promise { + const tracks: Track[] = []; + + for await (const item of dir.values()) { + if (item.kind === "file" && isAudioFile(item.name)) { + const uri = URI.serialize({ + scheme: SCHEME, + host: rootHandleId, + path: `${path.length ? "/" + path.join("/") : ""}/${item.name}`, + }); + + const track: Track = { + id: crypto.randomUUID(), + uri, + }; + + tracks.push(track); + } else if (item.kind === "directory") { + const nestedItems = await recursiveList(item as FileSystemDirectoryHandle, rootHandleId, [ + ...path, + item.name, + ]); + + tracks.push(...nestedItems); + } + } + + return tracks; +} diff --git a/src/scripts/input/native-fs/constants.ts b/src/scripts/input/native-fs/constants.ts new file mode 100644 index 000000000..fac037cef --- /dev/null +++ b/src/scripts/input/native-fs/constants.ts @@ -0,0 +1,5 @@ +import manifest from "../../../pages/input/native-fs/_manifest.json"; + +export const IDB_PREFIX = "@applets/input/native-fs"; +export const IDB_HANDLES = `${IDB_PREFIX}/handles`; +export const SCHEME = manifest.input_properties.scheme; diff --git a/src/scripts/input/native-fs/mounting.ts b/src/scripts/input/native-fs/mounting.ts new file mode 100644 index 000000000..76ca775bb --- /dev/null +++ b/src/scripts/input/native-fs/mounting.ts @@ -0,0 +1,33 @@ +import { signal } from "spellcaster"; +import * as IDB from "idb-keyval"; + +import { fetchHandles, fetchHandlesList } from "./common"; +import { IDB_HANDLES } from "./constants"; + +//////////////////////////////////////////// +// SIGNALS +//////////////////////////////////////////// +export const [mounts, setMounts] = signal(await fetchHandlesList()); + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// +export const mount = async () => { + await showDirectoryPicker() + .then(async (handle) => { + const existingHandles = await fetchHandles(); + const id = crypto.randomUUID(); + + await handle.requestPermission({ mode: "read" }); + await IDB.set(IDB_HANDLES, { ...existingHandles, [id]: handle }); + setMounts(await fetchHandlesList()); + }) + .catch(() => {}); +}; + +export const unmount = async (handleId: string) => { + const handles = await fetchHandles(); + delete handles[handleId]; + await IDB.set(IDB_HANDLES, { ...handles }); + setMounts(await fetchHandlesList()); +}; diff --git a/src/scripts/input/native-fs/types.d.ts b/src/scripts/input/native-fs/types.d.ts new file mode 100644 index 000000000..edfa9c1b9 --- /dev/null +++ b/src/scripts/input/native-fs/types.d.ts @@ -0,0 +1 @@ +export type Handles = Record; diff --git a/src/scripts/input/native-fs/ui.ts b/src/scripts/input/native-fs/ui.ts new file mode 100644 index 000000000..788d651b3 --- /dev/null +++ b/src/scripts/input/native-fs/ui.ts @@ -0,0 +1,52 @@ +import { computed, effect, type Signal } from "spellcaster"; +import { repeat, tags, text } from "spellcaster/hyperscript.js"; + +import { mount, mounts, unmount } from "./mounting"; +import { isSupported } from "./common"; + +//////////////////////////////////////////// +// SIGNALS +//////////////////////////////////////////// + +// Mount button +document.getElementById("mount")?.addEventListener("click", () => { + if (isSupported()) mount(); + else alert("The File System Access API is not supported on this platform."); +}); + +// Directories +const dirList = computed(() => { + return new Map( + mounts().map((mount) => { + return [mount.id, mount]; + }), + ); +}); + +const Item = (signal: Signal<{ id: string; handle: FileSystemDirectoryHandle }>) => { + const { id, handle } = signal(); + + return tags.li({}, [ + tags.span( + { onclick: () => unmount(id), style: "cursor: pointer;", title: "Click/tap to delete" }, + text(handle.name), + ), + ]); +}; + +const Directories = computed(() => { + if (mounts().length === 0) { + return tags.p({ id: "directories" }, [ + tags.small({}, [ + tags.em({}, text("No audio added yet, click the button below to add some.")), + ]), + ]); + } + + return tags.ul({ id: "directories" }, repeat(dirList, Item)); +}); + +// Add to DOM +effect(() => { + document.getElementById("directories")?.replaceWith(Directories()); +}); diff --git a/src/scripts/input/native-fs/worker.ts b/src/scripts/input/native-fs/worker.ts new file mode 100644 index 000000000..fa47d8fb5 --- /dev/null +++ b/src/scripts/input/native-fs/worker.ts @@ -0,0 +1,157 @@ +import * as URI from "uri-js"; + +import type { Consult, ConsultGrouping, GroupConsult, Track } from "@applets/core/types.d.ts"; +import { SCHEME } from "./constants"; +import { + fetchHandles, + fetchHandlesList, + groupTracksByHandle, + recursiveList, + trackHandleId, +} from "./common"; +import { provide, transfer } from "@scripts/common"; + +//////////////////////////////////////////// +// TASKS +//////////////////////////////////////////// +const actions = { + consult, + contextualize, + groupConsult, + list, + resolve, +}; + +const { tasks } = provide({ actions, tasks: actions }); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +// Tasks + +export async function consult(fileUriOrScheme: string): Promise { + if (!self.FileSystemDirectoryHandle) { + return { supported: false, reason: "File System Access API is not supported" }; + } + + if (!fileUriOrScheme.includes(":")) { + if (fileUriOrScheme !== SCHEME) return { supported: false, reason: "Scheme does not match" }; + return { supported: true, consult: "undetermined" }; + } + + const handles = await fetchHandles(); + const uri = URI.parse(fileUriOrScheme); + if (uri.scheme !== SCHEME) return { supported: false, reason: "Scheme does not match" }; + return { supported: true, consult: uri.host && !!handles[uri.host] ? true : false }; +} + +export async function contextualize(cachedTracks: Track[]) {} + +async function groupConsult(tracks: Track[]): Promise { + const groups = groupTracksByHandle(tracks); + const handles = await fetchHandles(); + + const promises = Object.entries(groups).map(async ([handleId, { tracks }]) => { + const handle = handles[handleId]; + const grouping: ConsultGrouping = handle + ? { available: true, tracks } + : { available: false, reason: "Handle not available", tracks }; + + return { + key: URI.serialize({ scheme: SCHEME, host: handleId }), + grouping, + }; + }); + + const entries = (await Promise.all(promises)).map((entry) => [entry.key, entry.grouping]); + const obj = Object.fromEntries(entries); + + return transfer(obj); +} + +export async function list(cachedTracks: Track[] = []) { + const handles = await fetchHandlesList(); + + // Recursive listing of all tracks of available handles + const processed: Track[][] = await Promise.all( + handles.map(({ id, handle }) => { + return recursiveList(handle, id, []); + }), + ); + + // Group tracks by handle id & index by track uri + const cache: Record> = {}; + + cachedTracks.forEach((track: Track) => { + const handleId = trackHandleId(track); + if (!handleId) return; + + cache[handleId] ??= {}; + cache[handleId][track.uri] = track; + }); + + // Replace indexes in groups of which we have the handle. + // Keeping around tracks with handles we don't have access to, + // and removing tracks that are no longer available (for handles we do have access to). + + // TODO: Refactor to not use `reduce`, for performance. + const groups = processed.flat(1).reduce( + (acc, track) => { + const handleId = trackHandleId(track); + if (!handleId) throw new Error("New tracks are missing a handle id!"); + + return { ...acc, [handleId]: { ...acc[handleId], [track.uri]: track } }; + }, + handles.reduce((acc: Record>, handle) => { + return { ...acc, [handle.id]: {} }; + }, cache), + ); + + // Transform in track list and sort by uri + const data = Object.values(groups) + .map((tracks) => Object.values(tracks)) + .flat(1) + .sort((a: any, b: any) => { + if (a.uri < b.uri) return -1; + if (a.uri > b.uri) return 1; + return 0; + }); + + // Fin + return transfer(data); +} + +export async function resolve(args: { uri: string }) { + const fileUri = args.uri; + + const uri = URI.parse(fileUri); + if (uri.scheme !== SCHEME) return undefined; + if (!uri.host || !uri.path) return undefined; + + const handles = await fetchHandles(); + const handle = handles[uri.host]; + if (!handle) return undefined; + + const path = URI.unescapeComponent(uri.path); + const parts = (path.startsWith("/") ? path.slice(1) : path).split("/"); + const filename = parts[parts.length - 1]; + + const dirHandle = await parts + .slice(0, -1) + .reduce( + async ( + acc: Promise, + part: string, + ): Promise => { + const h = await acc; + return await h.getDirectoryHandle(part); + }, + Promise.resolve(handle), + ); + + const fileHandle = await dirHandle.getFileHandle(filename); + const file = await fileHandle.getFile(); + const url = URL.createObjectURL(file); + + return { expiresAt: Infinity, url }; +} diff --git a/src/scripts/input/opensubsonic/common.ts b/src/scripts/input/opensubsonic/common.ts new file mode 100644 index 000000000..447678c46 --- /dev/null +++ b/src/scripts/input/opensubsonic/common.ts @@ -0,0 +1,157 @@ +import { SubsonicAPI, type Child } from "subsonic-api"; +import * as IDB from "idb-keyval"; +import * as URI from "uri-js"; +import QS from "query-string"; + +import type { Server } from "./types"; +import { IDB_SERVERS, SCHEME } from "./constants"; +import type { Track } from "@applets/core/types"; + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// +export function autoTypeToTrackKind(type: Child["type"]): Track["kind"] { + switch (type?.toLowerCase()) { + case "audiobook": + return "audiobook"; + + case "music": + return "music"; + + case "podcast": + return "podcast"; + + default: + return "miscellaneous"; + } +} + +export function buildURI(server: Server, args: { songId: string; path?: string }) { + return URI.serialize({ + scheme: SCHEME, + userinfo: server.apiKey + ? URI.escapeComponent(server.apiKey) + : `${URI.escapeComponent(server.username || "")}:${URI.escapeComponent(server.password || "")}`, + host: server.host.replace(/^https?:\/\//, ""), + path: args.path, + query: QS.stringify({ + songId: args.songId, + tls: server.tls ? "t" : "f", + }), + }); +} + +export async function consultServer(server: Server) { + const client = createClient(server); + const resp = await client.ping().catch(() => undefined); + + return resp?.status?.toLowerCase() === "ok"; +} + +export function createClient(server: Server) { + return new SubsonicAPI({ + url: `http${server.tls ? "s" : ""}://${server.host}`, + auth: server.apiKey + ? { apiKey: URI.unescapeComponent(server.apiKey) } + : { + username: URI.unescapeComponent(server.username || ""), + password: URI.unescapeComponent(server.password || ""), + }, + }); +} + +export function groupTracksByServer(tracks: Track[]) { + const acc: Record = {}; + + tracks.forEach((track: Track) => { + const parsed = parseURI(track.uri); + if (!parsed) return; + + const id = serverId(parsed.server); + + if (acc[id]) { + acc[id].tracks.push(track); + } else { + acc[id] = { server: parsed.server, tracks: [track] }; + } + }); + + return acc; +} + +export async function loadServers(): Promise> { + const i = await IDB.get(IDB_SERVERS); + return i ? i : {}; +} + +export function parseURI( + uriString: string, +): { path: string | undefined; server: Server; songId: string | undefined } | undefined { + const uri = URI.parse(uriString); + if (uri.scheme !== SCHEME) return undefined; + if (!uri.host) return undefined; + + let apiKey: string | undefined = undefined; + let username: string | undefined = undefined; + let password: string | undefined = undefined; + + if (uri.userinfo?.includes(":")) { + // Username + Password + const [u, p] = uri.userinfo.split(":"); + username = u; + password = p; + if (!username || !password) return undefined; + } else { + // API key + apiKey = uri.userinfo; + if (!apiKey) return undefined; + } + + const qs = QS.parse(uri.query || ""); + + const server = { + apiKey, + host: uri.port ? `${uri.host}:${uri.port}` : uri.host, + password, + tls: qs.tls === "f" ? false : true, + username, + }; + + const path = uri.path; + const songId = typeof qs.songId === "string" ? qs.songId : undefined; + + return { path, server, songId }; +} + +export async function saveServers(items: Record) { + await IDB.set(IDB_SERVERS, items); +} + +export function serversFromTracks(tracks: Track[]) { + const acc: Record = {}; + + tracks.forEach((track: Track) => { + const parsed = parseURI(track.uri); + if (!parsed) return; + + const id = serverId(parsed.server); + if (acc[id]) return; + + acc[id] = parsed.server; + }); + + return acc; +} + +export function serverId(server: Server) { + const parts = { + host: server.host, + query: `tls=${server.tls ? "t" : "f"}`, + }; + + const uri = server.apiKey + ? URI.serialize({ ...parts, userinfo: server.apiKey }) + : URI.serialize({ ...parts, userinfo: `${server.username}:${server.password}` }); + + return btoa(uri); +} diff --git a/src/scripts/input/opensubsonic/constants.ts b/src/scripts/input/opensubsonic/constants.ts new file mode 100644 index 000000000..91c678b22 --- /dev/null +++ b/src/scripts/input/opensubsonic/constants.ts @@ -0,0 +1,5 @@ +import manifest from "../../../pages/input/opensubsonic/_manifest.json"; + +export const IDB_PREFIX = "@applets/input/opensubsonic"; +export const IDB_SERVERS = `${IDB_PREFIX}/servers`; +export const SCHEME = manifest.input_properties.scheme; diff --git a/src/scripts/input/opensubsonic/types.d.ts b/src/scripts/input/opensubsonic/types.d.ts new file mode 100644 index 000000000..457b2639d --- /dev/null +++ b/src/scripts/input/opensubsonic/types.d.ts @@ -0,0 +1,8 @@ +// https://opensubsonic.netlify.app/docs/api-reference/ +export type Server = { + apiKey?: string; + host: string; + password?: string; + tls: boolean; + username?: string; +}; diff --git a/src/scripts/input/opensubsonic/ui.ts b/src/scripts/input/opensubsonic/ui.ts new file mode 100644 index 000000000..eb2d52619 --- /dev/null +++ b/src/scripts/input/opensubsonic/ui.ts @@ -0,0 +1,110 @@ +import { computed, effect, type Signal, signal } from "spellcaster"; +import { type Props, repeat, tags, text } from "spellcaster/hyperscript.js"; + +import type { Server } from "./types.d.ts"; +import { loadServers, saveServers, serverId } from "./common"; + +//////////////////////////////////////////// +// UI +//////////////////////////////////////////// +export const [servers, setServers] = signal>(await loadServers()); +const [form, setForm] = signal<{ + api_key?: string; + host?: string; + password?: string; + username?: string; +}>({}); + +const serversMap = computed(() => { + return new Map(Object.entries(servers())); +}); + +effect(() => { + saveServers(servers()); +}); + +//////////////////////////////////////////// +// UI ~ SERVERS +//////////////////////////////////////////// +const Server = (server: Signal) => { + const onclick = () => { + const b = server(); + const id = serverId(b); + + const col = { ...servers() }; + delete col[id]; + + setServers(col); + }; + + return tags.li({ onclick, style: "cursor: pointer" }, text(server().host)); +}; + +const ServerList = computed(() => { + if (serversMap().size === 0) { + return tags.p({ id: "servers" }, [tags.small({}, text("Nothing added so far."))]); + } + + return tags.ul({ id: "servers" }, repeat(serversMap, Server)); +}); + +effect(() => { + document.querySelector("#servers")?.replaceWith(ServerList()); +}); + +//////////////////////////////////////////// +// UI ~ FORM +//////////////////////////////////////////// +function addServer(event: Event) { + event.preventDefault(); + + const f = form(); + + const server: Server = { + apiKey: f.api_key, + host: f.host?.replace(/^https?:\/\//, "").replace(/\/+$/, "") || "localhost:4533", + username: f.username, + tls: f.host?.startsWith("http://") || f.host?.startsWith("localhost") ? false : true, + password: f.password, + }; + + setServers({ + ...servers(), + [serverId(server)]: server, + }); +} + +function Form() { + return tags.form({ onsubmit: addServer }, [ + tags.fieldset({ className: "grid" }, [ + Input("host", "Server host", "my.opensubsonic.server:4747", { required: true }), + ]), + tags.fieldset({ className: "grid" }, [ + Input("username", "Server name", "username", { required: true }), + Input("password", "Password", "password", { required: true, type: "password" }), + ]), + tags.fieldset({ className: "grid" }, [tags.input({ type: "submit", value: "Connect" }, [])]), + ]); +} + +function Input(name: string, label: string, placeholder: string, opts: Props = {}) { + return tags.label({}, [ + tags.span({}, [ + tags.span({}, text(label)), + tags.small({}, text("required" in opts ? "" : " (optional)")), + ]), + tags.input({ + ...opts, + name, + placeholder, + oninput: (event: InputEvent) => formInput(name, (event.target as HTMLInputElement).value), + }), + ]); +} + +function formInput(name: string, value: string) { + setForm({ ...form(), [name]: value }); +} + +// 🚀 +document.querySelector("#form")?.replaceWith(Form()); diff --git a/src/scripts/input/opensubsonic/worker.ts b/src/scripts/input/opensubsonic/worker.ts new file mode 100644 index 000000000..6121c1f03 --- /dev/null +++ b/src/scripts/input/opensubsonic/worker.ts @@ -0,0 +1,169 @@ +import { SubsonicAPI, type Child } from "subsonic-api"; +import * as URI from "uri-js"; + +import type { Consult, ConsultGrouping, GroupConsult, Track } from "@applets/core/types.d.ts"; +import { SCHEME } from "./constants.ts"; +import { + autoTypeToTrackKind, + buildURI, + consultServer, + createClient, + groupTracksByServer, + loadServers, + parseURI, + serverId, + serversFromTracks, +} from "./common.ts"; +import { provide, transfer } from "@scripts/common.ts"; + +//////////////////////////////////////////// +// TASKS +//////////////////////////////////////////// +const actions = { + consult, + contextualize, + groupConsult, + list, + resolve, +}; + +const { tasks } = provide({ actions, tasks: actions }); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +// Tasks + +async function consult(fileUriOrScheme: string): Promise { + if (!fileUriOrScheme.includes(":")) return { supported: true, consult: "undetermined" }; + + const parsed = parseURI(fileUriOrScheme); + if (!parsed) return { supported: true, consult: "undetermined" }; + + const consult = await consultServer(parsed.server); + return { supported: true, consult }; +} + +async function contextualize(tracks: Track[]) { + return serversFromTracks(tracks); +} + +async function groupConsult(tracks: Track[]): Promise { + const groups = groupTracksByServer(tracks); + + const promises = Object.entries(groups).map(async ([serverId, { server, tracks }]) => { + const available = await consultServer(server); + const grouping: ConsultGrouping = available + ? { available, tracks } + : { available, reason: "Server ping failed", tracks }; + + return { + key: `${SCHEME}:${serverId}`, + grouping, + }; + }); + + const entries = (await Promise.all(promises)).map((entry) => [entry.key, entry.grouping]); + const obj = Object.fromEntries(entries); + + return transfer(obj); +} + +async function list(cachedTracks: Track[] = []) { + const cache: Record> = {}; + + cachedTracks.forEach((t: Track) => { + const parsed = parseURI(t.uri); + if (!parsed || !parsed.path) return; + + const sid = serverId(parsed?.server); + + cache[sid] ??= {}; + cache[sid][URI.unescapeComponent(parsed.path)] = t; + }); + + async function search(client: SubsonicAPI, offset = 0): Promise { + const result = await client.search3({ + query: "", + artistCount: 0, + albumCount: 0, + songCount: 1000, + songOffset: offset, + }); + + const songs = result.searchResult3.song || []; + + if (songs.length === 1000) { + const moreSongs = await search(client, offset + 1000); + return [...songs, ...moreSongs]; + } + + return songs; + } + + const servers = await loadServers(); + const promises = Object.values(servers).map(async (server) => { + const client = createClient(server); + const sid = serverId(server); + const list = await search(client, 0); + + return list + .filter((song) => !song.isVideo) + .map((song) => { + const path = song.path + ? song.path.startsWith("/") + ? song.path + : `/${song.path}` + : undefined; + const fromCache = path ? cache[sid]?.[path] : undefined; + if (fromCache) return fromCache; + + const track: Track = { + id: crypto.randomUUID(), + kind: autoTypeToTrackKind(song.type), + uri: buildURI(server, { songId: song.id, path }), + + stats: { + bitrate: song.bitRate, + duration: song.duration, + }, + tags: { + album: song.album, + artist: song.artist, + disc: { no: song.discNumber || 1 }, + genre: song.genre, + title: song.title, + track: { no: song.track || 1 }, + year: song.year, + }, + }; + + return track; + }); + }); + + const tracks = (await Promise.all(promises)).flat(1); + return transfer(tracks); +} + +async function resolve({ uri }: { method: string; uri: string }) { + const parsed = parseURI(uri); + if (!parsed) return undefined; + + const client = createClient(parsed.server); + const songId = parsed.songId; + if (!songId) return undefined; + + // TODO: + // const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days + // const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; + + const url = await client + .download({ + id: songId, + format: "raw", + }) + .then((a) => a.url); + + return { expiresAt: Infinity, url }; +} diff --git a/src/scripts/input/s3/common.ts b/src/scripts/input/s3/common.ts new file mode 100644 index 000000000..9528d27a7 --- /dev/null +++ b/src/scripts/input/s3/common.ts @@ -0,0 +1,123 @@ +import { S3Client } from "@bradenmacdonald/s3-lite-client"; +import * as IDB from "idb-keyval"; +import * as URI from "uri-js"; +import QS from "query-string"; + +import type { Track } from "@applets/core/types.d.ts"; +import { ENCODINGS, IDB_BUCKETS, SCHEME } from "./constants"; +import type { Bucket } from "./types"; + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// +export function bucketsFromTracks(tracks: Track[]) { + const acc: Record = {}; + + tracks.forEach((track: Track) => { + const parsed = parseURI(track.uri); + if (!parsed) return; + + const id = bucketId(parsed.bucket); + if (acc[id]) return; + + acc[id] = parsed.bucket; + }); + + return acc; +} + +export function bucketId(bucket: Bucket) { + return `${bucket.accessKey}:${bucket.secretKey}@${bucket.host}`; +} + +export function buildURI(bucket: Bucket, path: string) { + return URI.serialize({ + scheme: SCHEME, + userinfo: `${bucket.accessKey}:${bucket.secretKey}`, + host: bucket.host.replace(/^https?:\/\//, ""), + path: path, + query: QS.stringify({ + bucketName: bucket.bucketName, + bucketPath: bucket.path, + region: bucket.region, + }), + }); +} + +export async function consultBucket(bucket: Bucket) { + const client = createClient(bucket); + return await client.bucketExists(bucket.bucketName); +} + +export function createClient(bucket: Bucket) { + return new S3Client({ + bucket: bucket.bucketName, + endPoint: `http${bucket.host.startsWith("localhost") ? "" : "s"}://${bucket.host}`, + region: bucket.region, + pathStyle: false, + accessKey: bucket.accessKey, + secretKey: bucket.secretKey, + }); +} + +export function encodeAwsUriComponent(a: string) { + return encodeURIComponent(a).replace( + /(\+|!|"|#|\$|&|'|\(|\)|\*|\+|,|:|;|=|\?|@)/gim, + (match) => (ENCODINGS as any)[match] ?? match, + ); +} + +export function groupTracksByBucket(tracks: Track[]) { + const acc: Record = {}; + + tracks.forEach((track: Track) => { + const parsed = parseURI(track.uri); + if (!parsed) return acc; + + const id = bucketId(parsed.bucket); + + if (acc[id]) { + acc[id].tracks.push(track); + } else { + acc[id] = { bucket: parsed.bucket, tracks: [track] }; + } + }); + + return acc; +} + +export async function loadBuckets(): Promise> { + const i = await IDB.get(IDB_BUCKETS); + return i ? i : {}; +} + +export function parseURI(uriString: string): { bucket: Bucket; path: string } | undefined { + const uri = URI.parse(uriString); + if (uri.scheme !== SCHEME) return undefined; + if (!uri.host) return undefined; + + const [accessKey, secretKey] = uri.userinfo?.split(":") ?? []; + if (!accessKey || !secretKey) return undefined; + + const qs = QS.parse(uri.query || ""); + + const bucket = { + accessKey, + bucketName: typeof qs.bucketName === "string" ? qs.bucketName : "", + host: uri.host, + path: qs.bucketPath === "string" ? qs.bucketPath : "/", + region: typeof qs.region === "string" ? qs.region : "", + secretKey, + }; + + const path = (bucket.path.replace(/\/$/, "") + URI.unescapeComponent(uri.path || "")).replace( + /^\//, + "", + ); + + return { bucket, path }; +} + +export async function saveBuckets(items: Record) { + await IDB.set(IDB_BUCKETS, items); +} diff --git a/src/scripts/input/s3/constants.ts b/src/scripts/input/s3/constants.ts new file mode 100644 index 000000000..0cd0527aa --- /dev/null +++ b/src/scripts/input/s3/constants.ts @@ -0,0 +1,24 @@ +import manifest from "../../../pages/input/s3/_manifest.json"; + +export const IDB_PREFIX = "@applets/input/s3"; +export const IDB_BUCKETS = `${IDB_PREFIX}/buckets`; +export const SCHEME = manifest.input_properties.scheme; + +export const ENCODINGS = { + "\+": "%2B", + "\!": "%21", + '\"': "%22", + "\#": "%23", + "\$": "%24", + "\&": "%26", + "'": "%27", + "\(": "%28", + "\)": "%29", + "\*": "%2A", + "\,": "%2C", + "\:": "%3A", + "\;": "%3B", + "\=": "%3D", + "\?": "%3F", + "\@": "%40", +}; diff --git a/src/scripts/input/s3/types.d.ts b/src/scripts/input/s3/types.d.ts new file mode 100644 index 000000000..6c0a658f6 --- /dev/null +++ b/src/scripts/input/s3/types.d.ts @@ -0,0 +1,8 @@ +export type Bucket = { + accessKey: string; + bucketName: string; + host: string; + path: string; + region: string; + secretKey: string; +}; diff --git a/src/scripts/input/s3/ui.ts b/src/scripts/input/s3/ui.ts new file mode 100644 index 000000000..55bff4332 --- /dev/null +++ b/src/scripts/input/s3/ui.ts @@ -0,0 +1,118 @@ +import { computed, effect, type Signal, signal } from "spellcaster"; +import { type Props, repeat, tags, text } from "spellcaster/hyperscript.js"; + +import type { Bucket } from "./types"; +import { bucketId, loadBuckets, saveBuckets } from "./common"; + +//////////////////////////////////////////// +// UI +//////////////////////////////////////////// +export const [buckets, setBuckets] = signal>(await loadBuckets()); +export const [form, setForm] = signal<{ + access_key?: string; + bucket_name?: string; + host?: string; + path?: string; + region?: string; + secret_key?: string; +}>({}); + +export const bucketsMap = computed(() => { + return new Map(Object.entries(buckets())); +}); + +effect(() => { + saveBuckets(buckets()); +}); + +//////////////////////////////////////////// +// UI ~ BUCKETS +//////////////////////////////////////////// +const Bucket = (bucket: Signal) => { + const onclick = () => { + const b = bucket(); + const id = bucketId(b); + + const col = { ...buckets() }; + delete col[id]; + + setBuckets(col); + }; + + return tags.li({ onclick, style: "cursor: pointer" }, text(bucket().host)); +}; + +const BucketList = computed(() => { + if (bucketsMap().size === 0) { + return tags.p({ id: "buckets" }, [tags.small({}, text("Nothing added so far."))]); + } + + return tags.ul({ id: "buckets" }, repeat(bucketsMap, Bucket)); +}); + +effect(() => { + document.querySelector("#buckets")?.replaceWith(BucketList()); +}); + +//////////////////////////////////////////// +// UI ~ FORM +//////////////////////////////////////////// +function addBucket(event: Event) { + event.preventDefault(); + + const f = form(); + + const bucket: Bucket = { + accessKey: f.access_key || "", + bucketName: f.bucket_name || "", + host: f.host || "s3.amazonaws.com", + path: f.path || "/", + region: f.region || "us-east-1", + secretKey: f.secret_key || "", + }; + + setBuckets({ + ...buckets(), + [bucketId(bucket)]: bucket, + }); +} + +function Form() { + return tags.form({ onsubmit: addBucket }, [ + tags.fieldset({ className: "grid" }, [ + Input("access_key", "Access key", "r31w7m9c", { required: true }), + Input("secret_key", "Secret key", "v02g2l29", { required: true }), + ]), + tags.fieldset({ className: "grid" }, [ + Input("bucket_name", "Bucket name", "bucket", { required: true }), + Input("region", "Region", "us-east-1", { required: true }), + ]), + tags.fieldset({ className: "grid" }, [ + Input("host", "Host", "s3.amazonaws.com", { required: true }), + Input("path", "Path", "/"), + ]), + tags.fieldset({ className: "grid" }, [tags.input({ type: "submit", value: "Connect" }, [])]), + ]); +} + +function Input(name: string, label: string, placeholder: string, opts: Props = {}) { + return tags.label({}, [ + tags.span({}, [ + tags.span({}, text(label)), + tags.small({}, text("required" in opts ? "" : " (optional)")), + ]), + tags.input({ + ...opts, + name, + placeholder, + oninput: (event: InputEvent) => formInput(name, (event.target as HTMLInputElement).value), + }), + ]); +} + +function formInput(name: string, value: string) { + setForm({ ...form(), [name]: value }); +} + +// 🚀 +document.querySelector("#form")?.replaceWith(Form()); diff --git a/src/scripts/input/s3/worker.ts b/src/scripts/input/s3/worker.ts new file mode 100644 index 000000000..6b2fd7e7e --- /dev/null +++ b/src/scripts/input/s3/worker.ts @@ -0,0 +1,131 @@ +import type { Consult, ConsultGrouping, GroupConsult, Track } from "@applets/core/types.d.ts"; +import { isAudioFile } from "@scripts/input/common"; +import { + bucketId, + bucketsFromTracks, + buildURI, + consultBucket, + createClient, + groupTracksByBucket, + loadBuckets, + parseURI, +} from "./common"; +import { provide, transfer } from "@scripts/common"; +import { SCHEME } from "./constants"; + +//////////////////////////////////////////// +// TASKS +//////////////////////////////////////////// +const actions = { + consult, + contextualize, + groupConsult, + list, + resolve, +}; + +const { tasks } = provide({ actions, tasks: actions }); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +// Tasks + +async function consult(fileUriOrScheme: string): Promise { + if (!fileUriOrScheme.includes(":")) return { supported: true, consult: "undetermined" }; + + const parsed = parseURI(fileUriOrScheme); + if (!parsed) return { supported: true, consult: "undetermined" }; + + const consult = await consultBucket(parsed.bucket); + return { supported: true, consult }; +} + +async function contextualize(tracks: Track[]) { + return bucketsFromTracks(tracks); +} + +async function groupConsult(tracks: Track[]): Promise { + const groups = groupTracksByBucket(tracks); + + const promises = Object.entries(groups).map(async ([bucketId, { bucket, tracks }]) => { + const available = await consultBucket(bucket); + const grouping: ConsultGrouping = available + ? { available, tracks } + : { available, reason: "Bucket unavailable", tracks }; + + return { + key: `${SCHEME}:${bucketId}`, + grouping, + }; + }); + + const entries = (await Promise.all(promises)).map((entry) => [entry.key, entry.grouping]); + const obj = Object.fromEntries(entries); + + return transfer(obj); +} + +async function list(cachedTracks: Track[] = []) { + const cache: Record> = {}; + + cachedTracks.forEach((t: Track) => { + const parsed = parseURI(t.uri); + if (!parsed) return; + + const bid = bucketId(parsed?.bucket); + + if (cache[bid]) { + cache[bid][parsed.path] = t; + } else { + cache[bid] = { [parsed.path]: t }; + } + }); + + const buckets = await loadBuckets(); + const promises = Object.values(buckets).map(async (bucket) => { + const client = createClient(bucket); + const bid = bucketId(bucket); + + const list = await Array.fromAsync( + client.listObjects({ + prefix: bucket.path.replace(/^\//, ""), + }), + ); + + return list + .filter((l) => isAudioFile(l.key)) + .map((l) => { + const cachedTrack = cache[bid]?.[l.key]; + + const id = cachedTrack?.id || crypto.randomUUID(); + const stats = cachedTrack?.stats; + const tags = cachedTrack?.tags; + + const track: Track = { + id, + stats, + tags, + uri: buildURI(bucket, l.key), + }; + + return track; + }); + }); + + const tracks = (await Promise.all(promises)).flat(1); + return transfer(tracks); +} + +async function resolve({ method, uri }: { method: string; uri: string }) { + const parsed = parseURI(uri); + if (!parsed) return undefined; + + const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days + const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; + + const client = createClient(parsed.bucket); + const url = await client.getPresignedUrl(method.toUpperCase() as any, parsed.path); + + return { expiresAt: expiresAtSeconds, url }; +} diff --git a/src/scripts/output/common.ts b/src/scripts/output/common.ts new file mode 100644 index 000000000..132c0d01c --- /dev/null +++ b/src/scripts/output/common.ts @@ -0,0 +1,77 @@ +import { xxh32r } from "xxh32/dist/raw.js"; + +import type { ManagedOutput, Track } from "@applets/core/types"; +import type { DiffuseApplet } from "@scripts/applet/common"; +import { jsonEncode } from "@scripts/common"; + +export const INITIAL_MANAGED_OUTPUT: ManagedOutput = { + tracks: { + cacheId: tracksCacheId([]), + state: "loading", + collection: [], + }, +}; + +export function outputManager(args: { + context: DiffuseApplet; + /* Indicate if the initial data loader may proceed. */ + init?: () => Promise; + tracks: { + get(): Promise; + put(tracks: Track[]): Promise; + }; +}) { + const { context } = args; + + // Initial data loader + async function load() { + await context.settled(); + + if (!context.isMainInstance()) return; + if (args.init && (await args.init()) === false) return; + + const collection = await tracks(); + + context.data = { + ...context.data, + tracks: { + cacheId: tracksCacheId(collection), + state: "loaded", + collection, + }, + }; + } + + load(); + + async function tracks(): Promise; + async function tracks(tracks: Track[]): Promise; + async function tracks(tracks?: Track[]): Promise { + if (tracks) { + // PUT + context.data = { + ...context.data, + tracks: { + cacheId: tracksCacheId(tracks), + state: "loaded", + collection: tracks, + }, + }; + + await args.tracks.put(tracks); + } else { + // GET + return await args.tracks.get(); + } + } + + return { + load, + tracks, + }; +} + +export function tracksCacheId(tracks: Track[]): string { + // TODO: Probably should work with encoded tracks directly? + return xxh32r(jsonEncode(tracks)).toString(); +} diff --git a/src/scripts/output/indexed-db/constants.ts b/src/scripts/output/indexed-db/constants.ts new file mode 100644 index 000000000..34832a8fd --- /dev/null +++ b/src/scripts/output/indexed-db/constants.ts @@ -0,0 +1 @@ +export const IDB_PREFIX = "@applets/output/indexed-db"; diff --git a/src/scripts/output/indexed-db/worker.ts b/src/scripts/output/indexed-db/worker.ts new file mode 100644 index 000000000..ad64a628f --- /dev/null +++ b/src/scripts/output/indexed-db/worker.ts @@ -0,0 +1,41 @@ +import * as IDB from "idb-keyval"; + +import { expose, jsonDecode, jsonEncode, transfer } from "@scripts/common"; +import type { Track } from "@applets/core/types"; +import { IDB_PREFIX } from "./constants"; + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// +const actions = expose({ + getTracks, + putTracks, +}); + +export type Actions = typeof actions; + +// Actions + +async function getTracks() { + const encoded = await get({ name: "tracks.json" }); + if (!encoded) return []; + const tracks = jsonDecode(encoded); + return transfer(tracks); +} + +async function putTracks(tracks: Track[]) { + const data = jsonEncode(tracks); + await put({ name: "tracks.json", data }); +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +async function get({ name }: { name: string }) { + return await IDB.get(`${IDB_PREFIX}/${name}`); +} + +async function put({ data, name }: { data: Uint8Array; name: string }) { + return await IDB.set(`${IDB_PREFIX}/${name}`, data); +} diff --git a/src/scripts/output/native-fs/constants.ts b/src/scripts/output/native-fs/constants.ts new file mode 100644 index 000000000..8a51698ed --- /dev/null +++ b/src/scripts/output/native-fs/constants.ts @@ -0,0 +1,2 @@ +export const IDB_PREFIX = "@applets/output/native-fs"; +export const IDB_DEVICE_KEY = `${IDB_PREFIX}/device`; diff --git a/src/scripts/output/native-fs/worker.ts b/src/scripts/output/native-fs/worker.ts new file mode 100644 index 000000000..aa3337127 --- /dev/null +++ b/src/scripts/output/native-fs/worker.ts @@ -0,0 +1,56 @@ +import * as IDB from "idb-keyval"; + +import { expose, jsonDecode, jsonEncode, transfer } from "@scripts/common"; +import type { Track } from "@applets/core/types"; +import { IDB_DEVICE_KEY, IDB_PREFIX } from "./constants"; + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// +const actions = expose({ + getTracks, + putTracks, +}); + +export type Actions = typeof actions; + +// Actions + +async function getTracks() { + const encoded = await get({ name: "tracks.json" }); + if (!encoded) return []; + const tracks = jsonDecode(encoded); + return transfer(tracks); +} + +async function putTracks(tracks: Track[]) { + const data = jsonEncode(tracks); + await put({ name: "tracks.json", data }); +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +async function get({ name }: { name: string }) { + const handle: FileSystemDirectoryHandle | null = (await IDB.get(IDB_DEVICE_KEY)) ?? null; + if (!handle) throw new Error("Storage not configured properly, handle not found."); + + try { + const fileHandle = await handle.getFileHandle(name); + const file = await fileHandle.getFile(); + const data = await file.bytes(); + return data; + } catch (err) { + return undefined; + } +} + +async function put({ data, name }: { data: Uint8Array; name: string }) { + const handle: FileSystemDirectoryHandle | null = (await IDB.get(IDB_DEVICE_KEY)) ?? null; + if (!handle) throw new Error("Storage not configured properly, handle not found."); + const fileHandle = await handle.getFileHandle(name, { create: true }); + const stream = await fileHandle.createWritable(); + await stream.write(data); + await stream.close(); +} diff --git a/src/scripts/processor/artwork/constants.ts b/src/scripts/processor/artwork/constants.ts new file mode 100644 index 000000000..577ca413a --- /dev/null +++ b/src/scripts/processor/artwork/constants.ts @@ -0,0 +1,2 @@ +export const IDB_PREFIX = "@applets/processor/artwork"; +export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/artwork`; diff --git a/src/scripts/processor/artwork/types.d.ts b/src/scripts/processor/artwork/types.d.ts new file mode 100644 index 000000000..a8d316f05 --- /dev/null +++ b/src/scripts/processor/artwork/types.d.ts @@ -0,0 +1,21 @@ +import type { TrackTags } from "@applets/core/types"; + +export type Artwork = { + bytes: Uint8Array; + mime: string; +}; + +export type ArtworkRequest = { + cacheId: string; + mimeType?: string; + stream?: ReadableStream; + tags?: Tags; + urls?: Urls; + variousArtists?: boolean; +}; + +// export type State = { +// artwork: Record; +// }; + +export type Urls = { get: string; head: string }; diff --git a/src/scripts/processor/artwork/worker.ts b/src/scripts/processor/artwork/worker.ts new file mode 100644 index 000000000..73059bccb --- /dev/null +++ b/src/scripts/processor/artwork/worker.ts @@ -0,0 +1,214 @@ +import type { IPicture } from "music-metadata"; +import * as IDB from "idb-keyval"; + +import type { Artwork, ArtworkRequest } from "./types"; +import type { Extraction } from "../metadata/types"; +import { provide } from "@scripts/common"; +import { IDB_ARTWORK_PREFIX } from "./constants"; +import { musicMetadataTags } from "../metadata/common"; + +// State +let queue: ArtworkRequest[] = []; + +//////////////////////////////////////////// +// SETUP +//////////////////////////////////////////// + +const actions = { + artwork, + supply, +}; + +const { tasks } = provide({ actions, tasks: actions }); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +async function artwork(request: ArtworkRequest) { + const art = await processRequest(request); + return art; +} + +function supply(items: ArtworkRequest[]) { + const exe = !queue[0]; + queue = [...queue, ...items]; + if (exe) shiftQueue(); +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// +function escapeLucene(str: string) { + return [].map + .call(str, (char) => { + if ( + char === "+" || + char === "-" || + char === "&" || + char === "|" || + char === "!" || + char === "(" || + char === ")" || + char === "{" || + char === "}" || + char === "[" || + char === "]" || + char === "^" || + char === '"' || + char === "~" || + char === "*" || + char === "?" || + char === ":" || + char === "\\" || + char === "/" + ) + return "\\" + char; + else return char; + }) + .join(""); +} + +async function lastFm(req: ArtworkRequest): Promise { + if (!navigator.onLine) return []; + + const query = req.tags?.artist; + + return await fetch( + `https://ws.audioscrobbler.com/2.0/?method=album.search&album=${query}&api_key=4f0fe85b67baef8bb7d008a8754a95e5&format=json`, + ) + .then((r) => r.json()) + .then((r) => lastFmCover(r.results.albummatches.album)) + .catch((err) => { + console.error(err); + return []; + }); +} + +async function lastFmCover(remainingMatches: any[]): Promise { + const album = remainingMatches[0]; + const url = album ? album.image[album.image.length - 1]["#text"] : null; + + return url && url !== "" + ? await fetch(url) + .then((r) => r.blob()) + .then(async (b) => [ + { bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), mime: b.type }, + ]) + .catch((err) => { + console.error(err); + return lastFmCover(remainingMatches.slice(1)); + }) + : album + ? lastFmCover(remainingMatches.slice(1)) + : []; +} + +async function musicBrainz(req: ArtworkRequest): Promise { + const artist = req.tags?.artist; + const album = req.tags?.album; + + if (!navigator.onLine) return []; + if (!album && !artist) return []; + + const query = + `release:"${escapeLucene(album || "")}"` + + (req.variousArtists ? `` : ` AND artistname:"${escapeLucene(artist || "")}"`); + const encodedQuery = encodeURIComponent(query); + + return await fetch(`https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`) + .then((r) => r.json()) + .then((r) => { + if (r.releases.length === 0 && !req.variousArtists) { + return musicBrainz({ ...req, variousArtists: true }); + } else { + return musicBrainzCover(r.releases, req); + } + }) + .catch((err) => { + console.error(err); + return []; + }); +} + +async function musicBrainzCover(remainingReleases: any[], req: ArtworkRequest): Promise { + const release = remainingReleases[0]; + if (!release) return []; + + const credit = release?.["artist-credit"]?.[0]?.name; + if (req.variousArtists && credit !== "Various Artists" && credit !== req.tags?.artist) return []; + + return await fetch(`https://coverartarchive.org/release/${release.id}/front-1200`) + .then((r) => r.blob()) + .then(async (b) => { + if (b.type.startsWith("image/")) { + return [{ bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), mime: b.type }]; + } else { + return musicBrainzCover(remainingReleases.slice(1), req); + } + }) + .catch((err) => { + console.error(err); + return musicBrainzCover(remainingReleases.slice(1), req); + }); +} + +async function processRequest(req: ArtworkRequest): Promise { + // Check if already processed + // TODO: Retry if none was found? + const cache = await IDB.get(`${IDB_ARTWORK_PREFIX}/${req.cacheId}`); + if (cache && Array.isArray(cache) && cache.length) return cache; + + // Request override + if (req.tags?.artist?.toUpperCase() === "VA") { + req.variousArtists = true; + } + + // 🚀 + let art: Artwork[] = []; + + // Get metadata + possible artwork from file metadata + const meta = await musicMetadataTags({ ...req, includeArtwork: true }).catch((err) => { + console.error("music-metadata error", err); + const extraction: Extraction = {}; + return extraction; + }); + + if (!req.tags && meta.tags) req.tags = meta.tags; + + // Add artwork from metadata + const fromMeta = + meta.artwork?.map((a: IPicture) => { + return { bytes: a.data, mime: a.format }; + }) || []; + + art.push(...fromMeta); + + // If no artwork, try finding it on other sources + if (art.length === 0) { + const fromMusicBrainz = await musicBrainz(req); + art.push(...fromMusicBrainz); + } + + if (art.length === 0) { + const fromLastFm = await lastFm(req); + art.push(...fromLastFm); + } + + // Save artwork to IDB + await IDB.set(`${IDB_ARTWORK_PREFIX}/${req.cacheId}`, art); + + // Fin + return art; +} + +async function shiftQueue() { + const next = queue.shift(); + if (!next) return; + + await processRequest(next); + await shiftQueue(); +} diff --git a/src/scripts/processor/metadata/common.ts b/src/scripts/processor/metadata/common.ts new file mode 100644 index 000000000..9c7f7bb06 --- /dev/null +++ b/src/scripts/processor/metadata/common.ts @@ -0,0 +1,70 @@ +import { parseBlob, parseFromTokenizer, parseWebStream } from "music-metadata"; +import * as URI from "uri-js"; +import * as HTTP_TOKENIZER from "@tokenizer/http"; +import * as RANGE_TOKENIZER from "@tokenizer/range"; + +import type { TrackStats, TrackTags } from "@applets/core/types"; +import type { Extraction, Urls } from "./types"; + +// 🛠️ + +export async function musicMetadataTags({ + includeArtwork, + mimeType, + stream, + urls, +}: { + includeArtwork?: boolean; + mimeType?: string; + stream?: ReadableStream; + urls?: Urls; +}): Promise { + const uri = urls ? URI.parse(urls.get) : undefined; + const pathParts = uri?.path?.split("/"); + const filename = pathParts?.[pathParts.length - 1]; + + let meta; + + if (urls?.get.startsWith("blob:")) { + const blob = await fetch(urls.get).then((r) => r.blob()); + meta = await parseBlob(blob, { skipCovers: !includeArtwork }); + } else if (urls) { + const httpClient = new HTTP_TOKENIZER.HttpClient(urls.head, { resolveUrl: false }); + httpClient.resolvedUrl = urls.get; + const getHeadInfo = httpClient.getHeadInfo; + + // FUCKAROUND: Not sure of the downsides of this + httpClient.getHeadInfo = async () => { + const info = await getHeadInfo.call(httpClient); + return { ...info, acceptPartialRequests: true }; + }; + + const tokenizer = await RANGE_TOKENIZER.tokenizer(httpClient); + + meta = await parseFromTokenizer(tokenizer, { skipCovers: !includeArtwork }); + } else if (stream) { + meta = await parseWebStream(stream, { mimeType }, { skipCovers: !includeArtwork }); + } else { + throw new Error("Missing args, need either some urls or a stream."); + } + + const stats: TrackStats = { + duration: meta.format.duration, + }; + + const tags: TrackTags = { + album: meta.common.album, + artist: meta.common.artist, + disc: { no: meta.common.disk.no || 1, of: meta.common.disk.of ?? undefined }, + genre: Array.isArray(meta.common.genre) ? meta.common.genre[0] : meta.common.genre, + title: meta.common.title || filename || urls?.head || "Unknown", + track: { no: meta.common.track.no || 1, of: meta.common.track.of ?? undefined }, + year: meta.common.year, + }; + + return { + artwork: includeArtwork ? meta.common.picture : undefined, + stats, + tags, + }; +} diff --git a/src/scripts/processor/metadata/types.d.ts b/src/scripts/processor/metadata/types.d.ts new file mode 100644 index 000000000..e0ef7e68c --- /dev/null +++ b/src/scripts/processor/metadata/types.d.ts @@ -0,0 +1,5 @@ +import type { IPicture } from "music-metadata"; +import type { TrackStats, TrackTags } from "@applets/core/types"; + +export type Extraction = { artwork?: IPicture[]; stats?: TrackStats; tags?: TrackTags }; +export type Urls = { get: string; head: string }; diff --git a/src/scripts/processor/metadata/worker.ts b/src/scripts/processor/metadata/worker.ts new file mode 100644 index 000000000..f00b1f920 --- /dev/null +++ b/src/scripts/processor/metadata/worker.ts @@ -0,0 +1,39 @@ +import type { Extraction, Urls } from "./types.d.ts"; +import { provide, transfer } from "@scripts/common"; +import { musicMetadataTags } from "./common.ts"; + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// +const actions = { + supply, +}; + +const { tasks } = provide({ + actions, + tasks: actions, +}); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +// Actions + +async function supply(args: { + includeArtwork?: boolean; + mimeType?: string; + stream?: ReadableStream; + urls?: Urls; +}): Promise { + // Construct records + // TODO: Use other metadata lib as fallback: https://github.com/buzz/mediainfo.js + const response = await musicMetadataTags(args).catch((err): Extraction => { + console.warn("Metadata processor error:", err); + console.log(args); + + return {}; + }); + + // Fin + return transfer(response); +} diff --git a/src/scripts/processor/search/constants.ts b/src/scripts/processor/search/constants.ts new file mode 100644 index 000000000..439df873a --- /dev/null +++ b/src/scripts/processor/search/constants.ts @@ -0,0 +1,17 @@ +export const SCHEMA = { + id: "string" as const, + kind: "string" as const, + tags: { + album: "string" as const, + artist: "string" as const, + genre: "string" as const, + title: "string" as const, + year: "number" as const, + }, + + // TODO: + // isFavorite: "boolean" as const, + // inPlaylists: [ ... ], + + embeddings: "vector[512]" as const, +}; diff --git a/src/scripts/processor/search/types.d.ts b/src/scripts/processor/search/types.d.ts new file mode 100644 index 000000000..f0ffbe3ff --- /dev/null +++ b/src/scripts/processor/search/types.d.ts @@ -0,0 +1,3 @@ +export type State = { + inserted: Set; +}; diff --git a/src/scripts/processor/search/worker.ts b/src/scripts/processor/search/worker.ts new file mode 100644 index 000000000..4b65aef8c --- /dev/null +++ b/src/scripts/processor/search/worker.ts @@ -0,0 +1,107 @@ +import * as Orama from "@orama/orama"; +// import { pluginQPS } from "@orama/plugin-qps"; + +import type { Track } from "@applets/core/types"; +import { expose, provide, transfer } from "@scripts/common"; +import { SCHEMA } from "./constants"; +import type { State } from "./types"; + +//////////////////////////////////////////// +// SETUP +//////////////////////////////////////////// + +let state: State = { + inserted: new Set(), +}; + +// TODO: Generate embeddings plugin +// +// I tried this and getting some bundler/vite errors about a default import. +// +// const plugin = await pluginEmbeddings({ +// embeddings: { +// defaultProperty: "embeddings", +// onInsert: { +// generate: true, +// // Properties to use for generating embeddings at insert time. +// // These properties will be concatenated and used to generate embeddings. +// properties: ["album", "artist", "title", "year", "kind", "genre"], +// // verbose: true, +// }, +// }, +// }); +// +// TODO: +// +// Does not work either. +// `TypeError: a is undefined` +// +// pluginQPS() + +const PLUGINS: Orama.OramaPlugin[] = []; + +// Search through tracks +const db = Orama.create({ + schema: SCHEMA, + plugins: PLUGINS, + + // components: { + // TODO: + // https://docs.orama.com/open-source/usage/insert#remote-document-storing + // documentStore: { ... } + // }, +}); + +// 🚀 + +const actions = { + search, + supply, +}; + +const { tasks } = provide({ + actions, + tasks: actions, +}); + +export type Actions = typeof actions; +export type Tasks = typeof tasks; + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +async function search(term: string): Promise { + const results = await Orama.search(db, { + // mode: "hybrid", + term, + }); + + const tracks = results.hits.map((hit) => hit.document as unknown as Track); + return transfer(tracks); +} + +async function supply(tracks: Track[]) { + // TODO: Generate a hash based on the track itself, + // so we can detect changes to tags or other data. + + const ids = []; + const tracksMap: Record = {}; + + tracks.forEach((track) => { + ids.push(track.id); + tracksMap[track.id] = track; + }); + + const currentSet = state.inserted; + const newSet = new Set(tracks.map((t) => t.id)); + + const removedIds = currentSet.difference(newSet); + const newIds = newSet.difference(currentSet); + const newTracks = Array.from(newIds).map((id) => tracksMap[id]); + + await Orama.removeMultiple(db, Array.from(removedIds)); + await Orama.insertMultiple(db, newTracks); + + state.inserted = newSet; +} diff --git a/src/scripts/signal.ts b/src/scripts/signal.ts new file mode 100644 index 000000000..0aee4f100 --- /dev/null +++ b/src/scripts/signal.ts @@ -0,0 +1,65 @@ +import { Signal } from "signal-polyfill"; + +// SIGNAL + +export type Signal = () => T; + +export const signal = (initial: T): [Signal, (value: T) => void] => { + const state = new Signal.State(initial); + const get = () => state.get(); + const set = (value: T) => state.set(value); + return [get, set]; +}; + +// EFFECT + +export const throttled = ( + job: () => void, + queue: (callback: () => void) => void = queueMicrotask, +): (() => void) => { + let isScheduled = false; + + const perform = () => { + job(); + isScheduled = false; + }; + + const schedule = () => { + if (!isScheduled) { + isScheduled = true; + queue(perform); + } + }; + + return schedule; +}; + +const watcher = new Signal.subtle.Watcher( + throttled(() => { + for (const signal of watcher.getPending()) { + signal.get(); + } + watcher.watch(); + }), +); + +export type Cancel = () => void; + +export const effect = (perform: () => Cancel | void) => { + let cleanup: Cancel | undefined; + + const signal = new Signal.Computed(() => { + cleanup?.(); + cleanup = perform() ?? undefined; + }); + + watcher.watch(signal); + signal.get(); + + const dispose = () => { + cleanup?.(); + watcher.unwatch(signal); + }; + + return dispose; +}; diff --git a/src/scripts/theme/blur/index.ts b/src/scripts/theme/blur/index.ts new file mode 100644 index 000000000..770f8972d --- /dev/null +++ b/src/scripts/theme/blur/index.ts @@ -0,0 +1,37 @@ +import type { ManagedOutput } from "@applets/core/types"; +import { applet } from "@scripts/applet/common"; + +//////////////////////////////////////////// +// 🗂️ Applets +//////////////////////////////////////////// +import type * as QueueEngine from "@applets/engine/queue/types.d.ts"; + +const container = document.querySelector("main"); +if (!container) throw new Error("Missing container"); + +const labelA = "Deck A"; +const labelB = "Deck B"; + +const configurator = { + output: await applet("/configurator/output"), +}; + +const _constituent = { + a: applet("/constituent/blur/artwork-controller", { container, groupId: labelA }), + b: applet("/constituent/blur/artwork-controller", { container, groupId: labelB }), +}; + +// TODO: +// const _orchestrator = { +// primary: applet("/orchestrator/primary", { groupId: labelA }), +// }; + +// const engine = { +// queue: { +// a: await applet("/engine/queue", { groupId: labelA }), +// b: await applet("/engine/queue", { groupId: labelB }), +// }, +// }; + +// const deckA = engine.queue.a; +// const deckB = engine.queue.b; diff --git a/src/scripts/theme/pilot/index.ts b/src/scripts/theme/pilot/index.ts new file mode 100644 index 000000000..ef53b72e2 --- /dev/null +++ b/src/scripts/theme/pilot/index.ts @@ -0,0 +1,90 @@ +import { applet, reactive } from "@scripts/applet/common"; + +//////////////////////////////////////////// +// 🗂️ Applets +//////////////////////////////////////////// +import type * as AudioEngine from "@applets/engine/audio/types.d.ts"; +import type * as QueueEngine from "@applets/engine/queue/types.d.ts"; + +import type * as AudioUI from "@applets/theme/pilot/audio/types"; + +const engine = { + audio: await applet("/engine/audio"), + queue: await applet("/engine/queue"), +}; + +const orchestrator = { + queueAudio: applet("/orchestrator/queue-audio"), + queueTracks: applet("/orchestrator/queue-tracks"), + processTracks: applet("/orchestrator/process-tracks"), +}; + +const ui = { + audio: await applet("/theme/pilot/audio/", { setHeight: true }), +}; + +//////////////////////////////////////////// +// ⚙️ [Connections → Engines] +// 🔉 AUDIO +//////////////////////////////////////////// + +// NOTE: +// These could probably be optimised, but it works. + +reactive( + engine.audio, + (data) => + data.isPlaying && (data.items[engine.queue.data.now?.id ?? Infinity]?.isPlaying ?? false), + (isPlaying) => ui.audio.sendAction("modifyIsPlaying", isPlaying), +); + +reactive( + engine.audio, + (data) => data.items[engine.queue.data.now?.id ?? Infinity]?.progress ?? 0, + (progress: number) => ui.audio.sendAction("modifyProgress", progress), +); + +//////////////////////////////////////////// +// 🌅 [Connections → UI] +// 🔉 AUDIO +//////////////////////////////////////////// + +let initialAudioChecked = false; + +reactive( + ui.audio, + (data) => data.isPlaying, + async (isPlaying) => { + const audioId = engine.queue.data.now?.id; + + // Sync audio state and ui state + // TODO: Figure out a better way to do this + if (!initialAudioChecked) { + if (engine.audio.data.isPlaying && !isPlaying) { + ui.audio.sendAction("modifyIsPlaying", true); + initialAudioChecked = true; + return; + } + } + + // Otherwise just control the audio + if (isPlaying) { + engine.audio.sendAction("play", { audioId }); + } else { + engine.audio.sendAction("pause", { audioId }); + } + }, +); + +reactive( + ui.audio, + (data: AudioUI.State) => data.seekPosition, + (seekPosition) => { + if (seekPosition !== undefined && engine.queue.data.now?.id) { + engine.audio.sendAction("seek", { + percentage: seekPosition, + audioId: engine.queue.data.now.id, + }); + } + }, +); diff --git a/src/scripts/theme/webamp/index.ts b/src/scripts/theme/webamp/index.ts new file mode 100644 index 000000000..a69afeff8 --- /dev/null +++ b/src/scripts/theme/webamp/index.ts @@ -0,0 +1,117 @@ +import type { URLTrack } from "webamp"; +import Webamp from "webamp"; + +import type { GroupConsult, ManagedOutput, ResolvedUri, Track } from "@applets/core/types.d.ts"; +import { applet, inputUrl, wait } from "@scripts/applet/common"; + +//////////////////////////////////////////// +// 🗂️ Applets +//////////////////////////////////////////// +const configurator = { + input: applet("/configurator/input"), + output: applet("/configurator/output"), +}; + +const orchestrator = { + queueAudio: applet("/orchestrator/queue-audio"), + queueTracks: applet("/orchestrator/queue-tracks"), + processTracks: applet("/orchestrator/process-tracks"), +}; + +//////////////////////////////////////////// +// ⚡ +//////////////////////////////////////////// +const amp = new Webamp({ + initialTracks: [], +}); + +// Override +const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); + +async function loadOverride(uri: string, autoPlay: boolean) { + const resp = await inputUrl(await configurator.input, uri); + if (!resp) throw new Error("Failed to resolve URI"); + return await loadFromUrl(resp.url, autoPlay); +} + +amp.media.loadFromUrl = loadOverride.bind(amp.media); + +// Render +const ampNode = document.createElement("div"); +ampNode.style = "height: 100vh; left: 0; position: absolute; top: 0; width: 100%; z-index: -1000;"; +document.body.appendChild(ampNode); +amp.renderWhenReady(ampNode); + +// Wait for tracks to load +configurator.output + .then((output) => { + output.ondata = loadAndInsert; + return wait(output, (d) => d?.tracks.state === "loaded"); + }) + .then(async () => { + await loadAndInsert(); + }); + +// Load & insert +let inserting = false; +let tracksCacheId: string | undefined = undefined; + +async function loadAndInsert() { + const output = await configurator.output; + + if (output.data.tracks.state !== "loaded") return; + if (output.data.tracks.cacheId === tracksCacheId) return; + if (inserting) return; + + inserting = true; + tracksCacheId = output.data.tracks.cacheId; + const tracks = await loadTracks(); + + // TODO: This kinda messes up the UI, + // but at least the active audio doesn't stop playing. + amp.store.dispatch({ type: "REMOVE_ALL_TRACKS" }); + + // TODO: Webamp blows up if you add too much tracks + amp.appendTracks(tracks.slice(0, 1000)); + + const status = amp.getMediaStatus(); + if (status !== "PLAYING") amp.nextTrack(); + + inserting = false; +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// +async function loadTracks(): Promise { + const input = await configurator.input; + const output = await configurator.output; + + const groups = await input.sendAction( + "groupConsult", + output.data.tracks.collection, + { timeoutDuration: 60000 * 5, worker: true }, + ); + + // Available tracks + let tracks: Track[] = []; + + Object.values(groups).forEach((value) => { + if (value.available === false) return; + tracks = tracks.concat(value.tracks); + }, []); + + return tracks.map((track) => { + const urlTrack: URLTrack = { + url: track.uri, + metaData: { + title: track.tags?.title || "", + artist: track.tags?.artist || "", + album: track.tags?.album, + }, + duration: track.stats?.duration, + }; + + return urlTrack; + }); +} diff --git a/src/styles/animations.css b/src/styles/animations.css new file mode 100644 index 000000000..c6379963b --- /dev/null +++ b/src/styles/animations.css @@ -0,0 +1,54 @@ +:root { + --animate-spin: spin 1s linear infinite; + --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; + --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; + --animate-bounce: bounce 1s infinite; +} + +.animate-spin { + animation: var(--animate-spin); +} + +.animate-ping { + animation: var(--animate-ping); +} + +.animate-pulse { + animation: var(--animate-pulse); +} + +.animate-bounce { + animation: var(--animate-bounce); +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +@keyframes ping { + 75%, + 100% { + transform: scale(2); + opacity: 0; + } +} + +@keyframes pulse { + 50% { + opacity: 0.5; + } +} + +@keyframes bounce { + 0%, + 100% { + transform: translateY(-25%); + animation-timing-function: cubic-bezier(0.8, 0, 1, 1); + } + 50% { + transform: none; + animation-timing-function: cubic-bezier(0, 0, 0.2, 1); + } +} diff --git a/src/styles/applet/common.css b/src/styles/applet/common.css new file mode 100644 index 000000000..86c12e429 --- /dev/null +++ b/src/styles/applet/common.css @@ -0,0 +1,5 @@ +.with-icon { + align-items: center; + display: inline-flex; + gap: 0.75em; +} diff --git a/src/styles/diffuse/colors.css b/src/styles/diffuse/colors.css new file mode 100644 index 000000000..182d2fbb8 --- /dev/null +++ b/src/styles/diffuse/colors.css @@ -0,0 +1,17 @@ +:root { + /* Colors */ + --color-1: oklch(4.1308% 0.25306 109.22); + --color-2: oklch(98.369% 0.01834 67.664); + --color-3: oklch(26.787% 0.00168 186.65); + --accent: oklch(86.947% 0.25527 28.789); + + --bg-color: var(--color-2); + --text-color: var(--color-1); +} + +@media (prefers-color-scheme: dark) { + :root { + --bg-color: var(--color-3); + --text-color: var(--color-2); + } +} diff --git a/src/styles/diffuse/fonts.css b/src/styles/diffuse/fonts.css new file mode 100644 index 000000000..e1b9d1738 --- /dev/null +++ b/src/styles/diffuse/fonts.css @@ -0,0 +1,13 @@ +:root { + font-family: "Inter", sans-serif; + font-size: var(--fs-base); +} + +@supports (font-variation-settings: normal) { + :root { + font-family: "InterVariable", sans-serif; + font-feature-settings: + /* "zero" 2, */ "ss03" 2; + font-optical-sizing: auto; + } +} diff --git a/src/styles/fonts.css b/src/styles/fonts.css new file mode 100644 index 000000000..62a900f84 --- /dev/null +++ b/src/styles/fonts.css @@ -0,0 +1,15 @@ +@font-face { + font-display: swap; + font-family: InterVariable; + font-style: normal; + font-weight: 100 900; + src: url("/fonts/InterVariable.woff2") format("woff2"); +} + +@font-face { + font-display: swap; + font-family: InterVariable; + font-style: italic; + font-weight: 100 900; + src: url("/fonts/InterVariable-Italic.woff2") format("woff2"); +} diff --git a/src/styles/icons/iconoir.css b/src/styles/icons/iconoir.css new file mode 100644 index 000000000..1c68c5bd5 --- /dev/null +++ b/src/styles/icons/iconoir.css @@ -0,0 +1 @@ +@import "iconoir/css/iconoir.css"; diff --git a/src/styles/icons/phosphor.css b/src/styles/icons/phosphor.css new file mode 100644 index 000000000..5661750d2 --- /dev/null +++ b/src/styles/icons/phosphor.css @@ -0,0 +1 @@ +@import "@phosphor-icons/fill/style.css"; diff --git a/src/styles/page/index.css b/src/styles/page/index.css new file mode 100644 index 000000000..d1a2355d0 --- /dev/null +++ b/src/styles/page/index.css @@ -0,0 +1,76 @@ +@import "../diffuse/colors.css"; +@import "../diffuse/fonts.css"; + +body { + background-color: var(--bg-color); + color: var(--text-color); +} + +header, +main { + margin: var(--space-md) var(--space-lg); +} + +a { + color: inherit; + text-underline-offset: 6px; +} + +h1 svg { + fill: oklch(from var(--bg-color) calc(l - 0.5) c h); + opacity: 0.125; + + @media (prefers-color-scheme: dark) { + & { + fill: var(--text-color); + opacity: 0.25; + } + } +} + +h2 { + /* color: oklch(from var(--bg-color) calc(l - 0.25) c h); */ + color: var(--accent); + + font-size: var(--fs-xl); + font-weight: 900; + letter-spacing: -0.0125em; + line-height: 1; + margin: var(--space-2xl) 0 var(--space-md); + text-transform: uppercase; +} + +h3 { + font-size: var(--fs-md); + font-weight: 800; + line-height: 1; + margin: var(--space-xl) 0 var(--space-sm); + text-transform: uppercase; +} + +h2 + h3 { + margin-top: var(--space-md); +} + +ul, +ol { + padding-left: var(--space-md); +} + +p, +ul, +ol { + margin: var(--space-sm) 0; + max-width: var(--container-sm); +} + +.columns { + display: flex; + flex-wrap: wrap; + gap: 0 var(--space-3xl); +} + +.applet { + min-width: min(var(--container-xs), 100%); + width: 32.5%; +} diff --git a/src/styles/pico.scss b/src/styles/pico.scss new file mode 100644 index 000000000..cab7d1325 --- /dev/null +++ b/src/styles/pico.scss @@ -0,0 +1,6 @@ +@use "@picocss/pico/scss/pico" with ( + $enable-responsive-spacings: true, + $enable-responsive-typography: true +); + +@use "@picocss/pico/scss/colors/utilities"; diff --git a/src/styles/reset.css b/src/styles/reset.css new file mode 100644 index 000000000..b2a838f8e --- /dev/null +++ b/src/styles/reset.css @@ -0,0 +1,119 @@ +*, +*::before, +*::after { + box-sizing: border-box; +} + +* { + margin: 0; +} + +html, +:host { + font-family: ui-sans-serif, system-ui, sans-serif; + font-synthesis: none; + line-height: 1.5; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: transparent; +} + +body { + line-height: inherit; +} + +img, +picture, +video, +canvas, +svg { + display: block; + max-width: 100%; +} + +input, +button, +textarea, +select { + font: inherit; +} + +p, +h1, +h2, +h3, +h4, +h5, +h6 { + overflow-wrap: break-word; +} + +p { + text-wrap: pretty; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + text-wrap: balance; +} + +#root, +#__next { + isolation: isolate; +} + +small { + font-size: 80%; +} + +progress { + vertical-align: baseline; +} + +/* + 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) + 2. Set the default placeholder color to a semi-transparent version of the current text color. +*/ + +::placeholder { + opacity: 1; /* 1 */ + color: color-mix(in oklab, currentColor 50%, transparent); /* 2 */ +} + +/* + Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* + Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* + Correct the inability to style the border radius in iOS Safari. +*/ + +button, +input:where([type="button"], [type="reset"], [type="submit"]), +::file-selector-button { + appearance: button; +} + +/* + Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} diff --git a/src/styles/theme/blur/index.css b/src/styles/theme/blur/index.css new file mode 100644 index 000000000..81c35c26f --- /dev/null +++ b/src/styles/theme/blur/index.css @@ -0,0 +1,78 @@ +@import "./variables.css"; +@import "../../diffuse/colors.css"; +@import "../../diffuse/fonts.css"; + +/*********************************** + * Base + ***********************************/ +body { + background-color: oklch(from var(--bg-color) calc(l - 0.025) c h); + color: var(--text-color); + display: flex; + flex-direction: column; + overflow: hidden; + height: 100dvh; +} + +iframe { + border: 0; +} + +/*********************************** + * Applets (No UI) + ***********************************/ +iframe[src*="/configurator/"], +iframe[src*="/engine/"], +iframe[src*="/input/"], +iframe[src*="/orchestrator/"], +iframe[src*="/processor/"], +iframe[src*="/output/"] { + height: 0; + left: 110vw; + opacity: 0; + overflow: hidden; + pointer-events: none; + position: absolute; + top: 110vh; + width: 0; +} + +/* Audio is a special case, iframe needs to be "visible" in order to play the audio. */ +#applet__engine__audio { + height: 1px; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 1px; +} + +/*********************************** + * Main + ***********************************/ +main { + display: grid; + gap: var(--space-2xs); + grid-template-columns: repeat(3, 1fr); + grid-template-rows: auto; + height: 100dvh; + overflow: hidden; + padding: var(--space-md) var(--space-md); + + & iframe { + border-radius: 6px; + } +} + +/*********************************** + * Applets + ***********************************/ + +iframe[src*="/artwork-controller/"] { + grid-column: 3; + height: 100%; + justify-self: end; + max-width: var(--container-3xs); + width: 100%; +} diff --git a/src/styles/theme/blur/variables.css b/src/styles/theme/blur/variables.css new file mode 100644 index 000000000..89795a72c --- /dev/null +++ b/src/styles/theme/blur/variables.css @@ -0,0 +1,26 @@ +:root { + /* Colors */ + /* https://farbvelo.elastiq.ch/?s=eyJzIjoiZTBjNjIyMTdiNTcxZSIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4xNzUsIm1kIjo2MCwiY20iOiJsYWIiLCJmIjoiTGVnYWN5IiwiYyI6ImhzbHV2Iiwic2MiOmZhbHNlLCJidyI6dHJ1ZSwiYWgiOmZhbHNlLCJpdSI6IiIsImxtIjp0cnVlLCJzbSI6ZmFsc2UsImN2IjoiaGV4IiwicW0iOiJhcnQtcGFsZXR0ZSIsIm5sIjoiYmVzdE9mIn0= */ + --moonscape: #7f6c71; + --grandma’s-pink-tiles: #e1bac0; + --cinderella: #f8d1c6; + --young-apricot: #f8d7b6; + --cereal-flake: #f0d8ad; + --oatmeal: #cdc5b9; + + /* https://farbvelo.elastiq.ch/?s=eyJzIjoiZmZjY2JkZDg2ZjEzYiIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4xNzgzMDcwODQxNjMzNDY2LCJtZCI6NjAsImNtIjoibGFiIiwiZiI6IkxlZ2FjeSIsImMiOiJoc2x1diIsInNjIjpmYWxzZSwiYnciOnRydWUsImFoIjpmYWxzZSwiaXUiOiIiLCJsbSI6dHJ1ZSwic20iOmZhbHNlLCJjdiI6ImhzbCIsInFtIjoiYXJ0LXBhbGV0dGUiLCJubCI6ImJlc3RPZiJ9 */ + --made-in-the-shade: #67717c; + --misty-mountains: #b8cce0; + --lucid-dreams: #c7e6f4; + --icy-breeze: #c2eff1; + --crushed-ice: #bdf5ed; + --water-leaf: #b7efe7; + + /* https://farbvelo.elastiq.ch/?s=eyJzIjoiODJiN2FjMjU1ODRiOCIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4yMTkxOTgyMDcxNzEzMTQ3LCJtZCI6NjAsImNtIjoibGFiIiwiZiI6IkxlZ2FjeSIsImMiOiJoc2x1diIsInNjIjpmYWxzZSwiYnciOnRydWUsImFoIjpmYWxzZSwiaXUiOiIiLCJsbSI6dHJ1ZSwic20iOmZhbHNlLCJjdiI6ImhleCIsInFtIjoiYXJ0LXBhbGV0dGUiLCJubCI6ImJlc3RPZiJ9 */ + --wizards-brew: #9d8bb3; + --innocent-snowdrop: #cec0fa; + --foggy-plateau: #d5d2fb; + --puffy-cloud: #dce3fb; + --diamond-white: #e1f4fb; + --delicate-cloud: #d9dbe4; +} diff --git a/src/styles/theme/pilot/index.css b/src/styles/theme/pilot/index.css new file mode 100644 index 000000000..daf99920e --- /dev/null +++ b/src/styles/theme/pilot/index.css @@ -0,0 +1,78 @@ +@import "./variables.css"; + +/*********************************** + * Fonts + ***********************************/ +:root { + font-family: "Inter", sans-serif; + font-size: var(--fs-base); +} + +@supports (font-variation-settings: normal) { + :root { + font-family: "InterVariable", sans-serif; + font-feature-settings: + "ss03" 2, + "ss02" 2; + font-optical-sizing: auto; + } +} + +body { + background-color: var(--delicate-cloud); + color: var(--made-in-the-shade); + display: flex; + flex-direction: column; + overflow: hidden; + height: 100dvh; +} + +iframe { + border: 0; +} + +/*********************************** + * Applets (UI) + ***********************************/ +#applet__ui__audio { + opacity: 0; + pointer-events: none; + transition: 375ms opacity; + transition-delay: 250ms; + width: 100%; + + &.has-loaded { + opacity: 1; + pointer-events: initial; + } +} + +/*********************************** + * Applets (No UI) + ***********************************/ +iframe[src*="/configurator/"], +iframe[src*="/engine/"], +iframe[src*="/input/"], +iframe[src*="/orchestrator/"], +iframe[src*="/processor/"], +iframe[src*="/output/"] { + height: 0; + left: 110vw; + opacity: 0; + overflow: hidden; + pointer-events: none; + position: absolute; + top: 110vh; + width: 0; +} + +/* Audio is a special case, iframe needs to be "visible" in order to play the audio. */ +#applet__engine__audio { + height: 1px; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 1px; +} diff --git a/src/styles/theme/pilot/variables.css b/src/styles/theme/pilot/variables.css new file mode 100644 index 000000000..89795a72c --- /dev/null +++ b/src/styles/theme/pilot/variables.css @@ -0,0 +1,26 @@ +:root { + /* Colors */ + /* https://farbvelo.elastiq.ch/?s=eyJzIjoiZTBjNjIyMTdiNTcxZSIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4xNzUsIm1kIjo2MCwiY20iOiJsYWIiLCJmIjoiTGVnYWN5IiwiYyI6ImhzbHV2Iiwic2MiOmZhbHNlLCJidyI6dHJ1ZSwiYWgiOmZhbHNlLCJpdSI6IiIsImxtIjp0cnVlLCJzbSI6ZmFsc2UsImN2IjoiaGV4IiwicW0iOiJhcnQtcGFsZXR0ZSIsIm5sIjoiYmVzdE9mIn0= */ + --moonscape: #7f6c71; + --grandma’s-pink-tiles: #e1bac0; + --cinderella: #f8d1c6; + --young-apricot: #f8d7b6; + --cereal-flake: #f0d8ad; + --oatmeal: #cdc5b9; + + /* https://farbvelo.elastiq.ch/?s=eyJzIjoiZmZjY2JkZDg2ZjEzYiIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4xNzgzMDcwODQxNjMzNDY2LCJtZCI6NjAsImNtIjoibGFiIiwiZiI6IkxlZ2FjeSIsImMiOiJoc2x1diIsInNjIjpmYWxzZSwiYnciOnRydWUsImFoIjpmYWxzZSwiaXUiOiIiLCJsbSI6dHJ1ZSwic20iOmZhbHNlLCJjdiI6ImhzbCIsInFtIjoiYXJ0LXBhbGV0dGUiLCJubCI6ImJlc3RPZiJ9 */ + --made-in-the-shade: #67717c; + --misty-mountains: #b8cce0; + --lucid-dreams: #c7e6f4; + --icy-breeze: #c2eff1; + --crushed-ice: #bdf5ed; + --water-leaf: #b7efe7; + + /* https://farbvelo.elastiq.ch/?s=eyJzIjoiODJiN2FjMjU1ODRiOCIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4yMTkxOTgyMDcxNzEzMTQ3LCJtZCI6NjAsImNtIjoibGFiIiwiZiI6IkxlZ2FjeSIsImMiOiJoc2x1diIsInNjIjpmYWxzZSwiYnciOnRydWUsImFoIjpmYWxzZSwiaXUiOiIiLCJsbSI6dHJ1ZSwic20iOmZhbHNlLCJjdiI6ImhleCIsInFtIjoiYXJ0LXBhbGV0dGUiLCJubCI6ImJlc3RPZiJ9 */ + --wizards-brew: #9d8bb3; + --innocent-snowdrop: #cec0fa; + --foggy-plateau: #d5d2fb; + --puffy-cloud: #dce3fb; + --diamond-white: #e1f4fb; + --delicate-cloud: #d9dbe4; +} diff --git a/src/styles/theme/webamp/index.css b/src/styles/theme/webamp/index.css new file mode 100644 index 000000000..2f36b4d42 --- /dev/null +++ b/src/styles/theme/webamp/index.css @@ -0,0 +1,70 @@ +@font-face { + font-family: "Pixelated MS Sans Serif"; + src: url("/node_modules/98.css/fonts/converted/ms_sans_serif.woff2") format("woff2"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Pixelated MS Sans Serif"; + src: url("/node_modules/98.css/fonts/converted/ms_sans_serif_bold.woff2") format("woff2"); + font-weight: 700; + font-style: normal; +} + +body { + background: #3a6ea5; + color: white; + font-family: "Pixelated MS Sans Serif", sans-serif; + font-size: 12px; + margin: 12px; +} + +main { +} + +iframe { + display: none; +} + +/*********************************** + * Desktop + ***********************************/ +.desktop { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.desktop__item { + align-items: center; + background: transparent; + border: 0; + cursor: pointer; + color: inherit; + display: inline-flex; + flex-direction: column; + font-family: inherit; + text-decoration: none; + + &:visited, + &:active { + color: inherit; + text-decoration: none; + } + + & > label { + cursor: inherit; + margin-top: 4px; + } + + &:focus { + border: 0; + outline: 0; + + & label { + outline: 1px dotted white; + outline-offset: 2px; + } + } +} diff --git a/src/styles/variables.css b/src/styles/variables.css new file mode 100644 index 000000000..73693dd62 --- /dev/null +++ b/src/styles/variables.css @@ -0,0 +1,82 @@ +:root { + /* Font scales */ + --fs-3xs: clamp(0.41rem, -0.06vi + 0.42rem, 0.38rem); + --fs-2xs: clamp(0.51rem, -0.02vi + 0.52rem, 0.5rem); + --fs-xs: clamp(0.64rem, 0.05vi + 0.63rem, 0.67rem); + --fs-sm: clamp(0.8rem, 0.17vi + 0.76rem, 0.89rem); + --fs-base: clamp(1rem, 0.34vi + 0.91rem, 1.19rem); + --fs-md: clamp(1.25rem, 0.61vi + 1.1rem, 1.58rem); + --fs-lg: clamp(1.56rem, 1vi + 1.31rem, 2.11rem); + --fs-xl: clamp(1.95rem, 1.56vi + 1.56rem, 2.81rem); + --fs-2xl: clamp(2.44rem, 2.38vi + 1.85rem, 3.75rem); + --fs-3xl: clamp(3.05rem, 3.54vi + 2.17rem, 5rem); + + /* Space scales */ + --space-3xs: clamp(0.25rem, 0.2216rem + 0.1136vw, 0.3125rem); + --space-2xs: clamp(0.5rem, 0.4432rem + 0.2273vw, 0.625rem); + --space-xs: clamp(0.75rem, 0.6932rem + 0.2273vw, 0.875rem); + --space-sm: clamp(1rem, 0.9148rem + 0.3409vw, 1.1875rem); + --space-md: clamp(1.5rem, 1.358rem + 0.5682vw, 1.8125rem); + --space-lg: clamp(2rem, 1.8295rem + 0.6818vw, 2.375rem); + --space-xl: clamp(3rem, 2.7443rem + 1.0227vw, 3.5625rem); + --space-2xl: clamp(4rem, 3.6591rem + 1.3636vw, 4.75rem); + --space-3xl: clamp(6rem, 5.4886rem + 2.0455vw, 7.125rem); + + /* Border-radius */ + --radius-xs: 0.125rem; + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --radius-2xl: 1rem; + --radius-3xl: 1.5rem; + --radius-4xl: 2rem; + + /* Containers */ + --container-3xs: 16rem; + --container-2xs: 18rem; + --container-xs: 20rem; + --container-sm: 24rem; + --container-md: 28rem; + --container-lg: 32rem; + --container-xl: 36rem; + --container-2xl: 42rem; + --container-3xl: 48rem; + --container-4xl: 56rem; + --container-5xl: 64rem; + --container-6xl: 72rem; + --container-7xl: 80rem; + + /* Letter-spacing */ + --tracking-tighter: -0.05em; + --tracking-tight: -0.025em; + --tracking-normal: 0em; + --tracking-wide: 0.025em; + --tracking-wider: 0.05em; + --tracking-widest: 0.1em; + + /* Line-height */ + --leading-tight: 1.25; + --leading-snug: 1.375; + --leading-normal: 1.5; + --leading-relaxed: 1.625; + --leading-loose: 2; + + /* Shadows */ + --box-shadow-2xs: 0 1px rgb(0 0 0 / 0.05); + --box-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --box-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --box-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --box-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --box-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --box-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25); + + --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15); + --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2); + --text-shadow-sm: + 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075), 0px 2px 2px rgb(0 0 0 / 0.075); + --text-shadow-md: + 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1), 0px 2px 4px rgb(0 0 0 / 0.1); + --text-shadow-lg: + 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1), 0px 4px 8px rgb(0 0 0 / 0.1); +} diff --git a/system/Build/Build.gren b/system/Build/Build.gren deleted file mode 100644 index c2399f6a3..000000000 --- a/system/Build/Build.gren +++ /dev/null @@ -1,223 +0,0 @@ -module Build exposing ( main ) - -import About.Layout -import Bytes exposing ( Bytes ) -import Bytes.Decode -import Bytes.Encode -import Dict -import Json.Encode -import Markdown -import Shikensu -import Shikensu.Bundle as Bundle -import Shikensu.Contrib as Shikensu -import Shikensu.Definition as Definition -import Shikensu.Focus exposing ( Focus(..) ) -import Shikensu.Path as Path exposing (..) -import Shikensu.Path.Encapsulated as Path.Encapsulated -import Task -import Transmutable.Html - - - --- | (• ◡•)| (❍ᴥ❍ʋ) - - -main = - Shikensu.programs - [ -- Copy static files to dist - copy (staticDir "Favicons") - , copy (staticDir "Hosting") - , copyInto "fonts" (staticDir "Fonts") - , copyInto "images" (staticDir "Images") - - , -- Copy more static files with some alterations - copyWithAlterations - { focus = staticDir "Html" - , alt = Shikensu.rename (filePath "Application.html") (filePath "index.html") - } - , copyWithAlterations - { focus = staticDir "Manifests" - , alt = Shikensu.rename (filePath "manifest.json") (filePath "site.webmanifest") - } - - , -- Render about pages - about - - , -- Make a file tree so the service worker knows what to cache - tree - ] - - - --- FOCUSES & PATHS - - -dist = - Relative - (Path.directory - [ "dist" - ] - ) - - -filePath path = - path - |> Path.fromPosix - |> Path.Encapsulated.toFile - |> Maybe.withDefault (Path.file (Array.singleton path)) - - -staticDir dirName = - Relative - (Path.directory - [ "src" - , "Static" - , dirName - ] - ) - - - --- PROGRAMS - - -about = - { focus = staticDir "About" - , sequence = read >> Task.map aboutAlts >> write - } - - -copy focus = - { focus = focus - , sequence = read >> write - } - - -copyInto dirName focus = - { focus = focus - , sequence = read >> Task.map (prefixDirname dirName) >> write - } - - -copyWithAlterations { focus, alt } = - { focus = focus - , sequence = read >> Task.map alt >> write - } - - -tree = - { focus = dist - , sequence = - Task.map - (\bundle -> - bundle.compendium - |> Array.map - (\def -> - def - |> Definition.relativePath - |> Path.toPosix - { absolute = False - } - ) - |> Array.filter (String.contains "images/Background/" >> (==) False) - |> Json.Encode.array Json.Encode.string - |> Json.Encode.encode 0 - |> stringToBytes - |> (\content -> - { baseName = "tree" - , content = Just content - , directoryPath = Path.directory [] - , extensionName = Just "json" - , metadata = Dict.empty - } - ) - |> (\def -> - { bundle - | compendium = - [ def - ] - } - ) - ) - >> write - } - - - --- ALTERATIONS - - -aboutAlts bundle = - bundle - |> Shikensu.withExtension "md" - |> lowerCasePath - |> prefixDirname "about" - |> Shikensu.renameExtension "md" "html" - |> Shikensu.permalink "index" - |> Shikensu.renderContent - (\def -> - def.content - |> Maybe.andThen bytesToString - |> Maybe.withDefault "" - |> Markdown.parse - { frontmatter = Nothing - } - |> (\{ blocks } -> Array.map Markdown.toHtml blocks) - |> About.Layout.layout - { pathToRoot = - def.directoryPath - |> Path.unwrap - |> Array.map (\_ -> "..") - |> String.join "/" - |> (\a -> a ++ "/") - } - |> Transmutable.Html.arrayToString - |> stringToBytes - |> Just - ) - - -lowerCasePath = - (\def -> - def - |> Definition.relativePath - |> Path.map (Array.map String.toLower) - |> (\path -> Definition.fork path def) - ) - |> Array.map - |> Bundle.mapCompendium - - -prefixDirname dirName = - (\def -> { def | directoryPath = Path.map (Array.pushFirst dirName) def.directoryPath }) - |> Array.map - |> Bundle.mapCompendium - - - --- TASKS - - -read = - Task.andThen Shikensu.read - - -write = - Task.andThen (Shikensu.write dist) - - - --- 🛠️ - - -bytesToString : Bytes -> Maybe String -bytesToString bytes = - bytes - |> Bytes.width - |> Bytes.Decode.string - |> (\decoder -> Bytes.Decode.decode decoder bytes) - - -stringToBytes : String -> Bytes -stringToBytes = - Bytes.Encode.string >> Bytes.Encode.encode diff --git a/system/Css/PostCSS.js b/system/Css/PostCSS.js deleted file mode 100644 index dd2e1ded5..000000000 --- a/system/Css/PostCSS.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - plugins: { - // NOTE: Order matters here - "postcss-import": {}, - "postcss-custom-properties": {}, - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/system/Css/Tailwind.js b/system/Css/Tailwind.js deleted file mode 100644 index d8d0307be..000000000 --- a/system/Css/Tailwind.js +++ /dev/null @@ -1,262 +0,0 @@ -const tailwindColors = require("tailwindcss/colors") - - -// Colors -// ------ - -const colors = { - base00: "rgb(45, 45, 45)", - base01: "rgb(63, 63, 63)", - base02: "rgb(79, 79, 79)", - base03: "rgb(119, 119, 119)", - base04: "rgb(140, 140, 140)", - base05: "rgb(163, 163, 163)", - base06: "rgb(186, 186, 186)", - base07: "rgb(232, 232, 232)", - base08: "rgb(239, 97, 85)", - base09: "rgb(249, 155, 21)", - base0a: "rgb(254, 196, 24)", - base0b: "rgb(72, 182, 133)", - base0c: "rgb(91, 196, 191)", - base0d: "rgb(6, 182, 239)", - base0e: "rgb(129, 91, 164)", - base0f: "rgb(233, 107, 168)" -} - - - -// Config -// ------ - -module.exports = { - - theme: { - - // Animations - // ---------- - - animations: { - - "fadeIn": { - from: { opacity: "0" }, - to: { opacity: "1" }, - } - - }, - - animationDelay: { - "50ms": "50ms" - }, - - - // Fonts - // ----- - - fontFamily: { - body: '"Source Sans Pro", sans-serif', - display: '"Montserrat", Futura, "Trebuchet MS", Arial, sans-serif', - mono: 'Hack, Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace' - }, - - - // Colors - // ------ - - colors: { - ...colors, - - black: tailwindColors.black, - current: tailwindColors.current, - inherit: tailwindColors.inherit, - transparent: tailwindColors.transparent, - white: tailwindColors.white, - - gray: tailwindColors.gray, - neutral: tailwindColors.neutral, - - "accent-btn": "hsl(219, 20.2%, 38.8%)", - "accent-dark": "hsl(304.3, 9.6%, 71.4%)", - "accent-light": "hsl(228.4, 15.3%, 60.2%)", - "background": "rgb(2, 7, 14)", - "base01-15": "rgba(63, 63, 63, 0.15)", - "base01-55": "rgba(63, 63, 63, 0.55)", - "black-05": "rgba(0, 0, 0, 0.05)", - "black-35": "rgba(0, 0, 0, 0.35)", - "black-50": "rgba(0, 0, 0, 0.5)", - "current-color": "currentColor", - "white-025": "rgba(255, 255, 255, 0.025)", - "white-20": "rgba(255, 255, 255, 0.2)", - "white-60": "rgba(255, 255, 255, 0.6)", - "white-90": "rgba(255, 255, 255, 0.9)", - - // Darkest hour - - "darkest-hour": "hsl(0, 0%, 14%)", - "near-darkest-hour": "hsl(0, 0%, 15%)", - - // Shades of gray - - gray: { - "100": "hsl(0, 0%, 98.8%)", - "200": "hsl(0, 0%, 97.3%)", - "300": "hsl(0, 0%, 93.3%)", - "400": "hsl(0, 0%, 88.2%)", - "500": "hsl(0, 0%, 86.3%)", - "600": "hsl(0, 0%, 77.6%)" - } - }, - - - // Extensions - // ---------- - - extend: { - - boxShadow: { - "md-darker": "0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.36)" - }, - - fontSize: { - "0": 0, - "almost-sm": "0.78125rem", - "nearly-sm": "0.8125rem", - "xxs": "0.6875rem", - }, - - letterSpacing: { - "tad-closer": "-0.015em", - "tad-further": "0.015em", - }, - - lineHeight: { - "0": 0 - }, - - maxWidth : { - "insulation": "107.5vh", - "screen": "100vw" - }, - - minWidth: { - "3xl": "48rem", - "tiny": "13.125rem" - }, - - screens: { - "dark": { "raw": "(prefers-color-scheme: dark)" } - }, - - spacing: { - "1/2": "50%", - "1/3": "33.333333%", - "2/3": "66.666667%", - "1/4": "25%", - "2/4": "50%", - "3/4": "75%", - "1/5": "20%", - "2/5": "40%", - "3/5": "60%", - "4/5": "80%", - "1/6": "16.666667%", - "2/6": "33.333333%", - "3/6": "50%", - "4/6": "66.666667%", - "5/6": "83.333333%", - "1/7": "14.28571429%", - "1/8": "12.5%", - "1/10": "10%", - "1/12": "8.333333%", - "1/16": "6.25%", - "1/20": "5%", - "2/12": "16.666667%", - "3/12": "25%", - "4/12": "33.333333%", - "5/12": "41.666667%", - "6/12": "50%", - "7/12": "58.333333%", - "8/12": "66.666667%", - "9/12": "75%", - "10/12": "83.333333%", - "11/12": "91.666667%", - "-full": "-100%", - "full": "100%", - } - - }, - - - // Inset - // ----- - - inset: { - "0": 0, - "1/2": "50%", - "full": "100%", - "-px": "-1px" - }, - - - // Opacity - // ------- - - opacity: { - "0": "0", - "025": ".025", - "05": ".05", - "10": ".1", - "20": ".2", - "25": ".25", - "30": ".3", - "40": ".4", - "50": ".5", - "60": ".6", - "70": ".7", - "75": ".75", - "80": ".8", - "90": ".9", - "95": ".95", - "100": "1" - }, - - }, - - - - // PLUGINS - - - plugins: [ - - require("tailwindcss-animations"), - require("tailwindcss-interaction-variants"), - - // Add variant for `:focus:not(:active)` - function({ addVariant, e }) { - addVariant("inactive-focus", ({ modifySelectors, separator }) => { - modifySelectors(({ className }) => { - return `.${e(`fixate${separator}${className}`)}:focus:not(:active)` - }) - }) - } - - ], - - - - // VARIANTS - - - variants: { - - backgroundColor: [ "focus", "hover", "inactive-focus", "responsive" ], - borderColor: [ "first", "focus", "hover", "inactive-focus", "last", "responsive" ], - borderWidth: [ "first", "last" ], - cursor: [ "first", "last" ], - margin: [ "first", "last", "responsive" ], - opacity: [ "focus", "hocus", "hover", "responsive" ], - padding: [ "first", "last", "responsive" ], - textColor: [ "focus", "focus-within", "hover", "inactive-focus", "responsive" ], - - } - -} diff --git a/system/Js/esbuild.mjs b/system/Js/esbuild.mjs deleted file mode 100644 index d23d94c93..000000000 --- a/system/Js/esbuild.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import esbuild from "esbuild" -import { wasmLoader } from "esbuild-plugin-wasm" - -import parseArgv from "tiny-parse-argv" - -const args = parseArgv(process.argv.slice(2), { - string: ["alias", "define", "inject"], -}) - -esbuild.build({ - alias: {...obj("alias") }, - bundle: true, - define: obj("define"), - entryPoints: [args._[0]], - format: "esm", - inject: arr("inject"), - minify: args.minify || false, - outdir: args.outdir || undefined, - outfile: args.outfile || undefined, - plugins: [wasmLoader()], - splitting: args.splitting || false, - target: "esnext", -}) - -function arr(name) { - return Object.entries(args) - .filter(([k, v]) => { - if (!k.includes(":")) return false - return k.split(":")[0] == name - }) - .map(([k, v]) => { - return k.split(":").slice(1).join(":") + v - }) -} - -function obj(name) { - const entries = Object.entries(args) - .filter(([k, v]) => { - if (!k.includes(":")) return false - return k.split(":")[0] == name - }) - .map(([k, v]) => { - return [k.split(":").slice(1).join(":"), v.toString()] - }) - - return Object.fromEntries(entries) -} diff --git a/system/Js/node-shims.js b/system/Js/node-shims.js deleted file mode 100644 index 41a0baf05..000000000 --- a/system/Js/node-shims.js +++ /dev/null @@ -1,10 +0,0 @@ -import BufferPolyfill from "buffer/" - -export let Buffer = BufferPolyfill.Buffer -export let global = globalThis -export let process = { env: { NODE_DEBUG: false } } -export let localStorage = globalThis.localStorage || { - getItem: () => null, - setItem: () => null, - removeItem: () => null -} diff --git a/system/Review/ReviewConfig.elm b/system/Review/ReviewConfig.elm deleted file mode 100644 index abfb06d72..000000000 --- a/system/Review/ReviewConfig.elm +++ /dev/null @@ -1,45 +0,0 @@ -module ReviewConfig exposing (config) - -import NoDebug.Log -import NoDebug.TodoOrToString -import NoDeprecated -import NoDuplicatePorts -import NoExposingEverything -import NoImportingEverything -import NoMissingSubscriptionsCall -import NoMissingTypeAnnotation -import NoMissingTypeAnnotationInLetIn -import NoMissingTypeExpose -import NoPrematureLetComputation -import NoRecursiveUpdate -import NoUnoptimizedRecursion -import NoUnsafeDivision -import NoUnsafePorts -import NoUnused.CustomTypeConstructors -import NoUnused.Dependencies -import NoUnused.Exports -import NoUnused.Modules -import NoUnused.Variables -import NoUnusedPorts -import NoUselessSubscriptions -import Review.Rule exposing (Rule) - - -config : List Rule -config = - [ NoDebug.Log.rule - , NoDeprecated.rule NoDeprecated.defaults - , NoMissingSubscriptionsCall.rule - -- , NoPrematureLetComputation.rule - -- , NoRecursiveUpdate.rule - -- , NoUnoptimizedRecursion.rule (NoUnoptimizedRecursion.optOutWithComment "IGNORE TCO") - - -- , NoUnsafeDivision.rule - -- , NoUselessSubscriptions.rule - -- - -- Unused - --------- - , NoUnused.Dependencies.rule - , NoUnused.Modules.rule - , NoUnused.Variables.rule - ] diff --git a/system/Review/elm.json b/system/Review/elm.json deleted file mode 100644 index 96702066b..000000000 --- a/system/Review/elm.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "application", - "source-directories": [ - "." - ], - "elm-version": "0.19.1", - "dependencies": { - "direct": { - "elm/core": "1.0.5", - "elm/json": "1.1.3", - "jfmengels/elm-review": "2.13.1", - "jfmengels/elm-review-common": "1.3.2", - "jfmengels/elm-review-debug": "1.0.8", - "jfmengels/elm-review-performance": "1.0.2", - "jfmengels/elm-review-the-elm-architecture": "1.0.3", - "jfmengels/elm-review-unused": "1.1.29", - "sparksp/elm-review-ports": "1.3.1", - "vkfisher/elm-review-no-unsafe-division": "1.0.3" - }, - "indirect": { - "elm/bytes": "1.0.8", - "elm/html": "1.0.0", - "elm/parser": "1.1.0", - "elm/project-metadata-utils": "1.0.2", - "elm/random": "1.0.0", - "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.3", - "elm-community/list-extra": "8.7.0", - "elm-community/maybe-extra": "5.3.0", - "elm-explorations/test": "2.1.0", - "miniBill/elm-unicode": "1.0.3", - "rtfeldman/elm-hex": "1.0.0", - "stil4m/elm-syntax": "7.2.9", - "stil4m/structured-writer": "1.0.3" - } - }, - "test-dependencies": { - "direct": {}, - "indirect": {} - } -} diff --git a/tasks/copy-types.ts b/tasks/copy-types.ts new file mode 100644 index 000000000..9ca2f6721 --- /dev/null +++ b/tasks/copy-types.ts @@ -0,0 +1,12 @@ +import { walk } from "jsr:@std/fs@^1.0"; + +// Copy .d.ts files to dist dir +const it = walk("./src/pages/", { exts: [".d.ts"] }); + +for await (const item of it) { + const target = `dist/${item.path.replace("src/pages/", "")}`; + const targetDir = target.split("/").slice(0, -1).join("/"); + + Deno.mkdirSync(targetDir, { recursive: true }); + Deno.copyFileSync(item.path, target); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..8b937678e --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,33 @@ +{ + "include": [".astro/types.d.ts", "**/*"], + "exclude": ["dist"], + "compilerOptions": { + "allowImportingTsExtensions": true, + "allowJs": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "experimentalDecorators": false, + "isolatedModules": true, + "lib": ["DOM", "ESNext", "WebWorker"], + "module": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "auto", + "noEmit": true, + "noImplicitOverride": true, + "skipLibCheck": true, + "strict": true, + "target": "esnext", + "useDefineForClassFields": true, + "verbatimModuleSyntax": true, + "baseUrl": ".", + "paths": { + "@applets/*": ["src/pages/*"], + "@layouts/*": ["src/layouts/*"], + "@pages/*": ["src/pages/*"], + "@scripts/*": ["src/scripts/*"], + "@styles/*": ["src/styles/*"], + "@src/*": ["src/*"], + "@phosphor-icons/*": ["node_modules/@phosphor-icons/web/src/*"] + } + } +} From ff17726e33c705687b59e22a0cb71be948abb246 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 3 Sep 2025 16:53:27 +0200 Subject: [PATCH 002/244] chore: different theme color for pico --- .astro/settings.json | 5 ++++- src/styles/pico.scss | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.astro/settings.json b/.astro/settings.json index 52243c043..1e62b0fc7 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -1,5 +1,8 @@ { "_variables": { - "lastUpdateCheck": 1754857737323 + "lastUpdateCheck": 1756909768278 + }, + "devToolbar": { + "enabled": false } } \ No newline at end of file diff --git a/src/styles/pico.scss b/src/styles/pico.scss index cab7d1325..feb10f5b0 100644 --- a/src/styles/pico.scss +++ b/src/styles/pico.scss @@ -1,6 +1,7 @@ @use "@picocss/pico/scss/pico" with ( $enable-responsive-spacings: true, - $enable-responsive-typography: true + $enable-responsive-typography: true, + $theme-color: "slate" ); @use "@picocss/pico/scss/colors/utilities"; From 82e06162665da9822dd078012c8dc4dd27e6327f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 3 Sep 2025 17:03:31 +0200 Subject: [PATCH 003/244] chore: enable mediasession on webamp --- deno.lock | 2 +- package-lock.json | 120 +++++++++++++++++++----------- package.json | 2 +- src/scripts/theme/webamp/index.ts | 1 + 4 files changed, 79 insertions(+), 46 deletions(-) diff --git a/deno.lock b/deno.lock index 258ef5fde..64865e43a 100644 --- a/deno.lock +++ b/deno.lock @@ -55,7 +55,7 @@ "npm:uri-js@^4.4.1", "npm:vite-plugin-wasm@^3.4.1", "npm:vite-tsconfig-paths@^5.1.4", - "npm:webamp@^2.1.2", + "npm:webamp@^2.2.0", "npm:xxh32@^2.0.5" ] } diff --git a/package-lock.json b/package-lock.json index d8aac5f5c..1c99a3587 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "throttle-debounce": "^5.0.2", "uint8arrays": "^5.1.0", "uri-js": "^4.4.1", - "webamp": "^2.1.2", + "webamp": "^2.2.0", "xxh32": "^2.0.5" }, "devDependencies": { @@ -196,6 +196,16 @@ "node": ">=6.9.0" } }, + "node_modules/@borewit/text-codec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.0.tgz", + "integrity": "sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@bradenmacdonald/s3-lite-client": { "name": "@jsr/bradenmacdonald__s3-lite-client", "version": "0.9.2", @@ -1492,6 +1502,25 @@ "integrity": "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg==", "license": "MIT" }, + "node_modules/@redux-devtools/extension": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@redux-devtools/extension/-/extension-3.3.0.tgz", + "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "immutable": "^4.3.4" + }, + "peerDependencies": { + "redux": "^3.1.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@redux-devtools/extension/node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" + }, "node_modules/@rollup/pluginutils": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", @@ -2254,9 +2283,9 @@ } }, "node_modules/ani-cursor": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.4.tgz", - "integrity": "sha512-2MTPTcPhVw+SkIV7R0MsYioVi58bYH+Jjz9k3jQraX2mOJjUiZRSa9QK37eD6b7F/VBq+y3q1mK12i+uG+f5HQ==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.5.tgz", + "integrity": "sha512-gGxst72lG9TOwEfbVpX9vHhzUGw+4Ee2XB6AfYq5JP+bxBtpAjgnTBepCVxYF5t1TPrWHN23nWqLTflJOA3/ag==", "license": "MIT", "dependencies": { "byte-data": "18.1.1", @@ -2666,15 +2695,14 @@ } }, "node_modules/butterchurn": { - "version": "3.0.0-beta.4", - "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-3.0.0-beta.4.tgz", - "integrity": "sha512-hiY1ktHYHQ8MT65nnZi7GjrgZZ6sl/ipT5rBqEfaYJd90L4SvOtB6lVxtKadtzAyJo2TQJc4gJfEca4cpZo0DA==", + "version": "3.0.0-beta.5", + "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-3.0.0-beta.5.tgz", + "integrity": "sha512-BStK4OAbBb9Pvt8PuQlS4WVmYBwU1KuDMRHF1V89QjoIFauAqq7tpV4EpYXj7K563r5daLrMX+2y5DBhZZ9Xig==", "license": "MIT", "dependencies": { "@assemblyscript/loader": "^0.17.11", - "@babel/runtime": "^7.11.2", "ecma-proposal-math-extensions": "0.0.2", - "eel-wasm": "^0.0.15" + "eel-wasm": "^0.0.16" } }, "node_modules/butterchurn-presets": { @@ -3297,9 +3325,9 @@ "license": "MIT" }, "node_modules/eel-wasm": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/eel-wasm/-/eel-wasm-0.0.15.tgz", - "integrity": "sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/eel-wasm/-/eel-wasm-0.0.16.tgz", + "integrity": "sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==", "license": "MIT" }, "node_modules/emoji-regex": { @@ -5364,9 +5392,9 @@ "license": "Apache-2.0 OR MIT" }, "node_modules/music-metadata": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.3.0.tgz", - "integrity": "sha512-Qmv8KY+o68MMcYW0zq+cqEvtVnw+9+GAeF0t9DPcSl4hTkh6v6hmaqRpZ5onYpTywPxdtE4hrkwHNqkMwwOv5A==", + "version": "11.8.3", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.8.3.tgz", + "integrity": "sha512-Tgiv4MlCgDb6XzelziB1mmL2xeoHls0KTpCm3Z3qr+LfF4mBEpkuc5vNrc927IT5+S5fv+vzStfI+HYC0igDpA==", "funding": [ { "type": "github", @@ -5379,14 +5407,15 @@ ], "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.2.0", "@tokenizer/token": "^0.3.0", "content-type": "^1.0.5", "debug": "^4.4.1", "file-type": "^21.0.0", "media-typer": "^1.1.0", - "strtok3": "^10.3.1", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.1" }, "engines": { "node": ">=18" @@ -20755,16 +20784,6 @@ "@babel/runtime": "^7.9.2" } }, - "node_modules/redux-devtools-extension": { - "version": "2.13.9", - "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz", - "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==", - "deprecated": "Package moved to @redux-devtools/extension.", - "license": "MIT", - "peerDependencies": { - "redux": "^3.1.0 || ^4.0.0" - } - }, "node_modules/redux-sentry-middleware": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/redux-sentry-middleware/-/redux-sentry-middleware-0.1.8.tgz", @@ -21503,9 +21522,9 @@ } }, "node_modules/strtok3": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.1.tgz", - "integrity": "sha512-3JWEZM6mfix/GCJBBUrkA8p2Id2pBkyTkVCJKto55w080QBKZ+8R171fGrbiSp+yMO/u6F8/yUh7K4V9K+YCnw==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0" @@ -21601,11 +21620,12 @@ } }, "node_modules/token-types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -21617,6 +21637,16 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/token-types/node_modules/@borewit/text-codec": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -21726,9 +21756,9 @@ "license": "MIT" }, "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "license": "MIT", "engines": { "node": ">=18" @@ -22295,14 +22325,15 @@ } }, "node_modules/webamp": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/webamp/-/webamp-2.1.2.tgz", - "integrity": "sha512-WbxvG+hQ1eo5d1oLHHw6ncu87ZKj6T5BBFr0vdgUFTDKJI1kuNa4vvIzGDQAJuAPN1zRrhaq/PvX7/Hz82VR+g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webamp/-/webamp-2.2.0.tgz", + "integrity": "sha512-XzKr65Z4d+4rxA1J//aPkZRqvPS0aqAxpryNKaWt/EDQ4uCJadxjr966QElagH+iZxWMCDekW5dV/dTx5b+WPQ==", "license": "MIT", "dependencies": { + "@redux-devtools/extension": "^3.3.0", "@sentry/browser": "5.9.1", - "ani-cursor": "^0.0.4", - "butterchurn": "^3.0.0-beta.3", + "ani-cursor": "0.0.5", + "butterchurn": "3.0.0-beta.5", "butterchurn-presets": "3.0.0-beta.4", "classnames": "^2.2.5", "fscreen": "^1.0.2", @@ -22310,17 +22341,18 @@ "jszip": "^3.10.1", "lodash": "^4.17.21", "milkdrop-preset-converter-aws": "^0.1.6", + "music-metadata": "^11.6.0", "music-metadata-browser": "^0.6.1", "react": "^19.1.0", "react-dom": "^19.1.0", "react-redux": "^8.0.5", "redux": "^5.0.0-alpha.0", - "redux-devtools-extension": "^2.13.9", "redux-sentry-middleware": "^0.1.3", "redux-thunk": "^2.4.0", "reselect": "^3.0.1", + "strtok3": "^10.3.1", "tinyqueue": "^1.2.3", - "winamp-eqf": "^1.0.0" + "winamp-eqf": "1.0.0" } }, "node_modules/webamp/node_modules/react": { diff --git a/package.json b/package.json index f6c35fa2a..e9a6d0ef6 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "throttle-debounce": "^5.0.2", "uint8arrays": "^5.1.0", "uri-js": "^4.4.1", - "webamp": "^2.1.2", + "webamp": "^2.2.0", "xxh32": "^2.0.5" }, "devDependencies": { diff --git a/src/scripts/theme/webamp/index.ts b/src/scripts/theme/webamp/index.ts index a69afeff8..df2cf2a16 100644 --- a/src/scripts/theme/webamp/index.ts +++ b/src/scripts/theme/webamp/index.ts @@ -22,6 +22,7 @@ const orchestrator = { // ⚡ //////////////////////////////////////////// const amp = new Webamp({ + enableMediaSession: true, initialTracks: [], }); From aa544e62b128b2da415917a7f0d6fa7bc8ca32f7 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 3 Sep 2025 17:35:46 +0200 Subject: [PATCH 004/244] chore: clean up the index page a bit --- src/pages/index.astro | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index f8c0cd421..b458cf476 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -85,17 +85,17 @@ const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; listen to audio from various sources on your devices and the web, and to create the ideal digital listening experience for you.

    +

    These applets can be used in various ways. The main ways so far are through:

    +
      +
    • Themes, a traditional browser (web application) approach.
    • +
    • Abstractions, for non-browser systems.
    • +
    • + Using various parts of themes and abstractions separately in different + browser tabs. +
    • +

    - These applets can be used in various ways. The main ways so far are: (a) through themes, a traditional browser (web application) approach, and (b) abstractions for non-browser systems. -

    -

    - TODO: Figure out how to present this to users who just want to use the damn thing. + ⚠️ Heavily experimental

    From e2be7a04463fb53f579e811bc0bb23302bbebf20 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 3 Sep 2025 17:39:26 +0200 Subject: [PATCH 005/244] chore: add .netlify dir to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 28020e1fa..758674d0b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +.netlify .zed node_modules /dist From 98f1d19cbdf60f4924b0c71152475d475b93ac12 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 6 Sep 2025 15:35:26 +0200 Subject: [PATCH 006/244] feat: fork spellcaster to use alien-signals for performance/stability --- deno.lock | 2 +- package-lock.json | 23 +- package.json | 2 +- src/pages/configurator/output/_applet.astro | 2 +- .../blur/artwork-controller/_applet.astro | 66 ++--- src/pages/engine/audio/_applet.astro | 6 +- src/scripts/applet/common.ts | 18 +- src/scripts/configurator/output/signals.ts | 4 +- src/scripts/configurator/output/ui.ts | 36 ++- src/scripts/input/native-fs/mounting.ts | 8 +- src/scripts/input/native-fs/ui.ts | 4 +- src/scripts/input/opensubsonic/ui.ts | 14 +- src/scripts/input/s3/ui.ts | 14 +- src/scripts/spellcaster/README.md | 1 + src/scripts/spellcaster/hyperscript.ts | 241 ++++++++++++++++++ src/scripts/spellcaster/index.ts | 3 + src/scripts/spellcaster/spellcaster.ts | 58 +++++ src/scripts/spellcaster/util.ts | 31 +++ 18 files changed, 426 insertions(+), 107 deletions(-) create mode 100644 src/scripts/spellcaster/README.md create mode 100644 src/scripts/spellcaster/hyperscript.ts create mode 100644 src/scripts/spellcaster/index.ts create mode 100644 src/scripts/spellcaster/spellcaster.ts create mode 100644 src/scripts/spellcaster/util.ts diff --git a/deno.lock b/deno.lock index 64865e43a..67c4553cd 100644 --- a/deno.lock +++ b/deno.lock @@ -36,6 +36,7 @@ "npm:@tokenizer/range@0.13", "npm:@types/throttle-debounce@^5.0.2", "npm:@types/wicg-file-system-access@^2023.10.6", + "npm:alien-signals@^2.0.7", "npm:astro-purgecss@^5.2.2", "npm:astro-scope@^3.0.1", "npm:astro@^5.7.4", @@ -48,7 +49,6 @@ "npm:purgecss@^7.0.2", "npm:query-string@^9.1.2", "npm:sass@^1.87.0", - "npm:spellcaster@6", "npm:subsonic-api@^3.1.2", "npm:throttle-debounce@^5.0.2", "npm:uint8arrays@^5.1.0", diff --git a/package-lock.json b/package-lock.json index 1c99a3587..d8a1c4e20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,13 +19,13 @@ "@tokenizer/range": "^0.13.0", "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", "98.css": "^0.1.21", + "alien-signals": "^2.0.7", "comlink": "^4.4.2", "fast-average-color": "^9.5.0", "iconoir": "^7.11.0", "idb-keyval": "^6.2.1", "music-metadata": "^11.2.3", "query-string": "^9.1.2", - "spellcaster": "^6.0.0", "subsonic-api": "^3.1.2", "throttle-debounce": "^5.0.2", "uint8arrays": "^5.1.0", @@ -2282,6 +2282,12 @@ "node": ">=0.4.0" } }, + "node_modules/alien-signals": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-2.0.7.tgz", + "integrity": "sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==", + "license": "MIT" + }, "node_modules/ani-cursor": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.5.tgz", @@ -21314,12 +21320,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/signal-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/signal-polyfill/-/signal-polyfill-0.2.2.tgz", - "integrity": "sha512-p63Y4Er5/eMQ9RHg0M0Y64NlsQKpiu6MDdhBXpyywRuWiPywhJTpKJ1iB5K2hJEbFZ0BnDS7ZkJ+0AfTuL37Rg==", - "license": "Apache-2.0" - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -21372,15 +21372,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/spellcaster": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/spellcaster/-/spellcaster-6.0.0.tgz", - "integrity": "sha512-BLHYZFnvf5XtVwVr2x/esn7gJjUCevywkJoVmlN33MrneSR7AVTTYkeu6Nt9NUguGaOv11yb4zjLo5hV0PYj0w==", - "license": "MIT", - "dependencies": { - "signal-polyfill": "^0.2.0" - } - }, "node_modules/split-on-first": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", diff --git a/package.json b/package.json index e9a6d0ef6..3c628ce5d 100644 --- a/package.json +++ b/package.json @@ -14,13 +14,13 @@ "@tokenizer/range": "^0.13.0", "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", "98.css": "^0.1.21", + "alien-signals": "^2.0.7", "comlink": "^4.4.2", "fast-average-color": "^9.5.0", "iconoir": "^7.11.0", "idb-keyval": "^6.2.1", "music-metadata": "^11.2.3", "query-string": "^9.1.2", - "spellcaster": "^6.0.0", "subsonic-api": "^3.1.2", "throttle-debounce": "^5.0.2", "uint8arrays": "^5.1.0", diff --git a/src/pages/configurator/output/_applet.astro b/src/pages/configurator/output/_applet.astro index 5e1117e1f..1e0d23476 100644 --- a/src/pages/configurator/output/_applet.astro +++ b/src/pages/configurator/output/_applet.astro @@ -43,7 +43,7 @@ diff --git a/src/scripts/applet/common.ts b/src/scripts/applet/common.ts index f5041ae2a..98afef47b 100644 --- a/src/scripts/applet/common.ts +++ b/src/scripts/applet/common.ts @@ -40,10 +40,17 @@ export async function applet( src = QS.stringifyUrl({ url: src, query }); } - const context = opts.newInstance ? self : opts.context || self.top || self.parent; - const existingFrame: HTMLIFrameElement | null = opts.newInstance - ? null - : context.document.querySelector(`[src="${src}"]`); + let context = opts.newInstance ? self : opts.context || self.top || self.parent; + + let existingFrame: HTMLIFrameElement | null; + + // TODO: Ideally we do some cross-origin detection here + try { + existingFrame = opts.newInstance ? null : context.document.querySelector(`[src="${src}"]`); + } catch (err) { + existingFrame = null; + context = self; + } let frame; diff --git a/src/scripts/theme/blur/index.ts b/src/scripts/theme/blur/index.ts index 770f8972d..20b7928a1 100644 --- a/src/scripts/theme/blur/index.ts +++ b/src/scripts/theme/blur/index.ts @@ -12,13 +12,19 @@ if (!container) throw new Error("Missing container"); const labelA = "Deck A"; const labelB = "Deck B"; -const configurator = { - output: await applet("/configurator/output"), -}; +// const configurator = { +// output: await applet("/configurator/output"), +// }; -const _constituent = { - a: applet("/constituent/blur/artwork-controller", { container, groupId: labelA }), - b: applet("/constituent/blur/artwork-controller", { container, groupId: labelB }), +const constituent = { + a: applet("/constituent/blur/artwork-controller", { + container, + groupId: labelA, + }), + b: applet("/constituent/blur/artwork-controller", { + container, + groupId: labelB, + }), }; // TODO: From 702296c33a3fd1421981f2085202f00d1a58267d Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 6 Sep 2025 21:40:51 +0200 Subject: [PATCH 008/244] chore: explain cross-origin usage --- src/pages/index.astro | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index b458cf476..a702729dc 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -213,6 +213,28 @@ const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; + +
    +

    Cross-Origin

    + +

    + You can use applets from different origins. However, one important caveat to remember is state partitioning. This causes local state (eg. IndexedDB) to be different when the applet is used on a + different domain versus using the applet directly. There might be ways around state + partitioning, but I haven't found a user-friendly way of doing so. +

    + +

    + That said, there isn't that much local state that needs to be shared cross origin. Much of it is associated with the input applets and that configuration is saved in your chosen + output applet. So essentially, state partitioning behaves as if the two domains are on different + devices; so using an output applet to sync data works nicely. +

    +
    +

    Build your own

    @@ -224,12 +246,9 @@ const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }];
    • - Haven't tested this idea cross-origin. No idea if the applets work when included on a - different origin (though it should). -
    • -
    • - Currently using a fork of the web applets SDK that adds a few features (waiting on PRs). - Meaning that it won't be as easy to write your own applets in the same way as done here. + This is currently using a fork of the web applets SDK that adds a few features (waiting on + PRs). Meaning that it won't be as easy to write your own applets in the same way as done + here.
    • I wrote some custom code on top of the web applets SDK that makes the applets talk to each @@ -237,7 +256,7 @@ const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; web applets SDK. Though you can just copy-paste from the Diffuse repo if you want (it's not that much code).
    • -
    • ... Probably a bunch of stuff I'm forgetting, teaching materials, ...
    • +
    • ... Probably a bunch of stuff I'm forgetting, teaching materials, etc ...
    From fc15fcd10fde9f6f5248360d6b42d6ad651d3d0c Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 6 Sep 2025 21:54:06 +0200 Subject: [PATCH 009/244] chore: add note about output applets --- src/pages/index.astro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/index.astro b/src/pages/index.astro index a702729dc..8f0047b1c 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -231,7 +231,8 @@ const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; >That said, there isn't that much local state that needs to be shared cross origin. Much of it is associated with the input applets and that configuration is saved in your chosen output applet. So essentially, state partitioning behaves as if the two domains are on different - devices; so using an output applet to sync data works nicely. + devices; so using an output applet to sync data works nicely. It does mean you have to somehow + configure the same output applet in both contexts.

    From 8f0a49b78360125552409cafc7c7fdf27abef54a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 6 Sep 2025 21:59:58 +0200 Subject: [PATCH 010/244] fix: store chosen output --- src/scripts/configurator/output/signals.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/scripts/configurator/output/signals.ts b/src/scripts/configurator/output/signals.ts index b61b4e9db..558e26ccf 100644 --- a/src/scripts/configurator/output/signals.ts +++ b/src/scripts/configurator/output/signals.ts @@ -1,4 +1,4 @@ -import { signal } from "@scripts/spellcaster"; +import { effect, signal } from "@scripts/spellcaster"; import type { Method } from "./types"; import { DEFAULT_METHOD, LOCALSTORAGE_KEY, METHODS } from "./constants"; @@ -7,3 +7,7 @@ export const stored = localStorage.getItem(LOCALSTORAGE_KEY); export const active = signal( stored && METHODS.includes(stored as Method) ? (stored as Method) : DEFAULT_METHOD, ); + +effect(() => { + localStorage.setItem(LOCALSTORAGE_KEY, active()); +}); From 72a00f0b7b04cbb49456776cbb1a63a70d60b44f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 7 Sep 2025 21:36:51 +0200 Subject: [PATCH 011/244] chore: cross-origin work --- src/pages/index.astro | 4 +-- src/pages/test/cross-origin/blur.astro | 31 ++++++++++++++++++++ src/pages/test/cross-origin/output.astro | 15 ++++++++++ src/scripts/common.ts | 5 +++- src/scripts/configurator/output/signals.ts | 34 +++++++++++++++++++++- src/scripts/configurator/output/ui.ts | 12 ++++++++ 6 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 src/pages/test/cross-origin/blur.astro create mode 100644 src/pages/test/cross-origin/output.astro diff --git a/src/pages/index.astro b/src/pages/index.astro index 8f0047b1c..a4d3339c4 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -231,8 +231,8 @@ const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; >That said, there isn't that much local state that needs to be shared cross origin. Much of it is associated with the input applets and that configuration is saved in your chosen output applet. So essentially, state partitioning behaves as if the two domains are on different - devices; so using an output applet to sync data works nicely. It does mean you have to somehow - configure the same output applet in both contexts. + devices; so using an output applet to sync data between devices works nicely. It does mean you + have to somehow configure the same output applet in both contexts.

    diff --git a/src/pages/test/cross-origin/blur.astro b/src/pages/test/cross-origin/blur.astro new file mode 100644 index 000000000..eda7ec950 --- /dev/null +++ b/src/pages/test/cross-origin/blur.astro @@ -0,0 +1,31 @@ +--- +import Page from "../../../layouts/page.astro"; +import "@styles/theme/blur/index.css"; +--- + + + + +
    +
    diff --git a/src/pages/test/cross-origin/output.astro b/src/pages/test/cross-origin/output.astro new file mode 100644 index 000000000..b1b62f9db --- /dev/null +++ b/src/pages/test/cross-origin/output.astro @@ -0,0 +1,15 @@ +--- +import Page from "../../../layouts/page.astro"; +--- + + + + + + diff --git a/src/scripts/common.ts b/src/scripts/common.ts index b303d9c23..a4331f9d5 100644 --- a/src/scripts/common.ts +++ b/src/scripts/common.ts @@ -108,7 +108,10 @@ export function groupTracksPerScheme( } export function inIframe() { - return window.self !== window.top; + const url = new URL(self.location.href); + const ui = url.searchParams.get("ui")?.toLowerCase(); + + return window.self !== window.top && !(ui === "true" || ui === "t"); } export function initialConnections>(ids: string[]) { diff --git a/src/scripts/configurator/output/signals.ts b/src/scripts/configurator/output/signals.ts index 558e26ccf..5e8525a48 100644 --- a/src/scripts/configurator/output/signals.ts +++ b/src/scripts/configurator/output/signals.ts @@ -8,6 +8,38 @@ export const active = signal( stored && METHODS.includes(stored as Method) ? (stored as Method) : DEFAULT_METHOD, ); +// 🚀 + +// storage().then((s) => { +// const stored = s.getItem(LOCALSTORAGE_KEY); +// active(stored && METHODS.includes(stored as Method) ? (stored as Method) : DEFAULT_METHOD); +// }); + +// EFFECT + effect(() => { - localStorage.setItem(LOCALSTORAGE_KEY, active()); + const method = active(); + storage().then((s) => s.setItem(LOCALSTORAGE_KEY, method)); }); + +async function storage() { + // const hasStorageAccess = + // (await document.hasStorageAccess()) || + // ( + // await navigator.permissions.query({ + // name: "storage-access", + // }) + // ).state === "granted"; + + // if (hasStorageAccess) { + // // @ts-ignore + // const handle: any = await document.requestStorageAccess({ + // localStorage: true, + // }); + + // return handle ? handle.localStorage : localStorage; + // } else { + // return localStorage; + // } + return localStorage; +} diff --git a/src/scripts/configurator/output/ui.ts b/src/scripts/configurator/output/ui.ts index 14925396d..a63950444 100644 --- a/src/scripts/configurator/output/ui.ts +++ b/src/scripts/configurator/output/ui.ts @@ -118,6 +118,18 @@ const Item = (signal: Signal>) => { function clickHandler(method: Method) { return async () => { const currentlyActive = active(); + + // const permission = await navigator.permissions.query({ + // name: "storage-access", + // }); + + // if (permission.state === "prompt") { + // // @ts-ignore + // await document.requestStorageAccess({ + // localStorage: true, + // }); + // } + if (currentlyActive === method && currentlyActive !== "custom") return; if (currentlyActive) unmountStorageMethod(currentlyActive); await mountStorageMethod(method); From c41db0ec5ed561c0be80d8aeeed69bb9403321f0 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 15 Sep 2025 19:47:26 +0200 Subject: [PATCH 012/244] feat: initial work for blur browser + bunch of fixes --- .astro/data-store.json | 2 +- .astro/settings.json | 2 +- deno.lock | 1 + package-lock.json | 17 ++ package.json | 1 + .../blur/artwork-controller/_applet.astro | 14 +- .../blur/artwork-controller/_manifest.json | 17 +- .../constituent/blur/browser/_applet.astro | 160 ++++++++++++++++++ .../constituent/blur/browser/_manifest.json | 6 + .../constituent/blur/browser/index.astro | 9 + src/pages/index.astro | 3 +- src/pages/input/opensubsonic/_applet.astro | 2 +- .../orchestrator/process-tracks/_applet.astro | 9 +- .../orchestrator/queue-tracks/_applet.astro | 2 - .../orchestrator/search-tracks/_applet.astro | 68 ++++++++ .../orchestrator/search-tracks/_manifest.json | 6 + .../orchestrator/search-tracks/index.astro | 9 + src/pages/processor/search/_applet.astro | 27 ++- src/pages/processor/search/types.d.ts | 1 + src/scripts/applet/common.ts | 29 ++-- src/scripts/engine/queue/worker.ts | 2 +- src/scripts/input/opensubsonic/worker.ts | 4 +- src/scripts/processor/search/types.d.ts | 1 + src/scripts/processor/search/worker.ts | 82 ++++++--- src/scripts/signal.ts | 65 ------- src/scripts/spellcaster/spellcaster.ts | 2 + src/scripts/theme/blur/index.ts | 3 + src/scripts/theme/webamp/index.ts | 2 - src/styles/theme/blur/index.css | 8 + 29 files changed, 410 insertions(+), 144 deletions(-) create mode 100644 src/pages/constituent/blur/browser/_applet.astro create mode 100644 src/pages/constituent/blur/browser/_manifest.json create mode 100644 src/pages/constituent/blur/browser/index.astro create mode 100644 src/pages/orchestrator/search-tracks/_applet.astro create mode 100644 src/pages/orchestrator/search-tracks/_manifest.json create mode 100644 src/pages/orchestrator/search-tracks/index.astro create mode 100644 src/pages/processor/search/types.d.ts delete mode 100644 src/scripts/signal.ts diff --git a/.astro/data-store.json b/.astro/data-store.json index 546f7fce4..5001ebe15 100644 --- a/.astro/data-store.json +++ b/.astro/data-store.json @@ -1 +1 @@ -[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.10.1","content-config-digest","436d74edbfb2fef7","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"never\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}","manifests",["Map",11,12,28,29,65,66,148,149,180,181,214,215,241,242,268,269,276,277,284,285,292,293,305,306,318,319,331,332,355,356,379,380,387,388,403,404],"configurator/output/_manifest",{"id":11,"data":13,"filePath":26,"digest":27},{"name":14,"title":15,"entrypoint":16,"actions":17},"diffuse/configurator/output","Diffuse Configurator | Output","index.html",{"tracks":18},{"title":19,"description":20,"params_schema":21},"Tracks","Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.",{"type":22,"description":23,"items":24},"array","List of tracks",{"type":25},"object","src/pages/configurator/output/_manifest.json","4659e937f3f7ce97","configurator/input/_manifest",{"id":28,"data":30,"filePath":63,"digest":64},{"name":31,"title":32,"entrypoint":16,"actions":33},"diffuse/configurator/input","Diffuse Configurator | Input",{"consult":34,"contextualize":39,"list":45,"resolve":51},{"title":35,"params_schema":36},"Consult",{"type":37,"description":38},"string","The uri to check the availability of.",{"title":40,"description":41,"params_schema":42},"Contextualize","Provide context to all inputs.",{"type":22,"description":43,"items":44},"Array of tracks",{"type":25},{"title":46,"description":47,"params_schema":48},"List","List tracks from all inputs.",{"type":22,"description":49,"items":50},"A list of (cached) tracks",{"type":25},{"title":52,"description":53,"params_schema":54},"Resolve","Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.",{"type":25,"properties":55,"required":60},{"method":56,"uri":58},{"type":37,"description":57},"The HTTP method that is going to be used on the resolved URI.",{"type":37,"description":59},"The URI to resolve.",[61,62],"method","uri","src/pages/configurator/input/_manifest.json","deab08f592f33c5d","engine/audio/_manifest",{"id":65,"data":67,"filePath":146,"digest":147},{"name":68,"title":69,"entrypoint":16,"actions":70},"diffuse/engine/audio","Diffuse Audio",{"pause":71,"play":79,"render":89,"reload":117,"seek":127,"volume":136},{"title":72,"description":73,"params_schema":74},"Pause","Pause audio",{"type":25,"properties":75,"required":77},{"audioId":76},{"type":37},[78],"audioId",{"title":80,"description":81,"params_schema":82},"Play","Play audio",{"type":25,"properties":83,"required":88},{"audioId":84,"volume":85},{"type":37},{"type":86,"default":87},"number",0.5,[78],{"title":90,"description":91,"params_schema":92},"Render","Determine the active set of audio elements.",{"type":25,"properties":93,"required":115},{"audio":94,"play":107},{"type":22,"description":95,"items":96},"The audio items we want to render. These represent the audio elements that are in the DOM.",{"type":25,"properties":97,"required":104},{"id":98,"isPreload":99,"mimeType":101,"progress":102,"url":103},{"type":37},{"type":100},"boolean",{"type":37},{"type":86},{"type":37},[105,106],"id","url",{"type":25,"description":108,"properties":109,"required":114},"Pass in this object to immediately start playing one of the rendered audio items.",{"audioId":110,"volume":112},{"type":37,"description":111},"The id of the rendered audio item we want to play.",{"type":86,"default":87,"description":113},"A number equal to, or between, 0 and 1, that determines how loud the audio should play.",[78],[116],"audio",{"title":118,"description":119,"params_schema":120},"Reload","Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.",{"type":25,"properties":121,"required":125},{"audioId":122,"play":123,"progress":124},{"type":37},{"type":100},{"type":86},[78,126],"percentage",{"title":128,"description":129,"params_schema":130},"Seek","Seek audio to a given position",{"type":25,"properties":131,"required":135},{"audioId":132,"percentage":133},{"type":37},{"type":86,"description":134},"A number between 0 and 1 that determines the new current position in the audio",[78,126],{"title":137,"description":138,"params_schema":139},"Volume","Set the volume of all audio and the default value, or a specific audio node.",{"type":25,"properties":140,"required":144},{"audioId":141,"volume":142},{"type":37},{"type":86,"description":143},"A number between 0 and 1 that determines the new volume of all audio elements",[145],"volume","src/pages/engine/audio/_manifest.json","fad9de8481968df7","engine/queue/_manifest",{"id":148,"data":150,"filePath":178,"digest":179},{"name":151,"title":152,"entrypoint":16,"actions":153},"diffuse/engine/queue","Diffuse Queue",{"add":154,"pool":163,"shift":172,"unshift":175},{"title":155,"description":156,"params_schema":157},"Add","Add tracks to the queue.",{"type":22,"description":43,"items":158},{"type":25,"properties":159,"required":162},{"id":160,"uri":161},{"type":37},{"type":37},[105,62],{"title":164,"description":165,"params_schema":166},"Pool","Set the queue pool.",{"type":22,"description":43,"items":167},{"type":25,"properties":168,"required":171},{"id":169,"uri":170},{"type":37},{"type":37},[105,62],{"title":173,"description":174},"Shift","Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list.",{"title":176,"description":177},"Unshift","Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list.","src/pages/engine/queue/_manifest.json","bdd435b3e8277673","input/native-fs/_manifest",{"id":180,"data":182,"filePath":212,"digest":213},{"name":183,"title":184,"entrypoint":16,"input_properties":185,"actions":187},"diffuse/input/native-fs","Diffuse Input | Native File System",{"scheme":186},"file+local",{"consult":188,"list":192,"resolve":197,"mount":204,"unmount":207},{"title":35,"description":189,"params_schema":190},"Check if a handle is available to be used by passing in a file uri that uses that handle as the host.",{"type":37,"description":191},"The uri with the handle to check the availability of.",{"title":46,"description":193,"params_schema":194},"List tracks.",{"type":22,"description":195,"items":196},"A list of (cached) tracks with an uri matching the scheme",{"type":25},{"title":52,"description":198,"params_schema":199},"Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.",{"type":25,"properties":200,"required":203},{"method":201,"uri":202},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},"Mount","Prepare for usage.",{"title":208,"description":209,"params_schema":210},"Unmount","Callback after usage.",{"type":37,"description":211},"The handle id to unmount","src/pages/input/native-fs/_manifest.json","bbfb366cb25470ac","input/s3/_manifest",{"id":214,"data":216,"filePath":239,"digest":240},{"name":217,"title":218,"entrypoint":16,"input_properties":219,"actions":221},"diffuse/input/s3","Diffuse Input | S3",{"scheme":220},"s3",{"consult":222,"contextualize":224,"list":227,"resolve":230,"mount":236,"unmount":237},{"title":35,"params_schema":223},{"type":37,"description":38},{"title":40,"params_schema":225},{"type":22,"description":43,"items":226},{"type":25},{"title":46,"description":193,"params_schema":228},{"type":22,"description":195,"items":229},{"type":25},{"title":52,"description":198,"params_schema":231},{"type":25,"properties":232,"required":235},{"method":233,"uri":234},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":238},{"type":37,"description":211},"src/pages/input/s3/_manifest.json","458b0c64643bf8a8","input/opensubsonic/_manifest",{"id":241,"data":243,"filePath":266,"digest":267},{"name":244,"title":245,"entrypoint":16,"input_properties":246,"actions":248},"diffuse/input/opensubsonic","Diffuse Input | OpenSubsonic API",{"scheme":247},"opensubsonic",{"consult":249,"contextualize":251,"list":254,"resolve":257,"mount":263,"unmount":264},{"title":35,"params_schema":250},{"type":37,"description":38},{"title":40,"params_schema":252},{"type":22,"description":43,"items":253},{"type":25},{"title":46,"description":193,"params_schema":255},{"type":22,"description":195,"items":256},{"type":25},{"title":52,"description":198,"params_schema":258},{"type":25,"properties":259,"required":262},{"method":260,"uri":261},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":265},{"type":37,"description":211},"src/pages/input/opensubsonic/_manifest.json","463ff2f82f27fed9","orchestrator/process-tracks/_manifest",{"id":268,"data":270,"filePath":274,"digest":275},{"name":271,"title":272,"entrypoint":16,"actions":273},"diffuse/orchestrator/process-tracks","Diffuse Orchestrator | Process Tracks",{},"src/pages/orchestrator/process-tracks/_manifest.json","4d30ef9c892a16b8","orchestrator/queue-audio/_manifest",{"id":276,"data":278,"filePath":282,"digest":283},{"name":279,"title":280,"entrypoint":16,"actions":281},"diffuse/orchestrator/queue-audio","Diffuse Orchestrator | Queue Audio",{},"src/pages/orchestrator/queue-audio/_manifest.json","5c66731fcc2fae2d","orchestrator/queue-tracks/_manifest",{"id":284,"data":286,"filePath":290,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":289},"diffuse/orchestrator/queue-tracks","Diffuse Orchestrator | Queue Tracks",{},"src/pages/orchestrator/queue-tracks/_manifest.json","56a0c769ecdc8cbb","output/indexed-db/_manifest",{"id":292,"data":294,"filePath":303,"digest":304},{"name":295,"title":296,"entrypoint":16,"actions":297},"diffuse/output/indexed-db","Diffuse Output | IndexedDB",{"tracks":298,"mount":301,"unmount":302},{"title":19,"description":20,"params_schema":299},{"type":22,"description":23,"items":300},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/indexed-db/_manifest.json","c75e5169818995c0","output/native-fs/_manifest",{"id":305,"data":307,"filePath":316,"digest":317},{"name":308,"title":309,"entrypoint":16,"actions":310},"diffuse/output/native-fs","Diffuse Output | Native File System",{"tracks":311,"mount":314,"unmount":315},{"title":19,"description":20,"params_schema":312},{"type":22,"description":23,"items":313},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/native-fs/_manifest.json","9f36293a08c3d233","output/storacha-automerge/_manifest",{"id":318,"data":320,"filePath":329,"digest":330},{"name":321,"title":322,"entrypoint":16,"actions":323},"diffuse/output/storacha-automerge","Diffuse Output | Storacha Storage + Automerge CRDT",{"tracks":324,"mount":327,"unmount":328},{"title":19,"description":20,"params_schema":325},{"type":22,"description":23,"items":326},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/storacha-automerge/_manifest.json","607193e5156e1220","processor/metadata/_manifest",{"id":331,"data":333,"filePath":353,"digest":354},{"name":334,"title":335,"entrypoint":16,"actions":336},"diffuse/processor/metadata","Diffuse Processor | Metadata fetcher",{"supply":337},{"title":338,"description":339,"params_schema":340},"Supply","Get the metadata for a given URL or stream.",{"type":25,"properties":341},{"includeArtwork":342,"mimeType":344,"stream":345,"urls":346},{"type":100,"description":343},"Include artwork in the output.",{"type":37},{"type":25},{"type":25,"properties":347,"required":350},{"get":348,"head":349},{"type":37},{"type":37},[351,352],"get","head","src/pages/processor/metadata/_manifest.json","0f144e608574be9b","processor/artwork/_manifest",{"id":355,"data":357,"filePath":377,"digest":378},{"name":358,"title":359,"description":360,"entrypoint":16,"actions":361},"diffuse/processor/artwork","Diffuse Processor | Artwork fetcher","Tries to get artwork for a given URL or stream.",{"supply":362},{"title":338,"description":363,"params_schema":364},"Get the artwork for a given URL.",{"type":22,"items":365},{"type":25,"properties":366,"required":375},{"cacheId":367,"mimeType":368,"stream":369,"urls":370},{"type":37},{"type":37},{"type":25},{"type":25,"properties":371,"required":374},{"get":372,"head":373},{"type":37},{"type":37},[351,352],[376],"cacheId","src/pages/processor/artwork/_manifest.json","9401bdfa33e2f0db","processor/search/_manifest",{"id":379,"data":381,"filePath":385,"digest":386},{"name":382,"title":383,"entrypoint":16,"actions":384},"diffuse/processor/search","Diffuse Processor | Search",{},"src/pages/processor/search/_manifest.json","ec562d1125821f8a","theme/pilot/audio/_manifest",{"id":387,"data":389,"filePath":401,"digest":402},{"name":390,"title":391,"entrypoint":16,"actions":392},"diffuse/constituent/pilot/audio","",{"modifyIsPlaying":393,"modifyProgress":397},{"title":394,"description":395,"params_schema":396},"Set is-playing state","Indicate if audio is playing or not.",{"type":100},{"title":398,"description":399,"params_schema":400},"Set progress","Indicate how far the audio has progressed.",{"type":86},"src/pages/theme/pilot/audio/_manifest.json","7c3a0b25e8d14fd2","constituent/blur/artwork-controller/_manifest",{"id":403,"data":405,"filePath":413,"digest":414},{"name":406,"title":407,"entrypoint":16,"actions":408},"diffuse/constituent/blur/artwork-controller","Diffuse Blur Theme | Artwork Controller",{"modifyIsPlaying":409,"modifyProgress":411},{"title":394,"description":395,"params_schema":410},{"type":100},{"title":398,"description":399,"params_schema":412},{"type":86},"src/pages/constituent/blur/artwork-controller/_manifest.json","1b705295c5fa221a"] \ No newline at end of file +[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.10.1","content-config-digest","436d74edbfb2fef7","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"never\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}","manifests",["Map",11,12,28,29,65,66,148,149,180,181,214,215,241,242,268,269,276,277,284,285,292,293,305,306,318,319,331,332,355,356,379,380,387,388,403,404,411,412,419,420],"configurator/output/_manifest",{"id":11,"data":13,"filePath":26,"digest":27},{"name":14,"title":15,"entrypoint":16,"actions":17},"diffuse/configurator/output","Diffuse Configurator | Output","index.html",{"tracks":18},{"title":19,"description":20,"params_schema":21},"Tracks","Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.",{"type":22,"description":23,"items":24},"array","List of tracks",{"type":25},"object","src/pages/configurator/output/_manifest.json","4659e937f3f7ce97","configurator/input/_manifest",{"id":28,"data":30,"filePath":63,"digest":64},{"name":31,"title":32,"entrypoint":16,"actions":33},"diffuse/configurator/input","Diffuse Configurator | Input",{"consult":34,"contextualize":39,"list":45,"resolve":51},{"title":35,"params_schema":36},"Consult",{"type":37,"description":38},"string","The uri to check the availability of.",{"title":40,"description":41,"params_schema":42},"Contextualize","Provide context to all inputs.",{"type":22,"description":43,"items":44},"Array of tracks",{"type":25},{"title":46,"description":47,"params_schema":48},"List","List tracks from all inputs.",{"type":22,"description":49,"items":50},"A list of (cached) tracks",{"type":25},{"title":52,"description":53,"params_schema":54},"Resolve","Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.",{"type":25,"properties":55,"required":60},{"method":56,"uri":58},{"type":37,"description":57},"The HTTP method that is going to be used on the resolved URI.",{"type":37,"description":59},"The URI to resolve.",[61,62],"method","uri","src/pages/configurator/input/_manifest.json","deab08f592f33c5d","engine/audio/_manifest",{"id":65,"data":67,"filePath":146,"digest":147},{"name":68,"title":69,"entrypoint":16,"actions":70},"diffuse/engine/audio","Diffuse Audio",{"pause":71,"play":79,"render":89,"reload":117,"seek":127,"volume":136},{"title":72,"description":73,"params_schema":74},"Pause","Pause audio",{"type":25,"properties":75,"required":77},{"audioId":76},{"type":37},[78],"audioId",{"title":80,"description":81,"params_schema":82},"Play","Play audio",{"type":25,"properties":83,"required":88},{"audioId":84,"volume":85},{"type":37},{"type":86,"default":87},"number",0.5,[78],{"title":90,"description":91,"params_schema":92},"Render","Determine the active set of audio elements.",{"type":25,"properties":93,"required":115},{"audio":94,"play":107},{"type":22,"description":95,"items":96},"The audio items we want to render. These represent the audio elements that are in the DOM.",{"type":25,"properties":97,"required":104},{"id":98,"isPreload":99,"mimeType":101,"progress":102,"url":103},{"type":37},{"type":100},"boolean",{"type":37},{"type":86},{"type":37},[105,106],"id","url",{"type":25,"description":108,"properties":109,"required":114},"Pass in this object to immediately start playing one of the rendered audio items.",{"audioId":110,"volume":112},{"type":37,"description":111},"The id of the rendered audio item we want to play.",{"type":86,"default":87,"description":113},"A number equal to, or between, 0 and 1, that determines how loud the audio should play.",[78],[116],"audio",{"title":118,"description":119,"params_schema":120},"Reload","Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.",{"type":25,"properties":121,"required":125},{"audioId":122,"play":123,"progress":124},{"type":37},{"type":100},{"type":86},[78,126],"percentage",{"title":128,"description":129,"params_schema":130},"Seek","Seek audio to a given position",{"type":25,"properties":131,"required":135},{"audioId":132,"percentage":133},{"type":37},{"type":86,"description":134},"A number between 0 and 1 that determines the new current position in the audio",[78,126],{"title":137,"description":138,"params_schema":139},"Volume","Set the volume of all audio and the default value, or a specific audio node.",{"type":25,"properties":140,"required":144},{"audioId":141,"volume":142},{"type":37},{"type":86,"description":143},"A number between 0 and 1 that determines the new volume of all audio elements",[145],"volume","src/pages/engine/audio/_manifest.json","fad9de8481968df7","engine/queue/_manifest",{"id":148,"data":150,"filePath":178,"digest":179},{"name":151,"title":152,"entrypoint":16,"actions":153},"diffuse/engine/queue","Diffuse Queue",{"add":154,"pool":163,"shift":172,"unshift":175},{"title":155,"description":156,"params_schema":157},"Add","Add tracks to the queue.",{"type":22,"description":43,"items":158},{"type":25,"properties":159,"required":162},{"id":160,"uri":161},{"type":37},{"type":37},[105,62],{"title":164,"description":165,"params_schema":166},"Pool","Set the queue pool.",{"type":22,"description":43,"items":167},{"type":25,"properties":168,"required":171},{"id":169,"uri":170},{"type":37},{"type":37},[105,62],{"title":173,"description":174},"Shift","Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list.",{"title":176,"description":177},"Unshift","Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list.","src/pages/engine/queue/_manifest.json","bdd435b3e8277673","input/native-fs/_manifest",{"id":180,"data":182,"filePath":212,"digest":213},{"name":183,"title":184,"entrypoint":16,"input_properties":185,"actions":187},"diffuse/input/native-fs","Diffuse Input | Native File System",{"scheme":186},"file+local",{"consult":188,"list":192,"resolve":197,"mount":204,"unmount":207},{"title":35,"description":189,"params_schema":190},"Check if a handle is available to be used by passing in a file uri that uses that handle as the host.",{"type":37,"description":191},"The uri with the handle to check the availability of.",{"title":46,"description":193,"params_schema":194},"List tracks.",{"type":22,"description":195,"items":196},"A list of (cached) tracks with an uri matching the scheme",{"type":25},{"title":52,"description":198,"params_schema":199},"Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.",{"type":25,"properties":200,"required":203},{"method":201,"uri":202},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},"Mount","Prepare for usage.",{"title":208,"description":209,"params_schema":210},"Unmount","Callback after usage.",{"type":37,"description":211},"The handle id to unmount","src/pages/input/native-fs/_manifest.json","bbfb366cb25470ac","input/s3/_manifest",{"id":214,"data":216,"filePath":239,"digest":240},{"name":217,"title":218,"entrypoint":16,"input_properties":219,"actions":221},"diffuse/input/s3","Diffuse Input | S3",{"scheme":220},"s3",{"consult":222,"contextualize":224,"list":227,"resolve":230,"mount":236,"unmount":237},{"title":35,"params_schema":223},{"type":37,"description":38},{"title":40,"params_schema":225},{"type":22,"description":43,"items":226},{"type":25},{"title":46,"description":193,"params_schema":228},{"type":22,"description":195,"items":229},{"type":25},{"title":52,"description":198,"params_schema":231},{"type":25,"properties":232,"required":235},{"method":233,"uri":234},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":238},{"type":37,"description":211},"src/pages/input/s3/_manifest.json","458b0c64643bf8a8","input/opensubsonic/_manifest",{"id":241,"data":243,"filePath":266,"digest":267},{"name":244,"title":245,"entrypoint":16,"input_properties":246,"actions":248},"diffuse/input/opensubsonic","Diffuse Input | OpenSubsonic API",{"scheme":247},"opensubsonic",{"consult":249,"contextualize":251,"list":254,"resolve":257,"mount":263,"unmount":264},{"title":35,"params_schema":250},{"type":37,"description":38},{"title":40,"params_schema":252},{"type":22,"description":43,"items":253},{"type":25},{"title":46,"description":193,"params_schema":255},{"type":22,"description":195,"items":256},{"type":25},{"title":52,"description":198,"params_schema":258},{"type":25,"properties":259,"required":262},{"method":260,"uri":261},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":265},{"type":37,"description":211},"src/pages/input/opensubsonic/_manifest.json","463ff2f82f27fed9","orchestrator/process-tracks/_manifest",{"id":268,"data":270,"filePath":274,"digest":275},{"name":271,"title":272,"entrypoint":16,"actions":273},"diffuse/orchestrator/process-tracks","Diffuse Orchestrator | Process Tracks",{},"src/pages/orchestrator/process-tracks/_manifest.json","4d30ef9c892a16b8","orchestrator/queue-audio/_manifest",{"id":276,"data":278,"filePath":282,"digest":283},{"name":279,"title":280,"entrypoint":16,"actions":281},"diffuse/orchestrator/queue-audio","Diffuse Orchestrator | Queue Audio",{},"src/pages/orchestrator/queue-audio/_manifest.json","5c66731fcc2fae2d","orchestrator/queue-tracks/_manifest",{"id":284,"data":286,"filePath":290,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":289},"diffuse/orchestrator/queue-tracks","Diffuse Orchestrator | Queue Tracks",{},"src/pages/orchestrator/queue-tracks/_manifest.json","56a0c769ecdc8cbb","output/indexed-db/_manifest",{"id":292,"data":294,"filePath":303,"digest":304},{"name":295,"title":296,"entrypoint":16,"actions":297},"diffuse/output/indexed-db","Diffuse Output | IndexedDB",{"tracks":298,"mount":301,"unmount":302},{"title":19,"description":20,"params_schema":299},{"type":22,"description":23,"items":300},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/indexed-db/_manifest.json","c75e5169818995c0","output/native-fs/_manifest",{"id":305,"data":307,"filePath":316,"digest":317},{"name":308,"title":309,"entrypoint":16,"actions":310},"diffuse/output/native-fs","Diffuse Output | Native File System",{"tracks":311,"mount":314,"unmount":315},{"title":19,"description":20,"params_schema":312},{"type":22,"description":23,"items":313},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/native-fs/_manifest.json","9f36293a08c3d233","output/storacha-automerge/_manifest",{"id":318,"data":320,"filePath":329,"digest":330},{"name":321,"title":322,"entrypoint":16,"actions":323},"diffuse/output/storacha-automerge","Diffuse Output | Storacha Storage + Automerge CRDT",{"tracks":324,"mount":327,"unmount":328},{"title":19,"description":20,"params_schema":325},{"type":22,"description":23,"items":326},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/storacha-automerge/_manifest.json","607193e5156e1220","processor/metadata/_manifest",{"id":331,"data":333,"filePath":353,"digest":354},{"name":334,"title":335,"entrypoint":16,"actions":336},"diffuse/processor/metadata","Diffuse Processor | Metadata fetcher",{"supply":337},{"title":338,"description":339,"params_schema":340},"Supply","Get the metadata for a given URL or stream.",{"type":25,"properties":341},{"includeArtwork":342,"mimeType":344,"stream":345,"urls":346},{"type":100,"description":343},"Include artwork in the output.",{"type":37},{"type":25},{"type":25,"properties":347,"required":350},{"get":348,"head":349},{"type":37},{"type":37},[351,352],"get","head","src/pages/processor/metadata/_manifest.json","0f144e608574be9b","processor/artwork/_manifest",{"id":355,"data":357,"filePath":377,"digest":378},{"name":358,"title":359,"description":360,"entrypoint":16,"actions":361},"diffuse/processor/artwork","Diffuse Processor | Artwork fetcher","Tries to get artwork for a given URL or stream.",{"supply":362},{"title":338,"description":363,"params_schema":364},"Get the artwork for a given URL.",{"type":22,"items":365},{"type":25,"properties":366,"required":375},{"cacheId":367,"mimeType":368,"stream":369,"urls":370},{"type":37},{"type":37},{"type":25},{"type":25,"properties":371,"required":374},{"get":372,"head":373},{"type":37},{"type":37},[351,352],[376],"cacheId","src/pages/processor/artwork/_manifest.json","9401bdfa33e2f0db","processor/search/_manifest",{"id":379,"data":381,"filePath":385,"digest":386},{"name":382,"title":383,"entrypoint":16,"actions":384},"diffuse/processor/search","Diffuse Processor | Search",{},"src/pages/processor/search/_manifest.json","ec562d1125821f8a","theme/pilot/audio/_manifest",{"id":387,"data":389,"filePath":401,"digest":402},{"name":390,"title":391,"entrypoint":16,"actions":392},"diffuse/constituent/pilot/audio","",{"modifyIsPlaying":393,"modifyProgress":397},{"title":394,"description":395,"params_schema":396},"Set is-playing state","Indicate if audio is playing or not.",{"type":100},{"title":398,"description":399,"params_schema":400},"Set progress","Indicate how far the audio has progressed.",{"type":86},"src/pages/theme/pilot/audio/_manifest.json","7c3a0b25e8d14fd2","constituent/blur/artwork-controller/_manifest",{"id":403,"data":405,"filePath":409,"digest":410},{"name":406,"title":407,"entrypoint":16,"actions":408},"diffuse/constituent/blur/artwork-controller","Diffuse Blur Theme | Artwork Controller",{},"src/pages/constituent/blur/artwork-controller/_manifest.json","8fc3503208f14724","constituent/blur/browser/_manifest",{"id":411,"data":413,"filePath":417,"digest":418},{"name":414,"title":415,"entrypoint":16,"actions":416},"diffuse/constituent/blur/browser","Diffuse Blur Theme | Browser",{},"src/pages/constituent/blur/browser/_manifest.json","60cf6e2d4c21ecd2","orchestrator/search-tracks/_manifest",{"id":419,"data":421,"filePath":423,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":422},{},"src/pages/orchestrator/search-tracks/_manifest.json"] \ No newline at end of file diff --git a/.astro/settings.json b/.astro/settings.json index 1e62b0fc7..a8e517fee 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -1,6 +1,6 @@ { "_variables": { - "lastUpdateCheck": 1756909768278 + "lastUpdateCheck": 1757947671266 }, "devToolbar": { "enabled": false diff --git a/deno.lock b/deno.lock index 67c4553cd..a7268c392 100644 --- a/deno.lock +++ b/deno.lock @@ -27,6 +27,7 @@ "npm:@jsr/bradenmacdonald__s3-lite-client@0.9", "npm:@jsr/okikio__transferables@^1.0.2", "npm:@jsr/std__media-types@^1.1.0", + "npm:@lift-html/alien@^0.0.1", "npm:@okikio/sharedworker@^1.1.0", "npm:@orama/orama@^3.1.7", "npm:@orama/plugin-qps@^3.1.7", diff --git a/package-lock.json b/package-lock.json index d8a1c4e20..439e9edd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "@automerge/automerge": "^3.0.0-beta.0", "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", "@js-temporal/polyfill": "^0.5.1", + "@lift-html/alien": "^0.0.1", "@okikio/sharedworker": "^1.1.0", "@okikio/transferables": "npm:@jsr/okikio__transferables@^1.0.2", "@orama/orama": "^3.1.7", @@ -1143,6 +1144,22 @@ "node": ">=12" } }, + "node_modules/@lift-html/alien": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@lift-html/alien/-/alien-0.0.1.tgz", + "integrity": "sha512-WQJOI2rZvEW5tAvBvDkCUQMnmuhBpXt0Q6rigAt8v5XONECqj97eUqm0I5Q096BzDS2sWirlS8EkSp8ahwm5jg==", + "license": "CC0-1.0", + "dependencies": { + "@lift-html/core": "*", + "alien-signals": "*" + } + }, + "node_modules/@lift-html/core": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@lift-html/core/-/core-0.0.4.tgz", + "integrity": "sha512-QFfCu2PwGhN+dQ697TPuxvaeLo8swhHA0Bivypg3Owk5VcPkP6WHdzrrDVCQXstr1ANP8NFmFjX1WBM2y7ZCHA==", + "license": "CC0-1.0" + }, "node_modules/@okikio/sharedworker": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@okikio/sharedworker/-/sharedworker-1.1.0.tgz", diff --git a/package.json b/package.json index 3c628ce5d..5cd452810 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "@automerge/automerge": "^3.0.0-beta.0", "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", "@js-temporal/polyfill": "^0.5.1", + "@lift-html/alien": "^0.0.1", "@okikio/sharedworker": "^1.1.0", "@okikio/transferables": "npm:@jsr/okikio__transferables@^1.0.2", "@orama/orama": "^3.1.7", diff --git a/src/pages/constituent/blur/artwork-controller/_applet.astro b/src/pages/constituent/blur/artwork-controller/_applet.astro index 5f3cd625c..9b1493d31 100644 --- a/src/pages/constituent/blur/artwork-controller/_applet.astro +++ b/src/pages/constituent/blur/artwork-controller/_applet.astro @@ -43,7 +43,6 @@ import "@styles/diffuse/fonts.css"; flex-direction: column; font-size: var(--fs-sm); height: 100dvh; - /* max-width: var(--container-xs); */ overflow: hidden; position: relative; transition: @@ -54,8 +53,10 @@ import "@styles/diffuse/fonts.css"; /* Artwork */ .artwork { + app-region: drag; flex: 1; position: relative; + user-select: none; } .artwork img { @@ -335,10 +336,12 @@ import "@styles/diffuse/fonts.css"; import { FastAverageColor } from "fast-average-color"; import { Temporal } from "@js-temporal/polyfill"; import { xxh32r } from "xxh32/dist/raw.js"; + import { debounce } from "throttle-debounce"; import { computed, effect, signal } from "@scripts/spellcaster"; import { tags, text, type ElementConfigurator } from "@scripts/spellcaster/hyperscript.js"; + import type { Artwork } from "@applets/processor/artwork/types"; import type { Track } from "@applets/core/types"; import { applet, hs, inputUrl, reactive, register } from "@scripts/applet/common"; import { trackArtworkCacheId } from "@scripts/common"; @@ -349,9 +352,6 @@ import "@styles/diffuse/fonts.css"; import type * as AudioEngine from "@applets/engine/audio/types.d.ts"; import type * as QueueEngine from "@applets/engine/queue/types.d.ts"; - import type { Artwork } from "@applets/processor/artwork/types"; - import { debounce } from "throttle-debounce"; - // Register const context = register(); @@ -529,11 +529,7 @@ import "@styles/diffuse/fonts.css"; if (!bg || !controller || !main || !showcase) throw new Error("Missing DOM elements"); - const h = ( - tag: string, - props?: Record | (() => Record), - configure?: ElementConfigurator, - ) => hs(tag, scope, props, configure); + const h = hs(scope); //////////////////////////////////////////// // UI ░ ARTWORK diff --git a/src/pages/constituent/blur/artwork-controller/_manifest.json b/src/pages/constituent/blur/artwork-controller/_manifest.json index adb681f3b..78202f798 100644 --- a/src/pages/constituent/blur/artwork-controller/_manifest.json +++ b/src/pages/constituent/blur/artwork-controller/_manifest.json @@ -2,20 +2,5 @@ "name": "diffuse/constituent/blur/artwork-controller", "title": "Diffuse Blur Theme | Artwork Controller", "entrypoint": "index.html", - "actions": { - "modifyIsPlaying": { - "title": "Set is-playing state", - "description": "Indicate if audio is playing or not.", - "params_schema": { - "type": "boolean" - } - }, - "modifyProgress": { - "title": "Set progress", - "description": "Indicate how far the audio has progressed.", - "params_schema": { - "type": "number" - } - } - } + "actions": {} } diff --git a/src/pages/constituent/blur/browser/_applet.astro b/src/pages/constituent/blur/browser/_applet.astro new file mode 100644 index 000000000..7d8fe1bd1 --- /dev/null +++ b/src/pages/constituent/blur/browser/_applet.astro @@ -0,0 +1,160 @@ +--- +import "@styles/reset.css"; +import "@styles/variables.css"; +import "@styles/fonts.css"; +import "@styles/animations.css"; +import "@styles/icons/phosphor.css"; + +import "@styles/diffuse/colors.css"; +import "@styles/diffuse/fonts.css"; +--- + +
    + +
    + +
    +
    + + +
    + + + + + + + + diff --git a/src/pages/constituent/blur/browser/_manifest.json b/src/pages/constituent/blur/browser/_manifest.json new file mode 100644 index 000000000..2b0ede470 --- /dev/null +++ b/src/pages/constituent/blur/browser/_manifest.json @@ -0,0 +1,6 @@ +{ + "name": "diffuse/constituent/blur/browser", + "title": "Diffuse Blur Theme | Browser", + "entrypoint": "index.html", + "actions": {} +} diff --git a/src/pages/constituent/blur/browser/index.astro b/src/pages/constituent/blur/browser/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/constituent/blur/browser/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/index.astro b/src/pages/index.astro index a4d3339c4..a000c85f0 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -26,7 +26,8 @@ const themes = [ // Constituents const constituents = [ - { url: "constituent/blur/artwork-controller/", title: "(WIP) Blur ⦚ Artwork Controller" }, + { url: "constituent/blur/artwork-controller/", title: "Blur ⦚ Artwork Controller" }, + { url: "constituent/blur/browser/", title: "(WIP) Blur ⦚ Browser" }, ]; // Applets diff --git a/src/pages/input/opensubsonic/_applet.astro b/src/pages/input/opensubsonic/_applet.astro index 9c46febbb..4694b496c 100644 --- a/src/pages/input/opensubsonic/_applet.astro +++ b/src/pages/input/opensubsonic/_applet.astro @@ -46,7 +46,7 @@ const contextualize = async (tracks: Track[]) => { const s = await worker.contextualize(transfer(tracks)); - ui?.setServers({ ...ui?.servers(), ...s }); + ui?.servers({ ...ui?.servers(), ...s }); }; const groupConsult = async (tracks: Track[]) => { diff --git a/src/pages/orchestrator/process-tracks/_applet.astro b/src/pages/orchestrator/process-tracks/_applet.astro index 12c0a006c..f46584e94 100644 --- a/src/pages/orchestrator/process-tracks/_applet.astro +++ b/src/pages/orchestrator/process-tracks/_applet.astro @@ -1,7 +1,7 @@ diff --git a/src/pages/orchestrator/queue-tracks/_applet.astro b/src/pages/orchestrator/queue-tracks/_applet.astro index 4169305f7..8eef1d669 100644 --- a/src/pages/orchestrator/queue-tracks/_applet.astro +++ b/src/pages/orchestrator/queue-tracks/_applet.astro @@ -5,7 +5,6 @@ //////////////////////////////////////////// // SETUP //////////////////////////////////////////// - import type * as AudioEngine from "@applets/engine/audio/types.d.ts"; import type * as QueueEngine from "@applets/engine/queue/types.d.ts"; const context = register(); @@ -17,7 +16,6 @@ }; const engine = { - audio: applet("/engine/audio", { groupId: context.groupId }), queue: applet("/engine/queue", { groupId: context.groupId }), }; diff --git a/src/pages/orchestrator/search-tracks/_applet.astro b/src/pages/orchestrator/search-tracks/_applet.astro new file mode 100644 index 000000000..998d88fd6 --- /dev/null +++ b/src/pages/orchestrator/search-tracks/_applet.astro @@ -0,0 +1,68 @@ + diff --git a/src/pages/orchestrator/search-tracks/_manifest.json b/src/pages/orchestrator/search-tracks/_manifest.json new file mode 100644 index 000000000..5e44c9177 --- /dev/null +++ b/src/pages/orchestrator/search-tracks/_manifest.json @@ -0,0 +1,6 @@ +{ + "name": "diffuse/orchestrator/queue-tracks", + "title": "Diffuse Orchestrator | Queue Tracks", + "entrypoint": "index.html", + "actions": {} +} diff --git a/src/pages/orchestrator/search-tracks/index.astro b/src/pages/orchestrator/search-tracks/index.astro new file mode 100644 index 000000000..dfb1e1a87 --- /dev/null +++ b/src/pages/orchestrator/search-tracks/index.astro @@ -0,0 +1,9 @@ +--- +import Layout from "@layouts/applet.astro"; +import Applet from "./_applet.astro"; +import { title } from "./_manifest.json"; +--- + + + + diff --git a/src/pages/processor/search/_applet.astro b/src/pages/processor/search/_applet.astro index 341d73432..cf552b686 100644 --- a/src/pages/processor/search/_applet.astro +++ b/src/pages/processor/search/_applet.astro @@ -1,22 +1,37 @@ diff --git a/package-lock.json b/package-lock.json index 439e9edd1..189d3a11f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,8 +5,13 @@ "packages": { "": { "dependencies": { - "@automerge/automerge": "^3.0.0-beta.0", + "@automerge/automerge": "^3.1.2", "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", + "@enhance/base-element": "^1.3.2", + "@enhance/element": "^1.4.6", + "@enhance/event-handler-mixin": "^1.0.4", + "@enhance/morphdom-mixin": "^1.1.3", + "@enhance/shadow-element-mixin": "^1.0.2", "@js-temporal/polyfill": "^0.5.1", "@lift-html/alien": "^0.0.1", "@okikio/sharedworker": "^1.1.0", @@ -20,14 +25,14 @@ "@tokenizer/range": "^0.13.0", "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", "98.css": "^0.1.21", - "alien-signals": "^2.0.7", + "alien-signals": "^3.0.0", "comlink": "^4.4.2", "fast-average-color": "^9.5.0", "iconoir": "^7.11.0", "idb-keyval": "^6.2.1", - "music-metadata": "^11.2.3", - "query-string": "^9.1.2", - "subsonic-api": "^3.1.2", + "music-metadata": "^11.9.0", + "query-string": "^9.3.1", + "subsonic-api": "^3.2.0", "throttle-debounce": "^5.0.2", "uint8arrays": "^5.1.0", "uri-js": "^4.4.1", @@ -35,1543 +40,1665 @@ "xxh32": "^2.0.5" }, "devDependencies": { + "@enhance/arc-plugin-enhance": "^11.0.4", + "@enhance/arc-plugin-styles": "^5.0.5", + "@enhance/cli": "^1.2.1", + "@enhance/plugin-typescript": "^0.2.2", + "@enhance/styles-cribsheet": "^0.0.11", + "@enhance/types": "^0.7.0", "@types/throttle-debounce": "^5.0.2", "@types/wicg-file-system-access": "^2023.10.6", "astro": "^5.7.4", "astro-purgecss": "^5.2.2", "astro-scope": "^3.0.1", - "netlify": "^22.1.0", + "netlify": "^23.9.1", "purgecss": "^7.0.2", "sass": "^1.87.0", "vite-plugin-wasm": "^3.4.1", "vite-tsconfig-paths": "^5.1.4" } }, - "node_modules/@assemblyscript/loader": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.17.14.tgz", - "integrity": "sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==", - "license": "Apache-2.0" - }, - "node_modules/@astrojs/compiler": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.12.2.tgz", - "integrity": "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astrojs/internal-helpers": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz", - "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==", + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.0.tgz", + "integrity": "sha512-teB30tFooE3iQs2HQIKJ02D8UZA1Xy1zaczzhUjJs0CymYxeC0g+y5rCY2p8NHBM6DBUVoR8rSM4kHLj1WE9mQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } }, - "node_modules/@astrojs/markdown-remark": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz", - "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==", + "node_modules/@architect/asap": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@architect/asap/-/asap-7.0.10.tgz", + "integrity": "sha512-oJjYDranGTCkp21bziF/fIxJfLTucitqg/ar5mmLPHyroNG3XF3SUIMvuNd1GNIe4oy40wvGEXvTToKYvUeOLA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@astrojs/internal-helpers": "0.6.1", - "@astrojs/prism": "3.3.0", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-text": "^4.0.2", - "import-meta-resolve": "^4.1.0", - "js-yaml": "^4.1.0", - "mdast-util-definitions": "^6.0.0", - "rehype-raw": "^7.0.0", - "rehype-stringify": "^10.0.1", - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "remark-smartypants": "^3.0.2", - "shiki": "^3.2.1", - "smol-toml": "^1.3.1", - "unified": "^11.0.5", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "unist-util-visit-parents": "^6.0.1", - "vfile": "^6.0.3" + "@aws-lite/client": "~0.21.1", + "@aws-lite/s3": "^0.1.21" + }, + "engines": { + "node": ">=16" } }, - "node_modules/@astrojs/prism": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", - "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", + "node_modules/@architect/create": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@architect/create/-/create-5.0.3.tgz", + "integrity": "sha512-wLHLdZnArRR08HoEFCUtnvxSDjWexkhqrzK7NgeswjMMr5mK4y0zagarte0oaXSIhjCN+x79GWCkH49bKdsVBA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "prismjs": "^1.30.0" + "@architect/inventory": "~4.0.5", + "@architect/utils": "~4.0.6", + "chalk": "4.1.2", + "lambda-runtimes": "~2.0.2", + "minimist": "~1.2.8" + }, + "bin": { + "arc-create": "src/cli.js" }, "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" + "node": ">=16" } }, - "node_modules/@astrojs/telemetry": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", - "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "node_modules/@architect/create/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "ci-info": "^4.2.0", - "debug": "^4.4.0", - "dlv": "^1.1.3", - "dset": "^3.1.4", - "is-docker": "^3.0.0", - "is-wsl": "^3.1.0", - "which-pm-runs": "^1.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@automerge/automerge": { - "version": "3.0.0-preview.13", - "resolved": "https://registry.npmjs.org/@automerge/automerge/-/automerge-3.0.0-preview.13.tgz", - "integrity": "sha512-1r7ggaTqsQ4PHGv45QjVOxPOvJIKjSrHY+HTiFxCU04Qlx3kvXxDLVyBbZeN1jg2I+Y8tpuG0eVtC4QxL9wGIg==", + "node_modules/@architect/create/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { - "uuid": "^9.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "node_modules/@architect/functions": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@architect/functions/-/functions-8.1.9.tgz", + "integrity": "sha512-hyNKhpwdUxkclKVys3JaX1y/GgTqAOKmVS6Kh7+VZ8+/Gr5KnDzQixH62oqp2TjxtFKazOWthjEs9xSlG7hNJg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@aws-lite/apigatewaymanagementapi": "^0.0.10", + "@aws-lite/client": "^0.22.4", + "@aws-lite/dynamodb": "^0.3.9", + "@aws-lite/sns": "^0.0.8", + "@aws-lite/sqs": "^0.2.4", + "@aws-lite/ssm": "^0.2.5", + "cookie": "^1.0.2", + "cookie-signature": "^1.2.2", + "csrf": "^3.1.0", + "node-webtokens": "^1.0.4", + "run-parallel": "^1.2.0", + "run-waterfall": "^1.1.7", + "uid-safe": "^2.1.5" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "node_modules/@architect/functions/node_modules/@aws-lite/client": { + "version": "0.22.4", + "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.22.4.tgz", + "integrity": "sha512-52ua/U3+JXecuTtrTZ1XjSbDL2S+iyfOD/1daYRnPQ83YPNzo4BJe1iIVwtZbJB6goLyeVolxSlPmnuqF6JFvw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "workspaces": [ + "plugins/acm", + "plugins/apigateway", + "plugins/apigatewaymanagementapi", + "plugins/apigatewayv2", + "plugins/cloudformation", + "plugins/cloudfront", + "plugins/cloudwatch-logs", + "plugins/dynamodb", + "plugins/iam", + "plugins/lambda", + "plugins/organizations", + "plugins/rds-data", + "plugins/route53", + "plugins/s3", + "plugins/sns", + "plugins/sqs", + "plugins/ssm", + "plugins/sts" + ], + "dependencies": { + "aws4": "^1.13.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16" } }, - "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "node_modules/@architect/hydrate": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@architect/hydrate/-/hydrate-4.0.8.tgz", + "integrity": "sha512-rf5xA9ZHWj69CPbwuQB3P0gscX+1ast0IilrqbGglZKi0DS4Xkoo6kJpUbdGfRsNAV3Of+z2GM0XLfEnuigVWg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/types": "^7.27.3" + "@architect/inventory": "~4.0.5", + "@architect/utils": "~4.0.6", + "acorn-loose": "~8.4.0", + "chalk": "4.1.2", + "esquery": "~1.6.0", + "glob": "10.4.5", + "minimist": "~1.2.8", + "run-series": "~1.1.9", + "symlink-or-copy": "~1.3.1" }, "bin": { - "parser": "bin/babel-parser.js" + "arc-hydrate": "src/cli.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=16" } }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "node_modules/@architect/hydrate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6.9.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "node_modules/@architect/hydrate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@borewit/text-codec": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.0.tgz", - "integrity": "sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==", - "license": "MIT", + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@bradenmacdonald/s3-lite-client": { - "name": "@jsr/bradenmacdonald__s3-lite-client", - "version": "0.9.2", - "resolved": "https://npm.jsr.io/~/11/@jsr/bradenmacdonald__s3-lite-client/0.9.2.tgz", - "integrity": "sha512-PwwaCkPS+nAuPJgy8WOTDrh1BSLZ0K2Ho/4Ddmtp8NImN48j0leknNREiSEwqhFiSmfQJIUS3qk9mK7xj8Wq3w==" - }, - "node_modules/@capsizecss/unpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", - "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", + "node_modules/@architect/hydrate/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "blob-to-buffer": "^1.2.8", - "cross-fetch": "^3.0.4", - "fontkit": "^2.0.2" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "node_modules/@architect/hydrate/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", - "optional": true, + "license": "BlueOak-1.0.0", "dependencies": { - "tslib": "^2.4.0" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", - "cpu": [ - "ppc64" - ], + "node_modules/@architect/hydrate/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } + "license": "ISC" }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", - "cpu": [ - "arm" - ], + "node_modules/@architect/hydrate/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/hydrate/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", - "cpu": [ - "x64" - ], + "node_modules/@architect/inventory": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@architect/inventory/-/inventory-4.0.9.tgz", + "integrity": "sha512-u2huwBc3JgiM0bGLPyBy0NjcF2mtnmFWwgFl7+E72jG3BcJl1QwQqXdaHygI2WblsH4BG8C19A47Er9QKOGdiw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "Apache-2.0", + "dependencies": { + "@architect/asap": "~7.0.10", + "@architect/parser": "~7.0.1", + "@architect/utils": "~4.0.6", + "@aws-lite/client": "^0.21.1", + "@aws-lite/ssm": "^0.2.3", + "lambda-runtimes": "~2.0.5" + }, "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@architect/parser/-/parser-7.0.1.tgz", + "integrity": "sha512-T4Rr/eQbtg/gPvS4HcXR7zYxLJ3gEh6pSKj0s/Y1IrvJY9QG4BDAVZgE7AYGfzqymwIF0pUI2mQ91CLi2CTnQw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", - "cpu": [ - "x64" - ], + "node_modules/@architect/sandbox": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@architect/sandbox/-/sandbox-6.0.5.tgz", + "integrity": "sha512-VJcFxVhSbrhisTMqq2ukbj4NlN18eJgYYqEMnCk9UAdIyHBBoEAP4YmroyFCHv7CsutFUMhjDQP9+9deQje+6w==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", + "dependencies": { + "@architect/asap": "~7.0.10", + "@architect/create": "~5.0.3", + "@architect/hydrate": "~4.0.6", + "@architect/inventory": "~4.0.5", + "@architect/utils": "~4.0.6", + "@aws-lite/client": "^0.21.1", + "@aws-lite/dynamodb": "^0.3.4", + "@begin/hashid": "~1.0.0", + "chalk": "4.1.2", + "chokidar": "~3.6.0", + "depstatus": "~1.1.1", + "dynalite": "~3.2.2", + "finalhandler": "~1.2.0", + "glob": "~10.3.12", + "http-proxy": "~1.18.1", + "lambda-runtimes": "~2.0.2", + "minimist": "~1.2.8", + "router": "~1.3.8", + "run-parallel": "~1.2.0", + "run-series": "~1.1.9", + "send": "~0.18.0", + "server-destroy": "~1.0.1", + "tmp": "~0.2.3", + "tree-kill": "~1.2.2", + "update-notifier-cjs": "~5.1.6", + "ws": "~8.17.0" + }, + "bin": { + "sandbox": "src/cli/cli.js" + }, "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/sandbox/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", - "cpu": [ - "x64" - ], + "node_modules/@architect/sandbox/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", - "cpu": [ - "arm" - ], + "node_modules/@architect/sandbox/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=18" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/sandbox/node_modules/glob": { + "version": "10.3.16", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz", + "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", - "cpu": [ - "ia32" - ], + "node_modules/@architect/sandbox/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", - "cpu": [ - "loong64" - ], + "node_modules/@architect/sandbox/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "ISC" }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", - "cpu": [ - "mips64el" - ], + "node_modules/@architect/sandbox/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@architect/sandbox/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", - "cpu": [ - "riscv64" - ], + "node_modules/@architect/sandbox/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", - "cpu": [ - "s390x" - ], + "node_modules/@architect/sandbox/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">=18" + "node": ">=8.10.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", - "cpu": [ - "x64" - ], + "node_modules/@architect/sandbox/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/utils": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@architect/utils/-/utils-4.0.6.tgz", + "integrity": "sha512-aa6gNNoHxgKpQrIFOa5zNW5fD10v46AE2VZNcjToxAvm//8itbIBoGw2wj8oF3gqHMKKkeLAtdO8K8tlKVN8ZA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "license": "Apache-2.0", + "dependencies": { + "@aws-lite/client": "^0.21.1", + "chalk": "4.1.2", + "glob": "~10.3.12", + "path-sort": "~0.1.0", + "restore-cursor": "3.1.0", + "run-series": "~1.1.9", + "run-waterfall": "~1.1.7", + "sha": "~3.0.0" + }, "engines": { - "node": ">=18" + "node": ">=16" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", - "cpu": [ - "x64" - ], + "node_modules/@architect/utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", - "cpu": [ - "x64" - ], + "node_modules/@architect/utils/node_modules/glob": { + "version": "10.3.16", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz", + "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", - "cpu": [ - "x64" - ], + "node_modules/@architect/utils/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", - "cpu": [ - "arm64" - ], + "node_modules/@architect/utils/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "ISC" + }, + "node_modules/@architect/utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", - "cpu": [ - "ia32" - ], + "node_modules/@architect/utils/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", - "cpu": [ - "x64" - ], + "node_modules/@assemblyscript/loader": { + "version": "0.17.14", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.17.14.tgz", + "integrity": "sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==", + "license": "Apache-2.0" + }, + "node_modules/@astrojs/compiler": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.12.2.tgz", + "integrity": "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@astrojs/internal-helpers": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz", + "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@astrojs/markdown-remark": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz", + "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@astrojs/internal-helpers": "0.6.1", + "@astrojs/prism": "3.3.0", + "github-slugger": "^2.0.0", + "hast-util-from-html": "^2.0.3", + "hast-util-to-text": "^4.0.2", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "mdast-util-definitions": "^6.0.0", + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.1", + "remark-gfm": "^4.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-smartypants": "^3.0.2", + "shiki": "^3.2.1", + "smol-toml": "^1.3.1", + "unified": "^11.0.5", + "unist-util-remove-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "unist-util-visit-parents": "^6.0.1", + "vfile": "^6.0.3" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], + "node_modules/@astrojs/prism": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", + "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" }, - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", + "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^4.2.0", + "debug": "^4.4.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "is-docker": "^3.0.0", + "is-wsl": "^3.1.0", + "which-pm-runs": "^1.1.0" }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], + "node_modules/@automerge/automerge": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@automerge/automerge/-/automerge-3.1.2.tgz", + "integrity": "sha512-rAZRLAMrboBJGMmZXPOfYiwkmHXho6RjhUOIrlmf+Buukt/DN1oee8kHfpI3U4etetvGgqf5JaFVbydQpKT/Vg==", + "license": "MIT" + }, + "node_modules/@aws-lite/apigatewaymanagementapi": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@aws-lite/apigatewaymanagementapi/-/apigatewaymanagementapi-0.0.10.tgz", + "integrity": "sha512-fIkUYTV4TF0wnNwzvbqWou/I0bxGsgJbbawBmeKoJIc+3yc2PzOIP6RqNPmWjlUHsuI7QnymPgWljWfvExlaVg==", "dev": true, "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], + "node_modules/@aws-lite/client": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.21.10.tgz", + "integrity": "sha512-fOn3lg1ynBAxqcELRf084bNJ6gu+GGoNyC+hwitW/hg3Vc1z1ZbK5HWWTrDw8HdM/fEQ0UN++g7GXVN1GVctdQ==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "Apache-2.0", + "workspaces": [ + "plugins/acm", + "plugins/apigateway", + "plugins/apigatewaymanagementapi", + "plugins/apigatewayv2", + "plugins/cloudformation", + "plugins/cloudfront", + "plugins/cloudwatch-logs", + "plugins/dynamodb", + "plugins/iam", + "plugins/lambda", + "plugins/organizations", + "plugins/rds-data", + "plugins/route53", + "plugins/s3", + "plugins/sns", + "plugins/sqs", + "plugins/ssm", + "plugins/sts" + ], + "dependencies": { + "aws4": "^1.13.0" + }, + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], + "node_modules/@aws-lite/dynamodb": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@aws-lite/dynamodb/-/dynamodb-0.3.9.tgz", + "integrity": "sha512-jrMAWwxoAMVJ3z0/mI/GzPM5AfGmH+xzTpNIbjg3+2WdYJRqvIf8025XJdCDtS9/4x8zogdchEp3ZelXnwYyqw==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "Apache-2.0", + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], + "node_modules/@aws-lite/s3": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@aws-lite/s3/-/s3-0.1.22.tgz", + "integrity": "sha512-9OL95fTvHV80JvFTxLx8hhWQ6DgwHUts02KpXITA8syCDnYgua2rNcpwQ5b6GZzpL7yNXU0dud/Y6edThbffig==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "Apache-2.0", + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], + "node_modules/@aws-lite/sns": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@aws-lite/sns/-/sns-0.0.8.tgz", + "integrity": "sha512-MIzHe66kLNyzPFY/DX30uN7DlVQsnBiHPYbq/7syNWuoYSG8bkWuUX2CVIuSL7Ji5jaLpQ4lf8/VQ+SiAeoIZA==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "Apache-2.0", + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], + "node_modules/@aws-lite/sqs": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@aws-lite/sqs/-/sqs-0.2.4.tgz", + "integrity": "sha512-a1M3HDdkNE/xJfASlfisAaZ8XF6FpvoJbJsH/gr6pogEFWgNQyvmPVNRElnDY7JW3ee82sEOkMukYRdAbjytNQ==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "Apache-2.0", + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], + "node_modules/@aws-lite/ssm": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@aws-lite/ssm/-/ssm-0.2.5.tgz", + "integrity": "sha512-1B8mZ79ySqlTEfSQ87KZ0XkmTOKQFMO3lUYUGUtwNTUncJINr6nhRWEjk128oBWwEQnpJ7NfpDPjdfg1ICe3xw==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "Apache-2.0", + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" }, - "funding": { - "url": "https://opencollective.com/libvips" + "bin": { + "parser": "bin/babel-parser.js" }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], + "node_modules/@begin/data": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@begin/data/-/data-5.0.5.tgz", + "integrity": "sha512-/OVW944vm6rw7qp9CcVbswzcdXTzVNcVTvn5ajFtAFCE9WwjsvjmhOnyMzEAWkb1eePbB6FmQC9+PX/XjKpI6g==", "dev": true, "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "dependencies": { + "@aws-lite/client": "^0.21.5", + "@aws-lite/dynamodb": "^0.3.4", + "@aws-lite/ssm": "^0.2.3", + "@begin/hashid": "^1.0.0", + "run-parallel": "^1.2.0", + "run-waterfall": "^1.1.7" }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@begin/hashid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@begin/hashid/-/hashid-1.0.0.tgz", + "integrity": "sha512-w+U9klEtRkt7hyW/f+/SvwPgJ4CTMO2ENddisX9dGgLUZKu+iKpb/IhYnQWIt9/Nnm/5DkApmiHGimPs621wwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@begin/parse5": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@begin/parse5/-/parse5-0.0.4.tgz", + "integrity": "sha512-1H5S1AcFqpQfBMG0z4z7URFb5jWCrILIH9MkXSmTsyYd4hj4kgJnpXHGELJE9HnXH1maI/WfHi5j+udDVkvZ9g==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.0.tgz", + "integrity": "sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==", + "license": "MIT", "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], + "node_modules/@bradenmacdonald/s3-lite-client": { + "name": "@jsr/bradenmacdonald__s3-lite-client", + "version": "0.9.2", + "resolved": "https://npm.jsr.io/~/11/@jsr/bradenmacdonald__s3-lite-client/0.9.2.tgz", + "integrity": "sha512-PwwaCkPS+nAuPJgy8WOTDrh1BSLZ0K2Ho/4Ddmtp8NImN48j0leknNREiSEwqhFiSmfQJIUS3qk9mK7xj8Wq3w==" + }, + "node_modules/@capsizecss/unpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", + "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "blob-to-buffer": "^1.2.8", + "cross-fetch": "^3.0.4", + "fontkit": "^2.0.2" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" + "node": ">=0.1.90" } }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/arc-plugin-enhance": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-enhance/-/arc-plugin-enhance-11.0.5.tgz", + "integrity": "sha512-CgPslLhOZh28jQgjU7gsUUkJcR53RFrcd3EYNR7qEgeG3vQx4nTz62N4/EC2FvAJlbPSU+P+GyZ0KRNB1MivOA==", "dev": true, "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "dependencies": { + "@architect/asap": "^7.0.10", + "@architect/functions": "^8.1.6", + "@begin/data": "^5.0.5", + "@enhance/arc-plugin-rollup": "^2.0.0", + "@enhance/enhance-style-transform": "^0.1.2", + "@enhance/import-transform": "^4.0.1", + "@enhance/ssr": "^4.0.3", + "glob": "^9.3.5", + "header-timers": "^0.3.0" }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + "engines": { + "node": ">=16" } }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], + "node_modules/@enhance/arc-plugin-enhance/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, + "license": "ISC", "dependencies": { - "@emnapi/runtime": "^1.2.0" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], + "node_modules/@enhance/arc-plugin-enhance/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], + "license": "ISC" + }, + "node_modules/@enhance/arc-plugin-enhance/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/arc-plugin-enhance/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], + "license": "ISC", "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=8" + } + }, + "node_modules/@enhance/arc-plugin-enhance/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" }, "funding": { - "url": "https://opencollective.com/libvips" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/@enhance/arc-plugin-enhance/node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "node_modules/@enhance/arc-plugin-rollup": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-rollup/-/arc-plugin-rollup-2.0.0.tgz", + "integrity": "sha512-+9o61Zm91hdpi6NV5QDbqma7Zi0ZtgxO5itOYIo4tn7gwNO9KAoJNT7cK6ZKzVyaNxcSKTceiXYYQo5Fe7Hkrw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@rollup/plugin-commonjs": "^24.0.1", + "@rollup/plugin-node-resolve": "^15.0.1", + "rollup": "^3.7.4" }, "engines": { - "node": "20 || >=22" + "node": ">=14" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@enhance/arc-plugin-rollup/node_modules/@rollup/plugin-commonjs": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.1.0.tgz", + "integrity": "sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/@enhance/arc-plugin-rollup/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@enhance/arc-plugin-rollup/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@enhance/arc-plugin-rollup/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@jridgewell/sourcemap-codec": "^1.4.13" }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "node_modules/@enhance/arc-plugin-rollup/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "MIT" - }, - "node_modules/@js-temporal/polyfill": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.5.1.tgz", - "integrity": "sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==", "license": "ISC", "dependencies": { - "jsbi": "^4.3.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@lift-html/alien": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@lift-html/alien/-/alien-0.0.1.tgz", - "integrity": "sha512-WQJOI2rZvEW5tAvBvDkCUQMnmuhBpXt0Q6rigAt8v5XONECqj97eUqm0I5Q096BzDS2sWirlS8EkSp8ahwm5jg==", - "license": "CC0-1.0", - "dependencies": { - "@lift-html/core": "*", - "alien-signals": "*" + "node_modules/@enhance/arc-plugin-rollup/node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@lift-html/core": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@lift-html/core/-/core-0.0.4.tgz", - "integrity": "sha512-QFfCu2PwGhN+dQ697TPuxvaeLo8swhHA0Bivypg3Owk5VcPkP6WHdzrrDVCQXstr1ANP8NFmFjX1WBM2y7ZCHA==", - "license": "CC0-1.0" - }, - "node_modules/@okikio/sharedworker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@okikio/sharedworker/-/sharedworker-1.1.0.tgz", - "integrity": "sha512-Xj9TUWll9mhARsKu5DtlQCjRekfJfQ2E291ow6gmXIz+WuF6uJMH8ZmGhdRTx/ndOippHnm1j/vxXNjmR6JuXw==", - "license": "MIT" - }, - "node_modules/@okikio/transferables": { - "name": "@jsr/okikio__transferables", - "version": "1.0.2", - "resolved": "https://npm.jsr.io/~/11/@jsr/okikio__transferables/1.0.2.tgz", - "integrity": "sha512-xz7RmslHsTt/Cy7GPnDurV1aKuUuVaR3FOIcKtLMuY8e+yEMVnwkPqaFWvsO/WbfeUQQnygo5C7g1/oLURrPsA==" - }, - "node_modules/@orama/orama": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.9.tgz", - "integrity": "sha512-UXQYvN0DYl5EMOXX3O0Rwke+0R0Pd7PW/hOVwgpPd6KKJPb3RP74m3PEbEFjdTzZVLUW81o7herYXD2h4PVcGQ==", + "node_modules/@enhance/arc-plugin-styles": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-styles/-/arc-plugin-styles-5.0.6.tgz", + "integrity": "sha512-LHTUDlz1KxcvB1ZZ2azLdixkCnxcAyYfS6XhUnzP+Nr3au331T75q4k73liCbPOaS0TEtYRPylcSGJwMTVH6HQ==", + "dev": true, "license": "Apache-2.0", + "dependencies": { + "@architect/functions": "^8.0.4", + "@enhance/styles": "^6.4.0" + }, "engines": { - "node": ">= 20.0.0" + "node": ">=14" } }, - "node_modules/@orama/plugin-qps": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@orama/plugin-qps/-/plugin-qps-3.1.9.tgz", - "integrity": "sha512-QqB+fR//Mg6FRWutUxPtQi7IM1fND28Rm+9Cpc90pMZBLatVdqw2prbNJhVfoObu0IpemclHyf9xY0ObyTw7dw==", + "node_modules/@enhance/base-element": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@enhance/base-element/-/base-element-1.3.2.tgz", + "integrity": "sha512-v9Ed23nCXxn1chC/AbCYBCybYq92N5hDkADt6uXOFovHg7/RARgESQGd39x8+8fuhOM95YszfxZRhDjYDUsq4w==", + "license": "Apache-2.0" + }, + "node_modules/@enhance/cli": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@enhance/cli/-/cli-1.2.1.tgz", + "integrity": "sha512-rW2rOi+I+el41CfND1/O4hIQ6PtQC16//eKtP5F8AXriC+oWwbU/sfDchFQkbBoLBk8/2DZg8Emj68iRXLqAbA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@orama/orama": "3.1.9" + "@apidevtools/json-schema-ref-parser": "9.1.0", + "@architect/inventory": "^4.0.5", + "@architect/parser": "^7.0.1", + "@architect/sandbox": "^6.0.5", + "@architect/utils": "^4.0.6", + "@colors/colors": "1.6.0", + "@enhance/create": "^4.1.2", + "enquirer": "^2.4.1", + "escodegen": "^2.1.0", + "esprima": "^4.0.1", + "is-potential-custom-element-name": "^1.0.1", + "jsonschema": "^1.4.1", + "lambda-runtimes": "^2.0.2", + "minimist": "^1.2.8", + "node-machine-id": "^1.1.12", + "pluralize": "^8.0.0", + "restore-cursor": "^3.1.0", + "strip-ansi": "^6.0.1", + "tiny-json-http": "^7.5.1", + "tmp": "^0.2.3", + "ws": "^8.18.0" + }, + "bin": { + "enhance": "src/index.js" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@oslojs/encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", - "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "node_modules/@enhance/cli/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "node_modules/@enhance/cli/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=8" + } + }, + "node_modules/@enhance/create": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@enhance/create/-/create-4.1.4.tgz", + "integrity": "sha512-oiP1lMNoN38xlDb3LvqYey7dKyYGXxQDpc0A5/U5yyEu10DKm0uUpgEbTuVB/HtafcDFMbLMJ+4g3dsL5Po1bQ==", + "dev": true, + "dependencies": { + "@architect/parser": "^6.0.3", + "isomorphic-git": "^1.25.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "enhance-create": "index.js" }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" + "engines": { + "node": ">=14" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], + "node_modules/@enhance/create/node_modules/@architect/parser": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@architect/parser/-/parser-6.0.3.tgz", + "integrity": "sha512-g03zlsXO0YBVMDFbXHRL3JpVpru4kUeaQIe53tNhs1C9+fMguNCSWq1tNSmwqhBYq43O/R3hleg8VSOI0NFwgA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "Apache-2.0", "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=14" } }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], + "node_modules/@enhance/css-parser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@enhance/css-parser/-/css-parser-1.0.0.tgz", + "integrity": "sha512-DG18Jwxvf0WvUtA8VEA+axaIq0aoJzGTd25kdeLDPQcNnq3bWG+TUMPi8oa4btVXwHVyCR7Xsy0jW80m1ZwPow==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" } }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/custom-element-mixin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@enhance/custom-element-mixin/-/custom-element-mixin-1.3.1.tgz", + "integrity": "sha512-gpWcjzbMYjXcmrdu47RFGQn6ujVI/CicXILYXD/qLKVzamWJOynB2ttz8iYYHH1CnLrgnoQoVBH/EJMC9moTIw==", + "license": "Apache-2.0" + }, + "node_modules/@enhance/element": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@enhance/element/-/element-1.4.6.tgz", + "integrity": "sha512-JqtdowaD1KBHzRE3Vp1cV2JzPqY9nyWNekeSMJon4PWeXKN2Fc2zJ2+xIHUhsrg8Z4AtdKmqnndFD4qfE3kRhw==", + "license": "Apache-2.0", + "dependencies": { + "@enhance/base-element": "^1.3.2", + "@enhance/custom-element-mixin": "^1.3.1", + "@enhance/event-handler-mixin": "^1.0.4", + "@enhance/morphdom-mixin": "^1.1.3", + "@enhance/shadow-element-mixin": "^1.0.2", + "@enhance/template-mixin": "^1.0.3" + } + }, + "node_modules/@enhance/enhance-style-transform": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@enhance/enhance-style-transform/-/enhance-style-transform-0.1.2.tgz", + "integrity": "sha512-Hx/c5PfJl4XYToZaKL0b3o54rq4JX5zKD6Z+Pz6BSygnX0xOOHdWriaXxFKDUl1X/VVVlJM3FWjYj93/a7WSPg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "license": "ISC", + "dependencies": { + "@enhance/css-parser": "^1.0.0" } }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/event-handler-mixin": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@enhance/event-handler-mixin/-/event-handler-mixin-1.0.4.tgz", + "integrity": "sha512-d72GnC8rHr5yuaJR85qSLK1A+ZXWIBj58Ju7CZ0/X3KLCxyBT3A32186x0o1D5SmBHZSbmldxNq5w0euunHvug==", + "license": "Apache-2.0" + }, + "node_modules/@enhance/import-transform": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@enhance/import-transform/-/import-transform-4.0.1.tgz", + "integrity": "sha512-09/9Y6gp3CzaB82822ekwRe5Xtzhh07m2Gjb+1xLu+CMGo3ltjSYjqYr5Twbq9tGGn5elS3rt5/7CJ240K2ylA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0", + "dependencies": { + "@architect/functions": "^8.0.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], + "node_modules/@enhance/morphdom-mixin": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@enhance/morphdom-mixin/-/morphdom-mixin-1.1.3.tgz", + "integrity": "sha512-VG0M0ysOMtuIj98j4v7+Xx0+8UE7amw4lV1w1Tunn2yvXT8iYtVTNGTj8J51rSidXGo+2VCRQgZyAyhPFWiR/A==", + "license": "Apache-2.0", + "dependencies": { + "morphdom": "^2.7.0" + } + }, + "node_modules/@enhance/plugin-typescript": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@enhance/plugin-typescript/-/plugin-typescript-0.2.2.tgz", + "integrity": "sha512-uGsMDs5pYWEOZgYI71SAYeP3uPkme0swCPjLfnmH59Tu4shinjrwT0A95UarxzBGHlvKJxcQyluuVAY5/D0nOw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0" + }, + "node_modules/@enhance/shadow-element-mixin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@enhance/shadow-element-mixin/-/shadow-element-mixin-1.0.2.tgz", + "integrity": "sha512-zBTzx6qmaZGjD+U62wzZQawGN46+oTJEcF4nQh42R8gPPi4uXTIQSSJ+TryyC2FBMGcK8AZo+ry04ioJi3Qt3w==", + "license": "Apache-2.0" + }, + "node_modules/@enhance/ssr": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@enhance/ssr/-/ssr-4.0.3.tgz", + "integrity": "sha512-WJoF8Bv9EXovJXpB0JyXavqkz5KTwPKSQG8nHxtT++F+Pm6iIdtUQjNG+VVSBmOryC0pq/sZNtBxiC0g9xzksQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@begin/parse5": "^0.0.4", + "nanoid": "^4.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], + "node_modules/@enhance/ssr/node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], - "engines": { - "node": ">= 10.0.0" + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": "^14 || ^16 || >=18" } }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], + "node_modules/@enhance/styles": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@enhance/styles/-/styles-6.5.0.tgz", + "integrity": "sha512-Bne/vDaBHQPG5r3LZ9o1+5VlZRSiq+E51MNVfP+HNsWs5af7uDnezGLpNJHaMjl1MWuCt42bhM4oJv1cYyYGQQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0", + "dependencies": { + "color-to-hsla": "^0.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "bin": { + "enhance-styles": "cli.mjs" } }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], + "node_modules/@enhance/styles-cribsheet": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@enhance/styles-cribsheet/-/styles-cribsheet-0.0.11.tgz", + "integrity": "sha512-ll3U5+j3ilEDrBUL1J6LT7czEjCZGk++evUVlzEz9fS9nSKPqEQpCcBjmu/Iu0okoBpcwj313IZ4jx10RBT+zA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "dependencies": { + "@architect/functions": "^8.0.4", + "@enhance/arc-plugin-enhance": "^9.4.9", + "css-tree": "^2.3.1" } }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/styles-cribsheet/node_modules/@enhance/arc-plugin-enhance": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-enhance/-/arc-plugin-enhance-9.5.1.tgz", + "integrity": "sha512-uH7xUhbLkmWuGIAUM9+koiKQywEmM1p+OI5irWJEk+uZ/zOLwpAVJaF8qytmnJEBmfj/b21hFzDyEBISOdPGxA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0", + "dependencies": { + "@architect/asap": "^7.0.4", + "@architect/functions": "^8.0.1", + "@begin/data": "^5.0.1", + "@enhance/arc-plugin-rollup": "^2.0.0", + "@enhance/enhance-style-transform": "^0.1.2", + "@enhance/import-transform": "^4.0.1", + "@enhance/ssr": "^3.5.1", + "glob": "^9.3.5", + "header-timers": "^0.2.0", + "path-to-regexp": "^6.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=16" } }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/styles-cribsheet/node_modules/@enhance/ssr": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@enhance/ssr/-/ssr-3.5.2.tgz", + "integrity": "sha512-gbHPbfHqXzGK1267hzXGy394kVFntYOERguh6/tQeRnZ1Cwxt79OQPpVLU/gITnkXB9A9oOa9WGzkjKDoW2qbw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "license": "Apache-2.0", + "dependencies": { + "@begin/parse5": "^0.0.4", + "nanoid": "^4.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], + "node_modules/@enhance/styles-cribsheet/node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], + "node_modules/@enhance/styles-cribsheet/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], + "node_modules/@enhance/styles-cribsheet/node_modules/header-timers": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/header-timers/-/header-timers-0.2.1.tgz", + "integrity": "sha512-MYHjz20sTJym3EQ6aMgfqDLGZgiNkFo3eM6He13HJb33Ju2hc/4cTlsjfWxXHSjOv6szv6/jbjg/yvGXgKEKvQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "Apache-2.0" + }, + "node_modules/@enhance/styles-cribsheet/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@enhance/styles-cribsheet/node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@enhance/styles-cribsheet/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@phosphor-icons/web": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@phosphor-icons/web/-/web-2.1.2.tgz", - "integrity": "sha512-rPAR9o/bEcp4Cw4DEeZHXf+nlGCMNGkNDRizYHM47NLxz9vvEHp/Tt6FMK1NcWadzw/pFDPnRBGi/ofRya958A==", - "license": "MIT" - }, - "node_modules/@picocss/pico": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@picocss/pico/-/pico-2.1.1.tgz", - "integrity": "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg==", - "license": "MIT" + "node_modules/@enhance/styles-cribsheet/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } }, - "node_modules/@redux-devtools/extension": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@redux-devtools/extension/-/extension-3.3.0.tgz", - "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", + "node_modules/@enhance/styles-cribsheet/node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2", - "immutable": "^4.3.4" + "bin": { + "nanoid": "bin/nanoid.js" }, - "peerDependencies": { - "redux": "^3.1.0 || ^4.0.0 || ^5.0.0" + "engines": { + "node": "^14 || ^16 || >=18" } }, - "node_modules/@redux-devtools/extension/node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "license": "MIT" - }, - "node_modules/@rollup/pluginutils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", - "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "node_modules/@enhance/styles-cribsheet/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "node": ">=16 || 14 >=14.18" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "node_modules/@enhance/styles-cribsheet/node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@enhance/styles-cribsheet/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true, "license": "MIT" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", - "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", + "node_modules/@enhance/template-mixin": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@enhance/template-mixin/-/template-mixin-1.0.3.tgz", + "integrity": "sha512-YnILjMRQRJLYPzBZ1wuI39UDIsrTMvoRHS0MpdwxQpJ/rHN3w4NU984c9j/2RCFbtUkTjnT++hdjWyLtoot5Hw==", + "license": "Apache-2.0" + }, + "node_modules/@enhance/types": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@enhance/types/-/types-0.7.0.tgz", + "integrity": "sha512-CkPEbcC+mOBmcQjLZFnj30qMyYFD6WzDmaaGBvoYhiq+IM6VP4wVe1s0Jb2/GE3G/PFLGl6B4zTHGcKrZ8xKqw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", "cpu": [ "arm" ], @@ -1580,12 +1707,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", - "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", "cpu": [ "arm64" ], @@ -1594,12 +1724,32 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", - "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", "cpu": [ "arm64" ], @@ -1608,12 +1758,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", - "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", "cpu": [ "x64" ], @@ -1622,12 +1775,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", - "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", "cpu": [ "arm64" ], @@ -1636,12 +1792,15 @@ "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", - "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", "cpu": [ "x64" ], @@ -1650,12 +1809,15 @@ "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", - "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", "cpu": [ "arm" ], @@ -1664,68 +1826,83 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", - "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", - "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", - "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", "cpu": [ - "arm64" + "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", - "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", "cpu": [ - "loong64" + "mips64el" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", - "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", "cpu": [ "ppc64" ], @@ -1734,12 +1911,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", - "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", "cpu": [ "riscv64" ], @@ -1748,40 +1928,66 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", - "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", "cpu": [ - "riscv64" + "s390x" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", - "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "cpu": [ - "s390x" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", - "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", "cpu": [ "x64" ], @@ -1789,13 +1995,33 @@ "license": "MIT", "optional": true, "os": [ - "linux" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", - "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", "cpu": [ "x64" ], @@ -1803,13 +2029,33 @@ "license": "MIT", "optional": true, "os": [ - "linux" - ] + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", - "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", "cpu": [ "arm64" ], @@ -1818,12 +2064,15 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", - "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", "cpu": [ "ia32" ], @@ -1832,12 +2081,15 @@ "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", - "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", + "node_modules/@esbuild/win32-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "cpu": [ "x64" ], @@ -1846,518 +2098,3283 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@sentry/browser": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.9.1.tgz", - "integrity": "sha512-7AOabwp9yAH9h6Xe6TfDwlLxHbUSWs+SPWHI7bPlht2yDSAqkXYGSzRr5X0XQJX9oBQdx2cEPMqHyJrbNaP/og==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "5.8.0", - "@sentry/types": "5.7.1", - "@sentry/utils": "5.8.0", - "tslib": "^1.9.3" - }, + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/core": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.8.0.tgz", - "integrity": "sha512-aAh2KLidIXJVGrxmHSVq2eVKbu7tZiYn5ylW6yzJXFetS5z4MA+JYaSBaG2inVYDEEqqMIkb17TyWxxziUDieg==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.8.0", - "@sentry/minimal": "5.8.0", - "@sentry/types": "5.7.1", - "@sentry/utils": "5.8.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@js-temporal/polyfill": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.5.1.tgz", + "integrity": "sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==", + "license": "ISC", + "dependencies": { + "jsbi": "^4.3.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lift-html/alien": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@lift-html/alien/-/alien-0.0.1.tgz", + "integrity": "sha512-WQJOI2rZvEW5tAvBvDkCUQMnmuhBpXt0Q6rigAt8v5XONECqj97eUqm0I5Q096BzDS2sWirlS8EkSp8ahwm5jg==", + "license": "CC0-1.0", + "dependencies": { + "@lift-html/core": "*", + "alien-signals": "*" + } + }, + "node_modules/@lift-html/core": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@lift-html/core/-/core-0.0.4.tgz", + "integrity": "sha512-QFfCu2PwGhN+dQ697TPuxvaeLo8swhHA0Bivypg3Owk5VcPkP6WHdzrrDVCQXstr1ANP8NFmFjX1WBM2y7ZCHA==", + "license": "CC0-1.0" + }, + "node_modules/@okikio/sharedworker": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@okikio/sharedworker/-/sharedworker-1.1.0.tgz", + "integrity": "sha512-Xj9TUWll9mhARsKu5DtlQCjRekfJfQ2E291ow6gmXIz+WuF6uJMH8ZmGhdRTx/ndOippHnm1j/vxXNjmR6JuXw==", + "license": "MIT" + }, + "node_modules/@okikio/transferables": { + "name": "@jsr/okikio__transferables", + "version": "1.0.2", + "resolved": "https://npm.jsr.io/~/11/@jsr/okikio__transferables/1.0.2.tgz", + "integrity": "sha512-xz7RmslHsTt/Cy7GPnDurV1aKuUuVaR3FOIcKtLMuY8e+yEMVnwkPqaFWvsO/WbfeUQQnygo5C7g1/oLURrPsA==" + }, + "node_modules/@orama/orama": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.9.tgz", + "integrity": "sha512-UXQYvN0DYl5EMOXX3O0Rwke+0R0Pd7PW/hOVwgpPd6KKJPb3RP74m3PEbEFjdTzZVLUW81o7herYXD2h4PVcGQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20.0.0" + } + }, + "node_modules/@orama/plugin-qps": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@orama/plugin-qps/-/plugin-qps-3.1.9.tgz", + "integrity": "sha512-QqB+fR//Mg6FRWutUxPtQi7IM1fND28Rm+9Cpc90pMZBLatVdqw2prbNJhVfoObu0IpemclHyf9xY0ObyTw7dw==", + "license": "Apache-2.0", + "dependencies": { + "@orama/orama": "3.1.9" + } + }, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@phosphor-icons/web": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@phosphor-icons/web/-/web-2.1.2.tgz", + "integrity": "sha512-rPAR9o/bEcp4Cw4DEeZHXf+nlGCMNGkNDRizYHM47NLxz9vvEHp/Tt6FMK1NcWadzw/pFDPnRBGi/ofRya958A==", + "license": "MIT" + }, + "node_modules/@picocss/pico": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@picocss/pico/-/pico-2.1.1.tgz", + "integrity": "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@redux-devtools/extension": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@redux-devtools/extension/-/extension-3.3.0.tgz", + "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "immutable": "^4.3.4" + }, + "peerDependencies": { + "redux": "^3.1.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@redux-devtools/extension/node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", + "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", + "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", + "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", + "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", + "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", + "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", + "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", + "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", + "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", + "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", + "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", + "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", + "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", + "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", + "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", + "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", + "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", + "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", + "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", + "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sentry/browser": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.9.1.tgz", + "integrity": "sha512-7AOabwp9yAH9h6Xe6TfDwlLxHbUSWs+SPWHI7bPlht2yDSAqkXYGSzRr5X0XQJX9oBQdx2cEPMqHyJrbNaP/og==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.8.0", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.8.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/core": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.8.0.tgz", + "integrity": "sha512-aAh2KLidIXJVGrxmHSVq2eVKbu7tZiYn5ylW6yzJXFetS5z4MA+JYaSBaG2inVYDEEqqMIkb17TyWxxziUDieg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.8.0", + "@sentry/minimal": "5.8.0", + "@sentry/types": "5.7.1", + "@sentry/utils": "5.8.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.8.0.tgz", + "integrity": "sha512-VdApn1ZCNwH1wwQwoO6pu53PM/qgHG+DQege0hbByluImpLBhAj9w50nXnF/8KzV4UoMIVbzCb6jXzMRmqqp9A==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.7.1", + "@sentry/utils": "5.8.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.8.0.tgz", + "integrity": "sha512-MIlFOgd+JvAUrBBmq7vr9ovRH1HvckhnwzHdoUPpKRBN+rQgTyZy1o6+kA2fASCbrRqFCP+Zk7EHMACKg8DpIw==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.8.0", + "@sentry/types": "5.7.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz", + "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.8.0.tgz", + "integrity": "sha512-KDxUvBSYi0/dHMdunbxAxD3389pcQioLtcO6CI6zt/nJXeVFolix66cRraeQvqupdLhvOk/el649W4fCPayTHw==", + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.7.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@shikijs/core": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.7.0.tgz", + "integrity": "sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.7.0.tgz", + "integrity": "sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.3" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.7.0.tgz", + "integrity": "sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.7.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.7.0.tgz", + "integrity": "sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.7.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.7.0.tgz", + "integrity": "sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.7.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.7.0.tgz", + "integrity": "sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@std/media-types": { + "name": "@jsr/std__media-types", + "version": "1.1.0", + "resolved": "https://npm.jsr.io/~/11/@jsr/std__media-types/1.1.0.tgz", + "integrity": "sha512-dHvaxHL7ENWnltgL653uo3KnKFse3ZbopZop2gqsT7yrscx7irZEClu5Cba7gMPPRk4Lg1FbriNcaBViM2RSBw==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tokenizer/http": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@tokenizer/http/-/http-0.9.2.tgz", + "integrity": "sha512-rzJwHcqDjO3FdBPr+FK2R6dYE6Qbg6QZP7S47rhCEtG+/YqEFLqZ+gFCLcL8y5D39aYQB9vDssiwbsJlRLePPg==", + "license": "MIT", + "dependencies": { + "@tokenizer/range": "^0.12.0", + "debug": "^4.3.7", + "strtok3": "^10.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/http/node_modules/@tokenizer/range": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.12.0.tgz", + "integrity": "sha512-xvJ1OflWjopkC5EgLge+9HrwsWStgVewQkmusoF2BxgCuGdm1KuhZAMVMNzC7h1WNei9JA6xKQlkbPNJtjZ6aw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.7", + "strtok3": "^9.1.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/http/node_modules/@tokenizer/range/node_modules/strtok3": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", + "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.3.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/range": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.13.0.tgz", + "integrity": "sha512-ibLGQRU8an1g/y952+OxeZDGIj+W1HW8AQPtk26VIFWzy3tvQImmGBwYbpHJXMMAz1nhCPAAepCRptGKB8YrKg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "strtok3": "^10.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fontkit": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", + "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/nlcst": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", + "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "24.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", + "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "license": "MIT" + }, + "node_modules/@types/wicg-file-system-access": { + "version": "2023.10.6", + "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2023.10.6.tgz", + "integrity": "sha512-YO/183gNRzZFSdKu+ikkD7ambAj4PhgjFAF2A/Mw/7wroSF6ne8r804RkpZzqrJ/F6DO2/IYlQF/ULOZ/bhKyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@web-applets/sdk": { + "version": "0.2.6", + "resolved": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", + "integrity": "sha512-cIJ5viAtAKbbeB0izJ9VTXVDr9xsxAiGWMlhDZd1F9iHdGMk7j0cO8Q03wKxidVx5d/1kijHP07CDA7fygccEA==", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/98.css": { + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/98.css/-/98.css-0.1.21.tgz", + "integrity": "sha512-ddk5qtUWyapM0Bzd5jwGExoE5fdSEGrP+F5VbYjyZLf2c9UVmn6w2NPTvCsoD4BWdGsjdLjlkQGhWwWTJcYQJQ==", + "license": "MIT" + }, + "node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/abstract-leveldown/node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-loose": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.4.0.tgz", + "integrity": "sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/alien-signals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.0.0.tgz", + "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==", + "license": "MIT" + }, + "node_modules/ani-cursor": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.5.tgz", + "integrity": "sha512-gGxst72lG9TOwEfbVpX9vHhzUGw+4Ee2XB6AfYq5JP+bxBtpAjgnTBepCVxYF5t1TPrWHN23nWqLTflJOA3/ag==", + "license": "MIT", + "dependencies": { + "byte-data": "18.1.1", + "riff-file": "^1.0.3" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/astro": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.10.1.tgz", + "integrity": "sha512-DJVmt+51jU1xmgmAHCDwuUgcG/5aVFSU+tcX694acAZqPVt8EMUAmUZcJDX36Z7/EztnPph9HR3pm72jS2EgHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@astrojs/compiler": "^2.12.2", + "@astrojs/internal-helpers": "0.6.1", + "@astrojs/markdown-remark": "6.3.2", + "@astrojs/telemetry": "3.3.0", + "@capsizecss/unpack": "^2.4.0", + "@oslojs/encoding": "^1.1.0", + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.1", + "aria-query": "^5.3.2", + "axobject-query": "^4.1.0", + "boxen": "8.0.1", + "ci-info": "^4.2.0", + "clsx": "^2.1.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^1.0.2", + "cssesc": "^3.0.0", + "debug": "^4.4.0", + "deterministic-object-hash": "^2.0.2", + "devalue": "^5.1.1", + "diff": "^5.2.0", + "dlv": "^1.1.3", + "dset": "^3.1.4", + "es-module-lexer": "^1.6.0", + "esbuild": "^0.25.0", + "estree-walker": "^3.0.3", + "flattie": "^1.1.1", + "fontace": "~0.3.0", + "github-slugger": "^2.0.0", + "html-escaper": "3.0.3", + "http-cache-semantics": "^4.1.1", + "import-meta-resolve": "^4.1.0", + "js-yaml": "^4.1.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "mrmime": "^2.0.1", + "neotraverse": "^0.6.18", + "p-limit": "^6.2.0", + "p-queue": "^8.1.0", + "package-manager-detector": "^1.1.0", + "picomatch": "^4.0.2", + "prompts": "^2.4.2", + "rehype": "^13.0.2", + "semver": "^7.7.1", + "shiki": "^3.2.1", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.12", + "tsconfck": "^3.1.5", + "ultrahtml": "^1.6.0", + "unifont": "~0.5.0", + "unist-util-visit": "^5.0.0", + "unstorage": "^1.15.0", + "vfile": "^6.0.3", + "vite": "^6.3.4", + "vitefu": "^1.0.6", + "xxhash-wasm": "^1.1.0", + "yargs-parser": "^21.1.1", + "yocto-spinner": "^0.2.1", + "zod": "^3.24.2", + "zod-to-json-schema": "^3.24.5", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "18.20.8 || ^20.3.0 || >=22.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/astrodotbuild" + }, + "optionalDependencies": { + "sharp": "^0.33.3" + } + }, + "node_modules/astro-purgecss": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/astro-purgecss/-/astro-purgecss-5.2.3.tgz", + "integrity": "sha512-JrGQs37gQRn86X6rUJBg4ujqR++5J6uXFK0HF+W2Yaja+ZvGtIHFdw6JsgoAnzn+XtKB/hsiPzSIqO5FZfU0jQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "astro": "^5.0.0", + "purgecss": "^7.0.0" + } + }, + "node_modules/astro-scope": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/astro-scope/-/astro-scope-3.0.1.tgz", + "integrity": "sha512-/mdiiv0BELoDvhHPMCBokTymW11KOp+zTh4OMqmYGb8DxpOxE59O2VhtiWseoZdKJNQkNyyN/9Nsu3VZrPGWHA==", + "dev": true, + "license": "Public Domain", + "peerDependencies": { + "astro": "^4.2.2 || 5" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blob-to-buffer": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", + "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/butterchurn": { + "version": "3.0.0-beta.5", + "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-3.0.0-beta.5.tgz", + "integrity": "sha512-BStK4OAbBb9Pvt8PuQlS4WVmYBwU1KuDMRHF1V89QjoIFauAqq7tpV4EpYXj7K563r5daLrMX+2y5DBhZZ9Xig==", + "license": "MIT", + "dependencies": { + "@assemblyscript/loader": "^0.17.11", + "ecma-proposal-math-extensions": "0.0.2", + "eel-wasm": "^0.0.16" + } + }, + "node_modules/butterchurn-presets": { + "version": "3.0.0-beta.4", + "resolved": "https://registry.npmjs.org/butterchurn-presets/-/butterchurn-presets-3.0.0-beta.4.tgz", + "integrity": "sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + } + }, + "node_modules/byte-data": { + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/byte-data/-/byte-data-18.1.1.tgz", + "integrity": "sha512-Kv/B0r7adgnCcrs/y703sac2XFLdHW5kPfis1j8+Ij/hmEcWhBKf+1pNTv+vsNqXb207Uiyri8bpnogNxR/4Lg==", + "license": "MIT", + "dependencies": { + "endianness": "^8.0.2", + "ieee754-buffer": "^2.0.0", + "utf8-buffer": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chainsaw": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", + "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/hub": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.8.0.tgz", - "integrity": "sha512-VdApn1ZCNwH1wwQwoO6pu53PM/qgHG+DQege0hbByluImpLBhAj9w50nXnF/8KzV4UoMIVbzCb6jXzMRmqqp9A==", - "license": "BSD-3-Clause", + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@sentry/types": "5.7.1", - "@sentry/utils": "5.8.0", - "tslib": "^1.9.3" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">=6" + "node": ">=12.5.0" } }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/minimal": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.8.0.tgz", - "integrity": "sha512-MIlFOgd+JvAUrBBmq7vr9ovRH1HvckhnwzHdoUPpKRBN+rQgTyZy1o6+kA2fASCbrRqFCP+Zk7EHMACKg8DpIw==", - "license": "BSD-3-Clause", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@sentry/hub": "5.8.0", - "@sentry/types": "5.7.1", - "tslib": "^1.9.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, - "node_modules/@sentry/types": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz", - "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==", - "license": "BSD-3-Clause", + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-to-hsla": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/color-to-hsla/-/color-to-hsla-0.1.1.tgz", + "integrity": "sha512-lXqaKMk8lY5R9PK0R/fqSZygEKLIJvBrLc20Y/7CpPdoKe5pNvJQYs2olo5BbuJK9gOVr6za4mndjZHHVLZvEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/comlink": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz", + "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==", + "license": "Apache-2.0" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/utils": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.8.0.tgz", - "integrity": "sha512-KDxUvBSYi0/dHMdunbxAxD3389pcQioLtcO6CI6zt/nJXeVFolix66cRraeQvqupdLhvOk/el649W4fCPayTHw==", - "license": "BSD-3-Clause", + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true, + "license": "ISC" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@sentry/types": "5.7.1", - "tslib": "^1.9.3" + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@shikijs/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.7.0.tgz", - "integrity": "sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==", + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" + "node-fetch": "^2.7.0" } }, - "node_modules/@shikijs/engine-javascript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.7.0.tgz", - "integrity": "sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.3" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.7.0.tgz", - "integrity": "sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==", + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2" + "engines": { + "node": ">=8" } }, - "node_modules/@shikijs/langs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.7.0.tgz", - "integrity": "sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==", + "node_modules/csrf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz", + "integrity": "sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.7.0" + "rndm": "1.2.0", + "tsscmp": "1.0.6", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@shikijs/themes": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.7.0.tgz", - "integrity": "sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==", + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.7.0" + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/@shikijs/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.7.0.tgz", - "integrity": "sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/@std/media-types": { - "name": "@jsr/std__media-types", - "version": "1.1.0", - "resolved": "https://npm.jsr.io/~/11/@jsr/std__media-types/1.1.0.tgz", - "integrity": "sha512-dHvaxHL7ENWnltgL653uo3KnKFse3ZbopZop2gqsT7yrscx7irZEClu5Cba7gMPPRk4Lg1FbriNcaBViM2RSBw==" - }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, - "license": "Apache-2.0", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "tslib": "^2.8.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@tokenizer/http": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@tokenizer/http/-/http-0.9.2.tgz", - "integrity": "sha512-rzJwHcqDjO3FdBPr+FK2R6dYE6Qbg6QZP7S47rhCEtG+/YqEFLqZ+gFCLcL8y5D39aYQB9vDssiwbsJlRLePPg==", + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "dev": true, "license": "MIT", "dependencies": { - "@tokenizer/range": "^0.12.0", - "debug": "^4.3.7", - "strtok3": "^10.0.0" + "character-entities": "^2.0.0" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@tokenizer/http/node_modules/@tokenizer/range": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.12.0.tgz", - "integrity": "sha512-xvJ1OflWjopkC5EgLge+9HrwsWStgVewQkmusoF2BxgCuGdm1KuhZAMVMNzC7h1WNei9JA6xKQlkbPNJtjZ6aw==", + "node_modules/decode-uri-component": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", + "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.7", - "strtok3": "^9.1.1" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tokenizer/http/node_modules/@tokenizer/range/node_modules/strtok3": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", - "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, "license": "MIT", "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.3.1" + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" }, "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=6" } }, - "node_modules/@tokenizer/inflate": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "fflate": "^0.8.2", - "token-types": "^6.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@tokenizer/range": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.13.0.tgz", - "integrity": "sha512-ibLGQRU8an1g/y952+OxeZDGIj+W1HW8AQPtk26VIFWzy3tvQImmGBwYbpHJXMMAz1nhCPAAepCRptGKB8YrKg==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "strtok3": "^10.2.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=16" + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "node_modules/defined": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", + "integrity": "sha512-zpqiCT8bODLu3QSmLLic8xJnYWBFjOSu/fBCm189oAiTtPq/PSanNACKZDS7kgSyCJY7P+IcODzlIogBK/9RBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/depstatus": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depstatus/-/depstatus-1.1.1.tgz", + "integrity": "sha512-QT4i2Ql8RS1ttcj7zo4RzYvKz+/eOOIh6N7CXHqfDqC5ZX1hfx5KX6T88gy/j2UWP2x2ytjSoFBl+XW0gVZMug==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "semver": "^7.3.2" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, "license": "MIT" }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/ms": "*" + "base-64": "^1.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "node_modules/devalue": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", "dev": true, "license": "MIT" }, - "node_modules/@types/fontkit": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", - "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } + "license": "MIT" }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", - "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "node_modules/diff3": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", + "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } + "license": "MIT" }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true, "license": "MIT" }, - "node_modules/@types/nlcst": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", - "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "*" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/node": { - "version": "24.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", - "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", "dev": true, "license": "MIT", - "dependencies": { - "undici-types": "~7.8.0" + "engines": { + "node": ">=4" } }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", + "node_modules/dynalite": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/dynalite/-/dynalite-3.2.2.tgz", + "integrity": "sha512-sx9ZjTgMs/D4gHnba4rnBkw29648dHwHmywJet132KAbiq1ZyWx9W1fMd/eP9cPwTKDXyCBuTYOChE0qMDjaXQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "async": "^2.6.3", + "big.js": "^5.2.2", + "buffer-crc32": "^0.2.13", + "lazy": "^1.0.11", + "levelup": "^4.4.0", + "lock": "^1.1.0", + "memdown": "^5.1.0", + "minimist": "^1.2.5", + "once": "^1.4.0", + "subleveldown": "^5.0.1" + }, + "bin": { + "dynalite": "cli.js" + }, + "optionalDependencies": { + "leveldown": "^5.6.0" + } }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "node_modules/ecma-proposal-math-extensions": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz", + "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==", "license": "MIT" }, - "node_modules/@types/wicg-file-system-access": { - "version": "2023.10.6", - "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2023.10.6.tgz", - "integrity": "sha512-YO/183gNRzZFSdKu+ikkD7ambAj4PhgjFAF2A/Mw/7wroSF6ne8r804RkpZzqrJ/F6DO2/IYlQF/ULOZ/bhKyA==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, "license": "MIT" }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@web-applets/sdk": { - "version": "0.2.6", - "resolved": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", - "integrity": "sha512-cIJ5viAtAKbbeB0izJ9VTXVDr9xsxAiGWMlhDZd1F9iHdGMk7j0cO8Q03wKxidVx5d/1kijHP07CDA7fygccEA==", - "hasInstallScript": true, + "node_modules/eel-wasm": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/eel-wasm/-/eel-wasm-0.0.16.tgz", + "integrity": "sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==", "license": "MIT" }, - "node_modules/98.css": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/98.css/-/98.css-0.1.21.tgz", - "integrity": "sha512-ddk5qtUWyapM0Bzd5jwGExoE5fdSEGrP+F5VbYjyZLf2c9UVmn6w2NPTvCsoD4BWdGsjdLjlkQGhWwWTJcYQJQ==", + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, "license": "MIT" }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/alien-signals": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-2.0.7.tgz", - "integrity": "sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==", - "license": "MIT" - }, - "node_modules/ani-cursor": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.5.tgz", - "integrity": "sha512-gGxst72lG9TOwEfbVpX9vHhzUGw+4Ee2XB6AfYq5JP+bxBtpAjgnTBepCVxYF5t1TPrWHN23nWqLTflJOA3/ag==", - "license": "MIT", - "dependencies": { - "byte-data": "18.1.1", - "riff-file": "^1.0.3" + "node": ">= 0.8" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "node_modules/endianness": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", + "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", + "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ansi-align/node_modules/strip-ansi": { + "node_modules/enquirer/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -2370,397 +5387,427 @@ "node": ">=8" } }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "prr": "~1.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "errno": "cli.js" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">= 0.4" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, - "license": "Python-2.0" + "license": "MIT" }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { "node": ">= 0.4" } }, - "node_modules/array-iterate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", - "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" } }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, "license": "MIT", - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" + "engines": { + "node": ">=8" } }, - "node_modules/astro": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.10.1.tgz", - "integrity": "sha512-DJVmt+51jU1xmgmAHCDwuUgcG/5aVFSU+tcX694acAZqPVt8EMUAmUZcJDX36Z7/EztnPph9HR3pm72jS2EgHQ==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@astrojs/compiler": "^2.12.2", - "@astrojs/internal-helpers": "0.6.1", - "@astrojs/markdown-remark": "6.3.2", - "@astrojs/telemetry": "3.3.0", - "@capsizecss/unpack": "^2.4.0", - "@oslojs/encoding": "^1.1.0", - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.1", - "aria-query": "^5.3.2", - "axobject-query": "^4.1.0", - "boxen": "8.0.1", - "ci-info": "^4.2.0", - "clsx": "^2.1.1", - "common-ancestor-path": "^1.0.1", - "cookie": "^1.0.2", - "cssesc": "^3.0.0", - "debug": "^4.4.0", - "deterministic-object-hash": "^2.0.2", - "devalue": "^5.1.1", - "diff": "^5.2.0", - "dlv": "^1.1.3", - "dset": "^3.1.4", - "es-module-lexer": "^1.6.0", - "esbuild": "^0.25.0", - "estree-walker": "^3.0.3", - "flattie": "^1.1.1", - "fontace": "~0.3.0", - "github-slugger": "^2.0.0", - "html-escaper": "3.0.3", - "http-cache-semantics": "^4.1.1", - "import-meta-resolve": "^4.1.0", - "js-yaml": "^4.1.0", - "kleur": "^4.1.5", - "magic-string": "^0.30.17", - "magicast": "^0.3.5", - "mrmime": "^2.0.1", - "neotraverse": "^0.6.18", - "p-limit": "^6.2.0", - "p-queue": "^8.1.0", - "package-manager-detector": "^1.1.0", - "picomatch": "^4.0.2", - "prompts": "^2.4.2", - "rehype": "^13.0.2", - "semver": "^7.7.1", - "shiki": "^3.2.1", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.12", - "tsconfck": "^3.1.5", - "ultrahtml": "^1.6.0", - "unifont": "~0.5.0", - "unist-util-visit": "^5.0.0", - "unstorage": "^1.15.0", - "vfile": "^6.0.3", - "vite": "^6.3.4", - "vitefu": "^1.0.6", - "xxhash-wasm": "^1.1.0", - "yargs-parser": "^21.1.1", - "yocto-spinner": "^0.2.1", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.5", - "zod-to-ts": "^1.2.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { - "astro": "astro.js" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/astrodotbuild" + "node": ">=6.0" }, "optionalDependencies": { - "sharp": "^0.33.3" + "source-map": "~0.6.1" } }, - "node_modules/astro-purgecss": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/astro-purgecss/-/astro-purgecss-5.2.3.tgz", - "integrity": "sha512-JrGQs37gQRn86X6rUJBg4ujqR++5J6uXFK0HF+W2Yaja+ZvGtIHFdw6JsgoAnzn+XtKB/hsiPzSIqO5FZfU0jQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", - "peerDependencies": { - "astro": "^5.0.0", - "purgecss": "^7.0.0" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/astro-scope": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/astro-scope/-/astro-scope-3.0.1.tgz", - "integrity": "sha512-/mdiiv0BELoDvhHPMCBokTymW11KOp+zTh4OMqmYGb8DxpOxE59O2VhtiWseoZdKJNQkNyyN/9Nsu3VZrPGWHA==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "Public Domain", - "peerDependencies": { - "astro": "^4.2.2 || 5" + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" + "node": ">=4.0" } }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "license": "MIT", "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "@types/estree": "^1.0.0" } }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 0.6" } }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, "license": "MIT" }, - "node_modules/blob-to-buffer": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", - "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", + "node_modules/fast-average-color": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-9.5.0.tgz", + "integrity": "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true } - ], + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "license": "MIT" }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", + "node_modules/file-type": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", + "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.2.7", + "strtok3": "^10.2.2", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", + "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", + "license": "MIT", + "engines": { + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/finalhandler": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.1.tgz", + "integrity": "sha512-NpHDfiu6jURpO56pYkM6DEvnBEA9jNrwj4v05Vjs5hmdqEB2/kRA3wugct7BMyqYydjN+kWunMhtTn+itVmxpA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "fill-range": "^7.1.1" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.1.2" + "ms": "2.0.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" } ], "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/butterchurn": { - "version": "3.0.0-beta.5", - "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-3.0.0-beta.5.tgz", - "integrity": "sha512-BStK4OAbBb9Pvt8PuQlS4WVmYBwU1KuDMRHF1V89QjoIFauAqq7tpV4EpYXj7K563r5daLrMX+2y5DBhZZ9Xig==", - "license": "MIT", - "dependencies": { - "@assemblyscript/loader": "^0.17.11", - "ecma-proposal-math-extensions": "0.0.2", - "eel-wasm": "^0.0.16" + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/butterchurn-presets": { - "version": "3.0.0-beta.4", - "resolved": "https://registry.npmjs.org/butterchurn-presets/-/butterchurn-presets-3.0.0-beta.4.tgz", - "integrity": "sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==", + "node_modules/fontace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.0.tgz", + "integrity": "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5" + "@types/fontkit": "^2.0.8", + "fontkit": "^2.0.4" } }, - "node_modules/byte-data": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/byte-data/-/byte-data-18.1.1.tgz", - "integrity": "sha512-Kv/B0r7adgnCcrs/y703sac2XFLdHW5kPfis1j8+Ij/hmEcWhBKf+1pNTv+vsNqXb207Uiyri8bpnogNxR/4Lg==", + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "dev": true, "license": "MIT", "dependencies": { - "endianness": "^8.0.2", - "ieee754-buffer": "^2.0.0", - "utf8-buffer": "^1.0.0" - }, - "engines": { - "node": ">=8" + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -2769,161 +5816,180 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fscreen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz", + "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chainsaw": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", - "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", - "license": "MIT/X11", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true, + "license": "MIT" }, - "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "license": "ISC" }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "readdirp": "^4.0.1" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">= 14.16.0" + "node": "20 || >=22" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, "engines": { "node": ">=10" }, @@ -2931,1135 +5997,1176 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, + "license": "MIT" + }, + "node_modules/glsl-optimizer-js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/glsl-optimizer-js/-/glsl-optimizer-js-0.0.2.tgz", + "integrity": "sha512-SMkVILyc1LeBEBgiHOe+4Bh8MEqxLNyAns0NfgmxJTxZZdj7oCoZt+n846rbdB8OLGsg16f5C9nmhi9XEuM8SQ==", + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "ISC" }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/h3": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", + "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" + "cookie-es": "^1.2.2", + "crossws": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", - "optional": true, "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/comlink": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz", - "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==", - "license": "Apache-2.0" - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, - "license": "ISC" - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "dev": true, - "license": "MIT", + "node_modules/hashish": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", + "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.2.4" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/cookie-es": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", - "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", "dev": true, "license": "MIT", "dependencies": { - "node-fetch": "^2.7.0" + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "dev": true, "license": "MIT", "dependencies": { - "uncrypto": "^0.1.3" + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", "dev": true, "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "dev": true, "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decode-uri-component": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", - "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=14.16" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "node_modules/header-timers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/header-timers/-/header-timers-0.3.0.tgz", + "integrity": "sha512-Jzdm9z9Qg/9zioR4Vdz9aJXLeelkbVrCluqYTCuBp83FB9itdlDXJS+Rs+XQhH4C6i+q6bSd8Q4tVF/bdfLXEQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", "dev": true, "license": "MIT" }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause" }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 0.8" } }, - "node_modules/deterministic-object-hash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", - "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", "dependencies": { - "base-64": "^1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">=8.0.0" } }, - "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, "license": "MIT" }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, + "node_modules/iconoir": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.11.0.tgz", + "integrity": "sha512-F9T/E08aJBaQ+VOBjn+ChWKn3hFwsaK5VZ024OFMxdDaxKjLGDpU/OsU7MO9wXM+mDs4ZImypdXIn0fFZAXKmA==", "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/iconoir" } }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "license": "Apache-2.0" }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/dset": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", - "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", - "dev": true, + "node_modules/ieee754-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ieee754-buffer/-/ieee754-buffer-2.0.0.tgz", + "integrity": "sha512-AXUAT0nMEi7h1Is8HXGXof3eejl/GabZFKSj8Ym6kVRUSwrAb52EkAXywiCQYSHGQMRn7lvfY7vhPMjVc+Kybg==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, "engines": { - "node": ">= 0.4" + "node": ">= 4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecma-proposal-math-extensions": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz", - "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==", - "license": "MIT" - }, - "node_modules/eel-wasm": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/eel-wasm/-/eel-wasm-0.0.16.tgz", - "integrity": "sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "license": "MIT" }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", "dev": true, "license": "MIT" }, - "node_modules/endianness": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", - "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==", + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=0.8.19" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", + "license": "ISC", "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, + "license": "ISC", "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "node": ">=10" } }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "loose-envify": "^1.0.0" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/brc-dd" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT" - }, - "node_modules/fast-average-color": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-9.5.0.tgz", - "integrity": "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg==", "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" + "dependencies": { + "ci-info": "^2.0.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "bin": { + "is-ci": "bin.js" } }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true, "license": "MIT" }, - "node_modules/file-type": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", - "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", "dependencies": { - "@tokenizer/inflate": "^0.2.7", - "strtok3": "^10.2.2", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=20" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "to-regex-range": "^5.0.1" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/filter-obj": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", - "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/flattie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", - "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/fontace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.0.tgz", - "integrity": "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { - "@types/fontkit": "^2.0.8", - "fontkit": "^2.0.4" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fontkit": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", - "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, "license": "MIT", "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fscreen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz", - "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, "license": "MIT" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.12.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "dev": true, - "license": "ISC" + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "is-inside-container": "^1.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true, "license": "MIT" }, - "node_modules/glsl-optimizer-js": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/glsl-optimizer-js/-/glsl-optimizer-js-0.0.2.tgz", - "integrity": "sha512-SMkVILyc1LeBEBgiHOe+4Bh8MEqxLNyAns0NfgmxJTxZZdj7oCoZt+n846rbdB8OLGsg16f5C9nmhi9XEuM8SQ==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" }, - "node_modules/h3": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", - "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", "dev": true, "license": "MIT", "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.4", - "defu": "^6.1.4", - "destr": "^2.0.5", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.0", - "radix3": "^1.1.2", - "ufo": "^1.6.1", - "uncrypto": "^0.1.3" + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/isomorphic-git": { + "version": "1.33.1", + "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.33.1.tgz", + "integrity": "sha512-Fy5rPAncURJoqL9R+5nJXLl5rQH6YpcjJd7kdCoRJPhrBiLVkLm9b+esRqYQQlT1hKVtKtALbfNtpHjWWJgk6g==", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "async-lock": "^1.4.1", + "clean-git-ref": "^2.0.1", + "crc-32": "^1.2.0", + "diff3": "0.0.3", + "ignore": "^5.1.4", + "minimisted": "^2.0.0", + "pako": "^1.0.10", + "path-browserify": "^1.0.1", + "pify": "^4.0.1", + "readable-stream": "^3.4.0", + "sha.js": "^2.4.12", + "simple-get": "^4.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "bin": { + "isogit": "cli.cjs" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=14.17" } }, - "node_modules/hashish": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", - "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", - "license": "MIT/X11", + "node_modules/isomorphic-git/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/isomorphic-git/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", "dependencies": { - "traverse": ">=0.2.4" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "function-bind": "^1.1.2" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hast-util-from-html": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" + "argparse": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "node_modules/jsbi": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz", + "integrity": "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==", + "license": "Apache-2.0" + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", "dev": true, "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "node_modules/jszip/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "node_modules/lambda-runtimes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lambda-runtimes/-/lambda-runtimes-2.0.5.tgz", + "integrity": "sha512-6BoLX9xuvr+B/f05MOhJnzRdF8Za5YYh82n45ndun9EU3uhJv9kIwnYrOrvuA7MoGwZgCMI7RUhBRzfw/l63SQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/lazy": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", + "integrity": "sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "deprecated": "Superseded by level-transcoder (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" + "buffer": "^5.6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" + "errno": "~0.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "node_modules/level-option-wrap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/level-option-wrap/-/level-option-wrap-1.1.0.tgz", + "integrity": "sha512-gQouC22iCqHuBLNl4BHxEZUxLvUKALAtT/Q0c6ziOxZQ8c02G/gyxHWNbLbxUzRNfMrRnbt6TZT3gNe8VBqQeg==", "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "defined": "~0.0.0" } }, - "node_modules/hast-util-to-text": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", - "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "unist-util-find-after": "^5.0.0" + "xtend": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "node_modules/leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "deprecated": "Superseded by classic-level (https://github.com/Level/community#faq)", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "@types/hast": "^3.0.0" + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "node_modules/levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", "dependencies": { - "react-is": "^16.7.0" + "immediate": "~3.0.5" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "node_modules/lock": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", + "integrity": "sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==", + "dev": true, "license": "MIT" }, - "node_modules/html-escaper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", - "dev": true, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", "funding": { @@ -4067,75 +7174,87 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, - "license": "BSD-2-Clause" + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, - "node_modules/iconoir": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.11.0.tgz", - "integrity": "sha512-F9T/E08aJBaQ+VOBjn+ChWKn3hFwsaK5VZ024OFMxdDaxKjLGDpU/OsU7MO9wXM+mDs4ZImypdXIn0fFZAXKmA==", + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/iconoir" + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/idb-keyval": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", - "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", - "license": "Apache-2.0" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } }, - "node_modules/ieee754-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ieee754-buffer/-/ieee754-buffer-2.0.0.tgz", - "integrity": "sha512-AXUAT0nMEi7h1Is8HXGXof3eejl/GabZFKSj8Ym6kVRUSwrAb52EkAXywiCQYSHGQMRn7lvfY7vhPMjVc+Kybg==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, "license": "MIT", "funding": { @@ -4143,585 +7262,842 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", "dev": true, "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, "funding": { - "url": "https://github.com/sponsors/brc-dd" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "is-extglob": "^2.1.1" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.12.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dev": true, "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { + "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { + "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jsbi": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz", - "integrity": "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==", - "license": "Apache-2.0" - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "dev": true, + "license": "MIT", "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jszip/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, "license": "MIT", "dependencies": { - "immediate": "~3.0.5" + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 0.8" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/memdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", + "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "deprecated": "Superseded by memory-level (https://github.com/Level/community#faq)", + "dev": true, "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "abstract-leveldown": "~6.2.1", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.2.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=6" } }, - "node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "node_modules/memdown/node_modules/immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/memdown/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 0.6" } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/magicast": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.4", - "@babel/types": "^7.25.4", - "source-map-js": "^1.2.0" + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dev": true, "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-definitions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "dev": true, "license": "MIT", "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-footnote": { + "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, "funding": [ { @@ -4735,29 +8111,15 @@ ], "license": "MIT", "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, "funding": [ { @@ -4771,1696 +8133,1664 @@ ], "license": "MIT", "dependencies": { - "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.6" } }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "optional": true, + "engines": { + "node": ">=8.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "dev": true, + "node_modules/milkdrop-eel-parser": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/milkdrop-eel-parser/-/milkdrop-eel-parser-0.0.4.tgz", + "integrity": "sha512-4PsOdTMDB7GM3UFzqXQQXf8MBeoolOhsBLMlhug+IIMZ+yNkvqLbdqDbrueGZc8P8tLRJP8pbAxna1yjFr06HQ==", + "license": "MIT" + }, + "node_modules/milkdrop-preset-converter-aws": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/milkdrop-preset-converter-aws/-/milkdrop-preset-converter-aws-0.1.6.tgz", + "integrity": "sha512-nr89LRZYgdrDn17vGQCvUK/LM9d90mywElL7zlzXBTgkxWAs/Kamn1Yl9676ugt4L4BAGo6PTEipIqeYXFSM7g==", "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "babel-runtime": "^6.26.0", + "glsl-optimizer-js": "^0.0.2", + "milkdrop-eel-parser": "^0.0.4", + "milkdrop-preset-utils": "^0.1.0" + } + }, + "node_modules/milkdrop-preset-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/milkdrop-preset-utils/-/milkdrop-preset-utils-0.1.0.tgz", + "integrity": "sha512-yK5y03SN8INC+ssLLYGGsaAHgNxXEUK6PQVV44rg9OAA27F2aPM0tA5uGsDdASH9sgPaAaRVMV5NoEvEkh66Sw==", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/micromark-extension-gfm-strikethrough": { + "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "node_modules/minimisted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", + "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", "dev": true, "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "minimist": "^1.2.5" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/micromark-factory-destination": { + "node_modules/morphdom": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.7.tgz", + "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==", + "license": "MIT" + }, + "node_modules/mrmime": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multiformats": { + "version": "13.3.7", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz", + "integrity": "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/music-metadata": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.9.0.tgz", + "integrity": "sha512-J7VqD8FY6KRcm75Fzj86FPsckiD/EdvO5OS3P+JiMf/2krP3TcAseZYfkic6eFeJ0iBhhzcdxgfu8hLW95aXXw==", "funding": [ { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" + "type": "github", + "url": "https://github.com/sponsors/Borewit" }, { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" } ], "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@borewit/text-codec": "^0.2.0", + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.0.0", + "media-typer": "^1.1.0", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.5.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/music-metadata-browser": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-0.6.6.tgz", + "integrity": "sha512-14KFz4HR6rM6RATcLtJoBDRbehU/dKdVzElCdeI8CjP7Un2HtSf0WiT7f7Lz+XNkcBMZUjthmC6Wy4+NNayCRw==", + "deprecated": "No longer support, superseded by music-metadata", "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "assert": "^1.4.1", + "buffer": "^5.2.1", + "debug": "^4.0.1", + "music-metadata": "^3.4.0", + "readable-stream": "^3.0.6", + "remove": "^0.1.5", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/music-metadata-browser/node_modules/file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/music-metadata-browser/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/music-metadata-browser/node_modules/music-metadata": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-3.8.0.tgz", + "integrity": "sha512-aIADbp3uCS+ANr4nnFEHzTzMy81OT7PR7WBMW73SJ28Y7P94nnEugmTOj1ICP2JmxBBDlo+MeYVgiPnxVN69tg==", "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" + "debug": "^4.1.0", + "file-type": "^11.0.0", + "media-typer": "0.3.0", + "strtok3": "^2.3.0", + "token-types": "^1.0.1" + }, + "engines": { + "node": "*" } }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/music-metadata-browser/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/music-metadata-browser/node_modules/strtok3": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-2.3.0.tgz", + "integrity": "sha512-AA67/1atBh7X0fUTDevjW89by2ZkY9RZAnkwusx5Yc1COYf0ruUbpYOOIs03SnRA1CF9K3+BtRXKOEtKhAXVaQ==", "license": "MIT", "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "debug": "^4.1.0", + "then-read-stream": "^1.5.0", + "token-types": "^1.0.1" + }, + "engines": { + "node": ">=0.1.98" } }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/music-metadata-browser/node_modules/token-types": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-1.3.2.tgz", + "integrity": "sha512-LemYprKRfZPUiwVEMIL8fIP/cvZBpMds1PklsyoQyLZdKk7SQlldNGzw4TTrg2MnWLGSkMM6gUa1EW0h1d72fg==", "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "ieee754": "^1.1.13" + }, + "engines": { + "node": ">=0.1.98" } }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">= 10" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "node_modules/netlify": { + "version": "23.9.1", + "resolved": "https://registry.npmjs.org/netlify/-/netlify-23.9.1.tgz", + "integrity": "sha512-H6UZ8oL6YtLzK3n3/0v0/rMUKglzkpLkKe5MyFPnWehiLy0MvB55m3bYGAq2o4yxD/n0NINCkSDB1w/AUMj1+A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "hasInstallScript": true, + "hasShrinkwrap": true, "license": "MIT", "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@fastify/static": "7.0.4", + "@netlify/ai": "0.2.1", + "@netlify/api": "14.0.6", + "@netlify/blobs": "10.0.11", + "@netlify/build": "35.1.8", + "@netlify/build-info": "10.0.8", + "@netlify/config": "24.0.4", + "@netlify/dev-utils": "4.2.0", + "@netlify/edge-bundler": "14.5.6", + "@netlify/edge-functions": "2.18.1", + "@netlify/edge-functions-bootstrap": "2.17.1", + "@netlify/headers-parser": "9.0.2", + "@netlify/local-functions-proxy": "2.0.3", + "@netlify/redirect-parser": "15.0.3", + "@netlify/zip-it-and-ship-it": "14.1.8", + "@octokit/rest": "22.0.0", + "@opentelemetry/api": "1.8.0", + "@pnpm/tabtab": "0.5.4", + "ansi-escapes": "7.1.1", + "ansi-to-html": "0.7.2", + "ascii-table": "0.0.9", + "backoff": "2.5.0", + "boxen": "8.0.1", + "chalk": "5.6.2", + "chokidar": "4.0.3", + "ci-info": "4.3.0", + "clean-deep": "3.4.0", + "commander": "12.1.0", + "comment-json": "4.3.0", + "content-type": "1.0.5", + "cookie": "1.0.2", + "cron-parser": "4.9.0", + "debug": "4.4.3", + "decache": "4.6.2", + "dot-prop": "9.0.0", + "dotenv": "17.2.3", + "env-paths": "3.0.0", + "envinfo": "7.15.0", + "etag": "1.8.1", + "execa": "5.1.1", + "express": "4.21.2", + "express-logging": "1.1.1", + "extract-zip": "2.0.1", + "fastest-levenshtein": "1.0.16", + "fastify": "4.29.1", + "find-up": "7.0.0", + "folder-walker": "3.2.0", + "fuzzy": "0.1.3", + "get-port": "5.1.1", + "gh-release-fetch": "4.0.3", + "git-repo-info": "2.1.1", + "gitconfiglocal": "2.1.0", + "http-proxy": "1.18.1", + "http-proxy-middleware": "2.0.9", + "https-proxy-agent": "7.0.6", + "inquirer": "8.2.7", + "inquirer-autocomplete-prompt": "1.4.0", + "ipx": "3.1.1", + "is-docker": "3.0.0", + "is-stream": "4.0.1", + "is-wsl": "3.1.0", + "isexe": "3.1.1", + "jsonwebtoken": "9.0.2", + "jwt-decode": "4.0.0", + "lambda-local": "2.2.0", + "locate-path": "7.2.0", + "lodash": "4.17.21", + "log-update": "6.1.0", + "maxstache": "1.0.7", + "maxstache-stream": "1.0.4", + "multiparty": "4.2.3", + "nanospinner": "1.2.2", + "netlify-redirector": "0.5.0", + "node-fetch": "3.3.2", + "normalize-package-data": "7.0.1", + "open": "10.2.0", + "p-filter": "4.1.0", + "p-map": "7.0.3", + "p-wait-for": "5.0.2", + "parallel-transform": "1.2.0", + "parse-github-url": "1.0.3", + "prettyjson": "1.2.5", + "raw-body": "3.0.1", + "read-package-up": "11.0.0", + "readdirp": "4.1.2", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "terminal-link": "4.0.0", + "toml": "3.0.0", + "tomlify-j0.4": "3.0.0", + "ulid": "3.0.1", + "update-notifier": "7.3.1", + "uuid": "11.1.0", + "wait-port": "1.1.0", + "write-file-atomic": "5.0.1", + "ws": "8.18.3" + }, + "bin": { + "npxnetlify": "bin/run.js" + }, + "engines": { + "node": ">=20.12.2" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "node_modules/netlify/node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "node_modules/netlify/node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "node_modules/netlify/node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "node_modules/netlify/node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "node_modules/netlify/node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "node_modules/netlify/node_modules/@bugsnag/browser": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-8.6.0.tgz", + "integrity": "sha512-7UGqTGnQqXUQ09gOlWbDTFUSbeLIIrP+hML3kTOq8Zdc8nP/iuOEflXGLV2TxWBWW8xIUPc928caFPr9EcaDuw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", "dependencies": { - "micromark-util-types": "^2.0.0" + "@bugsnag/core": "^8.6.0" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "node_modules/netlify/node_modules/@bugsnag/core": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-8.6.0.tgz", + "integrity": "sha512-94Jo443JegaiKV8z8NXMFdyTGubiUnwppWhq3kG2ldlYKtEvrmIaO5+JA58B6oveySvoRu3cCe2W9ysY7G7mDw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "^0.0.2", + "stack-generator": "^2.0.3" } }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "node_modules/netlify/node_modules/@bugsnag/cuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.2.1.tgz", + "integrity": "sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==", + "dev": true + }, + "node_modules/netlify/node_modules/@bugsnag/js": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-8.6.0.tgz", + "integrity": "sha512-U+ofNTTMA2Z6tCrOhK/QhHBhLoQHoalk8Y82WWc7FAcVSoJZYadND/QuXUriNRZpC4YgJ/s/AxPeQ2y+WvMxzw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@bugsnag/browser": "^8.6.0", + "@bugsnag/node": "^8.6.0" } }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "node_modules/netlify/node_modules/@bugsnag/node": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-8.6.0.tgz", + "integrity": "sha512-O91sELo6zBjflVeP3roRC9l68iYaafVs5lz2N0FDkrT08mP2UljtNWpjjoR/0h1so5Ny1OxHgnZ1IrsXhz5SMQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "dependencies": { + "@bugsnag/core": "^8.6.0", + "byline": "^5.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "^0.0.2", + "pump": "^3.0.0", + "stack-generator": "^2.0.3" + } }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "node_modules/netlify/node_modules/@bugsnag/safe-json-stringify": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.1.0.tgz", + "integrity": "sha512-ImA35rnM7bGr+J30R979FQ95BhRB4UO1KfJA0J2sVqc8nwnrS9hhE5mkTmQWMs8Vh1Da+hkLKs5jJB4JjNZp4A==", + "dev": true + }, + "node_modules/netlify/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "engines": { + "node": ">=0.1.90" + } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/netlify/node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=8.6" + "node": ">=12" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/netlify/node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/milkdrop-eel-parser": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/milkdrop-eel-parser/-/milkdrop-eel-parser-0.0.4.tgz", - "integrity": "sha512-4PsOdTMDB7GM3UFzqXQQXf8MBeoolOhsBLMlhug+IIMZ+yNkvqLbdqDbrueGZc8P8tLRJP8pbAxna1yjFr06HQ==", - "license": "MIT" + "node_modules/netlify/node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dev": true, + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } }, - "node_modules/milkdrop-preset-converter-aws": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/milkdrop-preset-converter-aws/-/milkdrop-preset-converter-aws-0.1.6.tgz", - "integrity": "sha512-nr89LRZYgdrDn17vGQCvUK/LM9d90mywElL7zlzXBTgkxWAs/Kamn1Yl9676ugt4L4BAGo6PTEipIqeYXFSM7g==", - "license": "MIT", + "node_modules/netlify/node_modules/@dependents/detective-less": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", + "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", + "dev": true, "dependencies": { - "babel-runtime": "^6.26.0", - "glsl-optimizer-js": "^0.0.2", - "milkdrop-eel-parser": "^0.0.4", - "milkdrop-preset-utils": "^0.1.0" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^7.0.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/milkdrop-preset-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/milkdrop-preset-utils/-/milkdrop-preset-utils-0.1.0.tgz", - "integrity": "sha512-yK5y03SN8INC+ssLLYGGsaAHgNxXEUK6PQVV44rg9OAA27F2aPM0tA5uGsDdASH9sgPaAaRVMV5NoEvEkh66Sw==", - "license": "MIT", + "node_modules/netlify/node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "dev": true, + "optional": true, "dependencies": { - "babel-runtime": "^6.26.0", - "lodash": "^4.17.4" + "tslib": "^2.4.0" } }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "node_modules/netlify/node_modules/@envelop/instrumentation": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz", + "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==", "dev": true, - "license": "ISC", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "@whatwg-node/promise-helpers": "^1.2.1", + "tslib": "^2.5.0" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18.0.0" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/netlify/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "ISC", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" } }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "node_modules/netlify/node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multiformats": { - "version": "13.3.7", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz", - "integrity": "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==", - "license": "Apache-2.0 OR MIT" + "node_modules/netlify/node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/music-metadata": { - "version": "11.8.3", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.8.3.tgz", - "integrity": "sha512-Tgiv4MlCgDb6XzelziB1mmL2xeoHls0KTpCm3Z3qr+LfF4mBEpkuc5vNrc927IT5+S5fv+vzStfI+HYC0igDpA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } + "node_modules/netlify/node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" ], - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.2.0", - "@tokenizer/token": "^0.3.0", - "content-type": "^1.0.5", - "debug": "^4.4.1", - "file-type": "^21.0.0", - "media-typer": "^1.1.0", - "strtok3": "^10.3.4", - "token-types": "^6.1.1", - "uint8array-extras": "^1.4.1" - }, "engines": { "node": ">=18" } }, - "node_modules/music-metadata-browser": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-0.6.6.tgz", - "integrity": "sha512-14KFz4HR6rM6RATcLtJoBDRbehU/dKdVzElCdeI8CjP7Un2HtSf0WiT7f7Lz+XNkcBMZUjthmC6Wy4+NNayCRw==", - "deprecated": "No longer support, superseded by music-metadata", - "license": "MIT", - "dependencies": { - "assert": "^1.4.1", - "buffer": "^5.2.1", - "debug": "^4.0.1", - "music-metadata": "^3.4.0", - "readable-stream": "^3.0.6", - "remove": "^0.1.5", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/music-metadata-browser/node_modules/file-type": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", - "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", - "license": "MIT", + "node_modules/netlify/node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/music-metadata-browser/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", + "node_modules/netlify/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/music-metadata-browser/node_modules/music-metadata": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-3.8.0.tgz", - "integrity": "sha512-aIADbp3uCS+ANr4nnFEHzTzMy81OT7PR7WBMW73SJ28Y7P94nnEugmTOj1ICP2JmxBBDlo+MeYVgiPnxVN69tg==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "file-type": "^11.0.0", - "media-typer": "0.3.0", - "strtok3": "^2.3.0", - "token-types": "^1.0.1" - }, + "node_modules/netlify/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/music-metadata-browser/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "node_modules/netlify/node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/music-metadata-browser/node_modules/strtok3": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-2.3.0.tgz", - "integrity": "sha512-AA67/1atBh7X0fUTDevjW89by2ZkY9RZAnkwusx5Yc1COYf0ruUbpYOOIs03SnRA1CF9K3+BtRXKOEtKhAXVaQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "then-read-stream": "^1.5.0", - "token-types": "^1.0.1" - }, + "node_modules/netlify/node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.1.98" + "node": ">=18" } }, - "node_modules/music-metadata-browser/node_modules/token-types": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-1.3.2.tgz", - "integrity": "sha512-LemYprKRfZPUiwVEMIL8fIP/cvZBpMds1PklsyoQyLZdKk7SQlldNGzw4TTrg2MnWLGSkMM6gUa1EW0h1d72fg==", - "license": "MIT", - "dependencies": { - "ieee754": "^1.1.13" - }, + "node_modules/netlify/node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.1.98" + "node": ">=18" } }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "node_modules/netlify/node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "optional": true, + "os": [ + "linux" ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=18" } }, - "node_modules/neotraverse": { - "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "node_modules/netlify/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10" + "node": ">=18" } }, - "node_modules/netlify": { - "version": "22.1.6", - "resolved": "https://registry.npmjs.org/netlify/-/netlify-22.1.6.tgz", - "integrity": "sha512-Z2o+COQOlHgyf+9oGGsyKPzJ1k9tCar7uEJR2wNU5Uiy68nGaktzLHUsoCeW2MbHYoS56OXEnYSMmirOV7ZtXA==", + "node_modules/netlify/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], "dev": true, - "hasInstallScript": true, - "hasShrinkwrap": true, - "license": "MIT", - "dependencies": { - "@fastify/static": "7.0.4", - "@netlify/api": "14.0.3", - "@netlify/blobs": "9.1.6", - "@netlify/build": "33.4.6", - "@netlify/build-info": "10.0.6", - "@netlify/config": "23.0.10", - "@netlify/edge-bundler": "14.0.6", - "@netlify/edge-functions": "2.15.1", - "@netlify/headers-parser": "9.0.1", - "@netlify/local-functions-proxy": "2.0.3", - "@netlify/redirect-parser": "15.0.2", - "@netlify/zip-it-and-ship-it": "12.1.4", - "@octokit/rest": "21.1.1", - "@opentelemetry/api": "1.8.0", - "@pnpm/tabtab": "0.5.4", - "ansi-escapes": "7.0.0", - "ansi-to-html": "0.7.2", - "ascii-table": "0.0.9", - "backoff": "2.5.0", - "boxen": "8.0.1", - "chalk": "5.4.1", - "chokidar": "3.6.0", - "ci-info": "4.2.0", - "clean-deep": "3.4.0", - "commander": "12.1.0", - "comment-json": "4.2.5", - "content-type": "1.0.5", - "cookie": "1.0.2", - "cron-parser": "4.9.0", - "debug": "4.4.0", - "decache": "4.6.2", - "dot-prop": "9.0.0", - "dotenv": "16.5.0", - "env-paths": "3.0.0", - "envinfo": "7.14.0", - "etag": "1.8.1", - "execa": "5.1.1", - "express": "4.21.2", - "express-logging": "1.1.1", - "extract-zip": "2.0.1", - "fastest-levenshtein": "1.0.16", - "fastify": "4.29.1", - "find-up": "7.0.0", - "folder-walker": "3.2.0", - "fuzzy": "0.1.3", - "get-port": "5.1.1", - "gh-release-fetch": "4.0.3", - "git-repo-info": "2.1.1", - "gitconfiglocal": "2.1.0", - "http-proxy": "1.18.1", - "http-proxy-middleware": "2.0.9", - "https-proxy-agent": "7.0.6", - "inquirer": "8.2.6", - "inquirer-autocomplete-prompt": "1.4.0", - "ipx": "2.1.0", - "is-docker": "3.0.0", - "is-stream": "4.0.1", - "is-wsl": "3.1.0", - "isexe": "3.1.1", - "jsonwebtoken": "9.0.2", - "jwt-decode": "4.0.0", - "lambda-local": "2.2.0", - "locate-path": "7.2.0", - "lodash": "4.17.21", - "log-update": "6.1.0", - "maxstache": "1.0.7", - "maxstache-stream": "1.0.4", - "multiparty": "4.2.3", - "nanospinner": "1.2.2", - "netlify-redirector": "0.5.0", - "node-fetch": "3.3.2", - "normalize-package-data": "6.0.2", - "open": "10.1.2", - "p-filter": "4.1.0", - "p-map": "7.0.3", - "p-wait-for": "5.0.2", - "parallel-transform": "1.2.0", - "parse-github-url": "1.0.3", - "parse-gitignore": "2.0.0", - "prettyjson": "1.2.5", - "raw-body": "3.0.0", - "read-package-up": "11.0.0", - "readdirp": "4.1.2", - "semver": "7.7.1", - "source-map-support": "0.5.21", - "terminal-link": "4.0.0", - "toml": "3.0.0", - "tomlify-j0.4": "3.0.0", - "ulid": "3.0.0", - "update-notifier": "7.3.1", - "uuid": "11.1.0", - "wait-port": "1.1.0", - "write-file-atomic": "5.0.1", - "ws": "8.18.2" - }, - "bin": { - "npxnetlify": "bin/run.js" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20.12.2" + "node": ">=18" } }, - "node_modules/netlify/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "node_modules/netlify/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/netlify/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "node_modules/netlify/node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/netlify/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "node_modules/netlify/node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/netlify/node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "node_modules/netlify/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/netlify/node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "node_modules/netlify/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/netlify/node_modules/@bugsnag/browser": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-8.2.0.tgz", - "integrity": "sha512-C4BfE3eVsjOAqoXbdrPXfKbgp/hz2H7mKBU0p11Jf9uz+5gUCfZK+39JLrQKvRXwqoDcTlBSfz9Xz5kXLyHg2Q==", + "node_modules/netlify/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@bugsnag/core": "^8.2.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/netlify/node_modules/@bugsnag/core": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-8.2.0.tgz", - "integrity": "sha512-dFSs80ZwJ508nlC6UTLTUMdHgTaHY5UKvMiuHqstCQrQrOjqFcIv+x4o+l2WrSyOpoYhHAxDlKfzKN8AjwslQw==", + "node_modules/netlify/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@bugsnag/cuid": "^3.0.0", - "@bugsnag/safe-json-stringify": "^6.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "^0.0.2", - "stack-generator": "^2.0.3" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/netlify/node_modules/@bugsnag/cuid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.1.1.tgz", - "integrity": "sha512-d2z4b0rEo3chI07FNN1Xds8v25CNeekecU6FC/2Fs9MxY2EipkZTThVcV2YinMn8dvRUlViKOyC50evoUxg8tw==", - "dev": true + "node_modules/netlify/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/netlify/node_modules/@bugsnag/js": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-8.2.0.tgz", - "integrity": "sha512-DTtQwV1Ly5VXSOnVtzW8gSwB+ld3qIc/h0yMS836DEYUfA3V9JPwJE3+2EbD8Ea2ogkDWZ+a0jl0SNSNGiOmfA==", + "node_modules/netlify/node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@bugsnag/browser": "^8.2.0", - "@bugsnag/node": "^8.2.0" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" } }, - "node_modules/netlify/node_modules/@bugsnag/node": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-8.2.0.tgz", - "integrity": "sha512-6XC/KgX61m6YFgsBQP/GaH1UzlJkJmpi3AwlZQLsXloRh3O9lM/0EIk6+2sZm+vlz+GwxCFavcuIDgVmH/qi7Q==", + "node_modules/netlify/node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@bugsnag/core": "^8.2.0", - "byline": "^5.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "^0.0.2", - "pump": "^3.0.0", - "stack-generator": "^2.0.3" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/netlify/node_modules/@bugsnag/safe-json-stringify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", - "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==", - "dev": true + "node_modules/netlify/node_modules/@esbuild/win32-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/netlify/node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/netlify/node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/netlify/node_modules/@fastify/accept-negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", + "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", "dev": true, "engines": { - "node": ">=0.1.90" + "node": ">=14" } }, - "node_modules/netlify/node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/netlify/node_modules/@fastify/ajv-compiler": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", + "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "fast-uri": "^2.0.0" } }, - "node_modules/netlify/node_modules/@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", + "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "dev": true + }, + "node_modules/netlify/node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "dev": true + }, + "node_modules/netlify/node_modules/@fastify/error": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", + "dev": true + }, + "node_modules/netlify/node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", "dev": true, "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "fast-json-stringify": "^5.7.0" } }, - "node_modules/netlify/node_modules/@dependents/detective-less": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", - "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", + "node_modules/netlify/node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/netlify/node_modules/@fastify/send": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", + "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", "dev": true, "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" + "@lukeed/ms": "^2.0.1", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "2.0.0", + "mime": "^3.0.0" } }, - "node_modules/netlify/node_modules/@envelop/instrumentation": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz", - "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==", + "node_modules/netlify/node_modules/@fastify/static": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", + "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", "dev": true, "dependencies": { - "@whatwg-node/promise-helpers": "^1.2.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=18.0.0" + "@fastify/accept-negotiator": "^1.0.0", + "@fastify/send": "^2.0.0", + "content-disposition": "^0.5.3", + "fastify-plugin": "^4.0.0", + "fastq": "^1.17.0", + "glob": "^10.3.4" } }, - "node_modules/netlify/node_modules/@envelop/instrumentation/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/netlify/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", - "cpu": [ - "ppc64" - ], + "node_modules/netlify/node_modules/@humanwhocodes/momoa": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz", + "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], "engines": { - "node": ">=18" + "node": ">=10.10.0" } }, - "node_modules/netlify/node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", - "cpu": [ - "arm" - ], + "node_modules/netlify/node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/netlify/node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { "node": ">=18" } }, - "node_modules/netlify/node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "node_modules/netlify/node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", + "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "node_modules/netlify/node_modules/@img/sharp-darwin-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", + "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "node_modules/netlify/node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "node_modules/netlify/node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", + "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", "cpu": [ - "x64" + "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "freebsd" + "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", + "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", "cpu": [ - "arm" + "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", + "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", + "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", "cpu": [ - "ia32" + "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", + "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", "cpu": [ - "loong64" + "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", + "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", "cpu": [ - "mips64el" + "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "node_modules/netlify/node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", + "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", "cpu": [ - "ppc64" + "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=18" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "node_modules/netlify/node_modules/@img/sharp-linux-arm": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", + "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", "cpu": [ - "riscv64" + "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "node_modules/netlify/node_modules/@img/sharp-linux-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", + "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", "cpu": [ - "s390x" + "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "node_modules/netlify/node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", + "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", "cpu": [ - "x64" + "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "node_modules/netlify/node_modules/@img/sharp-linux-s390x": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", + "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", "cpu": [ - "arm64" + "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "node_modules/netlify/node_modules/@img/sharp-linux-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", + "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "node_modules/netlify/node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", + "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "node_modules/netlify/node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", + "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.3" } }, - "node_modules/netlify/node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "node_modules/netlify/node_modules/@img/sharp-wasm32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", + "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", "cpu": [ - "x64" + "wasm32" ], "dev": true, - "license": "MIT", "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@emnapi/runtime": "^1.5.0" + }, "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "node_modules/netlify/node_modules/@img/sharp-win32-arm64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", + "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "node_modules/netlify/node_modules/@img/sharp-win32-ia32": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", + "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=18" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "node_modules/netlify/node_modules/@img/sharp-win32-x64": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", + "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@fastify/accept-negotiator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", - "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/@fastify/ajv-compiler": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", - "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", - "dev": true, - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" - } - }, - "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/netlify/node_modules/@fastify/busboy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", - "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", - "dev": true - }, - "node_modules/netlify/node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", - "dev": true - }, - "node_modules/netlify/node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", - "dev": true, - "dependencies": { - "fast-json-stringify": "^5.7.0" - } - }, - "node_modules/netlify/node_modules/@fastify/merge-json-schemas": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/netlify/node_modules/@fastify/send": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.0.1.tgz", - "integrity": "sha512-8jdouu0o5d0FMq1+zCKeKXc1tmOQ5tTGYdQP3MpyF9+WWrZT1KCBdh6hvoEYxOm3oJG/akdE9BpehLiJgYRvGw==", - "dev": true, - "dependencies": { - "@lukeed/ms": "^2.0.1", - "escape-html": "~1.0.3", - "fast-decode-uri-component": "^1.0.1", - "http-errors": "2.0.0", - "mime": "^3.0.0" + "url": "https://opencollective.com/libvips" } }, - "node_modules/netlify/node_modules/@fastify/send/node_modules/depd": { + "node_modules/netlify/node_modules/@import-maps/resolve": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-2.0.0.tgz", + "integrity": "sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==", + "dev": true }, - "node_modules/netlify/node_modules/@fastify/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/netlify/node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/@fastify/send/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" + "node": ">=18" }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/netlify/node_modules/@fastify/static": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", - "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", - "dev": true, - "dependencies": { - "@fastify/accept-negotiator": "^1.0.0", - "@fastify/send": "^2.0.0", - "content-disposition": "^0.5.3", - "fastify-plugin": "^4.0.0", - "fastq": "^1.17.0", - "glob": "^10.3.4" - } - }, - "node_modules/netlify/node_modules/@humanwhocodes/momoa": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz", - "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==", + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, - "license": "Apache-2.0", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=10.10.0" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/netlify/node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "node_modules/netlify/node_modules/@import-maps/resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-2.0.0.tgz", - "integrity": "sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==", - "dev": true - }, "node_modules/netlify/node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -6531,35 +9861,24 @@ } }, "node_modules/netlify/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/netlify/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/netlify/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true }, "node_modules/netlify/node_modules/@lukeed/ms": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.1.tgz", - "integrity": "sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", "dev": true, "engines": { "node": ">=8" @@ -6606,19 +9925,32 @@ } } }, + "node_modules/netlify/node_modules/@netlify/ai": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@netlify/ai/-/ai-0.2.1.tgz", + "integrity": "sha512-pc30UjYtmoP9XyY6b+xyD/Xh3RYtuc3VcboKU0Ojdv3fX27NUEy3ZLYlmhHB+8E1zVHhyHsoBHqTt/He/YuhXw==", + "dev": true, + "dependencies": { + "@netlify/api": "^14.0.4" + }, + "engines": { + "node": ">=20.6.1" + }, + "peerDependencies": { + "@netlify/api": ">=14.0.0" + } + }, "node_modules/netlify/node_modules/@netlify/api": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@netlify/api/-/api-14.0.3.tgz", - "integrity": "sha512-iFYqSYBnn34Fx3eVOH7sG52f/xcyB9or2yjn486d3ZqLk6OJGFZstxjY4LfTv8chCT1HeSVybIvnCqsHsvrzJQ==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/@netlify/api/-/api-14.0.6.tgz", + "integrity": "sha512-tlG/gqA80WeAbJFYzcLdSP7v8jg1WgtJX+kQD20rMbU+Efga5XxwaiCHgjvpLvFi5hQMe1t2bG60CudxMN1T5g==", "dev": true, "license": "MIT", "dependencies": { - "@netlify/open-api": "^2.37.0", - "lodash-es": "^4.17.21", - "micro-api-client": "^3.3.0", + "@netlify/open-api": "^2.39.0", "node-fetch": "^3.0.0", "p-wait-for": "^5.0.0", - "qs": "^6.9.6" + "picoquery": "^2.5.0" }, "engines": { "node": ">=18.14.0" @@ -6631,12 +9963,12 @@ "dev": true }, "node_modules/netlify/node_modules/@netlify/blobs": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-9.1.6.tgz", - "integrity": "sha512-RR3t5fv7CkGVJiylOTLf/YaHPyrcWmhHW3zX3EK/9UQsnTi8jPxP7B2nyjgRjAx5S4YTzJQP+FmbQlGKdogALQ==", + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-10.0.11.tgz", + "integrity": "sha512-/pa7eD2gxkhJ6aUIJULrRu3tvAaimy+sA6vHUuGRMvncjOuRpeatXLHxuzdn8DyK1CZCjN3E33oXsdEpoqG7SA==", "dev": true, "dependencies": { - "@netlify/dev-utils": "3.2.0", + "@netlify/dev-utils": "4.2.0", "@netlify/runtime-utils": "2.1.0" }, "engines": { @@ -6644,51 +9976,46 @@ } }, "node_modules/netlify/node_modules/@netlify/build": { - "version": "33.4.6", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-33.4.6.tgz", - "integrity": "sha512-f0KlSKBfYqvisu2UkmqaTD6fFgjpwVNvf4PdOEhX7FIMv5kM2mlk20hWKTMF7ZXu6UzBNgbAbsoCukKt8qQwSw==", + "version": "35.1.8", + "resolved": "https://registry.npmjs.org/@netlify/build/-/build-35.1.8.tgz", + "integrity": "sha512-Kbi5vRAwaiosJNtd6BvCyqkza0e40ATSrBiTgDMPqTiX+1cNutJMP05R/rqSYr8LYW5vYVgBl5soeIaH1Yx4pg==", "dev": true, + "license": "MIT", "dependencies": { "@bugsnag/js": "^8.0.0", - "@netlify/blobs": "^10.0.0", - "@netlify/cache-utils": "^6.0.3", - "@netlify/config": "^23.0.10", - "@netlify/edge-bundler": "14.0.6", - "@netlify/functions-utils": "^6.0.10", + "@netlify/blobs": "^10.0.11", + "@netlify/cache-utils": "^6.0.4", + "@netlify/config": "^24.0.4", + "@netlify/edge-bundler": "14.5.6", + "@netlify/functions-utils": "^6.2.8", "@netlify/git-utils": "^6.0.2", "@netlify/opentelemetry-utils": "^2.0.1", "@netlify/plugins-list": "^6.80.0", "@netlify/run-utils": "^6.0.2", - "@netlify/zip-it-and-ship-it": "12.1.4", + "@netlify/zip-it-and-ship-it": "14.1.8", "@sindresorhus/slugify": "^2.0.0", "ansi-escapes": "^7.0.0", - "chalk": "^5.0.0", + "ansis": "^4.1.0", "clean-stack": "^5.0.0", "execa": "^8.0.0", "fdir": "^6.0.1", "figures": "^6.0.0", "filter-obj": "^6.0.0", - "got": "^13.0.0", - "hot-shots": "10.2.1", + "hot-shots": "11.1.0", "indent-string": "^5.0.0", "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", "keep-func-props": "^6.0.0", - "locate-path": "^7.0.0", "log-process-errors": "^11.0.0", - "map-obj": "^5.0.0", "memoize-one": "^6.0.0", "minimatch": "^9.0.4", "os-name": "^6.0.0", "p-event": "^6.0.0", - "p-every": "^2.0.0", "p-filter": "^4.0.0", "p-locate": "^6.0.0", "p-map": "^7.0.0", "p-reduce": "^3.0.0", "package-directory": "^8.0.0", "path-exists": "^5.0.0", - "path-type": "^6.0.0", "pretty-ms": "^9.0.0", "ps-list": "^8.0.0", "read-package-up": "^11.0.0", @@ -6698,13 +10025,14 @@ "safe-json-stringify": "^1.2.0", "semver": "^7.3.8", "string-width": "^7.0.0", - "strip-ansi": "^7.0.0", "supports-color": "^10.0.0", "terminal-link": "^4.0.0", "ts-node": "^10.9.1", "typescript": "^5.0.0", "uuid": "^11.0.0", - "yargs": "^17.6.0" + "yaml": "^2.8.0", + "yargs": "^17.6.0", + "zod": "^3.25.76" }, "bin": { "netlify-build": "bin.js" @@ -6723,9 +10051,9 @@ } }, "node_modules/netlify/node_modules/@netlify/build-info": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-10.0.6.tgz", - "integrity": "sha512-wWMCf1IQMpYj5vp5kuZY7EvNdDbfCg77UvCKjSmHTTgWxHmb9UUOVNRH4J/YnP8HIa9i6YMfpp2ix+V34O239A==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-10.0.8.tgz", + "integrity": "sha512-IotJn/+dizJpWIOJcSHiSFpIPpB0b2+s11Y0OekY3XFr58Wt3UGjbCNdO0cG4i3gsQEjzM2+lDQYgJ85TqPmSw==", "dev": true, "dependencies": { "@bugsnag/js": "^8.0.0", @@ -6745,63 +10073,29 @@ "node": ">=18.14.0" } }, - "node_modules/netlify/node_modules/@netlify/build-info/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/build-info/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/netlify/node_modules/@netlify/build/node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/@netlify/blobs": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-10.0.0.tgz", - "integrity": "sha512-+sECjk88bi+USJ89XmiwWJOrJ5m7qgajhmUYzb1kD25NLZN9AxfewlHlnm2T5iIB9wEZ0XqSr65ycqWxX4SE1A==", - "dev": true, - "dependencies": { - "@netlify/dev-utils": "3.2.0", - "@netlify/runtime-utils": "2.1.0" - }, - "engines": { - "node": "^14.16.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true - }, "node_modules/netlify/node_modules/@netlify/build/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -6820,11 +10114,12 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/execa/node_modules/get-stream": { + "node_modules/netlify/node_modules/@netlify/build/node_modules/get-stream": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -6832,36 +10127,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/got": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, "node_modules/netlify/node_modules/@netlify/build/node_modules/human-signals": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -6871,6 +10142,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -6878,26 +10150,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/netlify/node_modules/@netlify/build/node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -6913,6 +10171,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -6923,65 +10182,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", - "dev": true, - "dependencies": { - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/@netlify/build/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6989,102 +10195,47 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/@netlify/build/node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/cache-utils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-6.0.3.tgz", - "integrity": "sha512-NGkTvsVWs8gbd/wKOQnGjjxtaeTS+2UbqF/eZ5A/hFCXMNWf6xMQ7BcBM+pWLojHJWg/o8P1VgCZ1FDa8Zni4w==", - "dev": true, - "dependencies": { - "cpy": "^11.0.0", - "get-stream": "^9.0.0", - "globby": "^14.0.0", - "junk": "^4.0.0", - "locate-path": "^7.0.0", - "move-file": "^3.0.0", - "path-exists": "^5.0.0", - "readdirp": "^4.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/cache-utils/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/cache-utils/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "node_modules/netlify/node_modules/@netlify/cache-utils": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-6.0.4.tgz", + "integrity": "sha512-KD6IXLbJcjJ5BhjGCy32BJtp1WxvTBS9J5cvdxjbBJGgfLWuJwzUzU8LR2sA4fppCCnEdKJdKy40OcVGZE0iUg==", "dev": true, + "dependencies": { + "cpy": "^11.0.0", + "get-stream": "^9.0.0", + "globby": "^14.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "move-file": "^3.0.0", + "readdirp": "^4.0.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18.14.0" } }, "node_modules/netlify/node_modules/@netlify/config": { - "version": "23.0.10", - "resolved": "https://registry.npmjs.org/@netlify/config/-/config-23.0.10.tgz", - "integrity": "sha512-GTfudAUBfdNA0RwvUIrwoQrsG0GdQBpBnWfmVU/UHWYOnB3Yj+x3ETmOOSdPN8CXnqJqDd8Ey2h0iVqQ/mOcGg==", + "version": "24.0.4", + "resolved": "https://registry.npmjs.org/@netlify/config/-/config-24.0.4.tgz", + "integrity": "sha512-u5RyiCN5Fu165qMBpaQEP7fvnjWzcWwnZ6e+h9obQmNtTF5XPMiaxTITT9Qotsqw1Tz9I486I+nbqwDSE/Dp7g==", "dev": true, - "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", - "@netlify/api": "^14.0.3", - "@netlify/headers-parser": "^9.0.1", - "@netlify/redirect-parser": "^15.0.2", + "@netlify/api": "^14.0.5", + "@netlify/headers-parser": "^9.0.2", + "@netlify/redirect-parser": "^15.0.3", "chalk": "^5.0.0", "cron-parser": "^4.1.0", "deepmerge": "^4.2.2", @@ -7096,14 +10247,16 @@ "find-up": "^7.0.0", "indent-string": "^5.0.0", "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", "map-obj": "^5.0.0", "omit.js": "^2.0.2", "p-locate": "^6.0.0", "path-type": "^6.0.0", + "read-package-up": "^11.0.0", "tomlify-j0.4": "^3.0.0", "validate-npm-package-name": "^5.0.0", - "yargs": "^17.6.0" + "yaml": "^2.8.0", + "yargs": "^17.6.0", + "zod": "^4.0.5" }, "bin": { "netlify-config": "bin.js" @@ -7117,7 +10270,6 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -7141,7 +10293,6 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" }, @@ -7154,7 +10305,6 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -7164,7 +10314,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -7177,7 +10326,6 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -7193,7 +10341,6 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -7204,44 +10351,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/@netlify/config/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", "engines": { "node": ">=14" }, @@ -7254,7 +10368,6 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -7262,36 +10375,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "node_modules/netlify/node_modules/@netlify/config/node_modules/zod": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/netlify/node_modules/@netlify/dev-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-3.2.0.tgz", - "integrity": "sha512-5QPVts2j7RHMNVPVB7E28TC564TarS2JDTfMzKGzCrAY35bvOcfJ60Hhp8DOVjI13+BJgN37srUJP4OBDIXCfg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-4.2.0.tgz", + "integrity": "sha512-P/uLJ5IKB4DhUOd6Q4Mpk7N0YKrnijUhAL3C05dEftNi3U3xJB98YekYfsL3G6GkS3L35pKGMx+vKJRwUHpP1Q==", "dev": true, "dependencies": { "@whatwg-node/server": "^0.10.0", "ansis": "^4.1.0", "chokidar": "^4.0.1", "decache": "^4.6.2", + "dettle": "^1.0.5", "dot-prop": "9.0.0", + "empathic": "^2.0.0", "env-paths": "^3.0.0", - "find-up": "7.0.0", "image-size": "^2.0.2", "js-image-generator": "^1.0.4", - "lodash.debounce": "^4.0.8", "parse-gitignore": "^2.0.0", + "semver": "^7.7.2", + "tmp-promise": "^3.0.3", "uuid": "^11.1.0", "write-file-atomic": "^5.0.1" }, @@ -7299,25 +10410,10 @@ "node": "^18.14.0 || >=20" } }, - "node_modules/netlify/node_modules/@netlify/dev-utils/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/netlify/node_modules/@netlify/edge-bundler": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-14.0.6.tgz", - "integrity": "sha512-wfIS26778TG34C3Ma4vhYVTviUuZMD1cWVW/G3m9qZ4MPqC3xII66mmJOdHSfBhwXNeu8tt/b3YoFO0b/nJO0Q==", + "version": "14.5.6", + "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-14.5.6.tgz", + "integrity": "sha512-00uOZIOFsoWKa04osBvQ763oAFZDtAGSIjlywU0TS/lZTQCVEs6k39yJz8v4UEhXvK5MCThiFv+tnlpTNJn3fQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7327,18 +10423,17 @@ "better-ajv-errors": "^1.2.0", "common-path-prefix": "^3.0.0", "env-paths": "^3.0.0", - "esbuild": "0.25.5", + "esbuild": "0.25.10", "execa": "^8.0.0", "find-up": "^7.0.0", - "get-package-name": "^2.2.0", "get-port": "^7.0.0", - "is-path-inside": "^4.0.0", "node-stream-zip": "^1.15.0", "p-retry": "^6.0.0", "p-wait-for": "^5.0.0", "parse-imports": "^2.2.1", "path-key": "^4.0.0", "semver": "^7.3.8", + "tar": "^7.4.3", "tmp-promise": "^3.0.3", "urlpattern-polyfill": "8.0.2", "uuid": "^11.0.0" @@ -7347,36 +10442,12 @@ "node": ">=18.14.0" } }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/ajv-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", - "dev": true, - "peerDependencies": { - "ajv": "^8.0.1" - } - }, "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -7395,27 +10466,12 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/get-port": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -7428,6 +10484,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -7440,6 +10497,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -7449,6 +10507,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -7456,17 +10515,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -7482,6 +10536,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -7497,6 +10552,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -7509,6 +10565,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7517,15 +10574,16 @@ } }, "node_modules/netlify/node_modules/@netlify/edge-functions": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/@netlify/edge-functions/-/edge-functions-2.15.1.tgz", - "integrity": "sha512-iu9FYYlD6crNfX8GqS5vywfkfdWWpMqnqzXrGh67iB7b+KdTPpPXsRNSRxfvL/o3GO9HJc/zmTMwXhPXDn/2fA==", + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/@netlify/edge-functions/-/edge-functions-2.18.1.tgz", + "integrity": "sha512-Cd/ddhbIyLPkEZ9yMnRIXzKH8UcnUlPAAa1iQva9bypKNjXyFcunt5eNMjfNxMsRMDao/PkDbp1OMGkTRQnwTg==", "dev": true, "dependencies": { - "@netlify/dev-utils": "3.2.1", - "@netlify/edge-bundler": "^14.0.6", - "@netlify/edge-functions-bootstrap": "^2.13.0", + "@netlify/dev-utils": "4.2.0", + "@netlify/edge-bundler": "^14.5.2", + "@netlify/edge-functions-bootstrap": "2.16.0", "@netlify/runtime-utils": "2.1.0", + "@netlify/types": "2.0.3", "get-port": "^7.1.0" }, "engines": { @@ -7533,50 +10591,17 @@ } }, "node_modules/netlify/node_modules/@netlify/edge-functions-bootstrap": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.13.0.tgz", - "integrity": "sha512-8qvD/yBT3e3p5jsdFdm7VAIWXGLNnzw0n257gsmFPeKcbO/+sZMd05q/wVH2y36w/nWo+o9pRZYOJ9GqmLEgzw==", - "dev": true - }, - "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/@netlify/dev-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-3.2.1.tgz", - "integrity": "sha512-a96wZheD3duD20aEJXBIui73GewRIcKwsXyzyFyerrsDffQjaWFuWxU9fnVSiunl6UVrvpBjWMJRGkCv4zf2KQ==", + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.17.1.tgz", + "integrity": "sha512-KyNJbDhK1rC5wEeI7bXPgfl8QvADMHqNy2nwNJG60EHVRXTF0zxFnOpt/p0m2C512gcMXRrKZxaOZQ032RHVbw==", "dev": true, - "dependencies": { - "@whatwg-node/server": "^0.10.0", - "ansis": "^4.1.0", - "chokidar": "^4.0.1", - "decache": "^4.6.2", - "dot-prop": "9.0.0", - "env-paths": "^3.0.0", - "find-up": "7.0.0", - "image-size": "^2.0.2", - "js-image-generator": "^1.0.4", - "lodash.debounce": "^4.0.8", - "parse-gitignore": "^2.0.0", - "semver": "^7.7.2", - "uuid": "^11.1.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || >=20" - } + "license": "MIT" }, - "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/@netlify/edge-functions-bootstrap": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.16.0.tgz", + "integrity": "sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==", + "dev": true }, "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/get-port": { "version": "7.1.0", @@ -7590,26 +10615,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/netlify/node_modules/@netlify/functions-utils": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-6.0.10.tgz", - "integrity": "sha512-PqXyvmVmrNQgVZpyuWykS4mX7Tm2Ry8Ys/nWlDR/cHv2E+MaRiyyneAN4qrCe25z6mSS+sTCf8ZVQtZf2y1xYg==", + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-6.2.8.tgz", + "integrity": "sha512-RkvLcfa8Q4Ff19Qgzhfb0ORDL3PZXI5WJfMwEjjjSOW3HKPRrd+JTOEO+fgkScuzkMhG/DzvvTUs/JRpjWZmXw==", "dev": true, - "license": "MIT", "dependencies": { - "@netlify/zip-it-and-ship-it": "12.1.4", + "@netlify/zip-it-and-ship-it": "14.1.8", "cpy": "^11.0.0", "path-exists": "^5.0.0" }, @@ -7617,16 +10629,6 @@ "node": ">=18.14.0" } }, - "node_modules/netlify/node_modules/@netlify/functions-utils/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/@netlify/git-utils": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-6.0.2.tgz", @@ -7729,15 +10731,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -7763,11 +10756,10 @@ } }, "node_modules/netlify/node_modules/@netlify/headers-parser": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@netlify/headers-parser/-/headers-parser-9.0.1.tgz", - "integrity": "sha512-KHKNVNtzWUkUQhttHsLA217xIjUQxBOY5RCMRkR77G5pH1Sca9gqGhnMvk3KfRol/OZK2/1k83ZpYuvMswsK/w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@netlify/headers-parser/-/headers-parser-9.0.2.tgz", + "integrity": "sha512-86YEGPxVemhksY1LeSr8NSOyH11RHvYHq+FuBJnTlPZoRDX+TD+0TAxF6lwzAgVTd1VPkyFEHlNgUGqw7aNzRQ==", "dev": true, - "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", "escape-string-regexp": "^5.0.0", @@ -7780,33 +10772,11 @@ "node": ">=18.14.0" } }, - "node_modules/netlify/node_modules/@netlify/headers-parser/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/headers-parser/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/@netlify/local-functions-proxy": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy/-/local-functions-proxy-2.0.3.tgz", "integrity": "sha512-siVwmrp7Ow+7jLALi6jXOja4Y4uHMMgOLLQMgd+OZ1TESOstrJvkUisJEDAc9hx7u0v/B0mh5g1g1huiH3uS3A==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.14.0" }, @@ -8018,10 +10988,11 @@ } }, "node_modules/netlify/node_modules/@netlify/open-api": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.37.0.tgz", - "integrity": "sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==", + "version": "2.39.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.39.0.tgz", + "integrity": "sha512-PMBktDmSRBS5act/GxHL3kvbRww5HPFZ9HIHXOrBu6vQesWYapoJaDiU/KDbqmkW1TyelGmURVcwsYr00qSAFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.8.0" } @@ -8048,15 +11019,13 @@ } }, "node_modules/netlify/node_modules/@netlify/redirect-parser": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@netlify/redirect-parser/-/redirect-parser-15.0.2.tgz", - "integrity": "sha512-zS6qBHpmU7IpHGzrHNPqu+Tjvh1cAJuVEoFUvCp0lRUeNcTdIq9VZM7/34vtIN6MD/OMFg3uv80yefSqInV2nA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@netlify/redirect-parser/-/redirect-parser-15.0.3.tgz", + "integrity": "sha512-/HB3fcRRNgf6O/pbLn4EYNDHrU2kiadMMnazg8/OjvQK2S9i4y61vQcrICvDxYKUKQdgeEaABUuaCNAJFnfD9w==", "dev": true, - "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", "fast-safe-stringify": "^2.1.1", - "filter-obj": "^6.0.0", "is-plain-obj": "^4.0.0", "path-exists": "^5.0.0" }, @@ -8064,15 +11033,6 @@ "node": ">=18.14.0" } }, - "node_modules/netlify/node_modules/@netlify/redirect-parser/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/@netlify/run-utils": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-6.0.2.tgz", @@ -8204,28 +11164,35 @@ "node": "^18.14.0 || >=20" } }, + "node_modules/netlify/node_modules/@netlify/types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@netlify/types/-/types-2.0.3.tgz", + "integrity": "sha512-OcV8ivKTdsyANqVSQzbusOA7FVtE9s6zwxNCGR/aNnQaVxMUgm93UzKgfR7cZ1nnQNZHAbjd0dKJKaAUqrzbMw==", + "dev": true, + "engines": { + "node": "^18.14.0 || >=20" + } + }, "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-12.1.4.tgz", - "integrity": "sha512-/wM1c0iyym/7SlowbgqTuu/+tJS8CDDs4vLhSizKntFl3VOeDVX0kr9qriH9wA2hYstwGSuHsEgEAnKdMcDBOg==", + "version": "14.1.8", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-14.1.8.tgz", + "integrity": "sha512-APPNgGUAb1kSe4e9KxhRAeQIPGx8EAfwZ3S61eGyZXXGXgjnKmC2Ho7jsFnLsElbt8Ailyzmi/wAjh0NHZjGjA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.22.5", - "@babel/types": "7.27.6", + "@babel/types": "7.28.4", "@netlify/binary-info": "^1.0.0", - "@netlify/serverless-functions-api": "^2.1.1", + "@netlify/serverless-functions-api": "^2.5.0", "@vercel/nft": "0.29.4", "archiver": "^7.0.0", "common-path-prefix": "^3.0.0", "copy-file": "^11.0.0", "es-module-lexer": "^1.0.0", - "esbuild": "0.25.5", + "esbuild": "0.25.10", "execa": "^8.0.0", "fast-glob": "^3.3.3", "filter-obj": "^6.0.0", "find-up": "^7.0.0", - "is-builtin-module": "^3.1.0", "is-path-inside": "^4.0.0", "junk": "^4.0.0", "locate-path": "^7.0.0", @@ -8252,23 +11219,13 @@ "node": ">=18.14.0" } }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/@netlify/serverless-functions-api": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-2.1.1.tgz", - "integrity": "sha512-MNYfEmZC6F7ZExOrB/Hrfkif7JW2Cbid9y5poTFEJ6rcAhCLQB8lo0SGlQrFXgKvXowXB14IjpOubaQu2zsyfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/@netlify/serverless-functions-api": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-2.5.0.tgz", + "integrity": "sha512-0Hl6POpkEs3aan8T+EQvPIj5/gNc+64nwNv93VY4JoxFSrLPKYWmUyXJhT9lG93VxwGfmbxrCOV8U4sq2eWgTw==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=18.0.0" } }, "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/execa": { @@ -8327,21 +11284,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", @@ -8372,15 +11314,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -8441,175 +11374,169 @@ } }, "node_modules/netlify/node_modules/@octokit/auth-token": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz", - "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/netlify/node_modules/@octokit/core": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.4.tgz", - "integrity": "sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.5.tgz", + "integrity": "sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/auth-token": "^5.0.0", - "@octokit/graphql": "^8.1.2", - "@octokit/request": "^9.2.1", - "@octokit/request-error": "^6.1.7", - "@octokit/types": "^13.6.2", - "before-after-hook": "^3.0.2", + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.2", + "@octokit/request": "^10.0.4", + "@octokit/request-error": "^7.0.1", + "@octokit/types": "^15.0.0", + "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/netlify/node_modules/@octokit/endpoint": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.3.tgz", - "integrity": "sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.1.tgz", + "integrity": "sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.6.2", + "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/netlify/node_modules/@octokit/graphql": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.0.tgz", - "integrity": "sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.2.tgz", + "integrity": "sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/request": "^9.1.4", - "@octokit/types": "^13.8.0", + "@octokit/request": "^10.0.4", + "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/netlify/node_modules/@octokit/openapi-types": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", - "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", - "dev": true + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", + "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", + "dev": true, + "license": "MIT" }, "node_modules/netlify/node_modules/@octokit/plugin-paginate-rest": { - "version": "11.4.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.2.tgz", - "integrity": "sha512-BXJ7XPCTDXFF+wxcg/zscfgw2O/iDPtNSkwwR1W1W5c4Mb3zav/M2XvxQ23nVmKj7jpweB4g8viMeCQdm7LMVA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.0.tgz", + "integrity": "sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.7.0" + "@octokit/types": "^15.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/netlify/node_modules/@octokit/plugin-request-log": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", - "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/netlify/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.0.tgz", - "integrity": "sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.1.0.tgz", + "integrity": "sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^13.7.0" + "@octokit/types": "^15.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/netlify/node_modules/@octokit/request": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.2.tgz", - "integrity": "sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.5.tgz", + "integrity": "sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^10.1.3", - "@octokit/request-error": "^6.1.7", - "@octokit/types": "^13.6.2", - "fast-content-type-parse": "^2.0.0", + "@octokit/endpoint": "^11.0.1", + "@octokit/request-error": "^7.0.1", + "@octokit/types": "^15.0.0", + "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/netlify/node_modules/@octokit/request-error": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz", - "integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.1.tgz", + "integrity": "sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^13.6.2" + "@octokit/types": "^15.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, - "node_modules/netlify/node_modules/@octokit/request/node_modules/fast-content-type-parse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", - "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, "node_modules/netlify/node_modules/@octokit/rest": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz", - "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", + "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/core": "^6.1.4", - "@octokit/plugin-paginate-rest": "^11.4.2", - "@octokit/plugin-request-log": "^5.3.1", - "@octokit/plugin-rest-endpoint-methods": "^13.3.0" + "@octokit/core": "^7.0.2", + "@octokit/plugin-paginate-rest": "^13.0.1", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^16.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/netlify/node_modules/@octokit/types": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", - "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.0.tgz", + "integrity": "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==", "dev": true, + "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^23.0.1" + "@octokit/openapi-types": "^26.0.0" } }, "node_modules/netlify/node_modules/@opentelemetry/api": { @@ -8622,9 +11549,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.0.tgz", - "integrity": "sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -8641,24 +11568,25 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.4.0", - "@parcel/watcher-darwin-arm64": "2.4.0", - "@parcel/watcher-darwin-x64": "2.4.0", - "@parcel/watcher-freebsd-x64": "2.4.0", - "@parcel/watcher-linux-arm-glibc": "2.4.0", - "@parcel/watcher-linux-arm64-glibc": "2.4.0", - "@parcel/watcher-linux-arm64-musl": "2.4.0", - "@parcel/watcher-linux-x64-glibc": "2.4.0", - "@parcel/watcher-linux-x64-musl": "2.4.0", - "@parcel/watcher-win32-arm64": "2.4.0", - "@parcel/watcher-win32-ia32": "2.4.0", - "@parcel/watcher-win32-x64": "2.4.0" + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" } }, "node_modules/netlify/node_modules/@parcel/watcher-android-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz", - "integrity": "sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", "cpu": [ "arm64" ], @@ -8676,9 +11604,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz", - "integrity": "sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", "cpu": [ "arm64" ], @@ -8696,9 +11624,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-darwin-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz", - "integrity": "sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", "cpu": [ "x64" ], @@ -8716,9 +11644,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz", - "integrity": "sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", "cpu": [ "x64" ], @@ -8736,9 +11664,29 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz", - "integrity": "sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/netlify/node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", "cpu": [ "arm" ], @@ -8756,9 +11704,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz", - "integrity": "sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", "cpu": [ "arm64" ], @@ -8776,9 +11724,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz", - "integrity": "sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", "cpu": [ "arm64" ], @@ -8796,9 +11744,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz", - "integrity": "sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", "cpu": [ "x64" ], @@ -8816,9 +11764,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz", - "integrity": "sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", "cpu": [ "x64" ], @@ -8836,9 +11784,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-wasm": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.0.tgz", - "integrity": "sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.1.tgz", + "integrity": "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==", "bundleDependencies": [ "napi-wasm" ], @@ -8863,9 +11811,9 @@ "license": "MIT" }, "node_modules/netlify/node_modules/@parcel/watcher-win32-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz", - "integrity": "sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", "cpu": [ "arm64" ], @@ -8883,9 +11831,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-win32-ia32": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz", - "integrity": "sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", "cpu": [ "ia32" ], @@ -8903,9 +11851,9 @@ } }, "node_modules/netlify/node_modules/@parcel/watcher-win32-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz", - "integrity": "sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", "cpu": [ "x64" ], @@ -8965,6 +11913,12 @@ "node": ">=12.22.0" } }, + "node_modules/netlify/node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, "node_modules/netlify/node_modules/@pnpm/npm-conf": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", @@ -8995,9 +11949,9 @@ } }, "node_modules/netlify/node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", @@ -9017,14 +11971,13 @@ } }, "node_modules/netlify/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", - "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz", + "integrity": "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -9032,14 +11985,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-android-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", - "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz", + "integrity": "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -9047,14 +11999,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", - "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz", + "integrity": "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -9062,14 +12013,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", - "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz", + "integrity": "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -9077,14 +12027,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", - "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz", + "integrity": "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -9092,14 +12041,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", - "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz", + "integrity": "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -9107,14 +12055,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", - "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz", + "integrity": "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9122,14 +12069,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", - "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz", + "integrity": "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9137,14 +12083,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", - "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz", + "integrity": "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9152,44 +12097,41 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", - "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz", + "integrity": "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", - "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", + "node_modules/netlify/node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz", + "integrity": "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", - "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", + "node_modules/netlify/node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz", + "integrity": "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9197,14 +12139,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", - "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz", + "integrity": "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9212,14 +12153,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", - "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz", + "integrity": "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9227,14 +12167,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", - "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz", + "integrity": "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9242,14 +12181,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", - "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz", + "integrity": "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -9257,29 +12195,41 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", - "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz", + "integrity": "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ], "peer": true }, + "node_modules/netlify/node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz", + "integrity": "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "peer": true + }, "node_modules/netlify/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", - "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz", + "integrity": "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -9287,14 +12237,27 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", - "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz", + "integrity": "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/netlify/node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz", + "integrity": "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==", + "cpu": [ + "x64" + ], + "dev": true, "optional": true, "os": [ "win32" @@ -9302,14 +12265,13 @@ "peer": true }, "node_modules/netlify/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", - "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz", + "integrity": "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -9346,55 +12308,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@sindresorhus/slugify": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", - "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", - "dev": true, - "dependencies": { - "@sindresorhus/transliterate": "^1.0.0", - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/@sindresorhus/transliterate": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.5.0.tgz", - "integrity": "sha512-/sfSkoNelLq5riqNRp5uBjHIKBi1MWZk9ubRT1WiBQuTfmDf7BeQkph2DJzRB83QagMPHk2VDjuvpy0VuwyzdA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", "dev": true, "dependencies": { - "escape-string-regexp": "^5.0.0", - "lodash.deburr": "^4.1.0" - }, - "engines": { - "node": ">=12" + "escape-string-regexp": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, "engines": { "node": ">=12" }, @@ -9420,15 +12341,6 @@ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "dev": true }, - "node_modules/netlify/node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/netlify/node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -9454,9 +12366,9 @@ "dev": true }, "node_modules/netlify/node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "optional": true, "peer": true, @@ -9466,9 +12378,9 @@ } }, "node_modules/netlify/node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "optional": true, "peer": true, @@ -9477,37 +12389,38 @@ } }, "node_modules/netlify/node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, - "license": "MIT" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true }, "node_modules/netlify/node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, + "license": "MIT", "optional": true, "peer": true, "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/netlify/node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, "optional": true, "peer": true, "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/netlify/node_modules/@types/http-cache-semantics": { @@ -9516,31 +12429,39 @@ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true }, + "node_modules/netlify/node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/netlify/node_modules/@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/netlify/node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true, "optional": true, "peer": true }, "node_modules/netlify/node_modules/@types/node": { - "version": "18.19.86", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", - "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "version": "22.18.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.7.tgz", + "integrity": "sha512-3E97nlWEVp2V6J7aMkR8eOnw/w0pArPwf/5/W0865f+xzBoGL/ZuHkTAKAGN7cOWNwd+sG+hZOqj+fjzeHS75g==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/netlify/node_modules/@types/normalize-package-data": { @@ -9550,17 +12471,17 @@ "dev": true }, "node_modules/netlify/node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "dev": true, "optional": true, "peer": true }, "node_modules/netlify/node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true, "optional": true, "peer": true @@ -9571,10 +12492,10 @@ "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, - "node_modules/netlify/node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "node_modules/netlify/node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, "optional": true, "peer": true, @@ -9583,46 +12504,63 @@ "@types/node": "*" } }, + "node_modules/netlify/node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/netlify/node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "dev": true + }, "node_modules/netlify/node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "optional": true, "dependencies": { "@types/node": "*" } }, - "node_modules/netlify/node_modules/@typescript-eslint/types": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz", - "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==", + "node_modules/netlify/node_modules/@typescript-eslint/project-service": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", + "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.45.0", + "@typescript-eslint/types": "^8.45.0", + "debug": "^4.3.4" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz", - "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==", + "node_modules/netlify/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", + "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/visitor-keys": "8.26.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -9631,44 +12569,61 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/netlify/node_modules/@typescript-eslint/types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", + "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", + "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@typescript-eslint/project-service": "8.45.0", + "@typescript-eslint/tsconfig-utils": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/netlify/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz", - "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", + "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.0", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.45.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9679,9 +12634,9 @@ } }, "node_modules/netlify/node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -9718,59 +12673,71 @@ } }, "node_modules/netlify/node_modules/@vue/compiler-core": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", - "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==", + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.27.2", - "@vue/shared": "3.5.16", + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, + "node_modules/netlify/node_modules/@vue/compiler-core/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/netlify/node_modules/@vue/compiler-dom": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz", - "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==", + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.5.16", - "@vue/shared": "3.5.16" + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" } }, "node_modules/netlify/node_modules/@vue/compiler-sfc": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz", - "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==", + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.27.2", - "@vue/compiler-core": "3.5.16", - "@vue/compiler-dom": "3.5.16", - "@vue/compiler-ssr": "3.5.16", - "@vue/shared": "3.5.16", + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", "estree-walker": "^2.0.2", - "magic-string": "^0.30.17", - "postcss": "^8.5.3", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "node_modules/netlify/node_modules/@vue/compiler-ssr": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz", - "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==", + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.5.16", - "@vue/shared": "3.5.16" + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" } }, "node_modules/netlify/node_modules/@vue/shared": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz", - "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==", + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", "dev": true }, "node_modules/netlify/node_modules/@whatwg-node/disposablestack": { @@ -9786,19 +12753,13 @@ "node": ">=18.0.0" } }, - "node_modules/netlify/node_modules/@whatwg-node/disposablestack/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, "node_modules/netlify/node_modules/@whatwg-node/fetch": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.8.tgz", - "integrity": "sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==", + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.11.tgz", + "integrity": "sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==", "dev": true, "dependencies": { - "@whatwg-node/node-fetch": "^0.7.21", + "@whatwg-node/node-fetch": "^0.8.0", "urlpattern-polyfill": "^10.0.0" }, "engines": { @@ -9812,9 +12773,9 @@ "dev": true }, "node_modules/netlify/node_modules/@whatwg-node/node-fetch": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.21.tgz", - "integrity": "sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.0.tgz", + "integrity": "sha512-+z00GpWxKV/q8eMETwbdi80TcOoVEVZ4xSRkxYOZpn3kbV3nej5iViNzXVke/j3v4y1YpO5zMS/CVDIASvJnZQ==", "dev": true, "dependencies": { "@fastify/busboy": "^3.1.1", @@ -9826,12 +12787,6 @@ "node": ">=18.0.0" } }, - "node_modules/netlify/node_modules/@whatwg-node/node-fetch/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, "node_modules/netlify/node_modules/@whatwg-node/promise-helpers": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", @@ -9844,21 +12799,15 @@ "node": ">=16.0.0" } }, - "node_modules/netlify/node_modules/@whatwg-node/promise-helpers/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, "node_modules/netlify/node_modules/@whatwg-node/server": { - "version": "0.10.10", - "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.10.tgz", - "integrity": "sha512-GwpdMgUmwIp0jGjP535YtViP/nnmETAyHpGPWPZKdX++Qht/tSLbGXgFUMSsQvEACmZAR1lAPNu2CnYL1HpBgg==", + "version": "0.10.12", + "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.12.tgz", + "integrity": "sha512-MQIvvQyPvKGna586MzXhgwnEbGtbm7QtOgJ/KPd/tC70M/jbhd1xHdIQQbh3okBw+MrDF/EvaC2vB5oRC7QdlQ==", "dev": true, "dependencies": { "@envelop/instrumentation": "^1.0.0", "@whatwg-node/disposablestack": "^0.0.6", - "@whatwg-node/fetch": "^0.10.8", + "@whatwg-node/fetch": "^0.10.10", "@whatwg-node/promise-helpers": "^1.3.2", "tslib": "^2.6.3" }, @@ -9866,12 +12815,6 @@ "node": ">=18.0.0" } }, - "node_modules/netlify/node_modules/@whatwg-node/server/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, "node_modules/netlify/node_modules/@xhmikosr/archive-type": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-6.0.1.tgz", @@ -9996,11 +12939,17 @@ "node": "^14.14.0 || >=16.0.0" } }, - "node_modules/netlify/node_modules/@xhmikosr/decompress/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "node_modules/netlify/node_modules/@xhmikosr/decompress-unzip/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/netlify/node_modules/@xhmikosr/downloader": { "version": "13.0.1", @@ -10023,71 +12972,45 @@ "node": "^14.14.0 || >=16.0.0" } }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/filename-reserved-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/filenamify": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/p-event": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", + "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, "dependencies": { - "filename-reserved-regex": "^3.0.0", - "strip-outer": "^2.0.0", - "trim-repeated": "^2.0.0" + "p-timeout": "^5.0.2" }, "engines": { - "node": ">=12.20" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/strip-outer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", + "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/trim-repeated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/netlify/node_modules/abbrev": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", @@ -10102,7 +13025,6 @@ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, - "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -10130,9 +13052,9 @@ } }, "node_modules/netlify/node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -10151,399 +13073,271 @@ } }, "node_modules/netlify/node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/netlify/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/netlify/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/netlify/node_modules/ajv-formats/node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/netlify/node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/netlify/node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/netlify/node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "dependencies": { - "environment": "^1.0.0" + "acorn": "^8.11.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/netlify/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/netlify/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/netlify/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/netlify/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/netlify/node_modules/ansi-to-html": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz", - "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==", + "node_modules/netlify/node_modules/ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "dev": true, + "peerDependencies": { + "ajv": "^8.0.1" + } + }, + "node_modules/netlify/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "dependencies": { - "entities": "^2.2.0" + "ajv": "^8.0.0" }, - "bin": { - "ansi-to-html": "bin/ansi-to-html" + "peerDependencies": { + "ajv": "^8.0.0" }, - "engines": { - "node": ">=8.0.0" + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/netlify/node_modules/ansi-to-html/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/netlify/node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "dependencies": { + "string-width": "^4.1.0" } }, - "node_modules/netlify/node_modules/ansis": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", - "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", + "node_modules/netlify/node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/netlify/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } + "node_modules/netlify/node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/netlify/node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/netlify/node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=8" } }, - "node_modules/netlify/node_modules/archiver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "node_modules/netlify/node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/netlify/node_modules/archiver-utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "node_modules/netlify/node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/netlify/node_modules/archiver-utils/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/netlify/node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "engines": { + "node": ">=6" } }, - "node_modules/netlify/node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/netlify/node_modules/ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/archiver-utils/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "node_modules/netlify/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/netlify/node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/netlify/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/netlify/node_modules/archiver/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/netlify/node_modules/ansi-to-html": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz", + "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "entities": "^2.2.0" + }, + "bin": { + "ansi-to-html": "bin/ansi-to-html" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/netlify/node_modules/archiver/node_modules/buffer-crc32": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "node_modules/netlify/node_modules/ansis": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", + "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=14" } }, - "node_modules/netlify/node_modules/archiver/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "node_modules/netlify/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 8" } }, - "node_modules/netlify/node_modules/archiver/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/netlify/node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/netlify/node_modules/archiver/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/netlify/node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/netlify/node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "node_modules/netlify/node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dev": true, + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/netlify/node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/netlify/node_modules/arg": { "version": "4.1.3", @@ -10551,16 +13345,10 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "node_modules/netlify/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/netlify/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/netlify/node_modules/array-timsort": { @@ -10572,7 +13360,7 @@ "node_modules/netlify/node_modules/ascii-table": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", - "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=", + "integrity": "sha512-xpkr6sCDIYTPqzvjG8M3ncw1YOTaloWZOyrUmicoEifBEKzQzt+ooUpRpQ/AbOoJfO/p2ZKiyp79qHThzJDulQ==", "dev": true }, "node_modules/netlify/node_modules/ast-module-types": { @@ -10585,9 +13373,9 @@ } }, "node_modules/netlify/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "node_modules/netlify/node_modules/async-sema": { @@ -10616,22 +13404,28 @@ } }, "node_modules/netlify/node_modules/avvio": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", - "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", + "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", "dev": true, "dependencies": { "@fastify/error": "^3.3.0", - "archy": "^1.0.0", - "debug": "^4.0.0", "fastq": "^1.17.1" } }, "node_modules/netlify/node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", - "dev": true + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.2.tgz", + "integrity": "sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==", + "dev": true, + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/netlify/node_modules/backoff": { "version": "2.5.0", @@ -10652,76 +13446,10 @@ "dev": true }, "node_modules/netlify/node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", - "dev": true, - "optional": true - }, - "node_modules/netlify/node_modules/bare-fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz", - "integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==", - "dev": true, - "optional": true, - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4" - }, - "engines": { - "bare": ">=1.16.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/bare-os": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", - "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", - "dev": true, - "optional": true, - "engines": { - "bare": ">=1.14.0" - } - }, - "node_modules/netlify/node_modules/bare-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", - "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", - "dev": true, - "optional": true, - "dependencies": { - "bare-os": "^3.0.1" - } - }, - "node_modules/netlify/node_modules/bare-stream": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", - "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", - "dev": true, - "optional": true, - "dependencies": { - "streamx": "^2.21.0" - }, - "peerDependencies": { - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", + "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", + "dev": true }, "node_modules/netlify/node_modules/base64-js": { "version": "1.5.1", @@ -10744,17 +13472,17 @@ ] }, "node_modules/netlify/node_modules/before-after-hook": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", - "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/netlify/node_modules/better-ajv-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-1.2.0.tgz", "integrity": "sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@babel/code-frame": "^7.16.0", "@humanwhocodes/momoa": "^2.0.2", @@ -10774,7 +13502,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10790,7 +13517,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10807,7 +13533,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10815,19 +13540,11 @@ "node": ">=7.0.0" } }, - "node_modules/netlify/node_modules/better-ajv-errors/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/netlify/node_modules/better-ajv-errors/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10835,15 +13552,6 @@ "node": ">=8" } }, - "node_modules/netlify/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/netlify/node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -10864,6 +13572,20 @@ "readable-stream": "^3.4.0" } }, + "node_modules/netlify/node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/netlify/node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -10897,29 +13619,16 @@ "ms": "2.0.0" } }, - "node_modules/netlify/node_modules/body-parser/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/netlify/node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, "node_modules/netlify/node_modules/body-parser/node_modules/ms": { @@ -10937,67 +13646,32 @@ "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/netlify/node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/boxen/node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "engines": { - "node": ">=16" + "unpipe": "1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8" } }, - "node_modules/netlify/node_modules/boxen/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "node_modules/netlify/node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/netlify/node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/netlify/node_modules/boxen": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", + "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", "dev": true, "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "ansi-align": "^3.0.1", + "camelcase": "^8.0.0", + "chalk": "^5.3.0", + "cli-boxes": "^3.0.0", + "string-width": "^7.2.0", + "type-fest": "^4.21.0", + "widest-line": "^5.0.0", + "wrap-ansi": "^9.0.0" }, "engines": { "node": ">=18" @@ -11006,34 +13680,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/boxen/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/boxen/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "node_modules/netlify/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "balanced-match": "^1.0.0" } }, "node_modules/netlify/node_modules/braces": { @@ -11073,18 +13726,18 @@ } }, "node_modules/netlify/node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "dev": true, "engines": { - "node": "*" + "node": ">=8.0.0" } }, "node_modules/netlify/node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "dev": true }, "node_modules/netlify/node_modules/buffer-from": { @@ -11093,18 +13746,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/netlify/node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -11165,6 +13806,18 @@ "node": ">=14.16" } }, + "node_modules/netlify/node_modules/cacheable-request/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -11197,16 +13850,28 @@ "node_modules/netlify/node_modules/callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", "dev": true, "engines": { "node": "*" } }, + "node_modules/netlify/node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -11216,58 +13881,24 @@ } }, "node_modules/netlify/node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "dev": true }, "node_modules/netlify/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/netlify/node_modules/chokidar/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/netlify/node_modules/chokidar/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" } }, "node_modules/netlify/node_modules/chownr": { @@ -11280,9 +13911,9 @@ } }, "node_modules/netlify/node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -11290,7 +13921,6 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } @@ -11319,9 +13949,9 @@ } }, "node_modules/netlify/node_modules/clean-stack": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", - "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "dependencies": { "escape-string-regexp": "5.0.0" @@ -11333,18 +13963,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -11498,23 +14116,131 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "engines": { - "node": ">=14" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/netlify/node_modules/clipboardy/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/netlify/node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/netlify/node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, - "node_modules/netlify/node_modules/clipboardy/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/netlify/node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/netlify/node_modules/clone": { @@ -11545,16 +14271,22 @@ "color-name": "1.1.3" } }, - "node_modules/netlify/node_modules/color-name": { + "node_modules/netlify/node_modules/color-convert/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/netlify/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/netlify/node_modules/color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, "dependencies": { "color-name": "^1.0.0", @@ -11590,27 +14322,20 @@ } }, "node_modules/netlify/node_modules/comment-json": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", - "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.3.0.tgz", + "integrity": "sha512-DczdmbvWLd09KATFWY0xcihOO45b32+5V34vZg1oelxqgjtGJotaLrrdFpJRLOdG6Wb031qcg4zOKgnQoBWbEw==", "dev": true, + "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "esprima": "^4.0.1" }, "engines": { "node": ">= 6" } }, - "node_modules/netlify/node_modules/comment-json/node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, "node_modules/netlify/node_modules/common-path-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", @@ -11633,30 +14358,6 @@ "node": ">= 14" } }, - "node_modules/netlify/node_modules/compress-commons/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/netlify/node_modules/compress-commons/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -11669,57 +14370,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/compress-commons/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/compress-commons/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/compress-commons/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/netlify/node_modules/confbox": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/netlify/node_modules/config-chain": { "version": "1.1.13", @@ -11732,9 +14387,9 @@ } }, "node_modules/netlify/node_modules/configstore": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.0.0.tgz", - "integrity": "sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", + "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", "dev": true, "dependencies": { "atomically": "^2.0.3", @@ -11746,19 +14401,13 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/configstore/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, "node_modules/netlify/node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "dev": true, "engines": { "node": "^14.18.0 || >=16.10.0" @@ -11776,26 +14425,6 @@ "node": ">= 0.6" } }, - "node_modules/netlify/node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/netlify/node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -11823,13 +14452,13 @@ "node_modules/netlify/node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "node_modules/netlify/node_modules/copy-file": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.0.0.tgz", - "integrity": "sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.1.0.tgz", + "integrity": "sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.11", @@ -11842,31 +14471,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/copy-file/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/netlify/node_modules/copy-file/node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", - "dev": true, - "dependencies": { - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/netlify/node_modules/cpy": { @@ -11914,75 +14522,6 @@ "node": ">= 14" } }, - "node_modules/netlify/node_modules/crc32-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/netlify/node_modules/crc32-stream/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/crc32-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/crc32-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/netlify/node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -12025,23 +14564,18 @@ } }, "node_modules/netlify/node_modules/crossws": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.1.3.tgz", - "integrity": "sha512-uZwy53h6ITBxXdzsw7UcGQZ1QSyjBSkAknu70Zb7+JWmJ1LstE1hVFEgt34RVoCQJn8kstSOnNmRjK93SG1LBg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", "dev": true, - "peerDependencies": { - "uWebSockets.js": "*" - }, - "peerDependenciesMeta": { - "uWebSockets.js": { - "optional": true - } + "dependencies": { + "uncrypto": "^0.1.3" } }, "node_modules/netlify/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, "dependencies": { "boolbase": "^1.0.0", @@ -12055,12 +14589,12 @@ } }, "node_modules/netlify/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", "dev": true, "dependencies": { - "mdn-data": "2.0.30", + "mdn-data": "2.12.2", "source-map-js": "^1.0.1" }, "engines": { @@ -12068,9 +14602,9 @@ } }, "node_modules/netlify/node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, "engines": { "node": ">= 6" @@ -12119,25 +14653,26 @@ "dev": true }, "node_modules/netlify/node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", "dev": true }, "node_modules/netlify/node_modules/data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, "engines": { "node": ">= 12" } }, "node_modules/netlify/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -12200,7 +14735,6 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12273,20 +14807,19 @@ "dev": true }, "node_modules/netlify/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/netlify/node_modules/destr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/netlify/node_modules/destroy": { "version": "1.2.0", @@ -12299,11 +14832,10 @@ } }, "node_modules/netlify/node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", + "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -12440,6 +14972,12 @@ "typescript": "^5.4.4" } }, + "node_modules/netlify/node_modules/dettle": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/dettle/-/dettle-1.0.5.tgz", + "integrity": "sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==", + "dev": true + }, "node_modules/netlify/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -12463,6 +15001,18 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/netlify/node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/netlify/node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -12491,9 +15041,9 @@ } }, "node_modules/netlify/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "dependencies": { "dom-serializer": "^2.0.0", @@ -12519,23 +15069,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/dot-prop/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -12577,15 +15114,24 @@ "node_modules/netlify/node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "node_modules/netlify/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "dev": true }, + "node_modules/netlify/node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/netlify/node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -12602,9 +15148,9 @@ } }, "node_modules/netlify/node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "dependencies": { "once": "^1.4.0" @@ -12623,6 +15169,15 @@ "node": ">=8.6" } }, + "node_modules/netlify/node_modules/enquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/netlify/node_modules/enquirer/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -12636,13 +15191,10 @@ } }, "node_modules/netlify/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "engines": { - "node": ">=0.12" - }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -12660,10 +15212,11 @@ } }, "node_modules/netlify/node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.15.0.tgz", + "integrity": "sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -12711,9 +15264,9 @@ } }, "node_modules/netlify/node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true }, "node_modules/netlify/node_modules/es-object-atoms": { @@ -12729,12 +15282,11 @@ } }, "node_modules/netlify/node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -12742,37 +15294,38 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" } }, "node_modules/netlify/node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "engines": { "node": ">=6" @@ -12793,9 +15346,21 @@ "node_modules/netlify/node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, + "node_modules/netlify/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", @@ -12868,7 +15433,6 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -12884,11 +15448,19 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/netlify/node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/netlify/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -12912,6 +15484,18 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/netlify/node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/execa/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -12924,15 +15508,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/netlify/node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -13009,63 +15584,12 @@ "ms": "2.0.0" } }, - "node_modules/netlify/node_modules/express/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/express/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/netlify/node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/netlify/node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true - }, - "node_modules/netlify/node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/netlify/node_modules/ext-list": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", @@ -13091,20 +15615,6 @@ "node": ">=4" } }, - "node_modules/netlify/node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/netlify/node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -13141,10 +15651,21 @@ } }, "node_modules/netlify/node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/netlify/node_modules/fast-decode-uri-component": { "version": "1.0.1", @@ -13186,17 +15707,22 @@ "node": ">=8.6.0" } }, - "node_modules/netlify/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/netlify/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "peer": true + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/netlify/node_modules/fast-json-stringify": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.15.1.tgz", - "integrity": "sha512-JopGtkvvguRqrS4gHXSSA2jf4pDgOZkeBAkLO1LbzOpiOMo7/kugoR+KiWifpLpluaVeYDkAuxCJOj4Gyc6L9A==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", + "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", "dev": true, "dependencies": { "@fastify/merge-json-schemas": "^0.1.0", @@ -13208,22 +15734,6 @@ "rfdc": "^1.2.0" } }, - "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv-formats": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", @@ -13237,45 +15747,29 @@ }, "peerDependenciesMeta": { "ajv": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" + "optional": true } - ] + } }, - "node_modules/netlify/node_modules/fast-json-stringify/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/netlify/node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", "dev": true }, "node_modules/netlify/node_modules/fast-querystring": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.0.0.tgz", - "integrity": "sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "dev": true, "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/netlify/node_modules/fast-redact": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", - "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "dev": true, "engines": { "node": ">=6" @@ -13288,11 +15782,20 @@ "dev": true }, "node_modules/netlify/node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] }, "node_modules/netlify/node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -13338,21 +15841,21 @@ } }, "node_modules/netlify/node_modules/fastify-plugin": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.4.0.tgz", - "integrity": "sha512-ovwFQG2qNy3jcCROiWpr94Hs0le+c7N/3t7m9aVwbFhkxcR/esp2xu25dP8e617HpQdmeDv+gFX4zagdUhDByw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", + "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", "dev": true }, - "node_modules/netlify/node_modules/fastify/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "node_modules/netlify/node_modules/fastify/node_modules/fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", "dev": true }, "node_modules/netlify/node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -13361,18 +15864,20 @@ "node_modules/netlify/node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "dependencies": { "pend": "~1.2.0" } }, "node_modules/netlify/node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -13383,15 +15888,15 @@ } }, "node_modules/netlify/node_modules/fecha": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", - "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "dev": true }, "node_modules/netlify/node_modules/fetch-blob": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", - "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -13416,7 +15921,6 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, - "license": "MIT", "dependencies": { "is-unicode-supported": "^2.0.0" }, @@ -13427,23 +15931,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/figures/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/file-type": { - "version": "18.5.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.5.0.tgz", - "integrity": "sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==", + "version": "18.7.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz", + "integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==", "dev": true, "dependencies": { "readable-web-to-node-stream": "^3.0.2", @@ -13463,6 +15954,35 @@ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true }, + "node_modules/netlify/node_modules/filename-reserved-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", + "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/filenamify": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", + "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^3.0.0", + "strip-outer": "^2.0.0", + "trim-repeated": "^2.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -13552,9 +16072,9 @@ } }, "node_modules/netlify/node_modules/find-up-simple": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", - "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "engines": { "node": ">=18" @@ -13563,15 +16083,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/find-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -13588,9 +16099,9 @@ } }, "node_modules/netlify/node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -13608,12 +16119,12 @@ } }, "node_modules/netlify/node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -13636,9 +16147,9 @@ } }, "node_modules/netlify/node_modules/form-data-encoder": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.3.tgz", - "integrity": "sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "engines": { "node": ">= 14.17" @@ -13668,7 +16179,7 @@ "node_modules/netlify/node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "engines": { "node": ">= 0.6" @@ -13677,7 +16188,7 @@ "node_modules/netlify/node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, "dependencies": { "inherits": "^2.0.1", @@ -13699,12 +16210,21 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/netlify/node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/netlify/node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/netlify/node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/netlify/node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -13715,6 +16235,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -13760,9 +16281,9 @@ } }, "node_modules/netlify/node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "dev": true, "engines": { "node": ">=18" @@ -13795,22 +16316,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/netlify/node_modules/get-package-name": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/get-package-name/-/get-package-name-2.2.0.tgz", - "integrity": "sha512-LmCKVxioe63Fy6KDAQ/mmCSOSSRUE/x4zdrMD+7dU8quF3bGpzvP8mOmq4Dgce3nzU9AgkVDotucNOOg7c27BQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/netlify/node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -13819,9 +16329,9 @@ } }, "node_modules/netlify/node_modules/get-port-please": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", - "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", + "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", "dev": true }, "node_modules/netlify/node_modules/get-proto": { @@ -13838,12 +16348,16 @@ } }, "node_modules/netlify/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13881,12 +16395,6 @@ "ini": "^1.3.2" } }, - "node_modules/netlify/node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true - }, "node_modules/netlify/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -13907,42 +16415,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/netlify/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/netlify/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/netlify/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/netlify/node_modules/global-directory": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", @@ -14060,52 +16532,41 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, + "node_modules/netlify/node_modules/got/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/netlify/node_modules/h3": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", - "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", + "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", "dev": true, - "license": "MIT", "dependencies": { "cookie-es": "^1.2.2", - "crossws": "^0.3.4", + "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.0", + "node-mock-http": "^1.0.2", "radix3": "^1.1.2", "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, - "node_modules/netlify/node_modules/h3/node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "uncrypto": "^0.1.3" - } - }, - "node_modules/netlify/node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/netlify/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -14115,15 +16576,6 @@ "node": ">=8" } }, - "node_modules/netlify/node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/netlify/node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -14149,22 +16601,27 @@ } }, "node_modules/netlify/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/netlify/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/netlify/node_modules/hot-shots": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-10.2.1.tgz", - "integrity": "sha512-tmjcyZkG/qADhcdC7UjAp8D7v7W2DOYFgaZ48fYMuayMQmVVUg8fntKmrjes/b40ef6yZ+qt1lB8kuEDfLC4zw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-11.1.0.tgz", + "integrity": "sha512-D4iAs/145g7EJ/wIzBLVANEpysTPthUy/K+4EUIw02YJQTqvzD1vUpYiM3vwR0qPAQj4FhQpQz8wBpY8KDcM0g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -14174,34 +16631,25 @@ } }, "node_modules/netlify/node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true }, "node_modules/netlify/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/http-errors/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/netlify/node_modules/http-proxy": { @@ -14223,7 +16671,6 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -14291,15 +16738,6 @@ "node": ">= 14" } }, - "node_modules/netlify/node_modules/https-proxy-agent/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/netlify/node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -14309,18 +16747,6 @@ "node": ">=10.17.0" } }, - "node_modules/netlify/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/netlify/node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -14342,9 +16768,9 @@ ] }, "node_modules/netlify/node_modules/image-meta": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.0.tgz", - "integrity": "sha512-ZBGjl0ZMEMeOC3Ns0wUF/5UdUmr3qQhBSCniT0LxOgGGIRHiNFOkMtIHB7EOznRU47V2AxPgiVP+s+0/UCU0Hg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.1.tgz", + "integrity": "sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==", "dev": true }, "node_modules/netlify/node_modules/image-size": { @@ -14362,7 +16788,7 @@ "node_modules/netlify/node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -14373,7 +16799,6 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -14382,11 +16807,10 @@ } }, "node_modules/netlify/node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -14407,16 +16831,16 @@ "dev": true }, "node_modules/netlify/node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "dev": true, "dependencies": { + "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", - "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", @@ -14509,12 +16933,6 @@ "node": ">=7.0.0" } }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -14563,6 +16981,12 @@ "node": ">=8" } }, + "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -14590,6 +17014,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/netlify/node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14633,10 +17066,10 @@ "node": ">=7.0.0" } }, - "node_modules/netlify/node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/netlify/node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/netlify/node_modules/inquirer/node_modules/escape-string-regexp": { @@ -14663,64 +17096,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/inquirer/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/netlify/node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/netlify/node_modules/inquirer/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/netlify/node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/netlify/node_modules/inquirer/node_modules/strip-ansi": { @@ -14770,218 +17166,95 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inspect-with-kind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", - "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - } - }, - "node_modules/netlify/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/netlify/node_modules/ipx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipx/-/ipx-2.1.0.tgz", - "integrity": "sha512-AVnPGXJ8L41vjd11Z4akIF2yd14636Klxul3tBySxHA6PKfCOQPxBDkCFK5zcWh0z/keR6toh1eg8qzdBVUgdA==", - "dev": true, - "dependencies": { - "@fastify/accept-negotiator": "^1.1.0", - "citty": "^0.1.5", - "consola": "^3.2.3", - "defu": "^6.1.4", - "destr": "^2.0.2", - "etag": "^1.8.1", - "h3": "^1.10.0", - "image-meta": "^0.2.0", - "listhen": "^1.5.6", - "ofetch": "^1.3.3", - "pathe": "^1.1.2", - "sharp": "^0.32.6", - "svgo": "^3.2.0", - "ufo": "^1.3.2", - "unstorage": "^1.10.1", - "xss": "^1.0.14" - }, - "bin": { - "ipx": "bin/ipx.mjs" - } - }, - "node_modules/netlify/node_modules/ipx/node_modules/@netlify/blobs": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-8.2.0.tgz", - "integrity": "sha512-9djLZHBKsoKk8XCgwWSEPK9QnT8qqxEQGuYh48gFIcNLvpBKkLnHbDZuyUxmNemCfDz7h0HnMXgSPnnUVgARhg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "^14.16.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/ipx/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/netlify/node_modules/ipx/node_modules/unstorage": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", - "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.2", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.6", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } + "node": ">=8" } }, - "node_modules/netlify/node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "node_modules/netlify/node_modules/inspect-with-kind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", + "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/brc-dd" + "dependencies": { + "kind-of": "^6.0.2" } }, - "node_modules/netlify/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/netlify/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/netlify/node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "node_modules/netlify/node_modules/ipx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ipx/-/ipx-3.1.1.tgz", + "integrity": "sha512-7Xnt54Dco7uYkfdAw0r2vCly3z0rSaVhEXMzPvl3FndsTVm5p26j+PO+gyinkYmcsEUvX2Rh7OGK7KzYWRu6BA==", "dev": true, "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" + "@fastify/accept-negotiator": "^2.0.1", + "citty": "^0.1.6", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "etag": "^1.8.1", + "h3": "^1.15.3", + "image-meta": "^0.2.1", + "listhen": "^1.9.0", + "ofetch": "^1.4.1", + "pathe": "^2.0.3", + "sharp": "^0.34.3", + "svgo": "^4.0.0", + "ufo": "^1.6.1", + "unstorage": "^1.16.1", + "xss": "^1.0.15" }, + "bin": { + "ipx": "bin/ipx.mjs" + } + }, + "node_modules/netlify/node_modules/ipx/node_modules/@fastify/accept-negotiator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", + "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/netlify/node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/brc-dd" } }, + "node_modules/netlify/node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "dev": true + }, "node_modules/netlify/node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15014,19 +17287,25 @@ "node_modules/netlify/node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/netlify/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/netlify/node_modules/is-glob": { @@ -15090,10 +17369,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/netlify/node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", "dev": true, "engines": { "node": ">=16" @@ -15103,9 +17391,9 @@ } }, "node_modules/netlify/node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -15159,6 +17447,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -15244,12 +17544,12 @@ } }, "node_modules/netlify/node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.0.tgz", + "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==", "dev": true, "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/netlify/node_modules/jpeg-js": { @@ -15273,18 +17573,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "node_modules/netlify/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/netlify/node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -15301,18 +17589,16 @@ } }, "node_modules/netlify/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "peer": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/netlify/node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -15352,12 +17638,12 @@ } }, "node_modules/netlify/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", "dev": true, "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } @@ -15418,9 +17704,9 @@ "dev": true }, "node_modules/netlify/node_modules/ky": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.2.tgz", - "integrity": "sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.10.0.tgz", + "integrity": "sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==", "dev": true, "engines": { "node": ">=18" @@ -15455,6 +17741,18 @@ "node": ">=14" } }, + "node_modules/netlify/node_modules/lambda-local/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/netlify/node_modules/latest-version": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", @@ -15497,6 +17795,21 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/netlify/node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/netlify/node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/netlify/node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -15526,34 +17839,28 @@ "node": ">= 0.6" } }, - "node_modules/netlify/node_modules/light-my-request/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true - }, "node_modules/netlify/node_modules/listhen": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.6.0.tgz", - "integrity": "sha512-z0RcEXVX5oTpY1bO02SKoTU/kmZSrFSngNNzHRM6KICR17PTq7ANush6AE6ztGJwJD4RLpBrVHd9GnV51J7s3w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", "dev": true, "dependencies": { - "@parcel/watcher": "^2.4.0", - "@parcel/watcher-wasm": "2.4.0", - "citty": "^0.1.5", + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", "clipboardy": "^4.0.0", "consola": "^3.2.3", - "crossws": "^0.1.0", + "crossws": ">=0.2.0 <0.4.0", "defu": "^6.1.4", "get-port-please": "^3.1.2", - "h3": "^1.10.1", + "h3": "^1.12.0", "http-shutdown": "^1.2.2", - "jiti": "^1.21.0", - "mlly": "^1.5.0", + "jiti": "^2.1.2", + "mlly": "^1.7.1", "node-forge": "^1.3.1", "pathe": "^1.1.2", "std-env": "^3.7.0", - "ufo": "^1.3.2", + "ufo": "^1.5.4", "untun": "^0.1.3", "uqr": "^0.1.2" }, @@ -15562,6 +17869,12 @@ "listhen": "bin/listhen.mjs" } }, + "node_modules/netlify/node_modules/listhen/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, "node_modules/netlify/node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -15577,72 +17890,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/locate-path/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/locate-path/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/locate-path/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/netlify/node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.deburr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", - "dev": true - }, "node_modules/netlify/node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -15658,7 +17911,7 @@ "node_modules/netlify/node_modules/lodash.isempty": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", "dev": true }, "node_modules/netlify/node_modules/lodash.isinteger": { @@ -15676,40 +17929,123 @@ "node_modules/netlify/node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/netlify/node_modules/lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", "dev": true }, - "node_modules/netlify/node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "node_modules/netlify/node_modules/log-process-errors": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-11.0.1.tgz", + "integrity": "sha512-HXYU83z3kH0VHfJgGyv9ZP9z7uNEayssgvpeQwSzh60mvpNqUBCPyXLSzCDSMxfGvAUUa0Kw06wJjVR46Ohd3A==", + "dev": true, + "dependencies": { + "is-error-instance": "^2.0.0", + "is-plain-obj": "^4.1.0", + "normalize-exception": "^3.0.0", + "set-error-message": "^2.0.1" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/netlify/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "node_modules/netlify/node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "node_modules/netlify/node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "node_modules/netlify/node_modules/lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "dev": true + "node_modules/netlify/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/netlify/node_modules/log-process-errors": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-11.0.1.tgz", - "integrity": "sha512-HXYU83z3kH0VHfJgGyv9ZP9z7uNEayssgvpeQwSzh60mvpNqUBCPyXLSzCDSMxfGvAUUa0Kw06wJjVR46Ohd3A==", + "node_modules/netlify/node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "is-error-instance": "^2.0.0", - "is-plain-obj": "^4.1.0", - "normalize-exception": "^3.0.0", - "set-error-message": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.17.0" + "node": ">=8" } }, "node_modules/netlify/node_modules/log-update": { @@ -15746,27 +18082,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true - }, - "node_modules/netlify/node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/log-update/node_modules/onetime": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", @@ -15810,67 +18125,21 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/netlify/node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/netlify/node_modules/logform": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", - "integrity": "sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "dev": true, "dependencies": { - "@colors/colors": "1.5.0", + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" } }, "node_modules/netlify/node_modules/lowercase-keys": { @@ -15885,25 +18154,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, "node_modules/netlify/node_modules/luxon": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz", - "integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/netlify/node_modules/macos-release": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.3.0.tgz", - "integrity": "sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", + "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -15913,12 +18176,12 @@ } }, "node_modules/netlify/node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "dev": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/netlify/node_modules/make-dir": { @@ -15926,7 +18189,6 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -15993,15 +18255,15 @@ } }, "node_modules/netlify/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", "dev": true }, "node_modules/netlify/node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -16061,18 +18323,12 @@ "node_modules/netlify/node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/netlify/node_modules/micro-api-client": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", - "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==", - "dev": true - }, "node_modules/netlify/node_modules/micro-memoize": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.3.tgz", @@ -16097,7 +18353,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -16106,21 +18361,21 @@ } }, "node_modules/netlify/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/netlify/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -16138,6 +18393,15 @@ "node": ">= 0.6" } }, + "node_modules/netlify/node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/netlify/node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -16174,6 +18438,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/netlify/node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -16193,9 +18472,9 @@ } }, "node_modules/netlify/node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "dependencies": { "minipass": "^7.1.2" @@ -16204,32 +18483,18 @@ "node": ">= 18" } }, - "node_modules/netlify/node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, "node_modules/netlify/node_modules/mlly": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", - "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", "dev": true, - "license": "MIT", "dependencies": { - "acorn": "^8.14.0", - "pathe": "^2.0.1", - "pkg-types": "^1.3.0", - "ufo": "^1.5.4" + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" } }, - "node_modules/netlify/node_modules/mlly/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/netlify/node_modules/module-definition": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", @@ -16271,15 +18536,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/move-file/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/netlify/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -16300,25 +18556,39 @@ "node": ">= 0.10" } }, - "node_modules/netlify/node_modules/multiparty/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/netlify/node_modules/multiparty/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/multiparty/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netlify/node_modules/multiparty/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/netlify/node_modules/mute-stream": { "version": "0.0.8", @@ -16327,16 +18597,16 @@ "dev": true }, "node_modules/netlify/node_modules/nan": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", - "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", "dev": true, "optional": true }, "node_modules/netlify/node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -16344,7 +18614,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -16361,12 +18630,6 @@ "picocolors": "^1.1.1" } }, - "node_modules/netlify/node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, "node_modules/netlify/node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -16382,18 +18645,6 @@ "integrity": "sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==", "dev": true }, - "node_modules/netlify/node_modules/node-abi": { - "version": "3.51.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", - "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/netlify/node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -16404,6 +18655,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "funding": [ { @@ -16438,9 +18690,9 @@ } }, "node_modules/netlify/node_modules/node-fetch-native": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", - "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", "dev": true }, "node_modules/netlify/node_modules/node-forge": { @@ -16464,9 +18716,9 @@ } }, "node_modules/netlify/node_modules/node-mock-http": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", - "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.3.tgz", + "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", "dev": true }, "node_modules/netlify/node_modules/node-source-walk": { @@ -16486,7 +18738,6 @@ "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" }, @@ -16524,18 +18775,17 @@ } }, "node_modules/netlify/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.1.tgz", + "integrity": "sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^7.0.0", + "hosted-git-info": "^8.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/netlify/node_modules/normalize-path": { @@ -16548,9 +18798,9 @@ } }, "node_modules/netlify/node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "dev": true, "engines": { "node": ">=14.16" @@ -16597,7 +18847,6 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16620,8 +18869,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/netlify/node_modules/on-exit-leak-free": { "version": "2.1.2", @@ -16645,9 +18893,9 @@ } }, "node_modules/netlify/node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, "engines": { "node": ">= 0.8" @@ -16656,7 +18904,7 @@ "node_modules/netlify/node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" @@ -16696,15 +18944,15 @@ } }, "node_modules/netlify/node_modules/open": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", - "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -16713,6 +18961,117 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/netlify/node_modules/os-name": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.1.0.tgz", @@ -16729,15 +19088,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/netlify/node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -16748,63 +19098,73 @@ } }, "node_modules/netlify/node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, "dependencies": { - "p-timeout": "^5.0.2" + "p-timeout": "^6.1.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16.17" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/netlify/node_modules/p-event/node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/p-every": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-every/-/p-every-2.0.0.tgz", - "integrity": "sha512-MCz9DqD5opPC48Zsd+BHm56O/HfhYIQQtupfDzhXoVgQdg/Ux4F8/JcdRuQ+arq7zD5fB6zP3axbH3d9Nr8dlw==", + "node_modules/netlify/node_modules/p-filter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "dependencies": { - "p-map": "^2.0.0" + "p-map": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/p-every/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/netlify/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", + "node_modules/netlify/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "p-map": "^7.0.1" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -16851,18 +19211,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/p-wait-for": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", @@ -16878,6 +19226,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/p-wait-for/node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/package-directory": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/package-directory/-/package-directory-8.1.0.tgz", @@ -16943,6 +19304,21 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/netlify/node_modules/parallel-transform/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/netlify/node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/netlify/node_modules/parse-github-url": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", @@ -16969,7 +19345,6 @@ "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", "dev": true, - "license": "Apache-2.0 AND MIT", "dependencies": { "es-module-lexer": "^1.5.3", "slashes": "^3.0.12" @@ -16983,27 +19358,13 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -17030,6 +19391,15 @@ "node": ">= 0.8" } }, + "node_modules/netlify/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/netlify/node_modules/path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", @@ -17064,6 +19434,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/netlify/node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/netlify/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, "node_modules/netlify/node_modules/path-type": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", @@ -17077,15 +19459,15 @@ } }, "node_modules/netlify/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true }, "node_modules/netlify/node_modules/peek-readable": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", - "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", + "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", "dev": true, "engines": { "node": ">=14.16" @@ -17098,20 +19480,19 @@ "node_modules/netlify/node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "node_modules/netlify/node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/netlify/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "engines": { "node": ">=12" @@ -17120,19 +19501,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/netlify/node_modules/picoquery": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/picoquery/-/picoquery-2.5.0.tgz", + "integrity": "sha512-j1kgOFxtaCyoFCkpoYG2Oj3OdGakadO7HZ7o5CqyRazlmBekKhbDoUnNnXASE07xSY4nDImWZkrZv7toSxMi/g==", + "dev": true + }, "node_modules/netlify/node_modules/pino": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz", - "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.11.0.tgz", + "integrity": "sha512-+YIodBB9sxcWeR8PrXC2K3gEDyfkUuVEITOcbqrfcj+z5QW4ioIcqZfYFbrLTYLsmAwunbS7nfU/dpBB6PZc1g==", "dev": true, - "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", - "process-warning": "^4.0.0", + "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", @@ -17143,13 +19529,7 @@ "pino": "bin.js" } }, - "node_modules/netlify/node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "dev": true - }, - "node_modules/netlify/node_modules/pino/node_modules/pino-abstract-transport": { + "node_modules/netlify/node_modules/pino-abstract-transport": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", @@ -17158,10 +19538,25 @@ "split2": "^4.0.0" } }, + "node_modules/netlify/node_modules/pino-abstract-transport/node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/netlify/node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "dev": true + }, "node_modules/netlify/node_modules/pino/node_modules/process-warning": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", - "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", "dev": true, "funding": [ { @@ -17174,47 +19569,21 @@ } ] }, - "node_modules/netlify/node_modules/pino/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", - "dev": true, - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/netlify/node_modules/pino/node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, "node_modules/netlify/node_modules/pkg-types": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, - "license": "MIT", "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, - "node_modules/netlify/node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, "node_modules/netlify/node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -17231,7 +19600,7 @@ } ], "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -17256,73 +19625,6 @@ "postcss": "^8.2.9" } }, - "node_modules/netlify/node_modules/postcss-values-parser/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/netlify/node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/prebuild-install/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/netlify/node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/netlify/node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/netlify/node_modules/precinct": { "version": "12.2.0", "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", @@ -17355,16 +19657,16 @@ "node_modules/netlify/node_modules/precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", + "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/netlify/node_modules/pretty-ms": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", - "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "dependencies": { "parse-ms": "^4.0.0" @@ -17394,7 +19696,6 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -17405,6 +19706,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/netlify/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "dev": true + }, "node_modules/netlify/node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -17437,29 +19744,19 @@ } }, "node_modules/netlify/node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/netlify/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/netlify/node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", "dev": true, "dependencies": { "escape-goat": "^4.0.0" @@ -17539,7 +19836,7 @@ "node_modules/netlify/node_modules/random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", "dev": true, "engines": { "node": ">= 0.8" @@ -17555,55 +19852,34 @@ } }, "node_modules/netlify/node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.6.3", + "iconv-lite": "0.7.0", "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/raw-body/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/netlify/node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/netlify/node_modules/rc": { @@ -17647,19 +19923,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/read-package-up/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/read-pkg": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", @@ -17679,40 +19942,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/read-pkg/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/netlify/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=16" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/netlify/node_modules/read-pkg/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/netlify/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/netlify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/netlify/node_modules/readable-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "node_modules/netlify/node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz", + "integrity": "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==", "dev": true, "dependencies": { - "readable-stream": "^3.6.0" + "readable-stream": "^4.7.0" }, "engines": { "node": ">=8" @@ -17727,27 +20035,15 @@ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } }, - "node_modules/netlify/node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/netlify/node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17778,9 +20074,9 @@ } }, "node_modules/netlify/node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "dev": true, "dependencies": { "@pnpm/npm-conf": "^2.1.0" @@ -17810,19 +20106,10 @@ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, - "node_modules/netlify/node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/netlify/node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -17846,7 +20133,7 @@ "node_modules/netlify/node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "node_modules/netlify/node_modules/resolve": { @@ -17909,20 +20196,28 @@ "node": ">=8" } }, + "node_modules/netlify/node_modules/ret": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", + "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/netlify/node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/netlify/node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "engines": { "iojs": ">=1.0.0", @@ -17936,15 +20231,14 @@ "dev": true }, "node_modules/netlify/node_modules/rollup": { - "version": "4.41.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", - "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", + "integrity": "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==", "dev": true, - "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@types/estree": "1.0.7" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -17954,33 +20248,35 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.41.1", - "@rollup/rollup-android-arm64": "4.41.1", - "@rollup/rollup-darwin-arm64": "4.41.1", - "@rollup/rollup-darwin-x64": "4.41.1", - "@rollup/rollup-freebsd-arm64": "4.41.1", - "@rollup/rollup-freebsd-x64": "4.41.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", - "@rollup/rollup-linux-arm-musleabihf": "4.41.1", - "@rollup/rollup-linux-arm64-gnu": "4.41.1", - "@rollup/rollup-linux-arm64-musl": "4.41.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", - "@rollup/rollup-linux-riscv64-gnu": "4.41.1", - "@rollup/rollup-linux-riscv64-musl": "4.41.1", - "@rollup/rollup-linux-s390x-gnu": "4.41.1", - "@rollup/rollup-linux-x64-gnu": "4.41.1", - "@rollup/rollup-linux-x64-musl": "4.41.1", - "@rollup/rollup-win32-arm64-msvc": "4.41.1", - "@rollup/rollup-win32-ia32-msvc": "4.41.1", - "@rollup/rollup-win32-x64-msvc": "4.41.1", + "@rollup/rollup-android-arm-eabi": "4.52.2", + "@rollup/rollup-android-arm64": "4.52.2", + "@rollup/rollup-darwin-arm64": "4.52.2", + "@rollup/rollup-darwin-x64": "4.52.2", + "@rollup/rollup-freebsd-arm64": "4.52.2", + "@rollup/rollup-freebsd-x64": "4.52.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", + "@rollup/rollup-linux-arm-musleabihf": "4.52.2", + "@rollup/rollup-linux-arm64-gnu": "4.52.2", + "@rollup/rollup-linux-arm64-musl": "4.52.2", + "@rollup/rollup-linux-loong64-gnu": "4.52.2", + "@rollup/rollup-linux-ppc64-gnu": "4.52.2", + "@rollup/rollup-linux-riscv64-gnu": "4.52.2", + "@rollup/rollup-linux-riscv64-musl": "4.52.2", + "@rollup/rollup-linux-s390x-gnu": "4.52.2", + "@rollup/rollup-linux-x64-gnu": "4.52.2", + "@rollup/rollup-linux-x64-musl": "4.52.2", + "@rollup/rollup-openharmony-arm64": "4.52.2", + "@rollup/rollup-win32-arm64-msvc": "4.52.2", + "@rollup/rollup-win32-ia32-msvc": "4.52.2", + "@rollup/rollup-win32-x64-gnu": "4.52.2", + "@rollup/rollup-win32-x64-msvc": "4.52.2", "fsevents": "~2.3.2" } }, "node_modules/netlify/node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, "engines": { "node": ">=18" @@ -18030,17 +20326,25 @@ "tslib": "^2.1.0" } }, - "node_modules/netlify/node_modules/rxjs/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, "node_modules/netlify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/netlify/node_modules/safe-json-stringify": { "version": "1.2.0", @@ -18057,19 +20361,10 @@ "ret": "~0.4.0" } }, - "node_modules/netlify/node_modules/safe-regex2/node_modules/ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/netlify/node_modules/safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", - "integrity": "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, "engines": { "node": ">=10" @@ -18081,6 +20376,12 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/netlify/node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true + }, "node_modules/netlify/node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", @@ -18107,9 +20408,9 @@ "dev": true }, "node_modules/netlify/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -18157,15 +20458,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/netlify/node_modules/send/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/netlify/node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -18175,20 +20467,16 @@ "node": ">= 0.8" } }, - "node_modules/netlify/node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/netlify/node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, "node_modules/netlify/node_modules/serve-static": { @@ -18207,9 +20495,9 @@ } }, "node_modules/netlify/node_modules/set-cookie-parser": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz", - "integrity": "sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", "dev": true }, "node_modules/netlify/node_modules/set-error-message": { @@ -18231,65 +20519,47 @@ "dev": true }, "node_modules/netlify/node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", "dev": true, "hasInstallScript": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" }, "engines": { - "node": ">=14.15.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/sharp/node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/netlify/node_modules/sharp/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" }, - "engines": { - "node": ">=7.0.0" + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" } }, - "node_modules/netlify/node_modules/sharp/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/netlify/node_modules/sharp/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true - }, "node_modules/netlify/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -18389,66 +20659,15 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/netlify/node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/netlify/node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", "dev": true, "dependencies": { "is-arrayish": "^0.3.1" } }, - "node_modules/netlify/node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "node_modules/netlify/node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -18465,8 +20684,32 @@ "version": "3.0.12", "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true + }, + "node_modules/netlify/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, - "license": "ISC" + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/netlify/node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } }, "node_modules/netlify/node_modules/sort-keys": { "version": "1.1.2", @@ -18483,7 +20726,7 @@ "node_modules/netlify/node_modules/sort-keys-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, "dependencies": { "sort-keys": "^1.0.0" @@ -18556,9 +20799,9 @@ } }, "node_modules/netlify/node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true }, "node_modules/netlify/node_modules/split2": { @@ -18582,7 +20825,7 @@ "node_modules/netlify/node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true, "engines": { "node": "*" @@ -18604,35 +20847,50 @@ } }, "node_modules/netlify/node_modules/std-env": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.1.tgz", - "integrity": "sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==", - "dev": true, - "license": "MIT" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true }, "node_modules/netlify/node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/netlify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/netlify/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/netlify/node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", @@ -18646,34 +20904,31 @@ "node": ">=8" } }, - "node_modules/netlify/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/netlify/node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/netlify/node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/netlify/node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/netlify/node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/netlify/node_modules/string-width/node_modules/strip-ansi": { + "node_modules/netlify/node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -18686,9 +20941,9 @@ } }, "node_modules/netlify/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" @@ -18713,16 +20968,13 @@ "node": ">=8" } }, - "node_modules/netlify/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/netlify/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/netlify/node_modules/strip-dirs": { @@ -18753,17 +21005,29 @@ "node": ">=6" } }, + "node_modules/netlify/node_modules/strip-outer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", + "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/strtok3": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz", - "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz", + "integrity": "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==", "dev": true, "dependencies": { "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" + "peek-readable": "^5.1.3" }, "engines": { - "node": ">=14.16" + "node": ">=16" }, "funding": { "type": "github", @@ -18777,9 +21041,9 @@ "dev": true }, "node_modules/netlify/node_modules/supports-color": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", - "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", "dev": true, "engines": { "node": ">=18" @@ -18793,7 +21057,6 @@ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -18810,7 +21073,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18831,24 +21093,24 @@ } }, "node_modules/netlify/node_modules/svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", "dev": true, "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", + "commander": "^11.1.0", "css-select": "^5.1.0", - "css-tree": "^2.3.1", + "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1", + "sax": "^1.4.1" }, "bin": { - "svgo": "bin/svgo" + "svgo": "bin/svgo.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=16" }, "funding": { "type": "opencollective", @@ -18856,12 +21118,12 @@ } }, "node_modules/netlify/node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=16" } }, "node_modules/netlify/node_modules/system-architecture": { @@ -18877,37 +21139,21 @@ } }, "node_modules/netlify/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "dev": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { "node": ">=18" } }, - "node_modules/netlify/node_modules/tar-fs": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", - "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^4.0.1", - "bare-path": "^3.0.0" - } - }, "node_modules/netlify/node_modules/tar-stream": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", @@ -18919,19 +21165,13 @@ "streamx": "^2.15.0" } }, - "node_modules/netlify/node_modules/tar/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/netlify/node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, "node_modules/netlify/node_modules/terminal-link": { @@ -18939,7 +21179,6 @@ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", "supports-hyperlinks": "^3.2.0" @@ -18978,7 +21217,7 @@ "node_modules/netlify/node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/netlify/node_modules/through2": { @@ -18986,7 +21225,6 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -18997,7 +21235,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19008,16 +21245,28 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/netlify/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/netlify/node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/netlify/node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "os-tmpdir": "~1.0.2" - }, + "safe-buffer": "~5.1.0" + } + }, + "node_modules/netlify/node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, "engines": { - "node": ">=0.6.0" + "node": ">=14.14" } }, "node_modules/netlify/node_modules/tmp-promise": { @@ -19029,15 +21278,6 @@ "tmp": "^0.2.0" } }, - "node_modules/netlify/node_modules/tmp-promise/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, "node_modules/netlify/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19103,18 +21343,32 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, + "node_modules/netlify/node_modules/trim-repeated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", + "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/netlify/node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "dev": true, + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/netlify/node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12" }, @@ -19166,21 +21420,21 @@ } }, "node_modules/netlify/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, - "node_modules/netlify/node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "node_modules/netlify/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, "engines": { - "node": "*" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/netlify/node_modules/type-is": { @@ -19201,7 +21455,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19214,8 +21467,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/netlify/node_modules/uid-safe": { "version": "2.1.5", @@ -19230,9 +21482,9 @@ } }, "node_modules/netlify/node_modules/ulid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.0.tgz", - "integrity": "sha512-yvZYdXInnJve6LdlPIuYmURdS2NP41ZoF4QW7SXwbUKYt53+0eDAySO+rGSvM2O/ciuB/G+8N7GQrZ1mCJpuqw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.1.tgz", + "integrity": "sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==", "dev": true, "bin": { "ulid": "dist/cli.js" @@ -19255,11 +21507,10 @@ "dev": true }, "node_modules/netlify/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true }, "node_modules/netlify/node_modules/unicorn-magic": { "version": "0.1.0", @@ -19274,21 +21525,22 @@ } }, "node_modules/netlify/node_modules/universal-user-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", - "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", - "dev": true + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true, + "license": "ISC" }, "node_modules/netlify/node_modules/unix-dgram": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.6.tgz", - "integrity": "sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.7.tgz", + "integrity": "sha512-pWaQorcdxEUBFIKjCqqIlQaOoNVmchyoaNAJ/1LwyyfK2XSxcBhgJNiSE8ZRhR0xkNGyk4xInt1G03QPoKXY5A==", "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { "bindings": "^1.5.0", - "nan": "^2.16.0" + "nan": "^2.20.0" }, "engines": { "node": ">=0.10.48" @@ -19318,14 +21570,116 @@ "node": ">=0.10.0" } }, - "node_modules/netlify/node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "node_modules/netlify/node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/netlify/node_modules/unstorage": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", + "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", + "dev": true, + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.4", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/netlify/node_modules/unstorage/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/netlify/node_modules/untildify": { "version": "4.0.0", @@ -19350,6 +21704,12 @@ "untun": "bin/untun.mjs" } }, + "node_modules/netlify/node_modules/untun/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, "node_modules/netlify/node_modules/update-notifier": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", @@ -19380,16 +21740,6 @@ "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", "dev": true }, - "node_modules/netlify/node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/netlify/node_modules/urlpattern-polyfill": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", @@ -19399,13 +21749,13 @@ "node_modules/netlify/node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "node_modules/netlify/node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "engines": { "node": ">= 0.4.0" @@ -19420,7 +21770,6 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } @@ -19446,7 +21795,6 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -19454,7 +21802,7 @@ "node_modules/netlify/node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "engines": { "node": ">= 0.8" @@ -19520,12 +21868,6 @@ "node": ">=7.0.0" } }, - "node_modules/netlify/node_modules/wait-port/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/netlify/node_modules/wait-port/node_modules/commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", @@ -19557,9 +21899,9 @@ } }, "node_modules/netlify/node_modules/web-streams-polyfill": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", - "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, "engines": { "node": ">= 8" @@ -19582,9 +21924,9 @@ } }, "node_modules/netlify/node_modules/when-exit": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.3.tgz", - "integrity": "sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", + "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==", "dev": true }, "node_modules/netlify/node_modules/which": { @@ -19623,29 +21965,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/netlify/node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true - }, - "node_modules/netlify/node_modules/widest-line/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/netlify/node_modules/windows-release": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.1.0.tgz", @@ -19772,48 +22091,53 @@ } }, "node_modules/netlify/node_modules/winston": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", - "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "dev": true, "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.4.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" + "winston-transport": "^4.9.0" }, "engines": { "node": ">= 12.0.0" } }, "node_modules/netlify/node_modules/winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "dev": true, "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "logform": "^2.7.0", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, "engines": { "node": ">= 12.0.0" } }, - "node_modules/netlify/node_modules/winston/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "node_modules/netlify/node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=0.1.90" + "node": ">= 6" } }, "node_modules/netlify/node_modules/winston/node_modules/is-stream": { @@ -19828,18 +22152,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/netlify/node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/netlify/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -19863,6 +22201,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -19890,58 +22237,36 @@ "node": ">=7.0.0" } }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/netlify/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" } }, - "node_modules/netlify/node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/netlify/node_modules/wrap-ansi/node_modules/strip-ansi": { + "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -19956,7 +22281,7 @@ "node_modules/netlify/node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/netlify/node_modules/write-file-atomic": { @@ -19985,9 +22310,9 @@ } }, "node_modules/netlify/node_modules/ws": { - "version": "8.18.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", - "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -20005,6 +22330,21 @@ } } }, + "node_modules/netlify/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/netlify/node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", @@ -20018,9 +22358,9 @@ } }, "node_modules/netlify/node_modules/xss": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz", - "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", "dev": true, "dependencies": { "commander": "^2.20.3", @@ -20057,19 +22397,10 @@ "node": ">=10" } }, - "node_modules/netlify/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "engines": { - "node": ">=18" - } - }, "node_modules/netlify/node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -20105,18 +22436,42 @@ "node": ">=12" } }, - "node_modules/netlify/node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/netlify/node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/netlify/node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/netlify/node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" } }, "node_modules/netlify/node_modules/yargs/node_modules/strip-ansi": { @@ -20134,131 +22489,66 @@ "node_modules/netlify/node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "node_modules/netlify/node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/zip-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", - "dev": true, - "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/zip-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node_modules/netlify/node_modules/yauzl/node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" } }, - "node_modules/netlify/node_modules/zip-stream/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "node_modules/netlify/node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/netlify/node_modules/zip-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/netlify/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/netlify/node_modules/zip-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/netlify/node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/netlify/node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/netlify/site": { - "name": "cli-docs-site", - "version": "1.0.0", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@astrojs/starlight": "^0.31.1", - "astro": "^5.1.5", - "markdown-magic": "2.6.1", - "sharp": "^0.32.5", - "strip-ansi": "7.1.0" - } - }, - "node_modules/netlify/tools/lint-rules": { - "name": "eslint-plugin-workspace", - "extraneous": true - }, "node_modules/nlcst-to-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", @@ -20309,6 +22599,26 @@ "dev": true, "license": "MIT" }, + "node_modules/node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true, + "license": "MIT" + }, "node_modules/node-mock-http": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.1.tgz", @@ -20316,6 +22626,16 @@ "dev": true, "license": "MIT" }, + "node_modules/node-webtokens": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-webtokens/-/node-webtokens-1.0.4.tgz", + "integrity": "sha512-Sla56CeSLWvPbwud2kogqf5edQtKNXZBtXDDpmOzAgNZjwETbK/Am6PXfs54iZPLBm8K8amZ9XWaCQwGqZmKyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -20374,6 +22694,45 @@ "dev": true, "license": "MIT" }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/oniguruma-parser": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", @@ -20492,6 +22851,23 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -20502,6 +22878,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/path-scurry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -20519,6 +22902,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-sort": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-sort/-/path-sort-0.1.0.tgz", + "integrity": "sha512-70MSq7edKtbODYKkqXYzSMQxtYMjDgP3K6D15Fu4KUvpyBPlxDWPvv8JI9GjNDF2K5baPHFEtlg818dOmf2ifg==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true, + "license": "MIT" + }, "node_modules/peek-readable": { "version": "5.4.2", "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", @@ -20552,6 +22949,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -20646,6 +23073,20 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -20655,6 +23096,19 @@ "node": ">=6" } }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/purgecss": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-7.0.2.tgz", @@ -20668,33 +23122,107 @@ "postcss-selector-parser": "^6.1.2" }, "bin": { - "purgecss": "bin/purgecss.js" + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/query-string": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.3.1.tgz", + "integrity": "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.4.1", + "filter-obj": "^5.1.0", + "split-on-first": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/query-string": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.1.tgz", - "integrity": "sha512-3jTGGLRzlhu/1ws2zlr4Q+GVMLCQTLFOj8CMX5x44cdZG9FQE07x2mQhaNxaKVPNmIDu0mvJ/cEwtY7Pim7hqA==", + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/reachdown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reachdown/-/reachdown-1.1.0.tgz", + "integrity": "sha512-6LsdRe4cZyOjw4NnvbhUd/rGG7WQ9HMopPr+kyL018Uci4kijtxcGR5kVb5Ln13k4PEE+fEFQbjfOvNw7cnXmA==", + "dev": true, "license": "MIT", - "dependencies": { - "decode-uri-component": "^0.4.1", - "filter-obj": "^5.1.0", - "split-on-first": "^3.0.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", - "dev": true, - "license": "MIT" - }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -20855,6 +23383,32 @@ "dev": true, "license": "MIT" }, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/rehype": { "version": "13.0.2", "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", @@ -21015,12 +23569,61 @@ "seq": ">= 0.3.5" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, "node_modules/reselect": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==", "license": "MIT" }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/restructure": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", @@ -21105,6 +23708,13 @@ "node": ">=8" } }, + "node_modules/rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { "version": "4.44.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", @@ -21145,6 +23755,108 @@ "fsevents": "~2.3.2" } }, + "node_modules/router": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", + "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/router/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-series": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", + "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/run-waterfall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", + "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -21196,6 +23908,71 @@ "node": ">=10" } }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/seq": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", @@ -21209,6 +23986,13 @@ "node": "*" } }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true, + "license": "ISC" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -21232,6 +24016,65 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "license": "MIT" }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sha/-/sha-3.0.0.tgz", + "integrity": "sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT)", + "dependencies": { + "graceful-fs": "^4.1.2" + } + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sha.js/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/sharp": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", @@ -21337,6 +24180,53 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -21368,6 +24258,16 @@ "url": "https://github.com/sponsors/cyyynthia" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -21378,6 +24278,28 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-resolve/node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -21401,6 +24323,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -21529,6 +24461,16 @@ "node": ">=8" } }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strtok3": { "version": "10.3.4", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", @@ -21545,18 +24487,92 @@ "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/subsonic-api": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/subsonic-api/-/subsonic-api-3.1.2.tgz", - "integrity": "sha512-EPuqd+z/6v/AbZhd25/5AN+QWsdFQ9K1SHd3N9PIN7Jheo9+L2bsmrbpjJ7D/AgnrmiSmlwhdfnkiaC83hVsfQ==", + "node_modules/subleveldown": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/subleveldown/-/subleveldown-5.0.1.tgz", + "integrity": "sha512-cVqd/URpp7si1HWu5YqQ3vqQkjuolAwHypY1B4itPlS71/lsf6TQPZ2Y0ijT22EYVkvH5ove9JFJf4u7VGPuZw==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, "license": "MIT", "dependencies": { - "typescript": "^5.7.3" + "abstract-leveldown": "^6.3.0", + "encoding-down": "^6.2.0", + "inherits": "^2.0.3", + "level-option-wrap": "^1.1.0", + "levelup": "^4.4.0", + "reachdown": "^1.1.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/subleveldown/node_modules/abstract-leveldown": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", + "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/subleveldown/node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/subsonic-api": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/subsonic-api/-/subsonic-api-3.2.0.tgz", + "integrity": "sha512-BADBQ2hONdLb3agCiSDzNzTIFLWJAuxJTUJvC2zDFvXUVfnK3yy7r8xFu3NkrQl8p5UVI7q8Qfm62N1lFxWbww==", + "license": "MIT", "engines": { "node": ">=18" } }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symlink-or-copy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", + "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", + "dev": true, + "license": "MIT" + }, "node_modules/then-read-stream": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/then-read-stream/-/then-read-stream-1.5.1.tgz", @@ -21583,6 +24599,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-json-http": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tiny-json-http/-/tiny-json-http-7.5.1.tgz", + "integrity": "sha512-lB7qkBGpL3HR/8gidBu3MMfgfnDj2mlvK/eYXgSbO06gKphemLKGp/TgRTy/BKVD7nCbgIeCm41lMNayXO1f2w==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", @@ -21613,13 +24636,65 @@ "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==", "license": "ISC" }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-buffer/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -21627,6 +24702,16 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/token-types": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", @@ -21671,6 +24756,16 @@ "node": "*" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -21721,6 +24816,16 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, "node_modules/type-fest": { "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", @@ -21734,6 +24839,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -21747,22 +24867,37 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=14.17" + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dev": true, + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, "node_modules/uint8array-extras": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", @@ -21859,6 +24994,19 @@ "ohash": "^2.0.0" } }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/unist-util-find-after": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", @@ -21991,6 +25139,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unstorage": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", @@ -22091,6 +25249,205 @@ "dev": true, "license": "ISC" }, + "node_modules/update-notifier-cjs": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/update-notifier-cjs/-/update-notifier-cjs-5.1.7.tgz", + "integrity": "sha512-eZWTh8F+VCEoC4UIh0pKmh8h4izj65VvLhCpJpVefUxdYe0fU3GBrC4Sbh1AoWA/miNPAb6UVlp2fUQNsfp+3g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "isomorphic-fetch": "^3.0.0", + "pupa": "^2.1.1", + "registry-auth-token": "^5.0.1", + "registry-url": "^5.1.0", + "semver": "^7.3.7", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/update-notifier-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/update-notifier-cjs/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier-cjs/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier-cjs/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/update-notifier-cjs/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-notifier-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier-cjs/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier-cjs/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier-cjs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -22139,17 +25496,14 @@ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "license": "ISC" }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">= 0.4.0" } }, "node_modules/vfile": { @@ -22403,6 +25757,13 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "license": "MIT" + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -22440,6 +25801,28 @@ "node": ">=4" } }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/widest-line": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", @@ -22560,6 +25943,75 @@ "node": ">=8" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/xxh32": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/xxh32/-/xxh32-2.0.5.tgz", diff --git a/package.json b/package.json index 5cd452810..7f058b8c7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,12 @@ { "dependencies": { - "@automerge/automerge": "^3.0.0-beta.0", + "@automerge/automerge": "^3.1.2", "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", + "@enhance/base-element": "^1.3.2", + "@enhance/element": "^1.4.6", + "@enhance/event-handler-mixin": "^1.0.4", + "@enhance/morphdom-mixin": "^1.1.3", + "@enhance/shadow-element-mixin": "^1.0.2", "@js-temporal/polyfill": "^0.5.1", "@lift-html/alien": "^0.0.1", "@okikio/sharedworker": "^1.1.0", @@ -15,14 +20,14 @@ "@tokenizer/range": "^0.13.0", "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", "98.css": "^0.1.21", - "alien-signals": "^2.0.7", + "alien-signals": "^3.0.0", "comlink": "^4.4.2", "fast-average-color": "^9.5.0", "iconoir": "^7.11.0", "idb-keyval": "^6.2.1", - "music-metadata": "^11.2.3", - "query-string": "^9.1.2", - "subsonic-api": "^3.1.2", + "music-metadata": "^11.9.0", + "query-string": "^9.3.1", + "subsonic-api": "^3.2.0", "throttle-debounce": "^5.0.2", "uint8arrays": "^5.1.0", "uri-js": "^4.4.1", @@ -30,12 +35,18 @@ "xxh32": "^2.0.5" }, "devDependencies": { + "@enhance/arc-plugin-enhance": "^11.0.4", + "@enhance/arc-plugin-styles": "^5.0.5", + "@enhance/cli": "^1.2.1", + "@enhance/plugin-typescript": "^0.2.2", + "@enhance/styles-cribsheet": "^0.0.11", + "@enhance/types": "^0.7.0", "@types/throttle-debounce": "^5.0.2", "@types/wicg-file-system-access": "^2023.10.6", "astro": "^5.7.4", "astro-purgecss": "^5.2.2", "astro-scope": "^3.0.1", - "netlify": "^22.1.0", + "netlify": "^23.9.1", "purgecss": "^7.0.2", "sass": "^1.87.0", "vite-plugin-wasm": "^3.4.1", From d435afbecace18a4995a8a4a28a9740fc18cfd2b Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 11 Oct 2025 23:45:40 +0200 Subject: [PATCH 015/244] feat: setup lume --- .arc | 7 - .astro/content-assets.mjs | 1 - .astro/content-modules.mjs | 1 - .astro/content.d.ts | 207 - .astro/data-store.json | 1 - .astro/settings.json | 8 - .astro/types.d.ts | 2 - .gitignore | 7 +- .npmrc | 1 - .zed/settings.json | 41 + .zed/tasks.json | 7 + README.md | 2 +- {src => _backup}/components/Applet.astro | 0 {src => _backup}/components/List.astro | 0 {src => _backup}/content.config.ts | 0 {src => _backup}/env.d.ts | 0 {src => _backup}/layouts/applet-pico-ui.astro | 0 {src => _backup}/layouts/applet.astro | 0 {src => _backup}/layouts/page.astro | 0 {src => _backup}/pages/[...manifest].json.ts | 0 .../pages/configurator/input/_applet.astro | 0 .../pages/configurator/input/_manifest.json | 0 .../pages/configurator/input/index.astro | 0 .../pages/configurator/output/_applet.astro | 0 .../pages/configurator/output/_manifest.json | 0 .../pages/configurator/output/index.astro | 0 .../blur/artwork-controller/_applet.astro | 0 .../blur/artwork-controller/_manifest.json | 0 .../blur/artwork-controller/index.astro | 0 .../constituent/blur/browser/_applet.astro | 0 .../constituent/blur/browser/_manifest.json | 0 .../constituent/blur/browser/index.astro | 0 {app/common => _backup/pages}/core/types.d.ts | 0 .../pages/demo/s3-tracks/index.astro | 0 .../pages/engine/audio/_applet.astro | 0 .../pages/engine/audio/_manifest.json | 0 .../pages/engine/audio/index.astro | 0 .../pages/engine/audio/types.d.ts | 0 .../pages/engine/queue/_applet.astro | 0 .../pages/engine/queue/_manifest.json | 0 .../pages/engine/queue/index.astro | 0 .../pages/engine/queue/types.d.ts | 0 {src => _backup}/pages/index.astro | 0 .../pages/input/native-fs/_applet.astro | 0 .../pages/input/native-fs/_manifest.json | 0 .../pages/input/native-fs/index.astro | 0 .../pages/input/opensubsonic/_applet.astro | 0 .../pages/input/opensubsonic/_manifest.json | 0 .../pages/input/opensubsonic/index.astro | 0 .../pages/input/opensubsonic/types.d.ts | 0 {src => _backup}/pages/input/s3/_applet.astro | 0 .../pages/input/s3/_manifest.json | 0 {src => _backup}/pages/input/s3/index.astro | 0 .../orchestrator/process-tracks/_applet.astro | 0 .../process-tracks/_manifest.json | 0 .../orchestrator/process-tracks/index.astro | 0 .../orchestrator/queue-audio/_applet.astro | 0 .../orchestrator/queue-audio/_manifest.json | 0 .../orchestrator/queue-audio/index.astro | 0 .../orchestrator/queue-tracks/_applet.astro | 0 .../orchestrator/queue-tracks/_manifest.json | 0 .../orchestrator/queue-tracks/index.astro | 0 .../orchestrator/search-tracks/_applet.astro | 0 .../orchestrator/search-tracks/_manifest.json | 0 .../orchestrator/search-tracks/index.astro | 0 .../pages/output/indexed-db/_applet.astro | 0 .../pages/output/indexed-db/_manifest.json | 0 .../pages/output/indexed-db/index.astro | 0 .../pages/output/native-fs/_applet.astro | 0 .../pages/output/native-fs/_manifest.json | 0 .../pages/output/native-fs/index.astro | 0 .../output/storacha-automerge/_applet.astro | 0 .../output/storacha-automerge/_manifest.json | 0 .../output/storacha-automerge/index.astro | 0 .../pages/processor/artwork/_applet.astro | 0 .../pages/processor/artwork/_manifest.json | 0 .../pages/processor/artwork/index.astro | 0 .../pages/processor/artwork/types.d.ts | 0 .../pages/processor/metadata/_applet.astro | 0 .../pages/processor/metadata/_manifest.json | 0 .../pages/processor/metadata/index.astro | 0 .../pages/processor/metadata/types.d.ts | 0 .../pages/processor/search/_applet.astro | 0 .../pages/processor/search/_manifest.json | 0 .../pages/processor/search/index.astro | 0 .../pages/processor/search/types.d.ts | 0 .../pages/test/cross-origin/blur.astro | 0 .../pages/test/cross-origin/output.astro | 0 {src => _backup}/pages/theme/blur/index.astro | 0 .../pages/theme/pilot/audio/_applet.astro | 0 .../pages/theme/pilot/audio/_manifest.json | 0 .../pages/theme/pilot/audio/index.astro | 0 .../pages/theme/pilot/audio/types.d.ts | 0 .../pages/theme/pilot/index.astro | 0 .../pages/theme/webamp/index.astro | 0 {src => _backup}/scripts/applet/common.ts | 0 {src => _backup}/scripts/common.ts | 0 .../scripts/configurator/input/worker.ts | 0 .../configurator/output/connections.ts | 0 .../scripts/configurator/output/constants.ts | 0 .../scripts/configurator/output/context.ts | 0 .../scripts/configurator/output/events.ts | 0 .../scripts/configurator/output/signals.ts | 0 .../scripts/configurator/output/types.d.ts | 0 .../scripts/configurator/output/ui.ts | 0 .../scripts/engine/queue/types.d.ts | 0 .../scripts/engine/queue/worker.ts | 0 {src => _backup}/scripts/input/common.ts | 0 .../scripts/input/native-fs/common.ts | 0 .../scripts/input/native-fs/constants.ts | 0 .../scripts/input/native-fs/mounting.ts | 0 .../scripts/input/native-fs/types.d.ts | 0 .../scripts/input/native-fs/ui.ts | 0 .../scripts/input/native-fs/worker.ts | 0 .../scripts/input/opensubsonic/common.ts | 0 .../scripts/input/opensubsonic/constants.ts | 0 .../scripts/input/opensubsonic/types.d.ts | 0 .../scripts/input/opensubsonic/ui.ts | 0 .../scripts/input/opensubsonic/worker.ts | 0 {src => _backup}/scripts/input/s3/common.ts | 0 .../scripts/input/s3/constants.ts | 0 {src => _backup}/scripts/input/s3/types.d.ts | 0 {src => _backup}/scripts/input/s3/ui.ts | 0 {src => _backup}/scripts/input/s3/worker.ts | 0 {src => _backup}/scripts/output/common.ts | 0 .../scripts/output/indexed-db/constants.ts | 0 .../scripts/output/indexed-db/worker.ts | 0 .../scripts/output/native-fs/constants.ts | 0 .../scripts/output/native-fs/worker.ts | 0 .../scripts/processor/artwork/constants.ts | 0 .../scripts/processor/artwork/types.d.ts | 0 .../scripts/processor/artwork/worker.ts | 0 .../scripts/processor/metadata/common.ts | 0 .../scripts/processor/metadata/types.d.ts | 0 .../scripts/processor/metadata/worker.ts | 0 .../scripts/processor/search/constants.ts | 0 .../scripts/processor/search/types.d.ts | 0 .../scripts/processor/search/worker.ts | 0 .../scripts/spellcaster/README.md | 0 .../scripts/spellcaster/hyperscript.ts | 0 {src => _backup}/scripts/spellcaster/index.ts | 0 .../scripts/spellcaster/spellcaster.ts | 0 {src => _backup}/scripts/spellcaster/util.ts | 0 {src => _backup}/scripts/theme/blur/index.ts | 0 {src => _backup}/scripts/theme/pilot/index.ts | 0 .../scripts/theme/webamp/index.ts | 0 {src => _backup}/styles/animations.css | 0 {src => _backup}/styles/applet/common.css | 0 {src => _backup}/styles/diffuse/colors.css | 0 {src => _backup}/styles/diffuse/fonts.css | 0 {src => _backup}/styles/fonts.css | 0 {src => _backup}/styles/icons/iconoir.css | 0 {src => _backup}/styles/icons/phosphor.css | 0 {src => _backup}/styles/page/index.css | 0 {src => _backup}/styles/pico.scss | 0 {src => _backup}/styles/reset.css | 0 {src => _backup}/styles/theme/blur/index.css | 0 .../styles/theme/blur/variables.css | 0 {src => _backup}/styles/theme/pilot/index.css | 0 .../styles/theme/pilot/variables.css | 0 .../styles/theme/webamp/index.css | 0 {src => _backup}/styles/variables.css | 0 _config.ts | 19 + package.json => _package.backup.json | 0 app/browser/index.mjs | 4 - app/common/signals/types.d.ts | 6 - .../constituent/blur/browser-list.mjs | 58 - app/pages/index.html | 6 - astro.config.js | 41 - deno.json | 16 - deno.jsonc | 35 + deno.lock | 487 +- netlify-imports.json | 6 + netlify.toml | 2 +- package-lock.json | 26122 ---------------- src/common/element.d.ts | 6 + src/common/element.js | 68 + src/common/signals.d.ts | 3 + .../index.mjs => src/common/signals.js | 0 src/elements/constituent/blur/browser-list.js | 88 + src/{pages => elements}/core/types.d.ts | 0 src/themes/blur/index.vto | 11 + tsconfig.json | 33 - 183 files changed, 731 insertions(+), 26565 deletions(-) delete mode 100644 .arc delete mode 100644 .astro/content-assets.mjs delete mode 100644 .astro/content-modules.mjs delete mode 100644 .astro/content.d.ts delete mode 100644 .astro/data-store.json delete mode 100644 .astro/settings.json delete mode 100644 .astro/types.d.ts delete mode 100644 .npmrc create mode 100644 .zed/settings.json create mode 100644 .zed/tasks.json rename {src => _backup}/components/Applet.astro (100%) rename {src => _backup}/components/List.astro (100%) rename {src => _backup}/content.config.ts (100%) rename {src => _backup}/env.d.ts (100%) rename {src => _backup}/layouts/applet-pico-ui.astro (100%) rename {src => _backup}/layouts/applet.astro (100%) rename {src => _backup}/layouts/page.astro (100%) rename {src => _backup}/pages/[...manifest].json.ts (100%) rename {src => _backup}/pages/configurator/input/_applet.astro (100%) rename {src => _backup}/pages/configurator/input/_manifest.json (100%) rename {src => _backup}/pages/configurator/input/index.astro (100%) rename {src => _backup}/pages/configurator/output/_applet.astro (100%) rename {src => _backup}/pages/configurator/output/_manifest.json (100%) rename {src => _backup}/pages/configurator/output/index.astro (100%) rename {src => _backup}/pages/constituent/blur/artwork-controller/_applet.astro (100%) rename {src => _backup}/pages/constituent/blur/artwork-controller/_manifest.json (100%) rename {src => _backup}/pages/constituent/blur/artwork-controller/index.astro (100%) rename {src => _backup}/pages/constituent/blur/browser/_applet.astro (100%) rename {src => _backup}/pages/constituent/blur/browser/_manifest.json (100%) rename {src => _backup}/pages/constituent/blur/browser/index.astro (100%) rename {app/common => _backup/pages}/core/types.d.ts (100%) rename {src => _backup}/pages/demo/s3-tracks/index.astro (100%) rename {src => _backup}/pages/engine/audio/_applet.astro (100%) rename {src => _backup}/pages/engine/audio/_manifest.json (100%) rename {src => _backup}/pages/engine/audio/index.astro (100%) rename {src => _backup}/pages/engine/audio/types.d.ts (100%) rename {src => _backup}/pages/engine/queue/_applet.astro (100%) rename {src => _backup}/pages/engine/queue/_manifest.json (100%) rename {src => _backup}/pages/engine/queue/index.astro (100%) rename {src => _backup}/pages/engine/queue/types.d.ts (100%) rename {src => _backup}/pages/index.astro (100%) rename {src => _backup}/pages/input/native-fs/_applet.astro (100%) rename {src => _backup}/pages/input/native-fs/_manifest.json (100%) rename {src => _backup}/pages/input/native-fs/index.astro (100%) rename {src => _backup}/pages/input/opensubsonic/_applet.astro (100%) rename {src => _backup}/pages/input/opensubsonic/_manifest.json (100%) rename {src => _backup}/pages/input/opensubsonic/index.astro (100%) rename {src => _backup}/pages/input/opensubsonic/types.d.ts (100%) rename {src => _backup}/pages/input/s3/_applet.astro (100%) rename {src => _backup}/pages/input/s3/_manifest.json (100%) rename {src => _backup}/pages/input/s3/index.astro (100%) rename {src => _backup}/pages/orchestrator/process-tracks/_applet.astro (100%) rename {src => _backup}/pages/orchestrator/process-tracks/_manifest.json (100%) rename {src => _backup}/pages/orchestrator/process-tracks/index.astro (100%) rename {src => _backup}/pages/orchestrator/queue-audio/_applet.astro (100%) rename {src => _backup}/pages/orchestrator/queue-audio/_manifest.json (100%) rename {src => _backup}/pages/orchestrator/queue-audio/index.astro (100%) rename {src => _backup}/pages/orchestrator/queue-tracks/_applet.astro (100%) rename {src => _backup}/pages/orchestrator/queue-tracks/_manifest.json (100%) rename {src => _backup}/pages/orchestrator/queue-tracks/index.astro (100%) rename {src => _backup}/pages/orchestrator/search-tracks/_applet.astro (100%) rename {src => _backup}/pages/orchestrator/search-tracks/_manifest.json (100%) rename {src => _backup}/pages/orchestrator/search-tracks/index.astro (100%) rename {src => _backup}/pages/output/indexed-db/_applet.astro (100%) rename {src => _backup}/pages/output/indexed-db/_manifest.json (100%) rename {src => _backup}/pages/output/indexed-db/index.astro (100%) rename {src => _backup}/pages/output/native-fs/_applet.astro (100%) rename {src => _backup}/pages/output/native-fs/_manifest.json (100%) rename {src => _backup}/pages/output/native-fs/index.astro (100%) rename {src => _backup}/pages/output/storacha-automerge/_applet.astro (100%) rename {src => _backup}/pages/output/storacha-automerge/_manifest.json (100%) rename {src => _backup}/pages/output/storacha-automerge/index.astro (100%) rename {src => _backup}/pages/processor/artwork/_applet.astro (100%) rename {src => _backup}/pages/processor/artwork/_manifest.json (100%) rename {src => _backup}/pages/processor/artwork/index.astro (100%) rename {src => _backup}/pages/processor/artwork/types.d.ts (100%) rename {src => _backup}/pages/processor/metadata/_applet.astro (100%) rename {src => _backup}/pages/processor/metadata/_manifest.json (100%) rename {src => _backup}/pages/processor/metadata/index.astro (100%) rename {src => _backup}/pages/processor/metadata/types.d.ts (100%) rename {src => _backup}/pages/processor/search/_applet.astro (100%) rename {src => _backup}/pages/processor/search/_manifest.json (100%) rename {src => _backup}/pages/processor/search/index.astro (100%) rename {src => _backup}/pages/processor/search/types.d.ts (100%) rename {src => _backup}/pages/test/cross-origin/blur.astro (100%) rename {src => _backup}/pages/test/cross-origin/output.astro (100%) rename {src => _backup}/pages/theme/blur/index.astro (100%) rename {src => _backup}/pages/theme/pilot/audio/_applet.astro (100%) rename {src => _backup}/pages/theme/pilot/audio/_manifest.json (100%) rename {src => _backup}/pages/theme/pilot/audio/index.astro (100%) rename {src => _backup}/pages/theme/pilot/audio/types.d.ts (100%) rename {src => _backup}/pages/theme/pilot/index.astro (100%) rename {src => _backup}/pages/theme/webamp/index.astro (100%) rename {src => _backup}/scripts/applet/common.ts (100%) rename {src => _backup}/scripts/common.ts (100%) rename {src => _backup}/scripts/configurator/input/worker.ts (100%) rename {src => _backup}/scripts/configurator/output/connections.ts (100%) rename {src => _backup}/scripts/configurator/output/constants.ts (100%) rename {src => _backup}/scripts/configurator/output/context.ts (100%) rename {src => _backup}/scripts/configurator/output/events.ts (100%) rename {src => _backup}/scripts/configurator/output/signals.ts (100%) rename {src => _backup}/scripts/configurator/output/types.d.ts (100%) rename {src => _backup}/scripts/configurator/output/ui.ts (100%) rename {src => _backup}/scripts/engine/queue/types.d.ts (100%) rename {src => _backup}/scripts/engine/queue/worker.ts (100%) rename {src => _backup}/scripts/input/common.ts (100%) rename {src => _backup}/scripts/input/native-fs/common.ts (100%) rename {src => _backup}/scripts/input/native-fs/constants.ts (100%) rename {src => _backup}/scripts/input/native-fs/mounting.ts (100%) rename {src => _backup}/scripts/input/native-fs/types.d.ts (100%) rename {src => _backup}/scripts/input/native-fs/ui.ts (100%) rename {src => _backup}/scripts/input/native-fs/worker.ts (100%) rename {src => _backup}/scripts/input/opensubsonic/common.ts (100%) rename {src => _backup}/scripts/input/opensubsonic/constants.ts (100%) rename {src => _backup}/scripts/input/opensubsonic/types.d.ts (100%) rename {src => _backup}/scripts/input/opensubsonic/ui.ts (100%) rename {src => _backup}/scripts/input/opensubsonic/worker.ts (100%) rename {src => _backup}/scripts/input/s3/common.ts (100%) rename {src => _backup}/scripts/input/s3/constants.ts (100%) rename {src => _backup}/scripts/input/s3/types.d.ts (100%) rename {src => _backup}/scripts/input/s3/ui.ts (100%) rename {src => _backup}/scripts/input/s3/worker.ts (100%) rename {src => _backup}/scripts/output/common.ts (100%) rename {src => _backup}/scripts/output/indexed-db/constants.ts (100%) rename {src => _backup}/scripts/output/indexed-db/worker.ts (100%) rename {src => _backup}/scripts/output/native-fs/constants.ts (100%) rename {src => _backup}/scripts/output/native-fs/worker.ts (100%) rename {src => _backup}/scripts/processor/artwork/constants.ts (100%) rename {src => _backup}/scripts/processor/artwork/types.d.ts (100%) rename {src => _backup}/scripts/processor/artwork/worker.ts (100%) rename {src => _backup}/scripts/processor/metadata/common.ts (100%) rename {src => _backup}/scripts/processor/metadata/types.d.ts (100%) rename {src => _backup}/scripts/processor/metadata/worker.ts (100%) rename {src => _backup}/scripts/processor/search/constants.ts (100%) rename {src => _backup}/scripts/processor/search/types.d.ts (100%) rename {src => _backup}/scripts/processor/search/worker.ts (100%) rename {src => _backup}/scripts/spellcaster/README.md (100%) rename {src => _backup}/scripts/spellcaster/hyperscript.ts (100%) rename {src => _backup}/scripts/spellcaster/index.ts (100%) rename {src => _backup}/scripts/spellcaster/spellcaster.ts (100%) rename {src => _backup}/scripts/spellcaster/util.ts (100%) rename {src => _backup}/scripts/theme/blur/index.ts (100%) rename {src => _backup}/scripts/theme/pilot/index.ts (100%) rename {src => _backup}/scripts/theme/webamp/index.ts (100%) rename {src => _backup}/styles/animations.css (100%) rename {src => _backup}/styles/applet/common.css (100%) rename {src => _backup}/styles/diffuse/colors.css (100%) rename {src => _backup}/styles/diffuse/fonts.css (100%) rename {src => _backup}/styles/fonts.css (100%) rename {src => _backup}/styles/icons/iconoir.css (100%) rename {src => _backup}/styles/icons/phosphor.css (100%) rename {src => _backup}/styles/page/index.css (100%) rename {src => _backup}/styles/pico.scss (100%) rename {src => _backup}/styles/reset.css (100%) rename {src => _backup}/styles/theme/blur/index.css (100%) rename {src => _backup}/styles/theme/blur/variables.css (100%) rename {src => _backup}/styles/theme/pilot/index.css (100%) rename {src => _backup}/styles/theme/pilot/variables.css (100%) rename {src => _backup}/styles/theme/webamp/index.css (100%) rename {src => _backup}/styles/variables.css (100%) create mode 100644 _config.ts rename package.json => _package.backup.json (100%) delete mode 100644 app/browser/index.mjs delete mode 100644 app/common/signals/types.d.ts delete mode 100644 app/components/constituent/blur/browser-list.mjs delete mode 100644 app/pages/index.html delete mode 100644 astro.config.js delete mode 100644 deno.json create mode 100644 deno.jsonc create mode 100644 netlify-imports.json delete mode 100644 package-lock.json create mode 100644 src/common/element.d.ts create mode 100644 src/common/element.js create mode 100644 src/common/signals.d.ts rename app/common/signals/index.mjs => src/common/signals.js (100%) create mode 100644 src/elements/constituent/blur/browser-list.js rename src/{pages => elements}/core/types.d.ts (100%) create mode 100644 src/themes/blur/index.vto delete mode 100644 tsconfig.json diff --git a/.arc b/.arc deleted file mode 100644 index 281a2bee5..000000000 --- a/.arc +++ /dev/null @@ -1,7 +0,0 @@ -@app -enhance-app - -@plugins -enhance/arc-plugin-enhance -enhance/arc-plugin-styles -enhance/styles-cribsheet diff --git a/.astro/content-assets.mjs b/.astro/content-assets.mjs deleted file mode 100644 index 2b8b8234b..000000000 --- a/.astro/content-assets.mjs +++ /dev/null @@ -1 +0,0 @@ -export default new Map(); \ No newline at end of file diff --git a/.astro/content-modules.mjs b/.astro/content-modules.mjs deleted file mode 100644 index 2b8b8234b..000000000 --- a/.astro/content-modules.mjs +++ /dev/null @@ -1 +0,0 @@ -export default new Map(); \ No newline at end of file diff --git a/.astro/content.d.ts b/.astro/content.d.ts deleted file mode 100644 index 6afefd083..000000000 --- a/.astro/content.d.ts +++ /dev/null @@ -1,207 +0,0 @@ -declare module 'astro:content' { - export interface RenderResult { - Content: import('astro/runtime/server/index.js').AstroComponentFactory; - headings: import('astro').MarkdownHeading[]; - remarkPluginFrontmatter: Record; - } - interface Render { - '.md': Promise; - } - - export interface RenderedContent { - html: string; - metadata?: { - imagePaths: Array; - [key: string]: unknown; - }; - } -} - -declare module 'astro:content' { - type Flatten = T extends { [K: string]: infer U } ? U : never; - - export type CollectionKey = keyof AnyEntryMap; - export type CollectionEntry = Flatten; - - export type ContentCollectionKey = keyof ContentEntryMap; - export type DataCollectionKey = keyof DataEntryMap; - - type AllValuesOf = T extends any ? T[keyof T] : never; - type ValidContentEntrySlug = AllValuesOf< - ContentEntryMap[C] - >['slug']; - - export type ReferenceDataEntry< - C extends CollectionKey, - E extends keyof DataEntryMap[C] = string, - > = { - collection: C; - id: E; - }; - export type ReferenceContentEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}) = string, - > = { - collection: C; - slug: E; - }; - export type ReferenceLiveEntry = { - collection: C; - id: string; - }; - - /** @deprecated Use `getEntry` instead. */ - export function getEntryBySlug< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - collection: C, - // Note that this has to accept a regular string too, for SSR - entrySlug: E, - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - - /** @deprecated Use `getEntry` instead. */ - export function getDataEntryById( - collection: C, - entryId: E, - ): Promise>; - - export function getCollection>( - collection: C, - filter?: (entry: CollectionEntry) => entry is E, - ): Promise; - export function getCollection( - collection: C, - filter?: (entry: CollectionEntry) => unknown, - ): Promise[]>; - - export function getLiveCollection( - collection: C, - filter?: LiveLoaderCollectionFilterType, - ): Promise< - import('astro').LiveDataCollectionResult, LiveLoaderErrorType> - >; - - export function getEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - entry: ReferenceContentEntry, - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >( - entry: ReferenceDataEntry, - ): E extends keyof DataEntryMap[C] - ? Promise - : Promise | undefined>; - export function getEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - collection: C, - slug: E, - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >( - collection: C, - id: E, - ): E extends keyof DataEntryMap[C] - ? string extends keyof DataEntryMap[C] - ? Promise | undefined - : Promise - : Promise | undefined>; - export function getLiveEntry( - collection: C, - filter: string | LiveLoaderEntryFilterType, - ): Promise, LiveLoaderErrorType>>; - - /** Resolve an array of entry references from the same collection */ - export function getEntries( - entries: ReferenceContentEntry>[], - ): Promise[]>; - export function getEntries( - entries: ReferenceDataEntry[], - ): Promise[]>; - - export function render( - entry: AnyEntryMap[C][string], - ): Promise; - - export function reference( - collection: C, - ): import('astro/zod').ZodEffects< - import('astro/zod').ZodString, - C extends keyof ContentEntryMap - ? ReferenceContentEntry> - : ReferenceDataEntry - >; - // Allow generic `string` to avoid excessive type errors in the config - // if `dev` is not running to update as you edit. - // Invalid collection names will be caught at build time. - export function reference( - collection: C, - ): import('astro/zod').ZodEffects; - - type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; - type InferEntrySchema = import('astro/zod').infer< - ReturnTypeOrOriginal['schema']> - >; - - type ContentEntryMap = { - - }; - - type DataEntryMap = { - "manifests": Record; - - }; - - type AnyEntryMap = ContentEntryMap & DataEntryMap; - - type ExtractLoaderTypes = T extends import('astro/loaders').LiveLoader< - infer TData, - infer TEntryFilter, - infer TCollectionFilter, - infer TError - > - ? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError } - : { data: never; entryFilter: never; collectionFilter: never; error: never }; - type ExtractDataType = ExtractLoaderTypes['data']; - type ExtractEntryFilterType = ExtractLoaderTypes['entryFilter']; - type ExtractCollectionFilterType = ExtractLoaderTypes['collectionFilter']; - type ExtractErrorType = ExtractLoaderTypes['error']; - - type LiveLoaderDataType = - LiveContentConfig['collections'][C]['schema'] extends undefined - ? ExtractDataType - : import('astro/zod').infer< - Exclude - >; - type LiveLoaderEntryFilterType = - ExtractEntryFilterType; - type LiveLoaderCollectionFilterType = - ExtractCollectionFilterType; - type LiveLoaderErrorType = ExtractErrorType< - LiveContentConfig['collections'][C]['loader'] - >; - - export type ContentConfig = typeof import("../src/content.config.js"); - export type LiveContentConfig = never; -} diff --git a/.astro/data-store.json b/.astro/data-store.json deleted file mode 100644 index 5001ebe15..000000000 --- a/.astro/data-store.json +++ /dev/null @@ -1 +0,0 @@ -[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.10.1","content-config-digest","436d74edbfb2fef7","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"never\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}","manifests",["Map",11,12,28,29,65,66,148,149,180,181,214,215,241,242,268,269,276,277,284,285,292,293,305,306,318,319,331,332,355,356,379,380,387,388,403,404,411,412,419,420],"configurator/output/_manifest",{"id":11,"data":13,"filePath":26,"digest":27},{"name":14,"title":15,"entrypoint":16,"actions":17},"diffuse/configurator/output","Diffuse Configurator | Output","index.html",{"tracks":18},{"title":19,"description":20,"params_schema":21},"Tracks","Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.",{"type":22,"description":23,"items":24},"array","List of tracks",{"type":25},"object","src/pages/configurator/output/_manifest.json","4659e937f3f7ce97","configurator/input/_manifest",{"id":28,"data":30,"filePath":63,"digest":64},{"name":31,"title":32,"entrypoint":16,"actions":33},"diffuse/configurator/input","Diffuse Configurator | Input",{"consult":34,"contextualize":39,"list":45,"resolve":51},{"title":35,"params_schema":36},"Consult",{"type":37,"description":38},"string","The uri to check the availability of.",{"title":40,"description":41,"params_schema":42},"Contextualize","Provide context to all inputs.",{"type":22,"description":43,"items":44},"Array of tracks",{"type":25},{"title":46,"description":47,"params_schema":48},"List","List tracks from all inputs.",{"type":22,"description":49,"items":50},"A list of (cached) tracks",{"type":25},{"title":52,"description":53,"params_schema":54},"Resolve","Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.",{"type":25,"properties":55,"required":60},{"method":56,"uri":58},{"type":37,"description":57},"The HTTP method that is going to be used on the resolved URI.",{"type":37,"description":59},"The URI to resolve.",[61,62],"method","uri","src/pages/configurator/input/_manifest.json","deab08f592f33c5d","engine/audio/_manifest",{"id":65,"data":67,"filePath":146,"digest":147},{"name":68,"title":69,"entrypoint":16,"actions":70},"diffuse/engine/audio","Diffuse Audio",{"pause":71,"play":79,"render":89,"reload":117,"seek":127,"volume":136},{"title":72,"description":73,"params_schema":74},"Pause","Pause audio",{"type":25,"properties":75,"required":77},{"audioId":76},{"type":37},[78],"audioId",{"title":80,"description":81,"params_schema":82},"Play","Play audio",{"type":25,"properties":83,"required":88},{"audioId":84,"volume":85},{"type":37},{"type":86,"default":87},"number",0.5,[78],{"title":90,"description":91,"params_schema":92},"Render","Determine the active set of audio elements.",{"type":25,"properties":93,"required":115},{"audio":94,"play":107},{"type":22,"description":95,"items":96},"The audio items we want to render. These represent the audio elements that are in the DOM.",{"type":25,"properties":97,"required":104},{"id":98,"isPreload":99,"mimeType":101,"progress":102,"url":103},{"type":37},{"type":100},"boolean",{"type":37},{"type":86},{"type":37},[105,106],"id","url",{"type":25,"description":108,"properties":109,"required":114},"Pass in this object to immediately start playing one of the rendered audio items.",{"audioId":110,"volume":112},{"type":37,"description":111},"The id of the rendered audio item we want to play.",{"type":86,"default":87,"description":113},"A number equal to, or between, 0 and 1, that determines how loud the audio should play.",[78],[116],"audio",{"title":118,"description":119,"params_schema":120},"Reload","Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.",{"type":25,"properties":121,"required":125},{"audioId":122,"play":123,"progress":124},{"type":37},{"type":100},{"type":86},[78,126],"percentage",{"title":128,"description":129,"params_schema":130},"Seek","Seek audio to a given position",{"type":25,"properties":131,"required":135},{"audioId":132,"percentage":133},{"type":37},{"type":86,"description":134},"A number between 0 and 1 that determines the new current position in the audio",[78,126],{"title":137,"description":138,"params_schema":139},"Volume","Set the volume of all audio and the default value, or a specific audio node.",{"type":25,"properties":140,"required":144},{"audioId":141,"volume":142},{"type":37},{"type":86,"description":143},"A number between 0 and 1 that determines the new volume of all audio elements",[145],"volume","src/pages/engine/audio/_manifest.json","fad9de8481968df7","engine/queue/_manifest",{"id":148,"data":150,"filePath":178,"digest":179},{"name":151,"title":152,"entrypoint":16,"actions":153},"diffuse/engine/queue","Diffuse Queue",{"add":154,"pool":163,"shift":172,"unshift":175},{"title":155,"description":156,"params_schema":157},"Add","Add tracks to the queue.",{"type":22,"description":43,"items":158},{"type":25,"properties":159,"required":162},{"id":160,"uri":161},{"type":37},{"type":37},[105,62],{"title":164,"description":165,"params_schema":166},"Pool","Set the queue pool.",{"type":22,"description":43,"items":167},{"type":25,"properties":168,"required":171},{"id":169,"uri":170},{"type":37},{"type":37},[105,62],{"title":173,"description":174},"Shift","Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list.",{"title":176,"description":177},"Unshift","Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list.","src/pages/engine/queue/_manifest.json","bdd435b3e8277673","input/native-fs/_manifest",{"id":180,"data":182,"filePath":212,"digest":213},{"name":183,"title":184,"entrypoint":16,"input_properties":185,"actions":187},"diffuse/input/native-fs","Diffuse Input | Native File System",{"scheme":186},"file+local",{"consult":188,"list":192,"resolve":197,"mount":204,"unmount":207},{"title":35,"description":189,"params_schema":190},"Check if a handle is available to be used by passing in a file uri that uses that handle as the host.",{"type":37,"description":191},"The uri with the handle to check the availability of.",{"title":46,"description":193,"params_schema":194},"List tracks.",{"type":22,"description":195,"items":196},"A list of (cached) tracks with an uri matching the scheme",{"type":25},{"title":52,"description":198,"params_schema":199},"Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.",{"type":25,"properties":200,"required":203},{"method":201,"uri":202},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},"Mount","Prepare for usage.",{"title":208,"description":209,"params_schema":210},"Unmount","Callback after usage.",{"type":37,"description":211},"The handle id to unmount","src/pages/input/native-fs/_manifest.json","bbfb366cb25470ac","input/s3/_manifest",{"id":214,"data":216,"filePath":239,"digest":240},{"name":217,"title":218,"entrypoint":16,"input_properties":219,"actions":221},"diffuse/input/s3","Diffuse Input | S3",{"scheme":220},"s3",{"consult":222,"contextualize":224,"list":227,"resolve":230,"mount":236,"unmount":237},{"title":35,"params_schema":223},{"type":37,"description":38},{"title":40,"params_schema":225},{"type":22,"description":43,"items":226},{"type":25},{"title":46,"description":193,"params_schema":228},{"type":22,"description":195,"items":229},{"type":25},{"title":52,"description":198,"params_schema":231},{"type":25,"properties":232,"required":235},{"method":233,"uri":234},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":238},{"type":37,"description":211},"src/pages/input/s3/_manifest.json","458b0c64643bf8a8","input/opensubsonic/_manifest",{"id":241,"data":243,"filePath":266,"digest":267},{"name":244,"title":245,"entrypoint":16,"input_properties":246,"actions":248},"diffuse/input/opensubsonic","Diffuse Input | OpenSubsonic API",{"scheme":247},"opensubsonic",{"consult":249,"contextualize":251,"list":254,"resolve":257,"mount":263,"unmount":264},{"title":35,"params_schema":250},{"type":37,"description":38},{"title":40,"params_schema":252},{"type":22,"description":43,"items":253},{"type":25},{"title":46,"description":193,"params_schema":255},{"type":22,"description":195,"items":256},{"type":25},{"title":52,"description":198,"params_schema":258},{"type":25,"properties":259,"required":262},{"method":260,"uri":261},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":265},{"type":37,"description":211},"src/pages/input/opensubsonic/_manifest.json","463ff2f82f27fed9","orchestrator/process-tracks/_manifest",{"id":268,"data":270,"filePath":274,"digest":275},{"name":271,"title":272,"entrypoint":16,"actions":273},"diffuse/orchestrator/process-tracks","Diffuse Orchestrator | Process Tracks",{},"src/pages/orchestrator/process-tracks/_manifest.json","4d30ef9c892a16b8","orchestrator/queue-audio/_manifest",{"id":276,"data":278,"filePath":282,"digest":283},{"name":279,"title":280,"entrypoint":16,"actions":281},"diffuse/orchestrator/queue-audio","Diffuse Orchestrator | Queue Audio",{},"src/pages/orchestrator/queue-audio/_manifest.json","5c66731fcc2fae2d","orchestrator/queue-tracks/_manifest",{"id":284,"data":286,"filePath":290,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":289},"diffuse/orchestrator/queue-tracks","Diffuse Orchestrator | Queue Tracks",{},"src/pages/orchestrator/queue-tracks/_manifest.json","56a0c769ecdc8cbb","output/indexed-db/_manifest",{"id":292,"data":294,"filePath":303,"digest":304},{"name":295,"title":296,"entrypoint":16,"actions":297},"diffuse/output/indexed-db","Diffuse Output | IndexedDB",{"tracks":298,"mount":301,"unmount":302},{"title":19,"description":20,"params_schema":299},{"type":22,"description":23,"items":300},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/indexed-db/_manifest.json","c75e5169818995c0","output/native-fs/_manifest",{"id":305,"data":307,"filePath":316,"digest":317},{"name":308,"title":309,"entrypoint":16,"actions":310},"diffuse/output/native-fs","Diffuse Output | Native File System",{"tracks":311,"mount":314,"unmount":315},{"title":19,"description":20,"params_schema":312},{"type":22,"description":23,"items":313},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/native-fs/_manifest.json","9f36293a08c3d233","output/storacha-automerge/_manifest",{"id":318,"data":320,"filePath":329,"digest":330},{"name":321,"title":322,"entrypoint":16,"actions":323},"diffuse/output/storacha-automerge","Diffuse Output | Storacha Storage + Automerge CRDT",{"tracks":324,"mount":327,"unmount":328},{"title":19,"description":20,"params_schema":325},{"type":22,"description":23,"items":326},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/storacha-automerge/_manifest.json","607193e5156e1220","processor/metadata/_manifest",{"id":331,"data":333,"filePath":353,"digest":354},{"name":334,"title":335,"entrypoint":16,"actions":336},"diffuse/processor/metadata","Diffuse Processor | Metadata fetcher",{"supply":337},{"title":338,"description":339,"params_schema":340},"Supply","Get the metadata for a given URL or stream.",{"type":25,"properties":341},{"includeArtwork":342,"mimeType":344,"stream":345,"urls":346},{"type":100,"description":343},"Include artwork in the output.",{"type":37},{"type":25},{"type":25,"properties":347,"required":350},{"get":348,"head":349},{"type":37},{"type":37},[351,352],"get","head","src/pages/processor/metadata/_manifest.json","0f144e608574be9b","processor/artwork/_manifest",{"id":355,"data":357,"filePath":377,"digest":378},{"name":358,"title":359,"description":360,"entrypoint":16,"actions":361},"diffuse/processor/artwork","Diffuse Processor | Artwork fetcher","Tries to get artwork for a given URL or stream.",{"supply":362},{"title":338,"description":363,"params_schema":364},"Get the artwork for a given URL.",{"type":22,"items":365},{"type":25,"properties":366,"required":375},{"cacheId":367,"mimeType":368,"stream":369,"urls":370},{"type":37},{"type":37},{"type":25},{"type":25,"properties":371,"required":374},{"get":372,"head":373},{"type":37},{"type":37},[351,352],[376],"cacheId","src/pages/processor/artwork/_manifest.json","9401bdfa33e2f0db","processor/search/_manifest",{"id":379,"data":381,"filePath":385,"digest":386},{"name":382,"title":383,"entrypoint":16,"actions":384},"diffuse/processor/search","Diffuse Processor | Search",{},"src/pages/processor/search/_manifest.json","ec562d1125821f8a","theme/pilot/audio/_manifest",{"id":387,"data":389,"filePath":401,"digest":402},{"name":390,"title":391,"entrypoint":16,"actions":392},"diffuse/constituent/pilot/audio","",{"modifyIsPlaying":393,"modifyProgress":397},{"title":394,"description":395,"params_schema":396},"Set is-playing state","Indicate if audio is playing or not.",{"type":100},{"title":398,"description":399,"params_schema":400},"Set progress","Indicate how far the audio has progressed.",{"type":86},"src/pages/theme/pilot/audio/_manifest.json","7c3a0b25e8d14fd2","constituent/blur/artwork-controller/_manifest",{"id":403,"data":405,"filePath":409,"digest":410},{"name":406,"title":407,"entrypoint":16,"actions":408},"diffuse/constituent/blur/artwork-controller","Diffuse Blur Theme | Artwork Controller",{},"src/pages/constituent/blur/artwork-controller/_manifest.json","8fc3503208f14724","constituent/blur/browser/_manifest",{"id":411,"data":413,"filePath":417,"digest":418},{"name":414,"title":415,"entrypoint":16,"actions":416},"diffuse/constituent/blur/browser","Diffuse Blur Theme | Browser",{},"src/pages/constituent/blur/browser/_manifest.json","60cf6e2d4c21ecd2","orchestrator/search-tracks/_manifest",{"id":419,"data":421,"filePath":423,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":422},{},"src/pages/orchestrator/search-tracks/_manifest.json"] \ No newline at end of file diff --git a/.astro/settings.json b/.astro/settings.json deleted file mode 100644 index a8e517fee..000000000 --- a/.astro/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "_variables": { - "lastUpdateCheck": 1757947671266 - }, - "devToolbar": { - "enabled": false - } -} \ No newline at end of file diff --git a/.astro/types.d.ts b/.astro/types.d.ts deleted file mode 100644 index 03d7cc43f..000000000 --- a/.astro/types.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// \ No newline at end of file diff --git a/.gitignore b/.gitignore index 03f5af1f5..fa8c4e30f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,6 @@ .DS_Store -.enhance .netlify -.zed node_modules +/_site +/_vendor /dist - -/public/browser -/public/static.json diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 41583e36c..000000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -@jsr:registry=https://npm.jsr.io diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 000000000..74dc2b9e5 --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,41 @@ +{ + "lsp": { + "deno": { + "settings": { + "deno": { + "enable": true + } + } + }, + "json-language-server": { + "settings": { + "json": { + "schemas": [ + { + "fileMatch": ["deno.json"], + "url": "https://raw.githubusercontent.com/denoland/deno/refs/heads/main/cli/schemas/config-file.v1.json" + }, + { + "fileMatch": ["package.json"], + "url": "http://json.schemastore.org/package" + } + ] + } + } + } + }, + "languages": { + "JavaScript": { + "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"], + "formatter": "language_server" + }, + "TypeScript": { + "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"], + "formatter": "language_server" + }, + "TSX": { + "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"], + "formatter": "language_server" + } + } +} diff --git a/.zed/tasks.json b/.zed/tasks.json new file mode 100644 index 000000000..e96163364 --- /dev/null +++ b/.zed/tasks.json @@ -0,0 +1,7 @@ +[ + { + "label": "deno test", + "command": "deno test -A --filter '/^$ZED_CUSTOM_DENO_TEST_NAME$/' '$ZED_FILE'", + "tags": ["js-test"] + } +] diff --git a/README.md b/README.md index 79d387ad4..7093a2ed8 100644 --- a/README.md +++ b/README.md @@ -8,5 +8,5 @@ in the form of a static, serverless, web application._ ```shell npm install -deno run dev +deno run build ``` diff --git a/src/components/Applet.astro b/_backup/components/Applet.astro similarity index 100% rename from src/components/Applet.astro rename to _backup/components/Applet.astro diff --git a/src/components/List.astro b/_backup/components/List.astro similarity index 100% rename from src/components/List.astro rename to _backup/components/List.astro diff --git a/src/content.config.ts b/_backup/content.config.ts similarity index 100% rename from src/content.config.ts rename to _backup/content.config.ts diff --git a/src/env.d.ts b/_backup/env.d.ts similarity index 100% rename from src/env.d.ts rename to _backup/env.d.ts diff --git a/src/layouts/applet-pico-ui.astro b/_backup/layouts/applet-pico-ui.astro similarity index 100% rename from src/layouts/applet-pico-ui.astro rename to _backup/layouts/applet-pico-ui.astro diff --git a/src/layouts/applet.astro b/_backup/layouts/applet.astro similarity index 100% rename from src/layouts/applet.astro rename to _backup/layouts/applet.astro diff --git a/src/layouts/page.astro b/_backup/layouts/page.astro similarity index 100% rename from src/layouts/page.astro rename to _backup/layouts/page.astro diff --git a/src/pages/[...manifest].json.ts b/_backup/pages/[...manifest].json.ts similarity index 100% rename from src/pages/[...manifest].json.ts rename to _backup/pages/[...manifest].json.ts diff --git a/src/pages/configurator/input/_applet.astro b/_backup/pages/configurator/input/_applet.astro similarity index 100% rename from src/pages/configurator/input/_applet.astro rename to _backup/pages/configurator/input/_applet.astro diff --git a/src/pages/configurator/input/_manifest.json b/_backup/pages/configurator/input/_manifest.json similarity index 100% rename from src/pages/configurator/input/_manifest.json rename to _backup/pages/configurator/input/_manifest.json diff --git a/src/pages/configurator/input/index.astro b/_backup/pages/configurator/input/index.astro similarity index 100% rename from src/pages/configurator/input/index.astro rename to _backup/pages/configurator/input/index.astro diff --git a/src/pages/configurator/output/_applet.astro b/_backup/pages/configurator/output/_applet.astro similarity index 100% rename from src/pages/configurator/output/_applet.astro rename to _backup/pages/configurator/output/_applet.astro diff --git a/src/pages/configurator/output/_manifest.json b/_backup/pages/configurator/output/_manifest.json similarity index 100% rename from src/pages/configurator/output/_manifest.json rename to _backup/pages/configurator/output/_manifest.json diff --git a/src/pages/configurator/output/index.astro b/_backup/pages/configurator/output/index.astro similarity index 100% rename from src/pages/configurator/output/index.astro rename to _backup/pages/configurator/output/index.astro diff --git a/src/pages/constituent/blur/artwork-controller/_applet.astro b/_backup/pages/constituent/blur/artwork-controller/_applet.astro similarity index 100% rename from src/pages/constituent/blur/artwork-controller/_applet.astro rename to _backup/pages/constituent/blur/artwork-controller/_applet.astro diff --git a/src/pages/constituent/blur/artwork-controller/_manifest.json b/_backup/pages/constituent/blur/artwork-controller/_manifest.json similarity index 100% rename from src/pages/constituent/blur/artwork-controller/_manifest.json rename to _backup/pages/constituent/blur/artwork-controller/_manifest.json diff --git a/src/pages/constituent/blur/artwork-controller/index.astro b/_backup/pages/constituent/blur/artwork-controller/index.astro similarity index 100% rename from src/pages/constituent/blur/artwork-controller/index.astro rename to _backup/pages/constituent/blur/artwork-controller/index.astro diff --git a/src/pages/constituent/blur/browser/_applet.astro b/_backup/pages/constituent/blur/browser/_applet.astro similarity index 100% rename from src/pages/constituent/blur/browser/_applet.astro rename to _backup/pages/constituent/blur/browser/_applet.astro diff --git a/src/pages/constituent/blur/browser/_manifest.json b/_backup/pages/constituent/blur/browser/_manifest.json similarity index 100% rename from src/pages/constituent/blur/browser/_manifest.json rename to _backup/pages/constituent/blur/browser/_manifest.json diff --git a/src/pages/constituent/blur/browser/index.astro b/_backup/pages/constituent/blur/browser/index.astro similarity index 100% rename from src/pages/constituent/blur/browser/index.astro rename to _backup/pages/constituent/blur/browser/index.astro diff --git a/app/common/core/types.d.ts b/_backup/pages/core/types.d.ts similarity index 100% rename from app/common/core/types.d.ts rename to _backup/pages/core/types.d.ts diff --git a/src/pages/demo/s3-tracks/index.astro b/_backup/pages/demo/s3-tracks/index.astro similarity index 100% rename from src/pages/demo/s3-tracks/index.astro rename to _backup/pages/demo/s3-tracks/index.astro diff --git a/src/pages/engine/audio/_applet.astro b/_backup/pages/engine/audio/_applet.astro similarity index 100% rename from src/pages/engine/audio/_applet.astro rename to _backup/pages/engine/audio/_applet.astro diff --git a/src/pages/engine/audio/_manifest.json b/_backup/pages/engine/audio/_manifest.json similarity index 100% rename from src/pages/engine/audio/_manifest.json rename to _backup/pages/engine/audio/_manifest.json diff --git a/src/pages/engine/audio/index.astro b/_backup/pages/engine/audio/index.astro similarity index 100% rename from src/pages/engine/audio/index.astro rename to _backup/pages/engine/audio/index.astro diff --git a/src/pages/engine/audio/types.d.ts b/_backup/pages/engine/audio/types.d.ts similarity index 100% rename from src/pages/engine/audio/types.d.ts rename to _backup/pages/engine/audio/types.d.ts diff --git a/src/pages/engine/queue/_applet.astro b/_backup/pages/engine/queue/_applet.astro similarity index 100% rename from src/pages/engine/queue/_applet.astro rename to _backup/pages/engine/queue/_applet.astro diff --git a/src/pages/engine/queue/_manifest.json b/_backup/pages/engine/queue/_manifest.json similarity index 100% rename from src/pages/engine/queue/_manifest.json rename to _backup/pages/engine/queue/_manifest.json diff --git a/src/pages/engine/queue/index.astro b/_backup/pages/engine/queue/index.astro similarity index 100% rename from src/pages/engine/queue/index.astro rename to _backup/pages/engine/queue/index.astro diff --git a/src/pages/engine/queue/types.d.ts b/_backup/pages/engine/queue/types.d.ts similarity index 100% rename from src/pages/engine/queue/types.d.ts rename to _backup/pages/engine/queue/types.d.ts diff --git a/src/pages/index.astro b/_backup/pages/index.astro similarity index 100% rename from src/pages/index.astro rename to _backup/pages/index.astro diff --git a/src/pages/input/native-fs/_applet.astro b/_backup/pages/input/native-fs/_applet.astro similarity index 100% rename from src/pages/input/native-fs/_applet.astro rename to _backup/pages/input/native-fs/_applet.astro diff --git a/src/pages/input/native-fs/_manifest.json b/_backup/pages/input/native-fs/_manifest.json similarity index 100% rename from src/pages/input/native-fs/_manifest.json rename to _backup/pages/input/native-fs/_manifest.json diff --git a/src/pages/input/native-fs/index.astro b/_backup/pages/input/native-fs/index.astro similarity index 100% rename from src/pages/input/native-fs/index.astro rename to _backup/pages/input/native-fs/index.astro diff --git a/src/pages/input/opensubsonic/_applet.astro b/_backup/pages/input/opensubsonic/_applet.astro similarity index 100% rename from src/pages/input/opensubsonic/_applet.astro rename to _backup/pages/input/opensubsonic/_applet.astro diff --git a/src/pages/input/opensubsonic/_manifest.json b/_backup/pages/input/opensubsonic/_manifest.json similarity index 100% rename from src/pages/input/opensubsonic/_manifest.json rename to _backup/pages/input/opensubsonic/_manifest.json diff --git a/src/pages/input/opensubsonic/index.astro b/_backup/pages/input/opensubsonic/index.astro similarity index 100% rename from src/pages/input/opensubsonic/index.astro rename to _backup/pages/input/opensubsonic/index.astro diff --git a/src/pages/input/opensubsonic/types.d.ts b/_backup/pages/input/opensubsonic/types.d.ts similarity index 100% rename from src/pages/input/opensubsonic/types.d.ts rename to _backup/pages/input/opensubsonic/types.d.ts diff --git a/src/pages/input/s3/_applet.astro b/_backup/pages/input/s3/_applet.astro similarity index 100% rename from src/pages/input/s3/_applet.astro rename to _backup/pages/input/s3/_applet.astro diff --git a/src/pages/input/s3/_manifest.json b/_backup/pages/input/s3/_manifest.json similarity index 100% rename from src/pages/input/s3/_manifest.json rename to _backup/pages/input/s3/_manifest.json diff --git a/src/pages/input/s3/index.astro b/_backup/pages/input/s3/index.astro similarity index 100% rename from src/pages/input/s3/index.astro rename to _backup/pages/input/s3/index.astro diff --git a/src/pages/orchestrator/process-tracks/_applet.astro b/_backup/pages/orchestrator/process-tracks/_applet.astro similarity index 100% rename from src/pages/orchestrator/process-tracks/_applet.astro rename to _backup/pages/orchestrator/process-tracks/_applet.astro diff --git a/src/pages/orchestrator/process-tracks/_manifest.json b/_backup/pages/orchestrator/process-tracks/_manifest.json similarity index 100% rename from src/pages/orchestrator/process-tracks/_manifest.json rename to _backup/pages/orchestrator/process-tracks/_manifest.json diff --git a/src/pages/orchestrator/process-tracks/index.astro b/_backup/pages/orchestrator/process-tracks/index.astro similarity index 100% rename from src/pages/orchestrator/process-tracks/index.astro rename to _backup/pages/orchestrator/process-tracks/index.astro diff --git a/src/pages/orchestrator/queue-audio/_applet.astro b/_backup/pages/orchestrator/queue-audio/_applet.astro similarity index 100% rename from src/pages/orchestrator/queue-audio/_applet.astro rename to _backup/pages/orchestrator/queue-audio/_applet.astro diff --git a/src/pages/orchestrator/queue-audio/_manifest.json b/_backup/pages/orchestrator/queue-audio/_manifest.json similarity index 100% rename from src/pages/orchestrator/queue-audio/_manifest.json rename to _backup/pages/orchestrator/queue-audio/_manifest.json diff --git a/src/pages/orchestrator/queue-audio/index.astro b/_backup/pages/orchestrator/queue-audio/index.astro similarity index 100% rename from src/pages/orchestrator/queue-audio/index.astro rename to _backup/pages/orchestrator/queue-audio/index.astro diff --git a/src/pages/orchestrator/queue-tracks/_applet.astro b/_backup/pages/orchestrator/queue-tracks/_applet.astro similarity index 100% rename from src/pages/orchestrator/queue-tracks/_applet.astro rename to _backup/pages/orchestrator/queue-tracks/_applet.astro diff --git a/src/pages/orchestrator/queue-tracks/_manifest.json b/_backup/pages/orchestrator/queue-tracks/_manifest.json similarity index 100% rename from src/pages/orchestrator/queue-tracks/_manifest.json rename to _backup/pages/orchestrator/queue-tracks/_manifest.json diff --git a/src/pages/orchestrator/queue-tracks/index.astro b/_backup/pages/orchestrator/queue-tracks/index.astro similarity index 100% rename from src/pages/orchestrator/queue-tracks/index.astro rename to _backup/pages/orchestrator/queue-tracks/index.astro diff --git a/src/pages/orchestrator/search-tracks/_applet.astro b/_backup/pages/orchestrator/search-tracks/_applet.astro similarity index 100% rename from src/pages/orchestrator/search-tracks/_applet.astro rename to _backup/pages/orchestrator/search-tracks/_applet.astro diff --git a/src/pages/orchestrator/search-tracks/_manifest.json b/_backup/pages/orchestrator/search-tracks/_manifest.json similarity index 100% rename from src/pages/orchestrator/search-tracks/_manifest.json rename to _backup/pages/orchestrator/search-tracks/_manifest.json diff --git a/src/pages/orchestrator/search-tracks/index.astro b/_backup/pages/orchestrator/search-tracks/index.astro similarity index 100% rename from src/pages/orchestrator/search-tracks/index.astro rename to _backup/pages/orchestrator/search-tracks/index.astro diff --git a/src/pages/output/indexed-db/_applet.astro b/_backup/pages/output/indexed-db/_applet.astro similarity index 100% rename from src/pages/output/indexed-db/_applet.astro rename to _backup/pages/output/indexed-db/_applet.astro diff --git a/src/pages/output/indexed-db/_manifest.json b/_backup/pages/output/indexed-db/_manifest.json similarity index 100% rename from src/pages/output/indexed-db/_manifest.json rename to _backup/pages/output/indexed-db/_manifest.json diff --git a/src/pages/output/indexed-db/index.astro b/_backup/pages/output/indexed-db/index.astro similarity index 100% rename from src/pages/output/indexed-db/index.astro rename to _backup/pages/output/indexed-db/index.astro diff --git a/src/pages/output/native-fs/_applet.astro b/_backup/pages/output/native-fs/_applet.astro similarity index 100% rename from src/pages/output/native-fs/_applet.astro rename to _backup/pages/output/native-fs/_applet.astro diff --git a/src/pages/output/native-fs/_manifest.json b/_backup/pages/output/native-fs/_manifest.json similarity index 100% rename from src/pages/output/native-fs/_manifest.json rename to _backup/pages/output/native-fs/_manifest.json diff --git a/src/pages/output/native-fs/index.astro b/_backup/pages/output/native-fs/index.astro similarity index 100% rename from src/pages/output/native-fs/index.astro rename to _backup/pages/output/native-fs/index.astro diff --git a/src/pages/output/storacha-automerge/_applet.astro b/_backup/pages/output/storacha-automerge/_applet.astro similarity index 100% rename from src/pages/output/storacha-automerge/_applet.astro rename to _backup/pages/output/storacha-automerge/_applet.astro diff --git a/src/pages/output/storacha-automerge/_manifest.json b/_backup/pages/output/storacha-automerge/_manifest.json similarity index 100% rename from src/pages/output/storacha-automerge/_manifest.json rename to _backup/pages/output/storacha-automerge/_manifest.json diff --git a/src/pages/output/storacha-automerge/index.astro b/_backup/pages/output/storacha-automerge/index.astro similarity index 100% rename from src/pages/output/storacha-automerge/index.astro rename to _backup/pages/output/storacha-automerge/index.astro diff --git a/src/pages/processor/artwork/_applet.astro b/_backup/pages/processor/artwork/_applet.astro similarity index 100% rename from src/pages/processor/artwork/_applet.astro rename to _backup/pages/processor/artwork/_applet.astro diff --git a/src/pages/processor/artwork/_manifest.json b/_backup/pages/processor/artwork/_manifest.json similarity index 100% rename from src/pages/processor/artwork/_manifest.json rename to _backup/pages/processor/artwork/_manifest.json diff --git a/src/pages/processor/artwork/index.astro b/_backup/pages/processor/artwork/index.astro similarity index 100% rename from src/pages/processor/artwork/index.astro rename to _backup/pages/processor/artwork/index.astro diff --git a/src/pages/processor/artwork/types.d.ts b/_backup/pages/processor/artwork/types.d.ts similarity index 100% rename from src/pages/processor/artwork/types.d.ts rename to _backup/pages/processor/artwork/types.d.ts diff --git a/src/pages/processor/metadata/_applet.astro b/_backup/pages/processor/metadata/_applet.astro similarity index 100% rename from src/pages/processor/metadata/_applet.astro rename to _backup/pages/processor/metadata/_applet.astro diff --git a/src/pages/processor/metadata/_manifest.json b/_backup/pages/processor/metadata/_manifest.json similarity index 100% rename from src/pages/processor/metadata/_manifest.json rename to _backup/pages/processor/metadata/_manifest.json diff --git a/src/pages/processor/metadata/index.astro b/_backup/pages/processor/metadata/index.astro similarity index 100% rename from src/pages/processor/metadata/index.astro rename to _backup/pages/processor/metadata/index.astro diff --git a/src/pages/processor/metadata/types.d.ts b/_backup/pages/processor/metadata/types.d.ts similarity index 100% rename from src/pages/processor/metadata/types.d.ts rename to _backup/pages/processor/metadata/types.d.ts diff --git a/src/pages/processor/search/_applet.astro b/_backup/pages/processor/search/_applet.astro similarity index 100% rename from src/pages/processor/search/_applet.astro rename to _backup/pages/processor/search/_applet.astro diff --git a/src/pages/processor/search/_manifest.json b/_backup/pages/processor/search/_manifest.json similarity index 100% rename from src/pages/processor/search/_manifest.json rename to _backup/pages/processor/search/_manifest.json diff --git a/src/pages/processor/search/index.astro b/_backup/pages/processor/search/index.astro similarity index 100% rename from src/pages/processor/search/index.astro rename to _backup/pages/processor/search/index.astro diff --git a/src/pages/processor/search/types.d.ts b/_backup/pages/processor/search/types.d.ts similarity index 100% rename from src/pages/processor/search/types.d.ts rename to _backup/pages/processor/search/types.d.ts diff --git a/src/pages/test/cross-origin/blur.astro b/_backup/pages/test/cross-origin/blur.astro similarity index 100% rename from src/pages/test/cross-origin/blur.astro rename to _backup/pages/test/cross-origin/blur.astro diff --git a/src/pages/test/cross-origin/output.astro b/_backup/pages/test/cross-origin/output.astro similarity index 100% rename from src/pages/test/cross-origin/output.astro rename to _backup/pages/test/cross-origin/output.astro diff --git a/src/pages/theme/blur/index.astro b/_backup/pages/theme/blur/index.astro similarity index 100% rename from src/pages/theme/blur/index.astro rename to _backup/pages/theme/blur/index.astro diff --git a/src/pages/theme/pilot/audio/_applet.astro b/_backup/pages/theme/pilot/audio/_applet.astro similarity index 100% rename from src/pages/theme/pilot/audio/_applet.astro rename to _backup/pages/theme/pilot/audio/_applet.astro diff --git a/src/pages/theme/pilot/audio/_manifest.json b/_backup/pages/theme/pilot/audio/_manifest.json similarity index 100% rename from src/pages/theme/pilot/audio/_manifest.json rename to _backup/pages/theme/pilot/audio/_manifest.json diff --git a/src/pages/theme/pilot/audio/index.astro b/_backup/pages/theme/pilot/audio/index.astro similarity index 100% rename from src/pages/theme/pilot/audio/index.astro rename to _backup/pages/theme/pilot/audio/index.astro diff --git a/src/pages/theme/pilot/audio/types.d.ts b/_backup/pages/theme/pilot/audio/types.d.ts similarity index 100% rename from src/pages/theme/pilot/audio/types.d.ts rename to _backup/pages/theme/pilot/audio/types.d.ts diff --git a/src/pages/theme/pilot/index.astro b/_backup/pages/theme/pilot/index.astro similarity index 100% rename from src/pages/theme/pilot/index.astro rename to _backup/pages/theme/pilot/index.astro diff --git a/src/pages/theme/webamp/index.astro b/_backup/pages/theme/webamp/index.astro similarity index 100% rename from src/pages/theme/webamp/index.astro rename to _backup/pages/theme/webamp/index.astro diff --git a/src/scripts/applet/common.ts b/_backup/scripts/applet/common.ts similarity index 100% rename from src/scripts/applet/common.ts rename to _backup/scripts/applet/common.ts diff --git a/src/scripts/common.ts b/_backup/scripts/common.ts similarity index 100% rename from src/scripts/common.ts rename to _backup/scripts/common.ts diff --git a/src/scripts/configurator/input/worker.ts b/_backup/scripts/configurator/input/worker.ts similarity index 100% rename from src/scripts/configurator/input/worker.ts rename to _backup/scripts/configurator/input/worker.ts diff --git a/src/scripts/configurator/output/connections.ts b/_backup/scripts/configurator/output/connections.ts similarity index 100% rename from src/scripts/configurator/output/connections.ts rename to _backup/scripts/configurator/output/connections.ts diff --git a/src/scripts/configurator/output/constants.ts b/_backup/scripts/configurator/output/constants.ts similarity index 100% rename from src/scripts/configurator/output/constants.ts rename to _backup/scripts/configurator/output/constants.ts diff --git a/src/scripts/configurator/output/context.ts b/_backup/scripts/configurator/output/context.ts similarity index 100% rename from src/scripts/configurator/output/context.ts rename to _backup/scripts/configurator/output/context.ts diff --git a/src/scripts/configurator/output/events.ts b/_backup/scripts/configurator/output/events.ts similarity index 100% rename from src/scripts/configurator/output/events.ts rename to _backup/scripts/configurator/output/events.ts diff --git a/src/scripts/configurator/output/signals.ts b/_backup/scripts/configurator/output/signals.ts similarity index 100% rename from src/scripts/configurator/output/signals.ts rename to _backup/scripts/configurator/output/signals.ts diff --git a/src/scripts/configurator/output/types.d.ts b/_backup/scripts/configurator/output/types.d.ts similarity index 100% rename from src/scripts/configurator/output/types.d.ts rename to _backup/scripts/configurator/output/types.d.ts diff --git a/src/scripts/configurator/output/ui.ts b/_backup/scripts/configurator/output/ui.ts similarity index 100% rename from src/scripts/configurator/output/ui.ts rename to _backup/scripts/configurator/output/ui.ts diff --git a/src/scripts/engine/queue/types.d.ts b/_backup/scripts/engine/queue/types.d.ts similarity index 100% rename from src/scripts/engine/queue/types.d.ts rename to _backup/scripts/engine/queue/types.d.ts diff --git a/src/scripts/engine/queue/worker.ts b/_backup/scripts/engine/queue/worker.ts similarity index 100% rename from src/scripts/engine/queue/worker.ts rename to _backup/scripts/engine/queue/worker.ts diff --git a/src/scripts/input/common.ts b/_backup/scripts/input/common.ts similarity index 100% rename from src/scripts/input/common.ts rename to _backup/scripts/input/common.ts diff --git a/src/scripts/input/native-fs/common.ts b/_backup/scripts/input/native-fs/common.ts similarity index 100% rename from src/scripts/input/native-fs/common.ts rename to _backup/scripts/input/native-fs/common.ts diff --git a/src/scripts/input/native-fs/constants.ts b/_backup/scripts/input/native-fs/constants.ts similarity index 100% rename from src/scripts/input/native-fs/constants.ts rename to _backup/scripts/input/native-fs/constants.ts diff --git a/src/scripts/input/native-fs/mounting.ts b/_backup/scripts/input/native-fs/mounting.ts similarity index 100% rename from src/scripts/input/native-fs/mounting.ts rename to _backup/scripts/input/native-fs/mounting.ts diff --git a/src/scripts/input/native-fs/types.d.ts b/_backup/scripts/input/native-fs/types.d.ts similarity index 100% rename from src/scripts/input/native-fs/types.d.ts rename to _backup/scripts/input/native-fs/types.d.ts diff --git a/src/scripts/input/native-fs/ui.ts b/_backup/scripts/input/native-fs/ui.ts similarity index 100% rename from src/scripts/input/native-fs/ui.ts rename to _backup/scripts/input/native-fs/ui.ts diff --git a/src/scripts/input/native-fs/worker.ts b/_backup/scripts/input/native-fs/worker.ts similarity index 100% rename from src/scripts/input/native-fs/worker.ts rename to _backup/scripts/input/native-fs/worker.ts diff --git a/src/scripts/input/opensubsonic/common.ts b/_backup/scripts/input/opensubsonic/common.ts similarity index 100% rename from src/scripts/input/opensubsonic/common.ts rename to _backup/scripts/input/opensubsonic/common.ts diff --git a/src/scripts/input/opensubsonic/constants.ts b/_backup/scripts/input/opensubsonic/constants.ts similarity index 100% rename from src/scripts/input/opensubsonic/constants.ts rename to _backup/scripts/input/opensubsonic/constants.ts diff --git a/src/scripts/input/opensubsonic/types.d.ts b/_backup/scripts/input/opensubsonic/types.d.ts similarity index 100% rename from src/scripts/input/opensubsonic/types.d.ts rename to _backup/scripts/input/opensubsonic/types.d.ts diff --git a/src/scripts/input/opensubsonic/ui.ts b/_backup/scripts/input/opensubsonic/ui.ts similarity index 100% rename from src/scripts/input/opensubsonic/ui.ts rename to _backup/scripts/input/opensubsonic/ui.ts diff --git a/src/scripts/input/opensubsonic/worker.ts b/_backup/scripts/input/opensubsonic/worker.ts similarity index 100% rename from src/scripts/input/opensubsonic/worker.ts rename to _backup/scripts/input/opensubsonic/worker.ts diff --git a/src/scripts/input/s3/common.ts b/_backup/scripts/input/s3/common.ts similarity index 100% rename from src/scripts/input/s3/common.ts rename to _backup/scripts/input/s3/common.ts diff --git a/src/scripts/input/s3/constants.ts b/_backup/scripts/input/s3/constants.ts similarity index 100% rename from src/scripts/input/s3/constants.ts rename to _backup/scripts/input/s3/constants.ts diff --git a/src/scripts/input/s3/types.d.ts b/_backup/scripts/input/s3/types.d.ts similarity index 100% rename from src/scripts/input/s3/types.d.ts rename to _backup/scripts/input/s3/types.d.ts diff --git a/src/scripts/input/s3/ui.ts b/_backup/scripts/input/s3/ui.ts similarity index 100% rename from src/scripts/input/s3/ui.ts rename to _backup/scripts/input/s3/ui.ts diff --git a/src/scripts/input/s3/worker.ts b/_backup/scripts/input/s3/worker.ts similarity index 100% rename from src/scripts/input/s3/worker.ts rename to _backup/scripts/input/s3/worker.ts diff --git a/src/scripts/output/common.ts b/_backup/scripts/output/common.ts similarity index 100% rename from src/scripts/output/common.ts rename to _backup/scripts/output/common.ts diff --git a/src/scripts/output/indexed-db/constants.ts b/_backup/scripts/output/indexed-db/constants.ts similarity index 100% rename from src/scripts/output/indexed-db/constants.ts rename to _backup/scripts/output/indexed-db/constants.ts diff --git a/src/scripts/output/indexed-db/worker.ts b/_backup/scripts/output/indexed-db/worker.ts similarity index 100% rename from src/scripts/output/indexed-db/worker.ts rename to _backup/scripts/output/indexed-db/worker.ts diff --git a/src/scripts/output/native-fs/constants.ts b/_backup/scripts/output/native-fs/constants.ts similarity index 100% rename from src/scripts/output/native-fs/constants.ts rename to _backup/scripts/output/native-fs/constants.ts diff --git a/src/scripts/output/native-fs/worker.ts b/_backup/scripts/output/native-fs/worker.ts similarity index 100% rename from src/scripts/output/native-fs/worker.ts rename to _backup/scripts/output/native-fs/worker.ts diff --git a/src/scripts/processor/artwork/constants.ts b/_backup/scripts/processor/artwork/constants.ts similarity index 100% rename from src/scripts/processor/artwork/constants.ts rename to _backup/scripts/processor/artwork/constants.ts diff --git a/src/scripts/processor/artwork/types.d.ts b/_backup/scripts/processor/artwork/types.d.ts similarity index 100% rename from src/scripts/processor/artwork/types.d.ts rename to _backup/scripts/processor/artwork/types.d.ts diff --git a/src/scripts/processor/artwork/worker.ts b/_backup/scripts/processor/artwork/worker.ts similarity index 100% rename from src/scripts/processor/artwork/worker.ts rename to _backup/scripts/processor/artwork/worker.ts diff --git a/src/scripts/processor/metadata/common.ts b/_backup/scripts/processor/metadata/common.ts similarity index 100% rename from src/scripts/processor/metadata/common.ts rename to _backup/scripts/processor/metadata/common.ts diff --git a/src/scripts/processor/metadata/types.d.ts b/_backup/scripts/processor/metadata/types.d.ts similarity index 100% rename from src/scripts/processor/metadata/types.d.ts rename to _backup/scripts/processor/metadata/types.d.ts diff --git a/src/scripts/processor/metadata/worker.ts b/_backup/scripts/processor/metadata/worker.ts similarity index 100% rename from src/scripts/processor/metadata/worker.ts rename to _backup/scripts/processor/metadata/worker.ts diff --git a/src/scripts/processor/search/constants.ts b/_backup/scripts/processor/search/constants.ts similarity index 100% rename from src/scripts/processor/search/constants.ts rename to _backup/scripts/processor/search/constants.ts diff --git a/src/scripts/processor/search/types.d.ts b/_backup/scripts/processor/search/types.d.ts similarity index 100% rename from src/scripts/processor/search/types.d.ts rename to _backup/scripts/processor/search/types.d.ts diff --git a/src/scripts/processor/search/worker.ts b/_backup/scripts/processor/search/worker.ts similarity index 100% rename from src/scripts/processor/search/worker.ts rename to _backup/scripts/processor/search/worker.ts diff --git a/src/scripts/spellcaster/README.md b/_backup/scripts/spellcaster/README.md similarity index 100% rename from src/scripts/spellcaster/README.md rename to _backup/scripts/spellcaster/README.md diff --git a/src/scripts/spellcaster/hyperscript.ts b/_backup/scripts/spellcaster/hyperscript.ts similarity index 100% rename from src/scripts/spellcaster/hyperscript.ts rename to _backup/scripts/spellcaster/hyperscript.ts diff --git a/src/scripts/spellcaster/index.ts b/_backup/scripts/spellcaster/index.ts similarity index 100% rename from src/scripts/spellcaster/index.ts rename to _backup/scripts/spellcaster/index.ts diff --git a/src/scripts/spellcaster/spellcaster.ts b/_backup/scripts/spellcaster/spellcaster.ts similarity index 100% rename from src/scripts/spellcaster/spellcaster.ts rename to _backup/scripts/spellcaster/spellcaster.ts diff --git a/src/scripts/spellcaster/util.ts b/_backup/scripts/spellcaster/util.ts similarity index 100% rename from src/scripts/spellcaster/util.ts rename to _backup/scripts/spellcaster/util.ts diff --git a/src/scripts/theme/blur/index.ts b/_backup/scripts/theme/blur/index.ts similarity index 100% rename from src/scripts/theme/blur/index.ts rename to _backup/scripts/theme/blur/index.ts diff --git a/src/scripts/theme/pilot/index.ts b/_backup/scripts/theme/pilot/index.ts similarity index 100% rename from src/scripts/theme/pilot/index.ts rename to _backup/scripts/theme/pilot/index.ts diff --git a/src/scripts/theme/webamp/index.ts b/_backup/scripts/theme/webamp/index.ts similarity index 100% rename from src/scripts/theme/webamp/index.ts rename to _backup/scripts/theme/webamp/index.ts diff --git a/src/styles/animations.css b/_backup/styles/animations.css similarity index 100% rename from src/styles/animations.css rename to _backup/styles/animations.css diff --git a/src/styles/applet/common.css b/_backup/styles/applet/common.css similarity index 100% rename from src/styles/applet/common.css rename to _backup/styles/applet/common.css diff --git a/src/styles/diffuse/colors.css b/_backup/styles/diffuse/colors.css similarity index 100% rename from src/styles/diffuse/colors.css rename to _backup/styles/diffuse/colors.css diff --git a/src/styles/diffuse/fonts.css b/_backup/styles/diffuse/fonts.css similarity index 100% rename from src/styles/diffuse/fonts.css rename to _backup/styles/diffuse/fonts.css diff --git a/src/styles/fonts.css b/_backup/styles/fonts.css similarity index 100% rename from src/styles/fonts.css rename to _backup/styles/fonts.css diff --git a/src/styles/icons/iconoir.css b/_backup/styles/icons/iconoir.css similarity index 100% rename from src/styles/icons/iconoir.css rename to _backup/styles/icons/iconoir.css diff --git a/src/styles/icons/phosphor.css b/_backup/styles/icons/phosphor.css similarity index 100% rename from src/styles/icons/phosphor.css rename to _backup/styles/icons/phosphor.css diff --git a/src/styles/page/index.css b/_backup/styles/page/index.css similarity index 100% rename from src/styles/page/index.css rename to _backup/styles/page/index.css diff --git a/src/styles/pico.scss b/_backup/styles/pico.scss similarity index 100% rename from src/styles/pico.scss rename to _backup/styles/pico.scss diff --git a/src/styles/reset.css b/_backup/styles/reset.css similarity index 100% rename from src/styles/reset.css rename to _backup/styles/reset.css diff --git a/src/styles/theme/blur/index.css b/_backup/styles/theme/blur/index.css similarity index 100% rename from src/styles/theme/blur/index.css rename to _backup/styles/theme/blur/index.css diff --git a/src/styles/theme/blur/variables.css b/_backup/styles/theme/blur/variables.css similarity index 100% rename from src/styles/theme/blur/variables.css rename to _backup/styles/theme/blur/variables.css diff --git a/src/styles/theme/pilot/index.css b/_backup/styles/theme/pilot/index.css similarity index 100% rename from src/styles/theme/pilot/index.css rename to _backup/styles/theme/pilot/index.css diff --git a/src/styles/theme/pilot/variables.css b/_backup/styles/theme/pilot/variables.css similarity index 100% rename from src/styles/theme/pilot/variables.css rename to _backup/styles/theme/pilot/variables.css diff --git a/src/styles/theme/webamp/index.css b/_backup/styles/theme/webamp/index.css similarity index 100% rename from src/styles/theme/webamp/index.css rename to _backup/styles/theme/webamp/index.css diff --git a/src/styles/variables.css b/_backup/styles/variables.css similarity index 100% rename from src/styles/variables.css rename to _backup/styles/variables.css diff --git a/_config.ts b/_config.ts new file mode 100644 index 000000000..a33620f42 --- /dev/null +++ b/_config.ts @@ -0,0 +1,19 @@ +import lume from "lume/mod.ts"; +import esbuild from "lume/plugins/esbuild.ts"; + +const site = lume({ + src: "./src", +}); + +// JS + +site.use(esbuild({ + options: { + bundle: true, + splitting: true, + }, +})); + +site.add([".js", ".d.ts"]); + +export default site; diff --git a/package.json b/_package.backup.json similarity index 100% rename from package.json rename to _package.backup.json diff --git a/app/browser/index.mjs b/app/browser/index.mjs deleted file mode 100644 index e225d1684..000000000 --- a/app/browser/index.mjs +++ /dev/null @@ -1,4 +0,0 @@ -import { signal } from "alien-signals"; -import "../applets/constituent/blur/browser-list.mjs"; - -window.signal = signal; diff --git a/app/common/signals/types.d.ts b/app/common/signals/types.d.ts deleted file mode 100644 index 4e06f063b..000000000 --- a/app/common/signals/types.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { ReactiveNode } from "alien-signals"; - -export interface Signal extends ReactiveNode { - currentValue: T; - pendingValue: T; -} diff --git a/app/components/constituent/blur/browser-list.mjs b/app/components/constituent/blur/browser-list.mjs deleted file mode 100644 index a33860ba6..000000000 --- a/app/components/constituent/blur/browser-list.mjs +++ /dev/null @@ -1,58 +0,0 @@ -import BaseElement from "@enhance/base-element"; -import ElementMixin from "@enhance/shadow-element-mixin"; -import EventHandlerMixin from "@enhance/event-handler-mixin"; -import MorphdomMixin from "@enhance/morphdom-mixin"; -import TemplateMixin from "@enhance/template-mixin"; - -import { effect, signal } from "../../../common/signals/index.mjs"; - -/** - * @import {Signal} from "../../../common/signals/types.d.ts" - * @import {Track} from "../../../common/core/types.d.ts" - */ - -class List extends MorphdomMixin(EventHandlerMixin(TemplateMixin(BaseElement))) { - #teardown = () => {}; - - /** - * @type {Signal} - */ - tracks = signal(["a"]); - - // LIFECYCLE - - connectedCallback() { - this.#teardown = effect(() => { - const state = { ...this.state, tracks: this.tracks() }; - this.innerHTML = this.render({ html: this.html, state }); - }); - } - - disconnectedCallback() { - this.#teardown(); - } - - // RENDER - - render({ html, state }) { - console.log("Rendering", state.tracks); - - const list = (state.tracks || []).map((t) => html`
    ${t}
    `); - - console.log(list); - - return html` - -
    ${list.join("")}
    - `; - } -} - -customElements.define("constituent-blur-browser-list", List); - -export { List as ConstituentBlurBrowserList }; -export default List; diff --git a/app/pages/index.html b/app/pages/index.html deleted file mode 100644 index 5ad8dbc71..000000000 --- a/app/pages/index.html +++ /dev/null @@ -1,6 +0,0 @@ -
    -

    My awesome page

    - - -
    - diff --git a/astro.config.js b/astro.config.js deleted file mode 100644 index 61c8ede6a..000000000 --- a/astro.config.js +++ /dev/null @@ -1,41 +0,0 @@ -import { defineConfig } from "astro/config"; -import { fileURLToPath } from "node:url"; -import scope from "astro-scope"; -import path from "node:path"; -import tsconfigPaths from "vite-tsconfig-paths"; -import wasm from "vite-plugin-wasm"; - -import purgecss from "astro-purgecss"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -export default defineConfig({ - integrations: [scope(), purgecss()], - build: { - inlineStylesheets: "never", - }, - vite: { - plugins: [tsconfigPaths(), wasm()], - server: { - hmr: false, - }, - build: { - target: "esnext", - }, - resolve: { - alias: { - "@applets": path.resolve(__dirname, "./src/pages"), - "@layouts": path.resolve(__dirname, "./src/layouts"), - "@pages": path.resolve(__dirname, "./src/pages"), - "@scripts": path.resolve(__dirname, "./src/scripts"), - "@styles": path.resolve(__dirname, "./src/styles"), - "@src": path.resolve(__dirname, "./src"), - "@phosphor-icons": path.resolve(__dirname, "./node_modules/@phosphor-icons/web/src"), - }, - }, - worker: { - format: "es", - }, - }, -}); diff --git a/deno.json b/deno.json deleted file mode 100644 index 2ee230f34..000000000 --- a/deno.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "imports": { - "@std/fs": "jsr:@std/fs@^1.0.15" - }, - "tasks": { - "astro": "astro", - "astro:build": "astro build", - "build": { - "command": "deno task copy-types", - "dependencies": ["astro:build"] - }, - "copy-types": "deno run --allow-read --allow-write tasks/copy-types.ts", - "deploy:netlify": "npx netlify deploy --prod", - "dev": "astro dev" - } -} diff --git a/deno.jsonc b/deno.jsonc new file mode 100644 index 000000000..b05b4c2f2 --- /dev/null +++ b/deno.jsonc @@ -0,0 +1,35 @@ +{ + "imports": { + // Dependencies + "@std/fs": "jsr:@std/fs@^1.0.15", + "alien-signals": "npm:alien-signals@^3.0.0", + "lume/": "https://deno.land/x/lume@v3.0.11/", + "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", + "morphdom": "npm:morphdom@^2.7.7", + + // Source + "@common/": "./src/common/", + "@elements/": "./src/elements/", + }, + "tasks": { + "build": "deno task lume", + "copy-types": "deno run --allow-read --allow-write tasks/copy-types.ts", + "deploy:netlify": "npx netlify deploy --prod", + "lume": "echo \"import 'lume/cli.ts'\" | DENO_DIR=_vendor deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run -", + "serve": "deno task lume -s", + }, + "compilerOptions": { + "checkJs": true, + "paths": { + "@src/*": ["src/*"], + }, + "types": ["lume/types.ts"], + }, + "unstable": ["temporal", "fmt-component"], + "lint": { + "plugins": ["https://deno.land/x/lume@v3.0.11/lint.ts"], + "rules": { + "exclude": ["no-import-prefix"], + }, + }, +} diff --git a/deno.lock b/deno.lock index a7268c392..7cc9be29b 100644 --- a/deno.lock +++ b/deno.lock @@ -1,64 +1,463 @@ { "version": "5", "specifiers": { + "jsr:@deno/loader@0.3.6": "0.3.6", + "jsr:@std/cli@1.0.22": "1.0.22", + "jsr:@std/cli@^1.0.21": "1.0.22", + "jsr:@std/collections@^1.1.3": "1.1.3", + "jsr:@std/crypto@1.0.5": "1.0.5", + "jsr:@std/encoding@1.0.10": "1.0.10", + "jsr:@std/encoding@^1.0.10": "1.0.10", + "jsr:@std/fmt@1.0.8": "1.0.8", + "jsr:@std/fmt@^1.0.8": "1.0.8", + "jsr:@std/front-matter@1.0.9": "1.0.9", "jsr:@std/fs@1": "1.0.16", - "jsr:@std/path@^1.0.8": "1.0.8" + "jsr:@std/fs@1.0.19": "1.0.19", + "jsr:@std/fs@^1.0.15": "1.0.19", + "jsr:@std/fs@^1.0.19": "1.0.19", + "jsr:@std/html@^1.0.4": "1.0.5", + "jsr:@std/http@1.0.20": "1.0.20", + "jsr:@std/internal@^1.0.10": "1.0.12", + "jsr:@std/internal@^1.0.9": "1.0.12", + "jsr:@std/json@^1.0.2": "1.0.2", + "jsr:@std/jsonc@1.0.2": "1.0.2", + "jsr:@std/media-types@^1.1.0": "1.1.0", + "jsr:@std/net@^1.0.4": "1.0.6", + "jsr:@std/path@1.1.2": "1.1.2", + "jsr:@std/path@^1.0.8": "1.0.8", + "jsr:@std/path@^1.1.1": "1.1.2", + "jsr:@std/semver@1.0.5": "1.0.5", + "jsr:@std/streams@^1.0.10": "1.0.13", + "jsr:@std/toml@1.0.10": "1.0.10", + "jsr:@std/toml@^1.0.3": "1.0.10", + "jsr:@std/yaml@1.0.9": "1.0.9", + "jsr:@std/yaml@^1.0.5": "1.0.9", + "npm:@types/node@*": "24.2.0", + "npm:alien-signals@3": "3.0.0", + "npm:lightningcss-wasm@1.30.1": "1.30.1", + "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", + "npm:markdown-it-deflist@3.0.0": "3.0.0", + "npm:markdown-it@14.1.0": "14.1.0", + "npm:morphdom@^2.7.7": "2.7.7" }, "jsr": { + "@deno/loader@0.3.6": { + "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" + }, + "@std/cli@1.0.22": { + "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" + }, + "@std/collections@1.1.3": { + "integrity": "bf8b0818886df6a32b64c7d3b037a425111f28278d69fd0995aeb62777c986b0" + }, + "@std/crypto@1.0.5": { + "integrity": "0dcfbb319fe0bba1bd3af904ceb4f948cde1b92979ec1614528380ed308a3b40" + }, + "@std/encoding@1.0.10": { + "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" + }, + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + }, + "@std/front-matter@1.0.9": { + "integrity": "ee6201d06674cbef137dda2252f62477450b48249e7d8d9ab57a30f85ff6f051", + "dependencies": [ + "jsr:@std/toml@^1.0.3", + "jsr:@std/yaml@^1.0.5" + ] + }, "@std/fs@1.0.16": { "integrity": "81878f62b6eeda0bf546197fc3daa5327c132fee1273f6113f940784a468b036", "dependencies": [ - "jsr:@std/path" + "jsr:@std/path@^1.0.8" + ] + }, + "@std/fs@1.0.19": { + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", + "dependencies": [ + "jsr:@std/internal@^1.0.9", + "jsr:@std/path@^1.1.1" + ] + }, + "@std/html@1.0.5": { + "integrity": "4e2d693f474cae8c16a920fa5e15a3b72267b94b84667f11a50c6dd1cb18d35e" + }, + "@std/http@1.0.20": { + "integrity": "b5cc33fc001bccce65ed4c51815668c9891c69ccd908295997e983d8f56070a1", + "dependencies": [ + "jsr:@std/cli@^1.0.21", + "jsr:@std/encoding@^1.0.10", + "jsr:@std/fmt@^1.0.8", + "jsr:@std/fs@^1.0.19", + "jsr:@std/html", + "jsr:@std/media-types", + "jsr:@std/net", + "jsr:@std/path@^1.1.1", + "jsr:@std/streams" + ] + }, + "@std/internal@1.0.12": { + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, + "@std/json@1.0.2": { + "integrity": "d9e5497801c15fb679f55a2c01c7794ad7a5dfda4dd1bebab5e409cb5e0d34d4" + }, + "@std/jsonc@1.0.2": { + "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7", + "dependencies": [ + "jsr:@std/json" ] }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/net@1.0.6": { + "integrity": "110735f93e95bb9feb95790a8b1d1bf69ec0dc74f3f97a00a76ea5efea25500c" + }, "@std/path@1.0.8": { "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" + }, + "@std/path@1.1.2": { + "integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038", + "dependencies": [ + "jsr:@std/internal@^1.0.10" + ] + }, + "@std/semver@1.0.5": { + "integrity": "529f79e83705714c105ad0ba55bec0f9da0f24d2f726b6cc1c15e505cc2c0624" + }, + "@std/streams@1.0.13": { + "integrity": "772d208cd0d3e5dac7c1d9e6cdb25842846d136eea4a41a62e44ed4ab0c8dd9e" + }, + "@std/toml@1.0.10": { + "integrity": "87b2b7ff95afe7209a868732eb013a2707be29a15229f5b57bb13eededff4655", + "dependencies": [ + "jsr:@std/collections" + ] + }, + "@std/yaml@1.0.9": { + "integrity": "6bad3dc766dd85b4b37eabcba81b6aa4eac7a392792ae29abcfb0f90602d55bb" } }, - "workspace": { - "dependencies": [ - "jsr:@std/fs@^1.0.15" - ], - "packageJson": { + "npm": { + "@types/node@24.2.0": { + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", + "dependencies": [ + "undici-types" + ] + }, + "alien-signals@3.0.0": { + "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==" + }, + "argparse@2.0.1": { + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities@4.5.0": { + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "lightningcss-wasm@1.30.1": { + "integrity": "sha512-KJTnKEn0REV6DoJzxG0m5EKVEFA1CVE1isDYpXjsuqWXwLKFPJtA9Z9BSzPZJwAZFN2KaUzy+IWGP59p5bm2sA==" + }, + "linkify-it@5.0.0": { + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": [ + "uc.micro" + ] + }, + "markdown-it-attrs@4.3.1_markdown-it@14.1.0": { + "integrity": "sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==", "dependencies": [ - "npm:98.css@~0.1.21", - "npm:@automerge/automerge@^3.0.0-beta.0", - "npm:@js-temporal/polyfill@~0.5.1", - "npm:@jsr/bradenmacdonald__s3-lite-client@0.9", - "npm:@jsr/okikio__transferables@^1.0.2", - "npm:@jsr/std__media-types@^1.1.0", - "npm:@lift-html/alien@^0.0.1", - "npm:@okikio/sharedworker@^1.1.0", - "npm:@orama/orama@^3.1.7", - "npm:@orama/plugin-qps@^3.1.7", - "npm:@phosphor-icons/web@^2.1.2", - "npm:@picocss/pico@^2.1.1", - "npm:@tokenizer/http@~0.9.2", - "npm:@tokenizer/range@0.13", - "npm:@types/throttle-debounce@^5.0.2", - "npm:@types/wicg-file-system-access@^2023.10.6", - "npm:alien-signals@^2.0.7", - "npm:astro-purgecss@^5.2.2", - "npm:astro-scope@^3.0.1", - "npm:astro@^5.7.4", - "npm:comlink@^4.4.2", - "npm:fast-average-color@^9.5.0", - "npm:iconoir@^7.11.0", - "npm:idb-keyval@^6.2.1", - "npm:music-metadata@^11.2.3", - "npm:netlify@^22.1.0", - "npm:purgecss@^7.0.2", - "npm:query-string@^9.1.2", - "npm:sass@^1.87.0", - "npm:subsonic-api@^3.1.2", - "npm:throttle-debounce@^5.0.2", - "npm:uint8arrays@^5.1.0", - "npm:uri-js@^4.4.1", - "npm:vite-plugin-wasm@^3.4.1", - "npm:vite-tsconfig-paths@^5.1.4", - "npm:webamp@^2.2.0", - "npm:xxh32@^2.0.5" + "markdown-it" ] + }, + "markdown-it-deflist@3.0.0": { + "integrity": "sha512-OxPmQ/keJZwbubjiQWOvKLHwpV2wZ5I3Smc81OjhwbfJsjdRrvD5aLTQxmZzzePeO0kbGzAo3Krk4QLgA8PWLg==" + }, + "markdown-it@14.1.0": { + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dependencies": [ + "argparse", + "entities", + "linkify-it", + "mdurl", + "punycode.js", + "uc.micro" + ], + "bin": true + }, + "mdurl@2.0.0": { + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "morphdom@2.7.7": { + "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==" + }, + "punycode.js@2.3.1": { + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" + }, + "uc.micro@2.1.0": { + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "undici-types@7.10.0": { + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" } + }, + "remote": { + "https://cdn.jsdelivr.net/gh/lumeland/bar@0.1.11/types.ts": "38f3714e1432c174009495333972f85fb306eb6313112ac8830fda9f1f47e87f", + "https://deno.land/std@0.170.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", + "https://deno.land/std@0.170.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", + "https://deno.land/std@0.170.0/encoding/base64.ts": "8605e018e49211efc767686f6f687827d7f5fd5217163e981d8d693105640d7a", + "https://deno.land/std@0.170.0/fmt/colors.ts": "03ad95e543d2808bc43c17a3dd29d25b43d0f16287fe562a0be89bf632454a12", + "https://deno.land/std@0.170.0/path/_constants.ts": "df1db3ffa6dd6d1252cc9617e5d72165cd2483df90e93833e13580687b6083c3", + "https://deno.land/std@0.170.0/path/_interface.ts": "ee3b431a336b80cf445441109d089b70d87d5e248f4f90ff906820889ecf8d09", + "https://deno.land/std@0.170.0/path/_util.ts": "d16be2a16e1204b65f9d0dfc54a9bc472cafe5f4a190b3c8471ec2016ccd1677", + "https://deno.land/std@0.170.0/path/common.ts": "bee563630abd2d97f99d83c96c2fa0cca7cee103e8cb4e7699ec4d5db7bd2633", + "https://deno.land/std@0.170.0/path/glob.ts": "81cc6c72be002cd546c7a22d1f263f82f63f37fe0035d9726aa96fc8f6e4afa1", + "https://deno.land/std@0.170.0/path/mod.ts": "cf7cec7ac11b7048bb66af8ae03513e66595c279c65cfa12bfc07d9599608b78", + "https://deno.land/std@0.170.0/path/posix.ts": "b859684bc4d80edfd4cad0a82371b50c716330bed51143d6dcdbe59e6278b30c", + "https://deno.land/std@0.170.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", + "https://deno.land/std@0.170.0/path/win32.ts": "7cebd2bda6657371adc00061a1d23fdd87bcdf64b4843bb148b0b24c11b40f69", + "https://deno.land/x/cliffy@v0.25.7/_utils/distance.ts": "02af166952c7c358ac83beae397aa2fbca4ad630aecfcd38d92edb1ea429f004", + "https://deno.land/x/cliffy@v0.25.7/ansi/ansi.ts": "7f43d07d31dd7c24b721bb434c39cbb5132029fa4be3dd8938873065f65e5810", + "https://deno.land/x/cliffy@v0.25.7/ansi/ansi_escapes.ts": "885f61f343223f27b8ec69cc138a54bea30542924eacd0f290cd84edcf691387", + "https://deno.land/x/cliffy@v0.25.7/ansi/chain.ts": "31fb9fcbf72fed9f3eb9b9487270d2042ccd46a612d07dd5271b1a80ae2140a0", + "https://deno.land/x/cliffy@v0.25.7/ansi/colors.ts": "5f71993af5bd1aa0a795b15f41692d556d7c89584a601fed75997df844b832c9", + "https://deno.land/x/cliffy@v0.25.7/ansi/cursor_position.ts": "d537491e31d9c254b208277448eff92ff7f55978c4928dea363df92c0df0813f", + "https://deno.land/x/cliffy@v0.25.7/ansi/deps.ts": "0f35cb7e91868ce81561f6a77426ea8bc55dc15e13f84c7352f211023af79053", + "https://deno.land/x/cliffy@v0.25.7/ansi/mod.ts": "bb4e6588e6704949766205709463c8c33b30fec66c0b1846bc84a3db04a4e075", + "https://deno.land/x/cliffy@v0.25.7/ansi/tty.ts": "8fb064c17ead6cdf00c2d3bc87a9fd17b1167f2daa575c42b516f38bdb604673", + "https://deno.land/x/cliffy@v0.25.7/command/_errors.ts": "a9bd23dc816b32ec96c9b8f3057218241778d8c40333b43341138191450965e5", + "https://deno.land/x/cliffy@v0.25.7/command/_utils.ts": "9ab3d69fabab6c335b881b8a5229cbd5db0c68f630a1c307aff988b6396d9baf", + "https://deno.land/x/cliffy@v0.25.7/command/command.ts": "a2b83c612acd65c69116f70dec872f6da383699b83874b70fcf38cddf790443f", + "https://deno.land/x/cliffy@v0.25.7/command/completions/_bash_completions_generator.ts": "43b4abb543d4dc60233620d51e69d82d3b7c44e274e723681e0dce2a124f69f9", + "https://deno.land/x/cliffy@v0.25.7/command/completions/_fish_completions_generator.ts": "d0289985f5cf0bd288c05273bfa286b24c27feb40822eb7fd9d7fee64e6580e8", + "https://deno.land/x/cliffy@v0.25.7/command/completions/_zsh_completions_generator.ts": "14461eb274954fea4953ee75938821f721da7da607dc49bcc7db1e3f33a207bd", + "https://deno.land/x/cliffy@v0.25.7/command/completions/bash.ts": "053aa2006ec327ccecacb00ba28e5eb836300e5c1bec1b3cfaee9ddcf8189756", + "https://deno.land/x/cliffy@v0.25.7/command/completions/complete.ts": "58df61caa5e6220ff2768636a69337923ad9d4b8c1932aeb27165081c4d07d8b", + "https://deno.land/x/cliffy@v0.25.7/command/completions/fish.ts": "9938beaa6458c6cf9e2eeda46a09e8cd362d4f8c6c9efe87d3cd8ca7477402a5", + "https://deno.land/x/cliffy@v0.25.7/command/completions/mod.ts": "aeef7ec8e319bb157c39a4bab8030c9fe8fa327b4c1e94c9c1025077b45b40c0", + "https://deno.land/x/cliffy@v0.25.7/command/completions/zsh.ts": "8b04ab244a0b582f7927d405e17b38602428eeb347a9968a657e7ea9f40e721a", + "https://deno.land/x/cliffy@v0.25.7/command/deprecated.ts": "bbe6670f1d645b773d04b725b8b8e7814c862c9f1afba460c4d599ffe9d4983c", + "https://deno.land/x/cliffy@v0.25.7/command/deps.ts": "275b964ce173770bae65f6b8ebe9d2fd557dc10292cdd1ed3db1735f0d77fa1d", + "https://deno.land/x/cliffy@v0.25.7/command/help/_help_generator.ts": "f7c349cb2ddb737e70dc1f89bcb1943ca9017a53506be0d4138e0aadb9970a49", + "https://deno.land/x/cliffy@v0.25.7/command/help/mod.ts": "09d74d3eb42d21285407cda688074c29595d9c927b69aedf9d05ff3f215820d3", + "https://deno.land/x/cliffy@v0.25.7/command/mod.ts": "d0a32df6b14028e43bb2d41fa87d24bc00f9662a44e5a177b3db02f93e473209", + "https://deno.land/x/cliffy@v0.25.7/command/type.ts": "24e88e3085e1574662b856ccce70d589959648817135d4469fab67b9cce1b364", + "https://deno.land/x/cliffy@v0.25.7/command/types.ts": "ae02eec0ed7a769f7dba2dd5d3a931a61724b3021271b1b565cf189d9adfd4a0", + "https://deno.land/x/cliffy@v0.25.7/command/types/action_list.ts": "33c98d449617c7a563a535c9ceb3741bde9f6363353fd492f90a74570c611c27", + "https://deno.land/x/cliffy@v0.25.7/command/types/boolean.ts": "3879ec16092b4b5b1a0acb8675f8c9250c0b8a972e1e4c7adfba8335bd2263ed", + "https://deno.land/x/cliffy@v0.25.7/command/types/child_command.ts": "f1fca390c7fbfa7a713ca15ef55c2c7656bcbb394d50e8ef54085bdf6dc22559", + "https://deno.land/x/cliffy@v0.25.7/command/types/command.ts": "325d0382e383b725fd8d0ef34ebaeae082c5b76a1f6f2e843fee5dbb1a4fe3ac", + "https://deno.land/x/cliffy@v0.25.7/command/types/enum.ts": "2178345972adf7129a47e5f02856ca3e6852a91442a1c78307dffb8a6a3c6c9f", + "https://deno.land/x/cliffy@v0.25.7/command/types/file.ts": "8618f16ac9015c8589cbd946b3de1988cc4899b90ea251f3325c93c46745140e", + "https://deno.land/x/cliffy@v0.25.7/command/types/integer.ts": "29864725fd48738579d18123d7ee78fed37515e6dc62146c7544c98a82f1778d", + "https://deno.land/x/cliffy@v0.25.7/command/types/number.ts": "aeba96e6f470309317a16b308c82e0e4138a830ec79c9877e4622c682012bc1f", + "https://deno.land/x/cliffy@v0.25.7/command/types/string.ts": "e4dadb08a11795474871c7967beab954593813bb53d9f69ea5f9b734e43dc0e0", + "https://deno.land/x/cliffy@v0.25.7/command/upgrade/mod.ts": "17e2df3b620905583256684415e6c4a31e8de5c59066eb6d6c9c133919292dc4", + "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider.ts": "d6fb846043232cbd23c57d257100c7fc92274984d75a5fead0f3e4266dc76ab8", + "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider/deno_land.ts": "24f8d82e38c51e09be989f30f8ad21f9dd41ac1bb1973b443a13883e8ba06d6d", + "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider/github.ts": "99e1b133dd446c6aa79f69e69c46eb8bc1c968dd331c2a7d4064514a317c7b59", + "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider/nest_land.ts": "0e07936cea04fa41ac9297f32d87f39152ea873970c54cb5b4934b12fee1885e", + "https://deno.land/x/cliffy@v0.25.7/command/upgrade/upgrade_command.ts": "3640a287d914190241ea1e636774b1b4b0e1828fa75119971dd5304784061e05", + "https://deno.land/x/cliffy@v0.25.7/flags/_errors.ts": "f1fbb6bfa009e7950508c9d491cfb4a5551027d9f453389606adb3f2327d048f", + "https://deno.land/x/cliffy@v0.25.7/flags/_utils.ts": "340d3ecab43cde9489187e1f176504d2c58485df6652d1cdd907c0e9c3ce4cc2", + "https://deno.land/x/cliffy@v0.25.7/flags/_validate_flags.ts": "16eb5837986c6f6f7620817820161a78d66ce92d690e3697068726bbef067452", + "https://deno.land/x/cliffy@v0.25.7/flags/deprecated.ts": "a72a35de3cc7314e5ebea605ca23d08385b218ef171c32a3f135fb4318b08126", + "https://deno.land/x/cliffy@v0.25.7/flags/flags.ts": "68a9dfcacc4983a84c07ba19b66e5e9fccd04389fad215210c60fb414cc62576", + "https://deno.land/x/cliffy@v0.25.7/flags/mod.ts": "b21c2c135cd2437cc16245c5f168a626091631d6d4907ad10db61c96c93bdb25", + "https://deno.land/x/cliffy@v0.25.7/flags/types.ts": "7452ea5296758fb7af89930349ce40d8eb9a43b24b3f5759283e1cb5113075fd", + "https://deno.land/x/cliffy@v0.25.7/flags/types/boolean.ts": "4c026dd66ec9c5436860dc6d0241427bdb8d8e07337ad71b33c08193428a2236", + "https://deno.land/x/cliffy@v0.25.7/flags/types/integer.ts": "b60d4d590f309ddddf066782d43e4dc3799f0e7d08e5ede7dc62a5ee94b9a6d9", + "https://deno.land/x/cliffy@v0.25.7/flags/types/number.ts": "610936e2d29de7c8c304b65489a75ebae17b005c6122c24e791fbed12444d51e", + "https://deno.land/x/cliffy@v0.25.7/flags/types/string.ts": "e89b6a5ce322f65a894edecdc48b44956ec246a1d881f03e97bbda90dd8638c5", + "https://deno.land/x/cliffy@v0.25.7/keycode/key_code.ts": "c4ab0ffd102c2534962b765ded6d8d254631821bf568143d9352c1cdcf7a24be", + "https://deno.land/x/cliffy@v0.25.7/keycode/key_codes.ts": "917f0a2da0dbace08cf29bcfdaaa2257da9fe7e705fff8867d86ed69dfb08cfe", + "https://deno.land/x/cliffy@v0.25.7/keycode/mod.ts": "292d2f295316c6e0da6955042a7b31ab2968ff09f2300541d00f05ed6c2aa2d4", + "https://deno.land/x/cliffy@v0.25.7/mod.ts": "e3515ccf6bd4e4ac89322034e07e2332ed71901e4467ee5bc9d72851893e167b", + "https://deno.land/x/cliffy@v0.25.7/prompt/_generic_input.ts": "737cff2de02c8ce35250f5dd79c67b5fc176423191a2abd1f471a90dd725659e", + "https://deno.land/x/cliffy@v0.25.7/prompt/_generic_list.ts": "79b301bf09eb19f0d070d897f613f78d4e9f93100d7e9a26349ef0bfaa7408d2", + "https://deno.land/x/cliffy@v0.25.7/prompt/_generic_prompt.ts": "8630ce89a66d83e695922df41721cada52900b515385d86def597dea35971bb2", + "https://deno.land/x/cliffy@v0.25.7/prompt/_generic_suggestions.ts": "2a8b619f91e8f9a270811eff557f10f1343a444a527b5fc22c94de832939920c", + "https://deno.land/x/cliffy@v0.25.7/prompt/_utils.ts": "676cca30762656ed1a9bcb21a7254244278a23ffc591750e98a501644b6d2df3", + "https://deno.land/x/cliffy@v0.25.7/prompt/checkbox.ts": "e5a5a9adbb86835dffa2afbd23c6f7a8fe25a9d166485388ef25aba5dc3fbf9e", + "https://deno.land/x/cliffy@v0.25.7/prompt/confirm.ts": "94c8e55de3bbcd53732804420935c432eab29945497d1c47c357d236a89cb5f6", + "https://deno.land/x/cliffy@v0.25.7/prompt/deps.ts": "4c38ab18e55a792c9a136c1c29b2b6e21ea4820c45de7ef4cf517ce94012c57d", + "https://deno.land/x/cliffy@v0.25.7/prompt/figures.ts": "26af0fbfe21497220e4b887bb550fab997498cde14703b98e78faf370fbb4b94", + "https://deno.land/x/cliffy@v0.25.7/prompt/input.ts": "ee45532e0a30c2463e436e08ae291d79d1c2c40872e17364c96d2b97c279bf4d", + "https://deno.land/x/cliffy@v0.25.7/prompt/list.ts": "6780427ff2a932a48c9b882d173c64802081d6cdce9ff618d66ba6504b6abc50", + "https://deno.land/x/cliffy@v0.25.7/prompt/mod.ts": "195aed14d10d279914eaa28c696dec404d576ca424c097a5bc2b4a7a13b66c89", + "https://deno.land/x/cliffy@v0.25.7/prompt/number.ts": "015305a76b50138234dde4fd50eb886c6c7c0baa1b314caf811484644acdc2cf", + "https://deno.land/x/cliffy@v0.25.7/prompt/prompt.ts": "0e7f6a1d43475ee33fb25f7d50749b2f07fc0bcddd9579f3f9af12d05b4a4412", + "https://deno.land/x/cliffy@v0.25.7/prompt/secret.ts": "58745f5231fb2c44294c4acf2511f8c5bfddfa1e12f259580ff90dedea2703d6", + "https://deno.land/x/cliffy@v0.25.7/prompt/select.ts": "1e982eae85718e4e15a3ee10a5ae2233e532d7977d55888f3a309e8e3982b784", + "https://deno.land/x/cliffy@v0.25.7/prompt/toggle.ts": "842c3754a40732f2e80bcd4670098713e402e64bd930e6cab2b787f7ad4d931a", + "https://deno.land/x/cliffy@v0.25.7/table/border.ts": "2514abae4e4f51eda60a5f8c927ba24efd464a590027e900926b38f68e01253c", + "https://deno.land/x/cliffy@v0.25.7/table/cell.ts": "1d787d8006ac8302020d18ec39f8d7f1113612c20801b973e3839de9c3f8b7b3", + "https://deno.land/x/cliffy@v0.25.7/table/deps.ts": "5b05fa56c1a5e2af34f2103fd199e5f87f0507549963019563eae519271819d2", + "https://deno.land/x/cliffy@v0.25.7/table/layout.ts": "46bf10ae5430cf4fbb92f23d588230e9c6336edbdb154e5c9581290562b169f4", + "https://deno.land/x/cliffy@v0.25.7/table/mod.ts": "e74f69f38810ee6139a71132783765feb94436a6619c07474ada45b465189834", + "https://deno.land/x/cliffy@v0.25.7/table/row.ts": "5f519ba7488d2ef76cbbf50527f10f7957bfd668ce5b9169abbc44ec88302645", + "https://deno.land/x/cliffy@v0.25.7/table/table.ts": "ec204c9d08bb3ff1939c5ac7412a4c9ed7d00925d4fc92aff9bfe07bd269258d", + "https://deno.land/x/cliffy@v0.25.7/table/utils.ts": "187bb7dcbcfb16199a5d906113f584740901dfca1007400cba0df7dcd341bc29", + "https://deno.land/x/deno_dom@v0.1.56/build/deno-wasm/deno-wasm-dynamic.js": "fd05e83a855aa68b09396dc47a7638ef526c39917971715ac37e0fc3227db886", + "https://deno.land/x/deno_dom@v0.1.56/build/deno-wasm/deno-wasm.js": "ccde5219e42040b8f7a8b653acc6c8cca197c29f98d6b75f74c48111e34bcbea", + "https://deno.land/x/deno_dom@v0.1.56/build/deno-wasm/deno-wasm_bg-wasm.js": "52c57905a74047d1574f0b96e301ef1d5974cd962705615555b5e46b5ac420e4", + "https://deno.land/x/deno_dom@v0.1.56/build/deno-wasm/deno-wasm_bg.wasm": "b5fbd7ede316f7c13e4a7b927a053a35b475a9acce7c7cae864e91d9b8dd24c7", + "https://deno.land/x/deno_dom@v0.1.56/build/deno-wasm/env.js": "17da784c11b192c591dbf7df21ec6f65f63f45ca9a713e4ca100f3c886b4023f", + "https://deno.land/x/deno_dom@v0.1.56/build/deno-wasm/wbg.js": "b5b6de12bc010fa23438c8a8276067b9044a405da516d0bbe4ae61b7c6d61a22", + "https://deno.land/x/deno_dom@v0.1.56/deno-dom-wasm.ts": "34f0654b452568fbd95b8d1b2a493de19710ac9ceeb6b82f541d09c29613572d", + "https://deno.land/x/deno_dom@v0.1.56/src/api.ts": "0ff5790f0a3eeecb4e00b7d8fbfa319b165962cf6d0182a65ba90f158d74f7d7", + "https://deno.land/x/deno_dom@v0.1.56/src/constructor-lock.ts": "0e7b297e8b9cf921a3b0d3a692ec5fb462c5afc47ec554292e20090b9e16b40a", + "https://deno.land/x/deno_dom@v0.1.56/src/deserialize.ts": "514953418b7ae558ed7361ad9be21013f46cba2f58bd7f4acc90cf1e89f9c8cf", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/document-fragment.ts": "0b915d094830d43b330dc2fb8012b990f2c815773c6cdcd4a9fdff99fe47412e", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/document.ts": "ad584ac4ce6dce03f0ff6ef4b7db86fd598f9c7824da1387f7f2acd7d6948e4a", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/dom-parser.ts": "ab5e8382700bc3936ac67e8d11b7bb9c6999a994ac8b070b7cae94e2d2ecee5a", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/element.ts": "9726ebf139b97ae96671d38da720988cfd6481ff9068ba13f3b0d00e72f0c8c0", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/elements/html-template-element.ts": "1707dfb4cbb145f3bcb94426d7cdedbaa336620d0afed30e99f50fe87ba24a98", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/html-collection.ts": "dcf328e883877f7748d3e20fb6319e739f297a6e24f4b00ec5b1a2f390cfa3c6", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/node-list.ts": "be9793475d82539da8b97a17b6b5538cc723538c10cc5820a23e5e4b2248845d", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/node.ts": "53ada9e4b2ae21f10f5941ff257ed4585920ae392020544648f349c05d15d30c", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/selectors/custom-api.ts": "852696bd58e534bc41bd3be9e2250b60b67cd95fd28ed16b1deff1d548531a71", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/selectors/nwsapi-types.ts": "c43b36c36acc5d32caabaa54fda8c9d239b2b0fcbce9a28efb93c84aa1021698", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/selectors/nwsapi.js": "985d7d8fc1eabbb88946b47a1c44c1b2d4aa79ff23c21424219f1528fa27a2ff", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/selectors/selectors.ts": "83eab57be2290fb48e3130533448c93c6c61239f2a2f3b85f1917f80ca0fdc75", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/selectors/sizzle-types.ts": "78149e2502409989ce861ed636b813b059e16bc267bb543e7c2b26ef43e4798b", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/selectors/sizzle.js": "c3aed60c1045a106d8e546ac2f85cc82e65f62d9af2f8f515210b9212286682a", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/string-cache.ts": "8e935804f7bac244cc70cec90a28c9f6d30fea14c61c2c4ea48fca274376d786", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/utils-types.ts": "96db30e3e4a75b194201bb9fa30988215da7f91b380fca6a5143e51ece2a8436", + "https://deno.land/x/deno_dom@v0.1.56/src/dom/utils.ts": "bc429635e9204051ba1ecc1b212031b5ee7c6bcd95120c91bef696804aa67e74", + "https://deno.land/x/deno_dom@v0.1.56/src/parser.ts": "e06b2300d693e6ae7564e53dfa5c9a9e97fdb8c044c39c52c8b93b5d60860be3", + "https://deno.land/x/denoflate@1.2.1/mod.ts": "f5628e44b80b3d80ed525afa2ba0f12408e3849db817d47a883b801f9ce69dd6", + "https://deno.land/x/denoflate@1.2.1/pkg/denoflate.js": "b9f9ad9457d3f12f28b1fb35c555f57443427f74decb403113d67364e4f2caf4", + "https://deno.land/x/denoflate@1.2.1/pkg/denoflate_bg.wasm.js": "d581956245407a2115a3d7e8d85a9641c032940a8e810acbd59ca86afd34d44d", + "https://deno.land/x/esbuild@v0.25.10/mod.js": "1f4e77a22600b008d4ae918043f2fe60fffbc185b475110880eeb6bd4ebc29fe", + "https://deno.land/x/lume@v3.0.11/cli.ts": "fc1acd64c7e4c1e148b4ee8f424594f2aa39f6867a1c3ae0358248a1d4d5cafd", + "https://deno.land/x/lume@v3.0.11/cli/build.ts": "fe8c45d8af369d719fb7378df09387abec21acffa37d04f1129d80d5b20ec1e8", + "https://deno.land/x/lume@v3.0.11/cli/build_worker.ts": "41abe46d5f0191a0beaa52eb88e8b7261b0502f124e489a53361b9bde91bd5f6", + "https://deno.land/x/lume@v3.0.11/cli/cms.ts": "7f3f46c3353661a7679926d0ddcfe3e596f3c97ad2de7f535bde5906e42c3f5a", + "https://deno.land/x/lume@v3.0.11/cli/create.ts": "db576c8cd3aa5a27685c6283573983be59de0be7ec404a9f815b24d4ea61c639", + "https://deno.land/x/lume@v3.0.11/cli/missing_worker_apis.ts": "70625ded7fee5de7d215e0829ce8dc4bb7060f6a496c09db880ebaec8b3efb92", + "https://deno.land/x/lume@v3.0.11/cli/run.ts": "27e7c84c2bcadc3aa4ca4fbad02330f33000dca9a2ef41780bad3676606bc029", + "https://deno.land/x/lume@v3.0.11/cli/upgrade.ts": "a11e7c9024f78c2e7376c57b4a99e389dbf490769779d2d37a4a3ccd6ef27d9e", + "https://deno.land/x/lume@v3.0.11/cli/utils.ts": "71e1ee512aa630cf4b2b3ddd646f1ef5f20b43b538d396ad4e27128f7a8439c3", + "https://deno.land/x/lume@v3.0.11/core/cache.ts": "bec945853a7111babf1fb465090d84dbf4176af0ad465b63b51031134ad6ea2a", + "https://deno.land/x/lume@v3.0.11/core/components.ts": "e5b0d2aca8e630735534a4cb781802fe9c194c3be4e1010c0abe73617c607d84", + "https://deno.land/x/lume@v3.0.11/core/data_loader.ts": "8698a9e9b1aac27147dc835ba89a0e30828c81338eceae86630607d78f146215", + "https://deno.land/x/lume@v3.0.11/core/debugbar.ts": "77d23362c29e69a8f42b8fc13d6129e62ac6ecf339bc0ac4739082c800b44f58", + "https://deno.land/x/lume@v3.0.11/core/events.ts": "e4fd1786eb7dd4a041d7d922779b9edf1ee89e51fd17ba5e756f380879ccb557", + "https://deno.land/x/lume@v3.0.11/core/file.ts": "5836010f28967a83fb02d721e78cfea1f2d125b4349204a8a3d04ac62070c127", + "https://deno.land/x/lume@v3.0.11/core/formats.ts": "e65130e5c5f2e49435619479710c812199b480a9e145fdc6b2bac11cfe6ea08e", + "https://deno.land/x/lume@v3.0.11/core/fs.ts": "ad0b1eb43361f76f36674505ef6b8870176ef386c43ee962e6c750506b40a071", + "https://deno.land/x/lume@v3.0.11/core/loaders/binary.ts": "bb1e1cf3faac49f6007dc6814168dc0f633da17356db18e68862e4b2a87a3f33", + "https://deno.land/x/lume@v3.0.11/core/loaders/json.ts": "ae28e711196215ca2772e9e31f2646ff4c3cf3f66ae75bf8cbcab94de5dbd24f", + "https://deno.land/x/lume@v3.0.11/core/loaders/module.ts": "abcb210fa6724b83407407cd0f7ef90462b35a2017bc135a3d124dd7f38843f6", + "https://deno.land/x/lume@v3.0.11/core/loaders/text.ts": "42860fc3482651fa6cfba18a734bb548d6e6e1163bf1015c2abc447ab150acbd", + "https://deno.land/x/lume@v3.0.11/core/loaders/toml.ts": "72ddfef2deea62815c28e27faa2c5356e09b3109e9547e47a6defea3d3332452", + "https://deno.land/x/lume@v3.0.11/core/loaders/yaml.ts": "241dc41fbe51b92e38dc748eda614c35d80fb8c63a6d40253453c6bb78c9c47e", + "https://deno.land/x/lume@v3.0.11/core/processors.ts": "047a87b0c9a0377ef15daaf1b671a29d541e4bb744c152f02a5c4f0a80fbbb64", + "https://deno.land/x/lume@v3.0.11/core/renderer.ts": "8c69046aa0fdc51fddbbd36c02aeb9b2226a5853f4ae8aeb549c17c43af13e88", + "https://deno.land/x/lume@v3.0.11/core/scopes.ts": "dbdf93d7a9cead84833779e974f190b1379356ec7c0ccd34aa92f917c2cdd2f9", + "https://deno.land/x/lume@v3.0.11/core/scripts.ts": "286969b120d2290ba57a7fdd9b37e587aacf4e4162d92f51f1f1e9e18c864f30", + "https://deno.land/x/lume@v3.0.11/core/searcher.ts": "19530e0149ca925334f98052863a52cdfbbeea9977342b209829999a34e816a6", + "https://deno.land/x/lume@v3.0.11/core/server.ts": "9378853e85df284ecbf23fb846cb106aa6ce7b1673a141f1920851f52904faef", + "https://deno.land/x/lume@v3.0.11/core/site.ts": "20c30402f81d7fe072fd5f385617198b0473cb20df49404c63929fbf210e616c", + "https://deno.land/x/lume@v3.0.11/core/source.ts": "d4dbe91058369ffaf23778da7e8d8287234f3901eed378accb7933e76529a216", + "https://deno.land/x/lume@v3.0.11/core/utils/browsers.ts": "f668e129d6b969663f736d1759b0544577e0ea609727d1009bf8d6e3ec9eef3e", + "https://deno.land/x/lume@v3.0.11/core/utils/cdn.ts": "93c528ff31f7e087ab0d62d09d2b4cf5bdcc7756853a6fa96da15f58016123c9", + "https://deno.land/x/lume@v3.0.11/core/utils/cli_options.ts": "c1fd59592064e76ce71c4d65d7c0de6cafee836fbd8eb42717cc68f56ed36b8a", + "https://deno.land/x/lume@v3.0.11/core/utils/concurrent.ts": "cb0775b3d95f3faa356aa3a3e489dccef8807ed93cc4f84fcf5bc81e87c29504", + "https://deno.land/x/lume@v3.0.11/core/utils/date.ts": "3eb0b0e2ea15a95cdfe737be70cd4f48cbe49401928cb04c25a230f411ab2478", + "https://deno.land/x/lume@v3.0.11/core/utils/digest.ts": "fcd15e7666fb28989b7d5b23c111044cfa71456fa39e26090ee88ac517ee4336", + "https://deno.land/x/lume@v3.0.11/core/utils/dom.ts": "fffb0c0c3ae613282e0447c3e4c122a62f44c776771d525a0ca09759883b4b9e", + "https://deno.land/x/lume@v3.0.11/core/utils/env.ts": "9d0d859303e8cb799d122088f077c54b85258763f2541313be3bf66b58ce33a3", + "https://deno.land/x/lume@v3.0.11/core/utils/format.ts": "bad71315eefd5ad0413841bbe5e8406d636d58d3ed3ef48674655b3a21a0aab0", + "https://deno.land/x/lume@v3.0.11/core/utils/generator.ts": "1e664e9fd4c469e38a0acf5c94fd49dac4f38cb6334563ea4b7fc498b5958877", + "https://deno.land/x/lume@v3.0.11/core/utils/log.ts": "9652d9b7a78fa61d667b6749a35ea02a00927b541d6d4d72e7f3de1881101bde", + "https://deno.land/x/lume@v3.0.11/core/utils/lume_config.ts": "854c9d037e12e50804266717a462f924855fe2b0a819ceed4950414c4f70c5ac", + "https://deno.land/x/lume@v3.0.11/core/utils/lume_version.ts": "c1c63818097e4a273183429ab5b2446a253307f7bc2d0d6361a17b4f230a617d", + "https://deno.land/x/lume@v3.0.11/core/utils/merge_data.ts": "8433920c7e66f27ae558777ed9add637f8c2f67adf9ca2c9ca60d566b9b3583f", + "https://deno.land/x/lume@v3.0.11/core/utils/net.ts": "d0d58c95668effc13669015c219295532f67e4a02396286308c772871b615a9b", + "https://deno.land/x/lume@v3.0.11/core/utils/object.ts": "9b2d1c20503137b612fcbb311b42d1f5500ae170b68f1dca43cc6b057423bc6e", + "https://deno.land/x/lume@v3.0.11/core/utils/page_content.ts": "bbadb588f9d9fcf1a2af156ce4b68974dfad39b65c3c8d42a6f1895b194c7eec", + "https://deno.land/x/lume@v3.0.11/core/utils/page_date.ts": "2a3d9c203df298ca61f568fdf509945f127f990769623c3edfd753d39807b757", + "https://deno.land/x/lume@v3.0.11/core/utils/page_url.ts": "e292cba024f66d35b1b622f9ac13e0910b0ed5ce12c368bd8014e03c1bb0b063", + "https://deno.land/x/lume@v3.0.11/core/utils/path.ts": "7a1d199113928cc35782aa3262cbe6f7a4894bc262d7d300de9385b3da45602f", + "https://deno.land/x/lume@v3.0.11/core/utils/read.ts": "9a0c87095be118bb599eeebba78613d5b3b1cf6c51c3b4c8016af45675bc7303", + "https://deno.land/x/lume@v3.0.11/core/utils/tokens.ts": "201777343e716403bfb1dbbc1a988a85b8d3f12699daaacbe8bbdc3c352a57ff", + "https://deno.land/x/lume@v3.0.11/core/watcher.ts": "9bdb33b2dac840b65545a894c6faecfd31064cc37852dc175081a2048548a89d", + "https://deno.land/x/lume@v3.0.11/core/writer.ts": "e8952538d57c0b587a3e9344b9b10d1b71274aca234b927b05a09c88ac3f4304", + "https://deno.land/x/lume@v3.0.11/deps/base64.ts": "c7b786540e9f348726e6c6f3ba00866328463f7323ebd02d91c6bc7b125e19b0", + "https://deno.land/x/lume@v3.0.11/deps/cli.ts": "3bfb2281c11151afa5f24adcbb0346390c9cb07060d7c233e4a425b31d2427ed", + "https://deno.land/x/lume@v3.0.11/deps/cliffy.ts": "faff0c2ca187ec9fd1ad8660141f85b9d05b5c36bab25b40eb5038c02590a310", + "https://deno.land/x/lume@v3.0.11/deps/colors.ts": "01c038ca4f8ad503ae0c81338223e3e9e1cbcaf0a14cc12bb6cd6c12f249df98", + "https://deno.land/x/lume@v3.0.11/deps/crypto.ts": "0939b1e974472d1db1d611b4160a5a51d796da1368289277d2e26803243959d5", + "https://deno.land/x/lume@v3.0.11/deps/debugbar.ts": "fac82ee05c8fc2c2a7686201d33fce65ffec7f35b7b7c293c7c9f563afa1aa02", + "https://deno.land/x/lume@v3.0.11/deps/deno_loader.ts": "b68402ff8b600efdbdb49565af3fba0342417e49d59bd0d1cfe89b989d5ca1c4", + "https://deno.land/x/lume@v3.0.11/deps/dom.ts": "00090db01ad1bf53d761aaad4e7deccc4841bdf4b5ddadb5e540b0c2e216a390", + "https://deno.land/x/lume@v3.0.11/deps/esbuild.ts": "d231b2f5c6559238e20896e35ebebc81fc41b37942435a43ca20ec2d1d3dbd71", + "https://deno.land/x/lume@v3.0.11/deps/front_matter.ts": "f5e5780d4a0502d50cde1f42a4aa7830756dc9bd0251ba7448cecd1eaa60878f", + "https://deno.land/x/lume@v3.0.11/deps/fs.ts": "95fbbfe19afd419842d0c36f0f480f1ec0e027a3310a389ef79e6cf2baf5aa27", + "https://deno.land/x/lume@v3.0.11/deps/hex.ts": "828718f24a780ff3ade8d0a8a5b57497cb31c257560ef12af99b6eb1a31e3bbd", + "https://deno.land/x/lume@v3.0.11/deps/http.ts": "8b0a9e00933c3506461596d94447e7fdc16dcbe93029a57cbda446207af22b4b", + "https://deno.land/x/lume@v3.0.11/deps/init.ts": "05d45af66ebdfe63e43540618f51ece8f99d98dc49de890f10eeb43abe9ed0f3", + "https://deno.land/x/lume@v3.0.11/deps/jsonc.ts": "79f0eddc3c9e593310eb8e5918eb1506b1c7d7816e4ecb96894f634ecbe626ff", + "https://deno.land/x/lume@v3.0.11/deps/lightningcss.ts": "5f5167c6eb306ef759f0043f8f33f2eaf63c69210aa1aa837505e990ee619c46", + "https://deno.land/x/lume@v3.0.11/deps/markdown_it.ts": "24c1c0fd18c99b9067d9ff5d051f934cb7c3446e6afbad934f6268af8d1ceb4d", + "https://deno.land/x/lume@v3.0.11/deps/path.ts": "f970dec772314a3ffbe672329eeb398e3eb66e875581c62af6db80c41d093aea", + "https://deno.land/x/lume@v3.0.11/deps/semver.ts": "f850a82a6cf8551e9b927d77f34218961027b1cbe44f3a88c387df62267e31f2", + "https://deno.land/x/lume@v3.0.11/deps/toml.ts": "32830bda333eaf4f1c3d79e4306ba449c17a85b25f94aae9b327d3790a2d1dea", + "https://deno.land/x/lume@v3.0.11/deps/vento.ts": "78db4022ee124fbcfd84caeb6c5a70f2c1e1706ec9f6415d0f1fe2e9aabcba2b", + "https://deno.land/x/lume@v3.0.11/deps/yaml.ts": "a639f4fc44ddcfc87f35e38980bbe9fc8101bf8ce34867522e76cc13cb156611", + "https://deno.land/x/lume@v3.0.11/lint.ts": "23cf68a7cc17edfdb16f2e905de3c5d5a1da541638f04fb8f7d5c762288f2c52", + "https://deno.land/x/lume@v3.0.11/middlewares/basic_auth.ts": "c18f0da9f88be4581e5e3da99214fd7abdad829ab00dbdd2fb3116f1f876add2", + "https://deno.land/x/lume@v3.0.11/middlewares/logger.ts": "c96f1a9f9d5757555b6f141865ce8551ac176f90c8ee3e9ad797b2b400a9a567", + "https://deno.land/x/lume@v3.0.11/middlewares/no_cache.ts": "0119e3ae3a596ab12c42df693b93e5b03dd9608e289d862242751a9739438f35", + "https://deno.land/x/lume@v3.0.11/middlewares/no_cors.ts": "4d24619b5373c98bcc3baf404db47ba088c87ac8538ea1784e58d197b81d4d02", + "https://deno.land/x/lume@v3.0.11/middlewares/not_found.ts": "0f92cd91239444247a1c3dce1bed4e978445687ca76f544a0ccd483a352f761a", + "https://deno.land/x/lume@v3.0.11/middlewares/reload.ts": "1f81573c7574d09bd0dbdf3dd107b98afbdcc63f9aa90edec8f8184157bbe677", + "https://deno.land/x/lume@v3.0.11/middlewares/reload_client.js": "9026da20a25fe58ad36233539ada3f38d56d935c5b0c1c69b7fcd21511efadee", + "https://deno.land/x/lume@v3.0.11/mod.ts": "349b3b7fe199bc6703b1e1fb77f3ab92699fce966da2261d3419a951b1ef2c5d", + "https://deno.land/x/lume@v3.0.11/plugins/esbuild.ts": "6f0a5684a7600b836b318d622ebbf77e4a3a7fa6f5ca366fddcea37871b5f770", + "https://deno.land/x/lume@v3.0.11/plugins/json.ts": "5c49499e56b919ec848d4118ec97dd4fe0a323a6cc4c648dc45ab55297614c12", + "https://deno.land/x/lume@v3.0.11/plugins/lume_cms.ts": "c7375fdc097fcd3edca2cfd05c34dbefd78ec03b5a8569a33c81fdfc6458a5d5", + "https://deno.land/x/lume@v3.0.11/plugins/markdown.ts": "7e82d897c1e35bf119dcd18b6aec7a6ba5aa06848897b34ff9cd161ec7c8757e", + "https://deno.land/x/lume@v3.0.11/plugins/modules.ts": "4e177c0ffe972b9deef10db2bf0ae52b405418af4dbac03db9e7ffbd6a3ec6ae", + "https://deno.land/x/lume@v3.0.11/plugins/paginate.ts": "6a1a9a24d0fabed2f722a6a6f29d98559219c69475685034181816e82d367f2e", + "https://deno.land/x/lume@v3.0.11/plugins/search.ts": "5acb5be828bbbd012fb9226cb97ec3e370d43d05aa44d16e7e7d50bab368b442", + "https://deno.land/x/lume@v3.0.11/plugins/source_maps.ts": "10afd5d8617003ed68db9895bc13e57d1742697fa55657e27efd535da6e52c34", + "https://deno.land/x/lume@v3.0.11/plugins/toml.ts": "e5bf35ed4915587acd453f002b00ae9b88c1782cadc25c703d7642a390af43ea", + "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", + "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", + "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", + "https://deno.land/x/lume@v3.0.11/types.ts": "5f580502f366b9b25106eb72d49b30d9af7715c8a304fe6e21f382d3c2a4cc38", + "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", + "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", + "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", + "https://deno.land/x/vento@v2.1.1/core/js.ts": "83084240150d7e8b83e43ec8fcf78564a8ba8599c3d517976efbb11b208903b2", + "https://deno.land/x/vento@v2.1.1/core/reserved.ts": "e3ccafb4e5524b9c51fa14fa0e4bf17fd9bdd791848f17afa2aeb97835c486d1", + "https://deno.land/x/vento@v2.1.1/core/tokenizer.ts": "460faa3de0e561e5046c46528c8bcbfc46b9de576af7ec8c4a8954a61a80ec76", + "https://deno.land/x/vento@v2.1.1/loaders/file.ts": "83f579ac39838642bb45c6ddf48c05c08134cdd95fa7364d004fb443e972196a", + "https://deno.land/x/vento@v2.1.1/mod.ts": "26081287509a87d81c51917795ff94ea80056c43599af8140bb5f666f0aaa767", + "https://deno.land/x/vento@v2.1.1/plugins/auto_trim.ts": "e244c3721c555ef3a247670c01c60dd22fca2ae40a0ce872672d7768e9e9c876", + "https://deno.land/x/vento@v2.1.1/plugins/echo.ts": "5672b58a399ca1475953e32c5282321f7430668bbe963ec40c0a6949c3ec2116", + "https://deno.land/x/vento@v2.1.1/plugins/escape.ts": "1db6eb7b22f88bbf94d21636c9b156ec4868e10bbcfa7dc5eae7113c36ef7b8a", + "https://deno.land/x/vento@v2.1.1/plugins/export.ts": "c1f25c8e1e35027cc21e780f8fb3961febec4771463eb262959fbf035b8b8a63", + "https://deno.land/x/vento@v2.1.1/plugins/for.ts": "a893a3de2c5cab43d5018cb80718ea46377c172d550e7a8ead076f00c58d59bf", + "https://deno.land/x/vento@v2.1.1/plugins/function.ts": "73cec242bb09c840ae2065fbdc2a9a03c4d20a7b996bded387e61e26b68e6171", + "https://deno.land/x/vento@v2.1.1/plugins/if.ts": "db13776a5b9e7988f65c27943c344bec7463c5f3162a06cc4da1a313d7109195", + "https://deno.land/x/vento@v2.1.1/plugins/import.ts": "4555c60768fc061f16c61281c5c6bf163cc5899106d95cdcddde080493372920", + "https://deno.land/x/vento@v2.1.1/plugins/include.ts": "929d35733f73e68068f22378b69195b49a111fcaa39c306017f40028e76b1532", + "https://deno.land/x/vento@v2.1.1/plugins/js.ts": "f5a7fd8cc48cb1b1dc0b396e3d1fee4664cf28932dc5f5f301e38243e0e987dc", + "https://deno.land/x/vento@v2.1.1/plugins/layout.ts": "0cfdccbd069eef61c013a6660cb265afd36e3931ff9051cc70e3133ee74dad64", + "https://deno.land/x/vento@v2.1.1/plugins/mod.ts": "017d5bb3e3c80b7f67271cdf8779686f55916070c5d168a143e6a37c35bcd731", + "https://deno.land/x/vento@v2.1.1/plugins/set.ts": "cf9dfbf68b52039781fd86ec0b9587a8bcd486fdef9f08989719cfdb7fa233d0", + "https://deno.land/x/vento@v2.1.1/plugins/trim.ts": "8d33271327b09ffd8f569ebde85125b1324fa9538a54d6072ac97a9fb5d24264", + "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee" + }, + "workspace": { + "dependencies": [ + "jsr:@std/fs@^1.0.15", + "npm:alien-signals@3", + "npm:morphdom@^2.7.7" + ] } } diff --git a/netlify-imports.json b/netlify-imports.json new file mode 100644 index 000000000..055c53768 --- /dev/null +++ b/netlify-imports.json @@ -0,0 +1,6 @@ +{ + "imports": { + "@common/": "/common/", + "@elements/": "/elements/" + } +} diff --git a/netlify.toml b/netlify.toml index 9185298cc..7948429e8 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,3 +1,3 @@ [build] command = "deno run build" -publish = "dist" +publish = "_site" diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 189d3a11f..000000000 --- a/package-lock.json +++ /dev/null @@ -1,26122 +0,0 @@ -{ - "name": "diffuse", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@automerge/automerge": "^3.1.2", - "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", - "@enhance/base-element": "^1.3.2", - "@enhance/element": "^1.4.6", - "@enhance/event-handler-mixin": "^1.0.4", - "@enhance/morphdom-mixin": "^1.1.3", - "@enhance/shadow-element-mixin": "^1.0.2", - "@js-temporal/polyfill": "^0.5.1", - "@lift-html/alien": "^0.0.1", - "@okikio/sharedworker": "^1.1.0", - "@okikio/transferables": "npm:@jsr/okikio__transferables@^1.0.2", - "@orama/orama": "^3.1.7", - "@orama/plugin-qps": "^3.1.7", - "@phosphor-icons/web": "^2.1.2", - "@picocss/pico": "^2.1.1", - "@std/media-types": "npm:@jsr/std__media-types@^1.1.0", - "@tokenizer/http": "^0.9.2", - "@tokenizer/range": "^0.13.0", - "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", - "98.css": "^0.1.21", - "alien-signals": "^3.0.0", - "comlink": "^4.4.2", - "fast-average-color": "^9.5.0", - "iconoir": "^7.11.0", - "idb-keyval": "^6.2.1", - "music-metadata": "^11.9.0", - "query-string": "^9.3.1", - "subsonic-api": "^3.2.0", - "throttle-debounce": "^5.0.2", - "uint8arrays": "^5.1.0", - "uri-js": "^4.4.1", - "webamp": "^2.2.0", - "xxh32": "^2.0.5" - }, - "devDependencies": { - "@enhance/arc-plugin-enhance": "^11.0.4", - "@enhance/arc-plugin-styles": "^5.0.5", - "@enhance/cli": "^1.2.1", - "@enhance/plugin-typescript": "^0.2.2", - "@enhance/styles-cribsheet": "^0.0.11", - "@enhance/types": "^0.7.0", - "@types/throttle-debounce": "^5.0.2", - "@types/wicg-file-system-access": "^2023.10.6", - "astro": "^5.7.4", - "astro-purgecss": "^5.2.2", - "astro-scope": "^3.0.1", - "netlify": "^23.9.1", - "purgecss": "^7.0.2", - "sass": "^1.87.0", - "vite-plugin-wasm": "^3.4.1", - "vite-tsconfig-paths": "^5.1.4" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.0.tgz", - "integrity": "sha512-teB30tFooE3iQs2HQIKJ02D8UZA1Xy1zaczzhUjJs0CymYxeC0g+y5rCY2p8NHBM6DBUVoR8rSM4kHLj1WE9mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, - "node_modules/@architect/asap": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@architect/asap/-/asap-7.0.10.tgz", - "integrity": "sha512-oJjYDranGTCkp21bziF/fIxJfLTucitqg/ar5mmLPHyroNG3XF3SUIMvuNd1GNIe4oy40wvGEXvTToKYvUeOLA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-lite/client": "~0.21.1", - "@aws-lite/s3": "^0.1.21" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/create": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@architect/create/-/create-5.0.3.tgz", - "integrity": "sha512-wLHLdZnArRR08HoEFCUtnvxSDjWexkhqrzK7NgeswjMMr5mK4y0zagarte0oaXSIhjCN+x79GWCkH49bKdsVBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/inventory": "~4.0.5", - "@architect/utils": "~4.0.6", - "chalk": "4.1.2", - "lambda-runtimes": "~2.0.2", - "minimist": "~1.2.8" - }, - "bin": { - "arc-create": "src/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/create/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@architect/create/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@architect/functions": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@architect/functions/-/functions-8.1.9.tgz", - "integrity": "sha512-hyNKhpwdUxkclKVys3JaX1y/GgTqAOKmVS6Kh7+VZ8+/Gr5KnDzQixH62oqp2TjxtFKazOWthjEs9xSlG7hNJg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-lite/apigatewaymanagementapi": "^0.0.10", - "@aws-lite/client": "^0.22.4", - "@aws-lite/dynamodb": "^0.3.9", - "@aws-lite/sns": "^0.0.8", - "@aws-lite/sqs": "^0.2.4", - "@aws-lite/ssm": "^0.2.5", - "cookie": "^1.0.2", - "cookie-signature": "^1.2.2", - "csrf": "^3.1.0", - "node-webtokens": "^1.0.4", - "run-parallel": "^1.2.0", - "run-waterfall": "^1.1.7", - "uid-safe": "^2.1.5" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/functions/node_modules/@aws-lite/client": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.22.4.tgz", - "integrity": "sha512-52ua/U3+JXecuTtrTZ1XjSbDL2S+iyfOD/1daYRnPQ83YPNzo4BJe1iIVwtZbJB6goLyeVolxSlPmnuqF6JFvw==", - "dev": true, - "license": "Apache-2.0", - "workspaces": [ - "plugins/acm", - "plugins/apigateway", - "plugins/apigatewaymanagementapi", - "plugins/apigatewayv2", - "plugins/cloudformation", - "plugins/cloudfront", - "plugins/cloudwatch-logs", - "plugins/dynamodb", - "plugins/iam", - "plugins/lambda", - "plugins/organizations", - "plugins/rds-data", - "plugins/route53", - "plugins/s3", - "plugins/sns", - "plugins/sqs", - "plugins/ssm", - "plugins/sts" - ], - "dependencies": { - "aws4": "^1.13.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/hydrate": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@architect/hydrate/-/hydrate-4.0.8.tgz", - "integrity": "sha512-rf5xA9ZHWj69CPbwuQB3P0gscX+1ast0IilrqbGglZKi0DS4Xkoo6kJpUbdGfRsNAV3Of+z2GM0XLfEnuigVWg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/inventory": "~4.0.5", - "@architect/utils": "~4.0.6", - "acorn-loose": "~8.4.0", - "chalk": "4.1.2", - "esquery": "~1.6.0", - "glob": "10.4.5", - "minimist": "~1.2.8", - "run-series": "~1.1.9", - "symlink-or-copy": "~1.3.1" - }, - "bin": { - "arc-hydrate": "src/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/hydrate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@architect/hydrate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@architect/hydrate/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/hydrate/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@architect/hydrate/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@architect/hydrate/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/hydrate/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/inventory": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@architect/inventory/-/inventory-4.0.9.tgz", - "integrity": "sha512-u2huwBc3JgiM0bGLPyBy0NjcF2mtnmFWwgFl7+E72jG3BcJl1QwQqXdaHygI2WblsH4BG8C19A47Er9QKOGdiw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/asap": "~7.0.10", - "@architect/parser": "~7.0.1", - "@architect/utils": "~4.0.6", - "@aws-lite/client": "^0.21.1", - "@aws-lite/ssm": "^0.2.3", - "lambda-runtimes": "~2.0.5" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@architect/parser/-/parser-7.0.1.tgz", - "integrity": "sha512-T4Rr/eQbtg/gPvS4HcXR7zYxLJ3gEh6pSKj0s/Y1IrvJY9QG4BDAVZgE7AYGfzqymwIF0pUI2mQ91CLi2CTnQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/sandbox": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@architect/sandbox/-/sandbox-6.0.5.tgz", - "integrity": "sha512-VJcFxVhSbrhisTMqq2ukbj4NlN18eJgYYqEMnCk9UAdIyHBBoEAP4YmroyFCHv7CsutFUMhjDQP9+9deQje+6w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/asap": "~7.0.10", - "@architect/create": "~5.0.3", - "@architect/hydrate": "~4.0.6", - "@architect/inventory": "~4.0.5", - "@architect/utils": "~4.0.6", - "@aws-lite/client": "^0.21.1", - "@aws-lite/dynamodb": "^0.3.4", - "@begin/hashid": "~1.0.0", - "chalk": "4.1.2", - "chokidar": "~3.6.0", - "depstatus": "~1.1.1", - "dynalite": "~3.2.2", - "finalhandler": "~1.2.0", - "glob": "~10.3.12", - "http-proxy": "~1.18.1", - "lambda-runtimes": "~2.0.2", - "minimist": "~1.2.8", - "router": "~1.3.8", - "run-parallel": "~1.2.0", - "run-series": "~1.1.9", - "send": "~0.18.0", - "server-destroy": "~1.0.1", - "tmp": "~0.2.3", - "tree-kill": "~1.2.2", - "update-notifier-cjs": "~5.1.6", - "ws": "~8.17.0" - }, - "bin": { - "sandbox": "src/cli/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/sandbox/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@architect/sandbox/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@architect/sandbox/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@architect/sandbox/node_modules/glob": { - "version": "10.3.16", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz", - "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/sandbox/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@architect/sandbox/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@architect/sandbox/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/sandbox/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/sandbox/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@architect/sandbox/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@architect/sandbox/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@architect/utils": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@architect/utils/-/utils-4.0.6.tgz", - "integrity": "sha512-aa6gNNoHxgKpQrIFOa5zNW5fD10v46AE2VZNcjToxAvm//8itbIBoGw2wj8oF3gqHMKKkeLAtdO8K8tlKVN8ZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-lite/client": "^0.21.1", - "chalk": "4.1.2", - "glob": "~10.3.12", - "path-sort": "~0.1.0", - "restore-cursor": "3.1.0", - "run-series": "~1.1.9", - "run-waterfall": "~1.1.7", - "sha": "~3.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@architect/utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@architect/utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@architect/utils/node_modules/glob": { - "version": "10.3.16", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz", - "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.11.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/utils/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@architect/utils/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@architect/utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@architect/utils/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.17.14.tgz", - "integrity": "sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==", - "license": "Apache-2.0" - }, - "node_modules/@astrojs/compiler": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.12.2.tgz", - "integrity": "sha512-w2zfvhjNCkNMmMMOn5b0J8+OmUaBL1o40ipMvqcG6NRpdC+lKxmTi48DT8Xw0SzJ3AfmeFLB45zXZXtmbsjcgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astrojs/internal-helpers": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.6.1.tgz", - "integrity": "sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@astrojs/markdown-remark": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz", - "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/internal-helpers": "0.6.1", - "@astrojs/prism": "3.3.0", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.3", - "hast-util-to-text": "^4.0.2", - "import-meta-resolve": "^4.1.0", - "js-yaml": "^4.1.0", - "mdast-util-definitions": "^6.0.0", - "rehype-raw": "^7.0.0", - "rehype-stringify": "^10.0.1", - "remark-gfm": "^4.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "remark-smartypants": "^3.0.2", - "shiki": "^3.2.1", - "smol-toml": "^1.3.1", - "unified": "^11.0.5", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "unist-util-visit-parents": "^6.0.1", - "vfile": "^6.0.3" - } - }, - "node_modules/@astrojs/prism": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", - "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prismjs": "^1.30.0" - }, - "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" - } - }, - "node_modules/@astrojs/telemetry": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", - "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^4.2.0", - "debug": "^4.4.0", - "dlv": "^1.1.3", - "dset": "^3.1.4", - "is-docker": "^3.0.0", - "is-wsl": "^3.1.0", - "which-pm-runs": "^1.1.0" - }, - "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0" - } - }, - "node_modules/@automerge/automerge": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@automerge/automerge/-/automerge-3.1.2.tgz", - "integrity": "sha512-rAZRLAMrboBJGMmZXPOfYiwkmHXho6RjhUOIrlmf+Buukt/DN1oee8kHfpI3U4etetvGgqf5JaFVbydQpKT/Vg==", - "license": "MIT" - }, - "node_modules/@aws-lite/apigatewaymanagementapi": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@aws-lite/apigatewaymanagementapi/-/apigatewaymanagementapi-0.0.10.tgz", - "integrity": "sha512-fIkUYTV4TF0wnNwzvbqWou/I0bxGsgJbbawBmeKoJIc+3yc2PzOIP6RqNPmWjlUHsuI7QnymPgWljWfvExlaVg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@aws-lite/client": { - "version": "0.21.10", - "resolved": "https://registry.npmjs.org/@aws-lite/client/-/client-0.21.10.tgz", - "integrity": "sha512-fOn3lg1ynBAxqcELRf084bNJ6gu+GGoNyC+hwitW/hg3Vc1z1ZbK5HWWTrDw8HdM/fEQ0UN++g7GXVN1GVctdQ==", - "dev": true, - "license": "Apache-2.0", - "workspaces": [ - "plugins/acm", - "plugins/apigateway", - "plugins/apigatewaymanagementapi", - "plugins/apigatewayv2", - "plugins/cloudformation", - "plugins/cloudfront", - "plugins/cloudwatch-logs", - "plugins/dynamodb", - "plugins/iam", - "plugins/lambda", - "plugins/organizations", - "plugins/rds-data", - "plugins/route53", - "plugins/s3", - "plugins/sns", - "plugins/sqs", - "plugins/ssm", - "plugins/sts" - ], - "dependencies": { - "aws4": "^1.13.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@aws-lite/dynamodb": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@aws-lite/dynamodb/-/dynamodb-0.3.9.tgz", - "integrity": "sha512-jrMAWwxoAMVJ3z0/mI/GzPM5AfGmH+xzTpNIbjg3+2WdYJRqvIf8025XJdCDtS9/4x8zogdchEp3ZelXnwYyqw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@aws-lite/s3": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@aws-lite/s3/-/s3-0.1.22.tgz", - "integrity": "sha512-9OL95fTvHV80JvFTxLx8hhWQ6DgwHUts02KpXITA8syCDnYgua2rNcpwQ5b6GZzpL7yNXU0dud/Y6edThbffig==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@aws-lite/sns": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@aws-lite/sns/-/sns-0.0.8.tgz", - "integrity": "sha512-MIzHe66kLNyzPFY/DX30uN7DlVQsnBiHPYbq/7syNWuoYSG8bkWuUX2CVIuSL7Ji5jaLpQ4lf8/VQ+SiAeoIZA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@aws-lite/sqs": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@aws-lite/sqs/-/sqs-0.2.4.tgz", - "integrity": "sha512-a1M3HDdkNE/xJfASlfisAaZ8XF6FpvoJbJsH/gr6pogEFWgNQyvmPVNRElnDY7JW3ee82sEOkMukYRdAbjytNQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@aws-lite/ssm": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@aws-lite/ssm/-/ssm-0.2.5.tgz", - "integrity": "sha512-1B8mZ79ySqlTEfSQ87KZ0XkmTOKQFMO3lUYUGUtwNTUncJINr6nhRWEjk128oBWwEQnpJ7NfpDPjdfg1ICe3xw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@begin/data": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@begin/data/-/data-5.0.5.tgz", - "integrity": "sha512-/OVW944vm6rw7qp9CcVbswzcdXTzVNcVTvn5ajFtAFCE9WwjsvjmhOnyMzEAWkb1eePbB6FmQC9+PX/XjKpI6g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-lite/client": "^0.21.5", - "@aws-lite/dynamodb": "^0.3.4", - "@aws-lite/ssm": "^0.2.3", - "@begin/hashid": "^1.0.0", - "run-parallel": "^1.2.0", - "run-waterfall": "^1.1.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@begin/hashid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@begin/hashid/-/hashid-1.0.0.tgz", - "integrity": "sha512-w+U9klEtRkt7hyW/f+/SvwPgJ4CTMO2ENddisX9dGgLUZKu+iKpb/IhYnQWIt9/Nnm/5DkApmiHGimPs621wwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@begin/parse5": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@begin/parse5/-/parse5-0.0.4.tgz", - "integrity": "sha512-1H5S1AcFqpQfBMG0z4z7URFb5jWCrILIH9MkXSmTsyYd4hj4kgJnpXHGELJE9HnXH1maI/WfHi5j+udDVkvZ9g==", - "dev": true, - "dependencies": { - "parse5": "^7.0.0" - } - }, - "node_modules/@borewit/text-codec": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.0.tgz", - "integrity": "sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@bradenmacdonald/s3-lite-client": { - "name": "@jsr/bradenmacdonald__s3-lite-client", - "version": "0.9.2", - "resolved": "https://npm.jsr.io/~/11/@jsr/bradenmacdonald__s3-lite-client/0.9.2.tgz", - "integrity": "sha512-PwwaCkPS+nAuPJgy8WOTDrh1BSLZ0K2Ho/4Ddmtp8NImN48j0leknNREiSEwqhFiSmfQJIUS3qk9mK7xj8Wq3w==" - }, - "node_modules/@capsizecss/unpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-2.4.0.tgz", - "integrity": "sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "blob-to-buffer": "^1.2.8", - "cross-fetch": "^3.0.4", - "fontkit": "^2.0.2" - } - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@enhance/arc-plugin-enhance": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-enhance/-/arc-plugin-enhance-11.0.5.tgz", - "integrity": "sha512-CgPslLhOZh28jQgjU7gsUUkJcR53RFrcd3EYNR7qEgeG3vQx4nTz62N4/EC2FvAJlbPSU+P+GyZ0KRNB1MivOA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/asap": "^7.0.10", - "@architect/functions": "^8.1.6", - "@begin/data": "^5.0.5", - "@enhance/arc-plugin-rollup": "^2.0.0", - "@enhance/enhance-style-transform": "^0.1.2", - "@enhance/import-transform": "^4.0.1", - "@enhance/ssr": "^4.0.3", - "glob": "^9.3.5", - "header-timers": "^0.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@enhance/arc-plugin-enhance/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/arc-plugin-enhance/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@enhance/arc-plugin-enhance/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/arc-plugin-enhance/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@enhance/arc-plugin-enhance/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/arc-plugin-enhance/node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@enhance/arc-plugin-rollup": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-rollup/-/arc-plugin-rollup-2.0.0.tgz", - "integrity": "sha512-+9o61Zm91hdpi6NV5QDbqma7Zi0ZtgxO5itOYIo4tn7gwNO9KAoJNT7cK6ZKzVyaNxcSKTceiXYYQo5Fe7Hkrw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@rollup/plugin-commonjs": "^24.0.1", - "@rollup/plugin-node-resolve": "^15.0.1", - "rollup": "^3.7.4" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@enhance/arc-plugin-rollup/node_modules/@rollup/plugin-commonjs": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.1.0.tgz", - "integrity": "sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.27.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@enhance/arc-plugin-rollup/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@enhance/arc-plugin-rollup/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/arc-plugin-rollup/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@enhance/arc-plugin-rollup/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@enhance/arc-plugin-rollup/node_modules/rollup": { - "version": "3.29.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", - "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@enhance/arc-plugin-styles": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-styles/-/arc-plugin-styles-5.0.6.tgz", - "integrity": "sha512-LHTUDlz1KxcvB1ZZ2azLdixkCnxcAyYfS6XhUnzP+Nr3au331T75q4k73liCbPOaS0TEtYRPylcSGJwMTVH6HQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/functions": "^8.0.4", - "@enhance/styles": "^6.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@enhance/base-element": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@enhance/base-element/-/base-element-1.3.2.tgz", - "integrity": "sha512-v9Ed23nCXxn1chC/AbCYBCybYq92N5hDkADt6uXOFovHg7/RARgESQGd39x8+8fuhOM95YszfxZRhDjYDUsq4w==", - "license": "Apache-2.0" - }, - "node_modules/@enhance/cli": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@enhance/cli/-/cli-1.2.1.tgz", - "integrity": "sha512-rW2rOi+I+el41CfND1/O4hIQ6PtQC16//eKtP5F8AXriC+oWwbU/sfDchFQkbBoLBk8/2DZg8Emj68iRXLqAbA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.1.0", - "@architect/inventory": "^4.0.5", - "@architect/parser": "^7.0.1", - "@architect/sandbox": "^6.0.5", - "@architect/utils": "^4.0.6", - "@colors/colors": "1.6.0", - "@enhance/create": "^4.1.2", - "enquirer": "^2.4.1", - "escodegen": "^2.1.0", - "esprima": "^4.0.1", - "is-potential-custom-element-name": "^1.0.1", - "jsonschema": "^1.4.1", - "lambda-runtimes": "^2.0.2", - "minimist": "^1.2.8", - "node-machine-id": "^1.1.12", - "pluralize": "^8.0.0", - "restore-cursor": "^3.1.0", - "strip-ansi": "^6.0.1", - "tiny-json-http": "^7.5.1", - "tmp": "^0.2.3", - "ws": "^8.18.0" - }, - "bin": { - "enhance": "src/index.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@enhance/cli/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@enhance/cli/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@enhance/create": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@enhance/create/-/create-4.1.4.tgz", - "integrity": "sha512-oiP1lMNoN38xlDb3LvqYey7dKyYGXxQDpc0A5/U5yyEu10DKm0uUpgEbTuVB/HtafcDFMbLMJ+4g3dsL5Po1bQ==", - "dev": true, - "dependencies": { - "@architect/parser": "^6.0.3", - "isomorphic-git": "^1.25.6" - }, - "bin": { - "enhance-create": "index.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@enhance/create/node_modules/@architect/parser": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@architect/parser/-/parser-6.0.3.tgz", - "integrity": "sha512-g03zlsXO0YBVMDFbXHRL3JpVpru4kUeaQIe53tNhs1C9+fMguNCSWq1tNSmwqhBYq43O/R3hleg8VSOI0NFwgA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/@enhance/css-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@enhance/css-parser/-/css-parser-1.0.0.tgz", - "integrity": "sha512-DG18Jwxvf0WvUtA8VEA+axaIq0aoJzGTd25kdeLDPQcNnq3bWG+TUMPi8oa4btVXwHVyCR7Xsy0jW80m1ZwPow==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, - "node_modules/@enhance/custom-element-mixin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@enhance/custom-element-mixin/-/custom-element-mixin-1.3.1.tgz", - "integrity": "sha512-gpWcjzbMYjXcmrdu47RFGQn6ujVI/CicXILYXD/qLKVzamWJOynB2ttz8iYYHH1CnLrgnoQoVBH/EJMC9moTIw==", - "license": "Apache-2.0" - }, - "node_modules/@enhance/element": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@enhance/element/-/element-1.4.6.tgz", - "integrity": "sha512-JqtdowaD1KBHzRE3Vp1cV2JzPqY9nyWNekeSMJon4PWeXKN2Fc2zJ2+xIHUhsrg8Z4AtdKmqnndFD4qfE3kRhw==", - "license": "Apache-2.0", - "dependencies": { - "@enhance/base-element": "^1.3.2", - "@enhance/custom-element-mixin": "^1.3.1", - "@enhance/event-handler-mixin": "^1.0.4", - "@enhance/morphdom-mixin": "^1.1.3", - "@enhance/shadow-element-mixin": "^1.0.2", - "@enhance/template-mixin": "^1.0.3" - } - }, - "node_modules/@enhance/enhance-style-transform": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@enhance/enhance-style-transform/-/enhance-style-transform-0.1.2.tgz", - "integrity": "sha512-Hx/c5PfJl4XYToZaKL0b3o54rq4JX5zKD6Z+Pz6BSygnX0xOOHdWriaXxFKDUl1X/VVVlJM3FWjYj93/a7WSPg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@enhance/css-parser": "^1.0.0" - } - }, - "node_modules/@enhance/event-handler-mixin": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@enhance/event-handler-mixin/-/event-handler-mixin-1.0.4.tgz", - "integrity": "sha512-d72GnC8rHr5yuaJR85qSLK1A+ZXWIBj58Ju7CZ0/X3KLCxyBT3A32186x0o1D5SmBHZSbmldxNq5w0euunHvug==", - "license": "Apache-2.0" - }, - "node_modules/@enhance/import-transform": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@enhance/import-transform/-/import-transform-4.0.1.tgz", - "integrity": "sha512-09/9Y6gp3CzaB82822ekwRe5Xtzhh07m2Gjb+1xLu+CMGo3ltjSYjqYr5Twbq9tGGn5elS3rt5/7CJ240K2ylA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/functions": "^8.0.4" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@enhance/morphdom-mixin": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@enhance/morphdom-mixin/-/morphdom-mixin-1.1.3.tgz", - "integrity": "sha512-VG0M0ysOMtuIj98j4v7+Xx0+8UE7amw4lV1w1Tunn2yvXT8iYtVTNGTj8J51rSidXGo+2VCRQgZyAyhPFWiR/A==", - "license": "Apache-2.0", - "dependencies": { - "morphdom": "^2.7.0" - } - }, - "node_modules/@enhance/plugin-typescript": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@enhance/plugin-typescript/-/plugin-typescript-0.2.2.tgz", - "integrity": "sha512-uGsMDs5pYWEOZgYI71SAYeP3uPkme0swCPjLfnmH59Tu4shinjrwT0A95UarxzBGHlvKJxcQyluuVAY5/D0nOw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@enhance/shadow-element-mixin": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@enhance/shadow-element-mixin/-/shadow-element-mixin-1.0.2.tgz", - "integrity": "sha512-zBTzx6qmaZGjD+U62wzZQawGN46+oTJEcF4nQh42R8gPPi4uXTIQSSJ+TryyC2FBMGcK8AZo+ry04ioJi3Qt3w==", - "license": "Apache-2.0" - }, - "node_modules/@enhance/ssr": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@enhance/ssr/-/ssr-4.0.3.tgz", - "integrity": "sha512-WJoF8Bv9EXovJXpB0JyXavqkz5KTwPKSQG8nHxtT++F+Pm6iIdtUQjNG+VVSBmOryC0pq/sZNtBxiC0g9xzksQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@begin/parse5": "^0.0.4", - "nanoid": "^4.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@enhance/ssr/node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/@enhance/styles": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@enhance/styles/-/styles-6.5.0.tgz", - "integrity": "sha512-Bne/vDaBHQPG5r3LZ9o1+5VlZRSiq+E51MNVfP+HNsWs5af7uDnezGLpNJHaMjl1MWuCt42bhM4oJv1cYyYGQQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "color-to-hsla": "^0.1.1" - }, - "bin": { - "enhance-styles": "cli.mjs" - } - }, - "node_modules/@enhance/styles-cribsheet": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@enhance/styles-cribsheet/-/styles-cribsheet-0.0.11.tgz", - "integrity": "sha512-ll3U5+j3ilEDrBUL1J6LT7czEjCZGk++evUVlzEz9fS9nSKPqEQpCcBjmu/Iu0okoBpcwj313IZ4jx10RBT+zA==", - "dev": true, - "dependencies": { - "@architect/functions": "^8.0.4", - "@enhance/arc-plugin-enhance": "^9.4.9", - "css-tree": "^2.3.1" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/@enhance/arc-plugin-enhance": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/@enhance/arc-plugin-enhance/-/arc-plugin-enhance-9.5.1.tgz", - "integrity": "sha512-uH7xUhbLkmWuGIAUM9+koiKQywEmM1p+OI5irWJEk+uZ/zOLwpAVJaF8qytmnJEBmfj/b21hFzDyEBISOdPGxA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@architect/asap": "^7.0.4", - "@architect/functions": "^8.0.1", - "@begin/data": "^5.0.1", - "@enhance/arc-plugin-rollup": "^2.0.0", - "@enhance/enhance-style-transform": "^0.1.2", - "@enhance/import-transform": "^4.0.1", - "@enhance/ssr": "^3.5.1", - "glob": "^9.3.5", - "header-timers": "^0.2.0", - "path-to-regexp": "^6.2.1" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/@enhance/ssr": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@enhance/ssr/-/ssr-3.5.2.tgz", - "integrity": "sha512-gbHPbfHqXzGK1267hzXGy394kVFntYOERguh6/tQeRnZ1Cwxt79OQPpVLU/gITnkXB9A9oOa9WGzkjKDoW2qbw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@begin/parse5": "^0.0.4", - "nanoid": "^4.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/header-timers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/header-timers/-/header-timers-0.2.1.tgz", - "integrity": "sha512-MYHjz20sTJym3EQ6aMgfqDLGZgiNkFo3eM6He13HJb33Ju2hc/4cTlsjfWxXHSjOv6szv6/jbjg/yvGXgKEKvQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@enhance/styles-cribsheet/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@enhance/styles-cribsheet/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/@enhance/styles-cribsheet/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/nanoid": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", - "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@enhance/styles-cribsheet/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@enhance/template-mixin": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@enhance/template-mixin/-/template-mixin-1.0.3.tgz", - "integrity": "sha512-YnILjMRQRJLYPzBZ1wuI39UDIsrTMvoRHS0MpdwxQpJ/rHN3w4NU984c9j/2RCFbtUkTjnT++hdjWyLtoot5Hw==", - "license": "Apache-2.0" - }, - "node_modules/@enhance/types": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@enhance/types/-/types-0.7.0.tgz", - "integrity": "sha512-CkPEbcC+mOBmcQjLZFnj30qMyYFD6WzDmaaGBvoYhiq+IM6VP4wVe1s0Jb2/GE3G/PFLGl6B4zTHGcKrZ8xKqw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@js-temporal/polyfill": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@js-temporal/polyfill/-/polyfill-0.5.1.tgz", - "integrity": "sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==", - "license": "ISC", - "dependencies": { - "jsbi": "^4.3.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@lift-html/alien": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@lift-html/alien/-/alien-0.0.1.tgz", - "integrity": "sha512-WQJOI2rZvEW5tAvBvDkCUQMnmuhBpXt0Q6rigAt8v5XONECqj97eUqm0I5Q096BzDS2sWirlS8EkSp8ahwm5jg==", - "license": "CC0-1.0", - "dependencies": { - "@lift-html/core": "*", - "alien-signals": "*" - } - }, - "node_modules/@lift-html/core": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@lift-html/core/-/core-0.0.4.tgz", - "integrity": "sha512-QFfCu2PwGhN+dQ697TPuxvaeLo8swhHA0Bivypg3Owk5VcPkP6WHdzrrDVCQXstr1ANP8NFmFjX1WBM2y7ZCHA==", - "license": "CC0-1.0" - }, - "node_modules/@okikio/sharedworker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@okikio/sharedworker/-/sharedworker-1.1.0.tgz", - "integrity": "sha512-Xj9TUWll9mhARsKu5DtlQCjRekfJfQ2E291ow6gmXIz+WuF6uJMH8ZmGhdRTx/ndOippHnm1j/vxXNjmR6JuXw==", - "license": "MIT" - }, - "node_modules/@okikio/transferables": { - "name": "@jsr/okikio__transferables", - "version": "1.0.2", - "resolved": "https://npm.jsr.io/~/11/@jsr/okikio__transferables/1.0.2.tgz", - "integrity": "sha512-xz7RmslHsTt/Cy7GPnDurV1aKuUuVaR3FOIcKtLMuY8e+yEMVnwkPqaFWvsO/WbfeUQQnygo5C7g1/oLURrPsA==" - }, - "node_modules/@orama/orama": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.9.tgz", - "integrity": "sha512-UXQYvN0DYl5EMOXX3O0Rwke+0R0Pd7PW/hOVwgpPd6KKJPb3RP74m3PEbEFjdTzZVLUW81o7herYXD2h4PVcGQ==", - "license": "Apache-2.0", - "engines": { - "node": ">= 20.0.0" - } - }, - "node_modules/@orama/plugin-qps": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@orama/plugin-qps/-/plugin-qps-3.1.9.tgz", - "integrity": "sha512-QqB+fR//Mg6FRWutUxPtQi7IM1fND28Rm+9Cpc90pMZBLatVdqw2prbNJhVfoObu0IpemclHyf9xY0ObyTw7dw==", - "license": "Apache-2.0", - "dependencies": { - "@orama/orama": "3.1.9" - } - }, - "node_modules/@oslojs/encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", - "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@phosphor-icons/web": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@phosphor-icons/web/-/web-2.1.2.tgz", - "integrity": "sha512-rPAR9o/bEcp4Cw4DEeZHXf+nlGCMNGkNDRizYHM47NLxz9vvEHp/Tt6FMK1NcWadzw/pFDPnRBGi/ofRya958A==", - "license": "MIT" - }, - "node_modules/@picocss/pico": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@picocss/pico/-/pico-2.1.1.tgz", - "integrity": "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg==", - "license": "MIT" - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@redux-devtools/extension": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@redux-devtools/extension/-/extension-3.3.0.tgz", - "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2", - "immutable": "^4.3.4" - }, - "peerDependencies": { - "redux": "^3.1.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@redux-devtools/extension/node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "license": "MIT" - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", - "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", - "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", - "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", - "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", - "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", - "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", - "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", - "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", - "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", - "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", - "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", - "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", - "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", - "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", - "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", - "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", - "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", - "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", - "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", - "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", - "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", - "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sentry/browser": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.9.1.tgz", - "integrity": "sha512-7AOabwp9yAH9h6Xe6TfDwlLxHbUSWs+SPWHI7bPlht2yDSAqkXYGSzRr5X0XQJX9oBQdx2cEPMqHyJrbNaP/og==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "5.8.0", - "@sentry/types": "5.7.1", - "@sentry/utils": "5.8.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/core": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.8.0.tgz", - "integrity": "sha512-aAh2KLidIXJVGrxmHSVq2eVKbu7tZiYn5ylW6yzJXFetS5z4MA+JYaSBaG2inVYDEEqqMIkb17TyWxxziUDieg==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.8.0", - "@sentry/minimal": "5.8.0", - "@sentry/types": "5.7.1", - "@sentry/utils": "5.8.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/hub": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.8.0.tgz", - "integrity": "sha512-VdApn1ZCNwH1wwQwoO6pu53PM/qgHG+DQege0hbByluImpLBhAj9w50nXnF/8KzV4UoMIVbzCb6jXzMRmqqp9A==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.7.1", - "@sentry/utils": "5.8.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/minimal": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.8.0.tgz", - "integrity": "sha512-MIlFOgd+JvAUrBBmq7vr9ovRH1HvckhnwzHdoUPpKRBN+rQgTyZy1o6+kA2fASCbrRqFCP+Zk7EHMACKg8DpIw==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/hub": "5.8.0", - "@sentry/types": "5.7.1", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@sentry/types": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.7.1.tgz", - "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.8.0.tgz", - "integrity": "sha512-KDxUvBSYi0/dHMdunbxAxD3389pcQioLtcO6CI6zt/nJXeVFolix66cRraeQvqupdLhvOk/el649W4fCPayTHw==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.7.1", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@shikijs/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.7.0.tgz", - "integrity": "sha512-yilc0S9HvTPyahHpcum8eonYrQtmGTU0lbtwxhA6jHv4Bm1cAdlPFRCJX4AHebkCm75aKTjjRAW+DezqD1b/cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.7.0.tgz", - "integrity": "sha512-0t17s03Cbv+ZcUvv+y33GtX75WBLQELgNdVghnsdhTgU3hVcWcMsoP6Lb0nDTl95ZJfbP1mVMO0p3byVh3uuzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.3" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.7.0.tgz", - "integrity": "sha512-5BxcD6LjVWsGu4xyaBC5bu8LdNgPCVBnAkWTtOCs/CZxcB22L8rcoWfv7Hh/3WooVjBZmFtyxhgvkQFedPGnFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/@shikijs/langs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.7.0.tgz", - "integrity": "sha512-1zYtdfXLr9xDKLTGy5kb7O0zDQsxXiIsw1iIBcNOO8Yi5/Y1qDbJ+0VsFoqTlzdmneO8Ij35g7QKF8kcLyznCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.7.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.7.0.tgz", - "integrity": "sha512-VJx8497iZPy5zLiiCTSIaOChIcKQwR0FebwE9S3rcN0+J/GTWwQ1v/bqhTbpbY3zybPKeO8wdammqkpXc4NVjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.7.0" - } - }, - "node_modules/@shikijs/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.7.0.tgz", - "integrity": "sha512-MGaLeaRlSWpnP0XSAum3kP3a8vtcTsITqoEPYdt3lQG3YCdQH4DnEhodkYcNMcU0uW0RffhoD1O3e0vG5eSBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@std/media-types": { - "name": "@jsr/std__media-types", - "version": "1.1.0", - "resolved": "https://npm.jsr.io/~/11/@jsr/std__media-types/1.1.0.tgz", - "integrity": "sha512-dHvaxHL7ENWnltgL653uo3KnKFse3ZbopZop2gqsT7yrscx7irZEClu5Cba7gMPPRk4Lg1FbriNcaBViM2RSBw==" - }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tokenizer/http": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@tokenizer/http/-/http-0.9.2.tgz", - "integrity": "sha512-rzJwHcqDjO3FdBPr+FK2R6dYE6Qbg6QZP7S47rhCEtG+/YqEFLqZ+gFCLcL8y5D39aYQB9vDssiwbsJlRLePPg==", - "license": "MIT", - "dependencies": { - "@tokenizer/range": "^0.12.0", - "debug": "^4.3.7", - "strtok3": "^10.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/http/node_modules/@tokenizer/range": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.12.0.tgz", - "integrity": "sha512-xvJ1OflWjopkC5EgLge+9HrwsWStgVewQkmusoF2BxgCuGdm1KuhZAMVMNzC7h1WNei9JA6xKQlkbPNJtjZ6aw==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.7", - "strtok3": "^9.1.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/http/node_modules/@tokenizer/range/node_modules/strtok3": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", - "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.3.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/inflate": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "fflate": "^0.8.2", - "token-types": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/range": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@tokenizer/range/-/range-0.13.0.tgz", - "integrity": "sha512-ibLGQRU8an1g/y952+OxeZDGIj+W1HW8AQPtk26VIFWzy3tvQImmGBwYbpHJXMMAz1nhCPAAepCRptGKB8YrKg==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "strtok3": "^10.2.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "license": "MIT" - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/fontkit": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/fontkit/-/fontkit-2.0.8.tgz", - "integrity": "sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", - "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/nlcst": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz", - "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/node": { - "version": "24.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", - "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.8.0" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-pDzSNulqooSKvSNcksnV72nk8p7gRqN8As71Sp28nov1IgmPKWbOEIwAWvBME5pPTtaXJAvG3O4oc76HlQ4kqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", - "license": "MIT" - }, - "node_modules/@types/wicg-file-system-access": { - "version": "2023.10.6", - "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2023.10.6.tgz", - "integrity": "sha512-YO/183gNRzZFSdKu+ikkD7ambAj4PhgjFAF2A/Mw/7wroSF6ne8r804RkpZzqrJ/F6DO2/IYlQF/ULOZ/bhKyA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@web-applets/sdk": { - "version": "0.2.6", - "resolved": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", - "integrity": "sha512-cIJ5viAtAKbbeB0izJ9VTXVDr9xsxAiGWMlhDZd1F9iHdGMk7j0cO8Q03wKxidVx5d/1kijHP07CDA7fygccEA==", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/98.css": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/98.css/-/98.css-0.1.21.tgz", - "integrity": "sha512-ddk5qtUWyapM0Bzd5jwGExoE5fdSEGrP+F5VbYjyZLf2c9UVmn6w2NPTvCsoD4BWdGsjdLjlkQGhWwWTJcYQJQ==", - "license": "MIT" - }, - "node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/abstract-leveldown/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-loose": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.4.0.tgz", - "integrity": "sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/alien-signals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.0.0.tgz", - "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==", - "license": "MIT" - }, - "node_modules/ani-cursor": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/ani-cursor/-/ani-cursor-0.0.5.tgz", - "integrity": "sha512-gGxst72lG9TOwEfbVpX9vHhzUGw+4Ee2XB6AfYq5JP+bxBtpAjgnTBepCVxYF5t1TPrWHN23nWqLTflJOA3/ag==", - "license": "MIT", - "dependencies": { - "byte-data": "18.1.1", - "riff-file": "^1.0.3" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-iterate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", - "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/astro": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.10.1.tgz", - "integrity": "sha512-DJVmt+51jU1xmgmAHCDwuUgcG/5aVFSU+tcX694acAZqPVt8EMUAmUZcJDX36Z7/EztnPph9HR3pm72jS2EgHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@astrojs/compiler": "^2.12.2", - "@astrojs/internal-helpers": "0.6.1", - "@astrojs/markdown-remark": "6.3.2", - "@astrojs/telemetry": "3.3.0", - "@capsizecss/unpack": "^2.4.0", - "@oslojs/encoding": "^1.1.0", - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.1", - "aria-query": "^5.3.2", - "axobject-query": "^4.1.0", - "boxen": "8.0.1", - "ci-info": "^4.2.0", - "clsx": "^2.1.1", - "common-ancestor-path": "^1.0.1", - "cookie": "^1.0.2", - "cssesc": "^3.0.0", - "debug": "^4.4.0", - "deterministic-object-hash": "^2.0.2", - "devalue": "^5.1.1", - "diff": "^5.2.0", - "dlv": "^1.1.3", - "dset": "^3.1.4", - "es-module-lexer": "^1.6.0", - "esbuild": "^0.25.0", - "estree-walker": "^3.0.3", - "flattie": "^1.1.1", - "fontace": "~0.3.0", - "github-slugger": "^2.0.0", - "html-escaper": "3.0.3", - "http-cache-semantics": "^4.1.1", - "import-meta-resolve": "^4.1.0", - "js-yaml": "^4.1.0", - "kleur": "^4.1.5", - "magic-string": "^0.30.17", - "magicast": "^0.3.5", - "mrmime": "^2.0.1", - "neotraverse": "^0.6.18", - "p-limit": "^6.2.0", - "p-queue": "^8.1.0", - "package-manager-detector": "^1.1.0", - "picomatch": "^4.0.2", - "prompts": "^2.4.2", - "rehype": "^13.0.2", - "semver": "^7.7.1", - "shiki": "^3.2.1", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.12", - "tsconfck": "^3.1.5", - "ultrahtml": "^1.6.0", - "unifont": "~0.5.0", - "unist-util-visit": "^5.0.0", - "unstorage": "^1.15.0", - "vfile": "^6.0.3", - "vite": "^6.3.4", - "vitefu": "^1.0.6", - "xxhash-wasm": "^1.1.0", - "yargs-parser": "^21.1.1", - "yocto-spinner": "^0.2.1", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.5", - "zod-to-ts": "^1.2.0" - }, - "bin": { - "astro": "astro.js" - }, - "engines": { - "node": "18.20.8 || ^20.3.0 || >=22.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/astrodotbuild" - }, - "optionalDependencies": { - "sharp": "^0.33.3" - } - }, - "node_modules/astro-purgecss": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/astro-purgecss/-/astro-purgecss-5.2.3.tgz", - "integrity": "sha512-JrGQs37gQRn86X6rUJBg4ujqR++5J6uXFK0HF+W2Yaja+ZvGtIHFdw6JsgoAnzn+XtKB/hsiPzSIqO5FZfU0jQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "astro": "^5.0.0", - "purgecss": "^7.0.0" - } - }, - "node_modules/astro-scope": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/astro-scope/-/astro-scope-3.0.1.tgz", - "integrity": "sha512-/mdiiv0BELoDvhHPMCBokTymW11KOp+zTh4OMqmYGb8DxpOxE59O2VhtiWseoZdKJNQkNyyN/9Nsu3VZrPGWHA==", - "dev": true, - "license": "Public Domain", - "peerDependencies": { - "astro": "^4.2.2 || 5" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-lock": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true, - "license": "MIT" - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "license": "MIT", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/blob-to-buffer": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/blob-to-buffer/-/blob-to-buffer-1.2.9.tgz", - "integrity": "sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/butterchurn": { - "version": "3.0.0-beta.5", - "resolved": "https://registry.npmjs.org/butterchurn/-/butterchurn-3.0.0-beta.5.tgz", - "integrity": "sha512-BStK4OAbBb9Pvt8PuQlS4WVmYBwU1KuDMRHF1V89QjoIFauAqq7tpV4EpYXj7K563r5daLrMX+2y5DBhZZ9Xig==", - "license": "MIT", - "dependencies": { - "@assemblyscript/loader": "^0.17.11", - "ecma-proposal-math-extensions": "0.0.2", - "eel-wasm": "^0.0.16" - } - }, - "node_modules/butterchurn-presets": { - "version": "3.0.0-beta.4", - "resolved": "https://registry.npmjs.org/butterchurn-presets/-/butterchurn-presets-3.0.0-beta.4.tgz", - "integrity": "sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5" - } - }, - "node_modules/byte-data": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/byte-data/-/byte-data-18.1.1.tgz", - "integrity": "sha512-Kv/B0r7adgnCcrs/y703sac2XFLdHW5kPfis1j8+Ij/hmEcWhBKf+1pNTv+vsNqXb207Uiyri8bpnogNxR/4Lg==", - "license": "MIT", - "dependencies": { - "endianness": "^8.0.2", - "ieee754-buffer": "^2.0.0", - "utf8-buffer": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chainsaw": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", - "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", - "license": "MIT/X11", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/clean-git-ref": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", - "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-to-hsla": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/color-to-hsla/-/color-to-hsla-0.1.1.tgz", - "integrity": "sha512-lXqaKMk8lY5R9PK0R/fqSZygEKLIJvBrLc20Y/7CpPdoKe5pNvJQYs2olo5BbuJK9gOVr6za4mndjZHHVLZvEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/comlink": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz", - "integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==", - "license": "Apache-2.0" - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true, - "license": "ISC" - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/cookie-es": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", - "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/cross-fetch": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", - "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.7.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "uncrypto": "^0.1.3" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/csrf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz", - "integrity": "sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "rndm": "1.2.0", - "tsscmp": "1.0.6", - "uid-safe": "2.1.5" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-uri-component": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", - "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha512-zpqiCT8bODLu3QSmLLic8xJnYWBFjOSu/fBCm189oAiTtPq/PSanNACKZDS7kgSyCJY7P+IcODzlIogBK/9RBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/depstatus": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depstatus/-/depstatus-1.1.1.tgz", - "integrity": "sha512-QT4i2Ql8RS1ttcj7zo4RzYvKz+/eOOIh6N7CXHqfDqC5ZX1hfx5KX6T88gy/j2UWP2x2ytjSoFBl+XW0gVZMug==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "semver": "^7.3.2" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deterministic-object-hash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", - "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "base-64": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff3": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", - "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dset": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", - "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/dynalite": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/dynalite/-/dynalite-3.2.2.tgz", - "integrity": "sha512-sx9ZjTgMs/D4gHnba4rnBkw29648dHwHmywJet132KAbiq1ZyWx9W1fMd/eP9cPwTKDXyCBuTYOChE0qMDjaXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^2.6.3", - "big.js": "^5.2.2", - "buffer-crc32": "^0.2.13", - "lazy": "^1.0.11", - "levelup": "^4.4.0", - "lock": "^1.1.0", - "memdown": "^5.1.0", - "minimist": "^1.2.5", - "once": "^1.4.0", - "subleveldown": "^5.0.1" - }, - "bin": { - "dynalite": "cli.js" - }, - "optionalDependencies": { - "leveldown": "^5.6.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ecma-proposal-math-extensions": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz", - "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/eel-wasm": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/eel-wasm/-/eel-wasm-0.0.16.tgz", - "integrity": "sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/endianness": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/endianness/-/endianness-8.0.2.tgz", - "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/enquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true, - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-average-color": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/fast-average-color/-/fast-average-color-9.5.0.tgz", - "integrity": "sha512-nC6x2YIlJ9xxgkMFMd1BNoM1ctMjNoRKfRliPmiEWW3S6rLTHiQcy9g3pt/xiKv/D0NAAkhb9VyV+WJFvTqMGg==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "license": "MIT" - }, - "node_modules/file-type": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.0.0.tgz", - "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", - "license": "MIT", - "dependencies": { - "@tokenizer/inflate": "^0.2.7", - "strtok3": "^10.2.2", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", - "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/finalhandler": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.1.tgz", - "integrity": "sha512-NpHDfiu6jURpO56pYkM6DEvnBEA9jNrwj4v05Vjs5hmdqEB2/kRA3wugct7BMyqYydjN+kWunMhtTn+itVmxpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/flattie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", - "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fontace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.3.0.tgz", - "integrity": "sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/fontkit": "^2.0.8", - "fontkit": "^2.0.4" - } - }, - "node_modules/fontkit": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", - "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@swc/helpers": "^0.5.12", - "brotli": "^1.3.2", - "clone": "^2.1.2", - "dfa": "^1.2.0", - "fast-deep-equal": "^3.1.3", - "restructure": "^3.0.0", - "tiny-inflate": "^1.0.3", - "unicode-properties": "^1.4.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fscreen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz", - "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==", - "license": "MIT" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true, - "license": "MIT" - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "dev": true, - "license": "ISC" - }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, - "node_modules/glsl-optimizer-js": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/glsl-optimizer-js/-/glsl-optimizer-js-0.0.2.tgz", - "integrity": "sha512-SMkVILyc1LeBEBgiHOe+4Bh8MEqxLNyAns0NfgmxJTxZZdj7oCoZt+n846rbdB8OLGsg16f5C9nmhi9XEuM8SQ==", - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/h3": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", - "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.4", - "defu": "^6.1.4", - "destr": "^2.0.5", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.0", - "radix3": "^1.1.2", - "ufo": "^1.6.1", - "uncrypto": "^0.1.3" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hashish": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", - "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", - "license": "MIT/X11", - "dependencies": { - "traverse": ">=0.2.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-html": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-text": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", - "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "unist-util-find-after": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/header-timers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/header-timers/-/header-timers-0.3.0.tgz", - "integrity": "sha512-Jzdm9z9Qg/9zioR4Vdz9aJXLeelkbVrCluqYTCuBp83FB9itdlDXJS+Rs+XQhH4C6i+q6bSd8Q4tVF/bdfLXEQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/iconoir": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/iconoir/-/iconoir-7.11.0.tgz", - "integrity": "sha512-F9T/E08aJBaQ+VOBjn+ChWKn3hFwsaK5VZ024OFMxdDaxKjLGDpU/OsU7MO9wXM+mDs4ZImypdXIn0fFZAXKmA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/iconoir" - } - }, - "node_modules/idb-keyval": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", - "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", - "license": "Apache-2.0" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ieee754-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ieee754-buffer/-/ieee754-buffer-2.0.0.tgz", - "integrity": "sha512-AXUAT0nMEi7h1Is8HXGXof3eejl/GabZFKSj8Ym6kVRUSwrAb52EkAXywiCQYSHGQMRn7lvfY7vhPMjVc+Kybg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", - "dev": true, - "license": "MIT" - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/brc-dd" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/isomorphic-git": { - "version": "1.33.1", - "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.33.1.tgz", - "integrity": "sha512-Fy5rPAncURJoqL9R+5nJXLl5rQH6YpcjJd7kdCoRJPhrBiLVkLm9b+esRqYQQlT1hKVtKtALbfNtpHjWWJgk6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-lock": "^1.4.1", - "clean-git-ref": "^2.0.1", - "crc-32": "^1.2.0", - "diff3": "0.0.3", - "ignore": "^5.1.4", - "minimisted": "^2.0.0", - "pako": "^1.0.10", - "path-browserify": "^1.0.1", - "pify": "^4.0.1", - "readable-stream": "^3.4.0", - "sha.js": "^2.4.12", - "simple-get": "^4.0.1" - }, - "bin": { - "isogit": "cli.cjs" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/isomorphic-git/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/isomorphic-git/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbi": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz", - "integrity": "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==", - "license": "Apache-2.0" - }, - "node_modules/jsonschema": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", - "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lambda-runtimes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lambda-runtimes/-/lambda-runtimes-2.0.5.tgz", - "integrity": "sha512-6BoLX9xuvr+B/f05MOhJnzRdF8Za5YYh82n45ndun9EU3uhJv9kIwnYrOrvuA7MoGwZgCMI7RUhBRzfw/l63SQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, - "node_modules/lazy": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "deprecated": "Superseded by level-transcoder (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/level-option-wrap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/level-option-wrap/-/level-option-wrap-1.1.0.tgz", - "integrity": "sha512-gQouC22iCqHuBLNl4BHxEZUxLvUKALAtT/Q0c6ziOxZQ8c02G/gyxHWNbLbxUzRNfMrRnbt6TZT3gNe8VBqQeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defined": "~0.0.0" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "deprecated": "Superseded by classic-level (https://github.com/Level/community#faq)", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lock": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lock/-/lock-1.1.0.tgz", - "integrity": "sha512-NZQIJJL5Rb9lMJ0Yl1JoVr9GSdo4HTPsUEWsSFzB8dE8DSoiLCVavWZPi7Rnlv/o73u6I24S/XYc/NmG4l8EKA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/magicast": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.4", - "@babel/types": "^7.25.4", - "source-map-js": "^1.2.0" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-definitions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "deprecated": "Superseded by memory-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true, - "license": "MIT" - }, - "node_modules/memdown/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/milkdrop-eel-parser": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/milkdrop-eel-parser/-/milkdrop-eel-parser-0.0.4.tgz", - "integrity": "sha512-4PsOdTMDB7GM3UFzqXQQXf8MBeoolOhsBLMlhug+IIMZ+yNkvqLbdqDbrueGZc8P8tLRJP8pbAxna1yjFr06HQ==", - "license": "MIT" - }, - "node_modules/milkdrop-preset-converter-aws": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/milkdrop-preset-converter-aws/-/milkdrop-preset-converter-aws-0.1.6.tgz", - "integrity": "sha512-nr89LRZYgdrDn17vGQCvUK/LM9d90mywElL7zlzXBTgkxWAs/Kamn1Yl9676ugt4L4BAGo6PTEipIqeYXFSM7g==", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "glsl-optimizer-js": "^0.0.2", - "milkdrop-eel-parser": "^0.0.4", - "milkdrop-preset-utils": "^0.1.0" - } - }, - "node_modules/milkdrop-preset-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/milkdrop-preset-utils/-/milkdrop-preset-utils-0.1.0.tgz", - "integrity": "sha512-yK5y03SN8INC+ssLLYGGsaAHgNxXEUK6PQVV44rg9OAA27F2aPM0tA5uGsDdASH9sgPaAaRVMV5NoEvEkh66Sw==", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimisted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", - "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/morphdom": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.7.tgz", - "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==", - "license": "MIT" - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multiformats": { - "version": "13.3.7", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz", - "integrity": "sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ==", - "license": "Apache-2.0 OR MIT" - }, - "node_modules/music-metadata": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.9.0.tgz", - "integrity": "sha512-J7VqD8FY6KRcm75Fzj86FPsckiD/EdvO5OS3P+JiMf/2krP3TcAseZYfkic6eFeJ0iBhhzcdxgfu8hLW95aXXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - }, - { - "type": "buymeacoffee", - "url": "https://buymeacoffee.com/borewit" - } - ], - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.2.0", - "@tokenizer/token": "^0.3.0", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "file-type": "^21.0.0", - "media-typer": "^1.1.0", - "strtok3": "^10.3.4", - "token-types": "^6.1.1", - "uint8array-extras": "^1.5.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/music-metadata-browser": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/music-metadata-browser/-/music-metadata-browser-0.6.6.tgz", - "integrity": "sha512-14KFz4HR6rM6RATcLtJoBDRbehU/dKdVzElCdeI8CjP7Un2HtSf0WiT7f7Lz+XNkcBMZUjthmC6Wy4+NNayCRw==", - "deprecated": "No longer support, superseded by music-metadata", - "license": "MIT", - "dependencies": { - "assert": "^1.4.1", - "buffer": "^5.2.1", - "debug": "^4.0.1", - "music-metadata": "^3.4.0", - "readable-stream": "^3.0.6", - "remove": "^0.1.5", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/music-metadata-browser/node_modules/file-type": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", - "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/music-metadata-browser/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/music-metadata-browser/node_modules/music-metadata": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-3.8.0.tgz", - "integrity": "sha512-aIADbp3uCS+ANr4nnFEHzTzMy81OT7PR7WBMW73SJ28Y7P94nnEugmTOj1ICP2JmxBBDlo+MeYVgiPnxVN69tg==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "file-type": "^11.0.0", - "media-typer": "0.3.0", - "strtok3": "^2.3.0", - "token-types": "^1.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/music-metadata-browser/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/music-metadata-browser/node_modules/strtok3": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-2.3.0.tgz", - "integrity": "sha512-AA67/1atBh7X0fUTDevjW89by2ZkY9RZAnkwusx5Yc1COYf0ruUbpYOOIs03SnRA1CF9K3+BtRXKOEtKhAXVaQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "then-read-stream": "^1.5.0", - "token-types": "^1.0.1" - }, - "engines": { - "node": ">=0.1.98" - } - }, - "node_modules/music-metadata-browser/node_modules/token-types": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-1.3.2.tgz", - "integrity": "sha512-LemYprKRfZPUiwVEMIL8fIP/cvZBpMds1PklsyoQyLZdKk7SQlldNGzw4TTrg2MnWLGSkMM6gUa1EW0h1d72fg==", - "license": "MIT", - "dependencies": { - "ieee754": "^1.1.13" - }, - "engines": { - "node": ">=0.1.98" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/neotraverse": { - "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/netlify": { - "version": "23.9.1", - "resolved": "https://registry.npmjs.org/netlify/-/netlify-23.9.1.tgz", - "integrity": "sha512-H6UZ8oL6YtLzK3n3/0v0/rMUKglzkpLkKe5MyFPnWehiLy0MvB55m3bYGAq2o4yxD/n0NINCkSDB1w/AUMj1+A==", - "dev": true, - "hasInstallScript": true, - "hasShrinkwrap": true, - "license": "MIT", - "dependencies": { - "@fastify/static": "7.0.4", - "@netlify/ai": "0.2.1", - "@netlify/api": "14.0.6", - "@netlify/blobs": "10.0.11", - "@netlify/build": "35.1.8", - "@netlify/build-info": "10.0.8", - "@netlify/config": "24.0.4", - "@netlify/dev-utils": "4.2.0", - "@netlify/edge-bundler": "14.5.6", - "@netlify/edge-functions": "2.18.1", - "@netlify/edge-functions-bootstrap": "2.17.1", - "@netlify/headers-parser": "9.0.2", - "@netlify/local-functions-proxy": "2.0.3", - "@netlify/redirect-parser": "15.0.3", - "@netlify/zip-it-and-ship-it": "14.1.8", - "@octokit/rest": "22.0.0", - "@opentelemetry/api": "1.8.0", - "@pnpm/tabtab": "0.5.4", - "ansi-escapes": "7.1.1", - "ansi-to-html": "0.7.2", - "ascii-table": "0.0.9", - "backoff": "2.5.0", - "boxen": "8.0.1", - "chalk": "5.6.2", - "chokidar": "4.0.3", - "ci-info": "4.3.0", - "clean-deep": "3.4.0", - "commander": "12.1.0", - "comment-json": "4.3.0", - "content-type": "1.0.5", - "cookie": "1.0.2", - "cron-parser": "4.9.0", - "debug": "4.4.3", - "decache": "4.6.2", - "dot-prop": "9.0.0", - "dotenv": "17.2.3", - "env-paths": "3.0.0", - "envinfo": "7.15.0", - "etag": "1.8.1", - "execa": "5.1.1", - "express": "4.21.2", - "express-logging": "1.1.1", - "extract-zip": "2.0.1", - "fastest-levenshtein": "1.0.16", - "fastify": "4.29.1", - "find-up": "7.0.0", - "folder-walker": "3.2.0", - "fuzzy": "0.1.3", - "get-port": "5.1.1", - "gh-release-fetch": "4.0.3", - "git-repo-info": "2.1.1", - "gitconfiglocal": "2.1.0", - "http-proxy": "1.18.1", - "http-proxy-middleware": "2.0.9", - "https-proxy-agent": "7.0.6", - "inquirer": "8.2.7", - "inquirer-autocomplete-prompt": "1.4.0", - "ipx": "3.1.1", - "is-docker": "3.0.0", - "is-stream": "4.0.1", - "is-wsl": "3.1.0", - "isexe": "3.1.1", - "jsonwebtoken": "9.0.2", - "jwt-decode": "4.0.0", - "lambda-local": "2.2.0", - "locate-path": "7.2.0", - "lodash": "4.17.21", - "log-update": "6.1.0", - "maxstache": "1.0.7", - "maxstache-stream": "1.0.4", - "multiparty": "4.2.3", - "nanospinner": "1.2.2", - "netlify-redirector": "0.5.0", - "node-fetch": "3.3.2", - "normalize-package-data": "7.0.1", - "open": "10.2.0", - "p-filter": "4.1.0", - "p-map": "7.0.3", - "p-wait-for": "5.0.2", - "parallel-transform": "1.2.0", - "parse-github-url": "1.0.3", - "prettyjson": "1.2.5", - "raw-body": "3.0.1", - "read-package-up": "11.0.0", - "readdirp": "4.1.2", - "semver": "7.7.2", - "source-map-support": "0.5.21", - "terminal-link": "4.0.0", - "toml": "3.0.0", - "tomlify-j0.4": "3.0.0", - "ulid": "3.0.1", - "update-notifier": "7.3.1", - "uuid": "11.1.0", - "wait-port": "1.1.0", - "write-file-atomic": "5.0.1", - "ws": "8.18.3" - }, - "bin": { - "npxnetlify": "bin/run.js" - }, - "engines": { - "node": ">=20.12.2" - } - }, - "node_modules/netlify/node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/netlify/node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/netlify/node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/netlify/node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.28.4" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/netlify/node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/netlify/node_modules/@bugsnag/browser": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-8.6.0.tgz", - "integrity": "sha512-7UGqTGnQqXUQ09gOlWbDTFUSbeLIIrP+hML3kTOq8Zdc8nP/iuOEflXGLV2TxWBWW8xIUPc928caFPr9EcaDuw==", - "dev": true, - "dependencies": { - "@bugsnag/core": "^8.6.0" - } - }, - "node_modules/netlify/node_modules/@bugsnag/core": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-8.6.0.tgz", - "integrity": "sha512-94Jo443JegaiKV8z8NXMFdyTGubiUnwppWhq3kG2ldlYKtEvrmIaO5+JA58B6oveySvoRu3cCe2W9ysY7G7mDw==", - "dev": true, - "dependencies": { - "@bugsnag/cuid": "^3.0.0", - "@bugsnag/safe-json-stringify": "^6.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "^0.0.2", - "stack-generator": "^2.0.3" - } - }, - "node_modules/netlify/node_modules/@bugsnag/cuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.2.1.tgz", - "integrity": "sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==", - "dev": true - }, - "node_modules/netlify/node_modules/@bugsnag/js": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-8.6.0.tgz", - "integrity": "sha512-U+ofNTTMA2Z6tCrOhK/QhHBhLoQHoalk8Y82WWc7FAcVSoJZYadND/QuXUriNRZpC4YgJ/s/AxPeQ2y+WvMxzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bugsnag/browser": "^8.6.0", - "@bugsnag/node": "^8.6.0" - } - }, - "node_modules/netlify/node_modules/@bugsnag/node": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-8.6.0.tgz", - "integrity": "sha512-O91sELo6zBjflVeP3roRC9l68iYaafVs5lz2N0FDkrT08mP2UljtNWpjjoR/0h1so5Ny1OxHgnZ1IrsXhz5SMQ==", - "dev": true, - "dependencies": { - "@bugsnag/core": "^8.6.0", - "byline": "^5.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "^0.0.2", - "pump": "^3.0.0", - "stack-generator": "^2.0.3" - } - }, - "node_modules/netlify/node_modules/@bugsnag/safe-json-stringify": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.1.0.tgz", - "integrity": "sha512-ImA35rnM7bGr+J30R979FQ95BhRB4UO1KfJA0J2sVqc8nwnrS9hhE5mkTmQWMs8Vh1Da+hkLKs5jJB4JjNZp4A==", - "dev": true - }, - "node_modules/netlify/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/netlify/node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/netlify/node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dev": true, - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/netlify/node_modules/@dependents/detective-less": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz", - "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", - "dev": true, - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/netlify/node_modules/@envelop/instrumentation": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz", - "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==", - "dev": true, - "dependencies": { - "@whatwg-node/promise-helpers": "^1.2.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/android-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@esbuild/win32-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@fastify/accept-negotiator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", - "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", - "dev": true, - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" - } - }, - "node_modules/netlify/node_modules/@fastify/ajv-compiler/node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", - "dev": true - }, - "node_modules/netlify/node_modules/@fastify/busboy": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", - "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", - "dev": true - }, - "node_modules/netlify/node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", - "dev": true - }, - "node_modules/netlify/node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", - "dev": true, - "dependencies": { - "fast-json-stringify": "^5.7.0" - } - }, - "node_modules/netlify/node_modules/@fastify/merge-json-schemas": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/netlify/node_modules/@fastify/send": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", - "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", - "dev": true, - "dependencies": { - "@lukeed/ms": "^2.0.1", - "escape-html": "~1.0.3", - "fast-decode-uri-component": "^1.0.1", - "http-errors": "2.0.0", - "mime": "^3.0.0" - } - }, - "node_modules/netlify/node_modules/@fastify/static": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", - "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", - "dev": true, - "dependencies": { - "@fastify/accept-negotiator": "^1.0.0", - "@fastify/send": "^2.0.0", - "content-disposition": "^0.5.3", - "fastify-plugin": "^4.0.0", - "fastq": "^1.17.0", - "glob": "^10.3.4" - } - }, - "node_modules/netlify/node_modules/@humanwhocodes/momoa": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz", - "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==", - "dev": true, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/netlify/node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "dev": true - }, - "node_modules/netlify/node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.4.tgz", - "integrity": "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-darwin-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz", - "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz", - "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz", - "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz", - "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz", - "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz", - "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz", - "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz", - "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linux-arm": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz", - "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linux-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz", - "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz", - "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linux-s390x": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz", - "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linux-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz", - "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz", - "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz", - "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.3" - } - }, - "node_modules/netlify/node_modules/@img/sharp-wasm32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz", - "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==", - "cpu": [ - "wasm32" - ], - "dev": true, - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.5.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-win32-arm64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz", - "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-win32-ia32": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz", - "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@img/sharp-win32-x64": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz", - "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/netlify/node_modules/@import-maps/resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-2.0.0.tgz", - "integrity": "sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==", - "dev": true - }, - "node_modules/netlify/node_modules/@inquirer/external-editor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", - "dev": true, - "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/netlify/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/netlify/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/netlify/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true - }, - "node_modules/netlify/node_modules/@lukeed/ms": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", - "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/@mapbox/node-pre-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", - "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", - "dev": true, - "dependencies": { - "consola": "^3.2.3", - "detect-libc": "^2.0.0", - "https-proxy-agent": "^7.0.5", - "node-fetch": "^2.6.7", - "nopt": "^8.0.0", - "semver": "^7.5.3", - "tar": "^7.4.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/@netlify/ai": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@netlify/ai/-/ai-0.2.1.tgz", - "integrity": "sha512-pc30UjYtmoP9XyY6b+xyD/Xh3RYtuc3VcboKU0Ojdv3fX27NUEy3ZLYlmhHB+8E1zVHhyHsoBHqTt/He/YuhXw==", - "dev": true, - "dependencies": { - "@netlify/api": "^14.0.4" - }, - "engines": { - "node": ">=20.6.1" - }, - "peerDependencies": { - "@netlify/api": ">=14.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/api": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/@netlify/api/-/api-14.0.6.tgz", - "integrity": "sha512-tlG/gqA80WeAbJFYzcLdSP7v8jg1WgtJX+kQD20rMbU+Efga5XxwaiCHgjvpLvFi5hQMe1t2bG60CudxMN1T5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@netlify/open-api": "^2.39.0", - "node-fetch": "^3.0.0", - "p-wait-for": "^5.0.0", - "picoquery": "^2.5.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/binary-info": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@netlify/binary-info/-/binary-info-1.0.0.tgz", - "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==", - "dev": true - }, - "node_modules/netlify/node_modules/@netlify/blobs": { - "version": "10.0.11", - "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-10.0.11.tgz", - "integrity": "sha512-/pa7eD2gxkhJ6aUIJULrRu3tvAaimy+sA6vHUuGRMvncjOuRpeatXLHxuzdn8DyK1CZCjN3E33oXsdEpoqG7SA==", - "dev": true, - "dependencies": { - "@netlify/dev-utils": "4.2.0", - "@netlify/runtime-utils": "2.1.0" - }, - "engines": { - "node": "^14.16.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/build": { - "version": "35.1.8", - "resolved": "https://registry.npmjs.org/@netlify/build/-/build-35.1.8.tgz", - "integrity": "sha512-Kbi5vRAwaiosJNtd6BvCyqkza0e40ATSrBiTgDMPqTiX+1cNutJMP05R/rqSYr8LYW5vYVgBl5soeIaH1Yx4pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bugsnag/js": "^8.0.0", - "@netlify/blobs": "^10.0.11", - "@netlify/cache-utils": "^6.0.4", - "@netlify/config": "^24.0.4", - "@netlify/edge-bundler": "14.5.6", - "@netlify/functions-utils": "^6.2.8", - "@netlify/git-utils": "^6.0.2", - "@netlify/opentelemetry-utils": "^2.0.1", - "@netlify/plugins-list": "^6.80.0", - "@netlify/run-utils": "^6.0.2", - "@netlify/zip-it-and-ship-it": "14.1.8", - "@sindresorhus/slugify": "^2.0.0", - "ansi-escapes": "^7.0.0", - "ansis": "^4.1.0", - "clean-stack": "^5.0.0", - "execa": "^8.0.0", - "fdir": "^6.0.1", - "figures": "^6.0.0", - "filter-obj": "^6.0.0", - "hot-shots": "11.1.0", - "indent-string": "^5.0.0", - "is-plain-obj": "^4.0.0", - "keep-func-props": "^6.0.0", - "log-process-errors": "^11.0.0", - "memoize-one": "^6.0.0", - "minimatch": "^9.0.4", - "os-name": "^6.0.0", - "p-event": "^6.0.0", - "p-filter": "^4.0.0", - "p-locate": "^6.0.0", - "p-map": "^7.0.0", - "p-reduce": "^3.0.0", - "package-directory": "^8.0.0", - "path-exists": "^5.0.0", - "pretty-ms": "^9.0.0", - "ps-list": "^8.0.0", - "read-package-up": "^11.0.0", - "readdirp": "^4.0.0", - "resolve": "^2.0.0-next.5", - "rfdc": "^1.3.0", - "safe-json-stringify": "^1.2.0", - "semver": "^7.3.8", - "string-width": "^7.0.0", - "supports-color": "^10.0.0", - "terminal-link": "^4.0.0", - "ts-node": "^10.9.1", - "typescript": "^5.0.0", - "uuid": "^11.0.0", - "yaml": "^2.8.0", - "yargs": "^17.6.0", - "zod": "^3.25.76" - }, - "bin": { - "netlify-build": "bin.js" - }, - "engines": { - "node": ">=18.14.0" - }, - "peerDependencies": { - "@netlify/opentelemetry-sdk-setup": "^2.0.0", - "@opentelemetry/api": "~1.8.0" - }, - "peerDependenciesMeta": { - "@netlify/opentelemetry-sdk-setup": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/@netlify/build-info": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@netlify/build-info/-/build-info-10.0.8.tgz", - "integrity": "sha512-IotJn/+dizJpWIOJcSHiSFpIPpB0b2+s11Y0OekY3XFr58Wt3UGjbCNdO0cG4i3gsQEjzM2+lDQYgJ85TqPmSw==", - "dev": true, - "dependencies": { - "@bugsnag/js": "^8.0.0", - "@iarna/toml": "^2.2.5", - "dot-prop": "^9.0.0", - "find-up": "^7.0.0", - "minimatch": "^9.0.0", - "read-pkg": "^9.0.0", - "semver": "^7.3.8", - "yaml": "^2.8.0", - "yargs": "^17.6.0" - }, - "bin": { - "build-info": "bin.js" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/@sindresorhus/slugify": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", - "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/transliterate": "^1.0.0", - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/build/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/cache-utils": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-6.0.4.tgz", - "integrity": "sha512-KD6IXLbJcjJ5BhjGCy32BJtp1WxvTBS9J5cvdxjbBJGgfLWuJwzUzU8LR2sA4fppCCnEdKJdKy40OcVGZE0iUg==", - "dev": true, - "dependencies": { - "cpy": "^11.0.0", - "get-stream": "^9.0.0", - "globby": "^14.0.0", - "junk": "^4.0.0", - "locate-path": "^7.0.0", - "move-file": "^3.0.0", - "readdirp": "^4.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/config": { - "version": "24.0.4", - "resolved": "https://registry.npmjs.org/@netlify/config/-/config-24.0.4.tgz", - "integrity": "sha512-u5RyiCN5Fu165qMBpaQEP7fvnjWzcWwnZ6e+h9obQmNtTF5XPMiaxTITT9Qotsqw1Tz9I486I+nbqwDSE/Dp7g==", - "dev": true, - "dependencies": { - "@iarna/toml": "^2.2.5", - "@netlify/api": "^14.0.5", - "@netlify/headers-parser": "^9.0.2", - "@netlify/redirect-parser": "^15.0.3", - "chalk": "^5.0.0", - "cron-parser": "^4.1.0", - "deepmerge": "^4.2.2", - "dot-prop": "^9.0.0", - "execa": "^8.0.0", - "fast-safe-stringify": "^2.0.7", - "figures": "^6.0.0", - "filter-obj": "^6.0.0", - "find-up": "^7.0.0", - "indent-string": "^5.0.0", - "is-plain-obj": "^4.0.0", - "map-obj": "^5.0.0", - "omit.js": "^2.0.2", - "p-locate": "^6.0.0", - "path-type": "^6.0.0", - "read-package-up": "^11.0.0", - "tomlify-j0.4": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "yaml": "^2.8.0", - "yargs": "^17.6.0", - "zod": "^4.0.5" - }, - "bin": { - "netlify-config": "bin.js" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/config/node_modules/zod": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", - "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/netlify/node_modules/@netlify/dev-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-4.2.0.tgz", - "integrity": "sha512-P/uLJ5IKB4DhUOd6Q4Mpk7N0YKrnijUhAL3C05dEftNi3U3xJB98YekYfsL3G6GkS3L35pKGMx+vKJRwUHpP1Q==", - "dev": true, - "dependencies": { - "@whatwg-node/server": "^0.10.0", - "ansis": "^4.1.0", - "chokidar": "^4.0.1", - "decache": "^4.6.2", - "dettle": "^1.0.5", - "dot-prop": "9.0.0", - "empathic": "^2.0.0", - "env-paths": "^3.0.0", - "image-size": "^2.0.2", - "js-image-generator": "^1.0.4", - "parse-gitignore": "^2.0.0", - "semver": "^7.7.2", - "tmp-promise": "^3.0.3", - "uuid": "^11.1.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || >=20" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler": { - "version": "14.5.6", - "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-14.5.6.tgz", - "integrity": "sha512-00uOZIOFsoWKa04osBvQ763oAFZDtAGSIjlywU0TS/lZTQCVEs6k39yJz8v4UEhXvK5MCThiFv+tnlpTNJn3fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@import-maps/resolve": "^2.0.0", - "ajv": "^8.11.2", - "ajv-errors": "^3.0.0", - "better-ajv-errors": "^1.2.0", - "common-path-prefix": "^3.0.0", - "env-paths": "^3.0.0", - "esbuild": "0.25.10", - "execa": "^8.0.0", - "find-up": "^7.0.0", - "get-port": "^7.0.0", - "node-stream-zip": "^1.15.0", - "p-retry": "^6.0.0", - "p-wait-for": "^5.0.0", - "parse-imports": "^2.2.1", - "path-key": "^4.0.0", - "semver": "^7.3.8", - "tar": "^7.4.3", - "tmp-promise": "^3.0.3", - "urlpattern-polyfill": "8.0.2", - "uuid": "^11.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/get-port": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-bundler/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-functions": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/@netlify/edge-functions/-/edge-functions-2.18.1.tgz", - "integrity": "sha512-Cd/ddhbIyLPkEZ9yMnRIXzKH8UcnUlPAAa1iQva9bypKNjXyFcunt5eNMjfNxMsRMDao/PkDbp1OMGkTRQnwTg==", - "dev": true, - "dependencies": { - "@netlify/dev-utils": "4.2.0", - "@netlify/edge-bundler": "^14.5.2", - "@netlify/edge-functions-bootstrap": "2.16.0", - "@netlify/runtime-utils": "2.1.0", - "@netlify/types": "2.0.3", - "get-port": "^7.1.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/edge-functions-bootstrap": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.17.1.tgz", - "integrity": "sha512-KyNJbDhK1rC5wEeI7bXPgfl8QvADMHqNy2nwNJG60EHVRXTF0zxFnOpt/p0m2C512gcMXRrKZxaOZQ032RHVbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/@netlify/edge-functions-bootstrap": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.16.0.tgz", - "integrity": "sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==", - "dev": true - }, - "node_modules/netlify/node_modules/@netlify/edge-functions/node_modules/get-port": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/functions-utils": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-6.2.8.tgz", - "integrity": "sha512-RkvLcfa8Q4Ff19Qgzhfb0ORDL3PZXI5WJfMwEjjjSOW3HKPRrd+JTOEO+fgkScuzkMhG/DzvvTUs/JRpjWZmXw==", - "dev": true, - "dependencies": { - "@netlify/zip-it-and-ship-it": "14.1.8", - "cpy": "^11.0.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-6.0.2.tgz", - "integrity": "sha512-ASp8T6ZAxL5OE0xvTTn5+tIBua5F8ruLH7oYtI/m2W/8rYb9V3qvNeenf9SnKlGj1xv6mPv8l7Tc93kmBLLofw==", - "dev": true, - "dependencies": { - "execa": "^8.0.0", - "map-obj": "^5.0.0", - "micromatch": "^4.0.2", - "moize": "^6.1.3", - "path-exists": "^5.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/git-utils/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/headers-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@netlify/headers-parser/-/headers-parser-9.0.2.tgz", - "integrity": "sha512-86YEGPxVemhksY1LeSr8NSOyH11RHvYHq+FuBJnTlPZoRDX+TD+0TAxF6lwzAgVTd1VPkyFEHlNgUGqw7aNzRQ==", - "dev": true, - "dependencies": { - "@iarna/toml": "^2.2.5", - "escape-string-regexp": "^5.0.0", - "fast-safe-stringify": "^2.0.7", - "is-plain-obj": "^4.0.0", - "map-obj": "^5.0.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy/-/local-functions-proxy-2.0.3.tgz", - "integrity": "sha512-siVwmrp7Ow+7jLALi6jXOja4Y4uHMMgOLLQMgd+OZ1TESOstrJvkUisJEDAc9hx7u0v/B0mh5g1g1huiH3uS3A==", - "dev": true, - "engines": { - "node": ">=18.14.0" - }, - "optionalDependencies": { - "@netlify/local-functions-proxy-darwin-arm64": "1.1.1", - "@netlify/local-functions-proxy-darwin-x64": "1.1.1", - "@netlify/local-functions-proxy-freebsd-arm64": "1.1.1", - "@netlify/local-functions-proxy-freebsd-x64": "1.1.1", - "@netlify/local-functions-proxy-linux-arm": "1.1.1", - "@netlify/local-functions-proxy-linux-arm64": "1.1.1", - "@netlify/local-functions-proxy-linux-ia32": "1.1.1", - "@netlify/local-functions-proxy-linux-ppc64": "1.1.1", - "@netlify/local-functions-proxy-linux-x64": "1.1.1", - "@netlify/local-functions-proxy-openbsd-x64": "1.1.1", - "@netlify/local-functions-proxy-win32-ia32": "1.1.1", - "@netlify/local-functions-proxy-win32-x64": "1.1.1" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-darwin-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-arm64/-/local-functions-proxy-darwin-arm64-1.1.1.tgz", - "integrity": "sha512-lphJ9qqZ3glnKWEqlemU1LMqXxtJ/tKf7VzakqqyjigwLscXSZSb6fupSjQfd4tR1xqxA76ylws/2HDhc/gs+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-darwin-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-x64/-/local-functions-proxy-darwin-x64-1.1.1.tgz", - "integrity": "sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-freebsd-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-arm64/-/local-functions-proxy-freebsd-arm64-1.1.1.tgz", - "integrity": "sha512-u13lWTVMJDF0A6jX7V4N3HYGTIHLe5d1Z2wT43fSIHwXkTs6UXi72cGSraisajG+5JFIwHfPr7asw5vxFC0P9w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-freebsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-x64/-/local-functions-proxy-freebsd-x64-1.1.1.tgz", - "integrity": "sha512-g5xw4xATK5YDzvXtzJ8S1qSkWBiyF8VVRehXPMOAMzpGjCX86twYhWp8rbAk7yA1zBWmmWrWNA2Odq/MgpKJJg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-arm": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm/-/local-functions-proxy-linux-arm-1.1.1.tgz", - "integrity": "sha512-YsTpL+AbHwQrfHWXmKnwUrJBjoUON363nr6jUG1ueYnpbbv6wTUA7gI5snMi/gkGpqFusBthAA7C30e6bixfiA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm64/-/local-functions-proxy-linux-arm64-1.1.1.tgz", - "integrity": "sha512-dPGu1H5n8na7mBKxiXQ+FNmthDAiA57wqgpm5JMAHtcdcmRvcXwJkwWVGvwfj8ShhYJHQaSaS9oPgO+mpKkgmA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-ia32": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ia32/-/local-functions-proxy-linux-ia32-1.1.1.tgz", - "integrity": "sha512-Ra0FlXDrmPRaq+rYH3/ttkXSrwk1D5Zx/Na7UPfJZxMY7Qo5iY4bgi/FuzjzWzlp0uuKZOhYOYzYzsIIyrSvmw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-ppc64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ppc64/-/local-functions-proxy-linux-ppc64-1.1.1.tgz", - "integrity": "sha512-oXf1satwqwUUxz7LHS1BxbRqc4FFEKIDFTls04eXiLReFR3sqv9H/QuYNTCCDMuRcCOd92qKyDfATdnxT4HR8w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-linux-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-x64/-/local-functions-proxy-linux-x64-1.1.1.tgz", - "integrity": "sha512-bS3u4JuDg/eC0y4Na3i/29JBOxrdUvsK5JSjHfzUeZEbOcuXYf4KavTpHS5uikdvTgyczoSrvbmQJ5m0FLXfLA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-openbsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-openbsd-x64/-/local-functions-proxy-openbsd-x64-1.1.1.tgz", - "integrity": "sha512-1xLef/kLRNkBTXJ+ZGoRFcwsFxd/B2H3oeJZyXaZ3CN5umd9Mv9wZuAD74NuMt/535yRva8jtAJqvEgl9xMSdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "bin": { - "local-functions-proxy": "bin/local-functions-proxy" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-win32-ia32": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-ia32/-/local-functions-proxy-win32-ia32-1.1.1.tgz", - "integrity": "sha512-4IOMDBxp2f8VbIkhZ85zGNDrZR4ey8d68fCMSOIwitjsnKav35YrCf8UmAh3UR6CNIRJdJL4MW1GYePJ7iJ8uA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "bin": { - "local-functions-proxy.exe": "bin/local-functions-proxy.exe" - } - }, - "node_modules/netlify/node_modules/@netlify/local-functions-proxy-win32-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-x64/-/local-functions-proxy-win32-x64-1.1.1.tgz", - "integrity": "sha512-VCBXBJWBujVxyo5f+3r8ovLc9I7wJqpmgDn3ixs1fvdrER5Ac+SzYwYH4mUug9HI08mzTSAKZErzKeuadSez3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "bin": { - "local-functions-proxy.exe": "bin/local-functions-proxy.exe" - } - }, - "node_modules/netlify/node_modules/@netlify/open-api": { - "version": "2.39.0", - "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.39.0.tgz", - "integrity": "sha512-PMBktDmSRBS5act/GxHL3kvbRww5HPFZ9HIHXOrBu6vQesWYapoJaDiU/KDbqmkW1TyelGmURVcwsYr00qSAFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.8.0" - } - }, - "node_modules/netlify/node_modules/@netlify/opentelemetry-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@netlify/opentelemetry-utils/-/opentelemetry-utils-2.0.1.tgz", - "integrity": "sha512-SE9dZZR620yTYky8By/8h+UaTMugxue8oL51aRUrvtDg7y8Ed6fYKC8VY5JExCkLWQ1k3874qktwfc5gdMVx+w==", - "dev": true, - "engines": { - "node": ">=18.14.0" - }, - "peerDependencies": { - "@opentelemetry/api": "~1.8.0" - } - }, - "node_modules/netlify/node_modules/@netlify/plugins-list": { - "version": "6.80.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.80.0.tgz", - "integrity": "sha512-bCKLI51UZ70ziIWsf2nvgPd4XuG6m8AMCoHiYtl/BSsiaSBfmryZnTTqdRXerH09tBRpbPPwzaEgUJwyU9o8Qw==", - "dev": true, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/redirect-parser": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@netlify/redirect-parser/-/redirect-parser-15.0.3.tgz", - "integrity": "sha512-/HB3fcRRNgf6O/pbLn4EYNDHrU2kiadMMnazg8/OjvQK2S9i4y61vQcrICvDxYKUKQdgeEaABUuaCNAJFnfD9w==", - "dev": true, - "dependencies": { - "@iarna/toml": "^2.2.5", - "fast-safe-stringify": "^2.1.1", - "is-plain-obj": "^4.0.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-6.0.2.tgz", - "integrity": "sha512-62K++LDoPqcR1hTnOL2JhuAfY0LMgQ6MgW89DehPplKLbKaEXQH1K1+hUDvgKsn68ofTpE1CTq30PGZQo8fVxw==", - "dev": true, - "dependencies": { - "execa": "^8.0.0" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/run-utils/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/runtime-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@netlify/runtime-utils/-/runtime-utils-2.1.0.tgz", - "integrity": "sha512-z1h+wjB7IVYUsFZsuIYyNxiw5WWuylseY+eXaUDHBxNeLTlqziy+lz03QkR67CUR4Y790xGIhaHV00aOR2KAtw==", - "dev": true, - "engines": { - "node": "^18.14.0 || >=20" - } - }, - "node_modules/netlify/node_modules/@netlify/types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@netlify/types/-/types-2.0.3.tgz", - "integrity": "sha512-OcV8ivKTdsyANqVSQzbusOA7FVtE9s6zwxNCGR/aNnQaVxMUgm93UzKgfR7cZ1nnQNZHAbjd0dKJKaAUqrzbMw==", - "dev": true, - "engines": { - "node": "^18.14.0 || >=20" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-14.1.8.tgz", - "integrity": "sha512-APPNgGUAb1kSe4e9KxhRAeQIPGx8EAfwZ3S61eGyZXXGXgjnKmC2Ho7jsFnLsElbt8Ailyzmi/wAjh0NHZjGjA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.22.5", - "@babel/types": "7.28.4", - "@netlify/binary-info": "^1.0.0", - "@netlify/serverless-functions-api": "^2.5.0", - "@vercel/nft": "0.29.4", - "archiver": "^7.0.0", - "common-path-prefix": "^3.0.0", - "copy-file": "^11.0.0", - "es-module-lexer": "^1.0.0", - "esbuild": "0.25.10", - "execa": "^8.0.0", - "fast-glob": "^3.3.3", - "filter-obj": "^6.0.0", - "find-up": "^7.0.0", - "is-path-inside": "^4.0.0", - "junk": "^4.0.0", - "locate-path": "^7.0.0", - "merge-options": "^3.0.4", - "minimatch": "^9.0.0", - "normalize-path": "^3.0.0", - "p-map": "^7.0.0", - "path-exists": "^5.0.0", - "precinct": "^12.0.0", - "require-package-name": "^2.0.1", - "resolve": "^2.0.0-next.1", - "semver": "^7.3.8", - "tmp-promise": "^3.0.2", - "toml": "^3.0.0", - "unixify": "^1.0.0", - "urlpattern-polyfill": "8.0.2", - "yargs": "^17.0.0", - "zod": "^3.23.8" - }, - "bin": { - "zip-it-and-ship-it": "bin.js" - }, - "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/@netlify/serverless-functions-api": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-2.5.0.tgz", - "integrity": "sha512-0Hl6POpkEs3aan8T+EQvPIj5/gNc+64nwNv93VY4JoxFSrLPKYWmUyXJhT9lG93VxwGfmbxrCOV8U4sq2eWgTw==", - "dev": true, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/@netlify/zip-it-and-ship-it/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/@octokit/auth-token": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", - "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/core": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.5.tgz", - "integrity": "sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.2", - "@octokit/request": "^10.0.4", - "@octokit/request-error": "^7.0.1", - "@octokit/types": "^15.0.0", - "before-after-hook": "^4.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/endpoint": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.1.tgz", - "integrity": "sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^15.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/graphql": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.2.tgz", - "integrity": "sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^10.0.4", - "@octokit/types": "^15.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/openapi-types": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", - "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/netlify/node_modules/@octokit/plugin-paginate-rest": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.0.tgz", - "integrity": "sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^15.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/netlify/node_modules/@octokit/plugin-request-log": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", - "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/netlify/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.1.0.tgz", - "integrity": "sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^15.0.0" - }, - "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": ">=6" - } - }, - "node_modules/netlify/node_modules/@octokit/request": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.5.tgz", - "integrity": "sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^11.0.1", - "@octokit/request-error": "^7.0.1", - "@octokit/types": "^15.0.0", - "fast-content-type-parse": "^3.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/request-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.1.tgz", - "integrity": "sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^15.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/rest": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", - "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/core": "^7.0.2", - "@octokit/plugin-paginate-rest": "^13.0.1", - "@octokit/plugin-request-log": "^6.0.0", - "@octokit/plugin-rest-endpoint-methods": "^16.0.0" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/netlify/node_modules/@octokit/types": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.0.tgz", - "integrity": "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^26.0.0" - } - }, - "node_modules/netlify/node_modules/@opentelemetry/api": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-wasm": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.1.tgz", - "integrity": "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==", - "bundleDependencies": [ - "napi-wasm" - ], - "dev": true, - "dependencies": { - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "napi-wasm": "^1.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/netlify/node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/netlify/node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/netlify/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/netlify/node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/netlify/node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/netlify/node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/@pnpm/tabtab": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@pnpm/tabtab/-/tabtab-0.5.4.tgz", - "integrity": "sha512-bWLDlHsBlgKY/05wDN/V3ETcn5G2SV/SiA2ZmNvKGGlmVX4G5li7GRDhHcgYvHJHyJ8TUStqg2xtHmCs0UbAbg==", - "dev": true, - "dependencies": { - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "minimist": "^1.2.5", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz", - "integrity": "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz", - "integrity": "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz", - "integrity": "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz", - "integrity": "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz", - "integrity": "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz", - "integrity": "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz", - "integrity": "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz", - "integrity": "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz", - "integrity": "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz", - "integrity": "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz", - "integrity": "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz", - "integrity": "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz", - "integrity": "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz", - "integrity": "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz", - "integrity": "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz", - "integrity": "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz", - "integrity": "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz", - "integrity": "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openharmony" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz", - "integrity": "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz", - "integrity": "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz", - "integrity": "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz", - "integrity": "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/netlify/node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true - }, - "node_modules/netlify/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@sindresorhus/transliterate": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", - "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/netlify/node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "dev": true - }, - "node_modules/netlify/node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/netlify/node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/netlify/node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/netlify/node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/netlify/node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/netlify/node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/netlify/node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true - }, - "node_modules/netlify/node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/netlify/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/netlify/node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true - }, - "node_modules/netlify/node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/netlify/node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/netlify/node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/netlify/node_modules/@types/node": { - "version": "22.18.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.7.tgz", - "integrity": "sha512-3E97nlWEVp2V6J7aMkR8eOnw/w0pArPwf/5/W0865f+xzBoGL/ZuHkTAKAGN7cOWNwd+sG+hZOqj+fjzeHS75g==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/netlify/node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/netlify/node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/netlify/node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/netlify/node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true - }, - "node_modules/netlify/node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/netlify/node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/netlify/node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true - }, - "node_modules/netlify/node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/netlify/node_modules/@typescript-eslint/project-service": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", - "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.45.0", - "@typescript-eslint/types": "^8.45.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/netlify/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", - "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/netlify/node_modules/@typescript-eslint/types": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", - "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/netlify/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", - "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.45.0", - "@typescript-eslint/tsconfig-utils": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/netlify/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", - "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.45.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/netlify/node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/netlify/node_modules/@vercel/nft": { - "version": "0.29.4", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz", - "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==", - "dev": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^2.0.0", - "@rollup/pluginutils": "^5.1.3", - "acorn": "^8.6.0", - "acorn-import-attributes": "^1.9.5", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^10.4.5", - "graceful-fs": "^4.2.9", - "node-gyp-build": "^4.2.2", - "picomatch": "^4.0.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/@vue/compiler-core": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", - "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.28.4", - "@vue/shared": "3.5.22", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/netlify/node_modules/@vue/compiler-core/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/netlify/node_modules/@vue/compiler-dom": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", - "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", - "dev": true, - "dependencies": { - "@vue/compiler-core": "3.5.22", - "@vue/shared": "3.5.22" - } - }, - "node_modules/netlify/node_modules/@vue/compiler-sfc": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", - "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.28.4", - "@vue/compiler-core": "3.5.22", - "@vue/compiler-dom": "3.5.22", - "@vue/compiler-ssr": "3.5.22", - "@vue/shared": "3.5.22", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.19", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "node_modules/netlify/node_modules/@vue/compiler-ssr": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", - "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.5.22", - "@vue/shared": "3.5.22" - } - }, - "node_modules/netlify/node_modules/@vue/shared": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", - "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", - "dev": true - }, - "node_modules/netlify/node_modules/@whatwg-node/disposablestack": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", - "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", - "dev": true, - "dependencies": { - "@whatwg-node/promise-helpers": "^1.0.0", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@whatwg-node/fetch": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.11.tgz", - "integrity": "sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.8.0", - "urlpattern-polyfill": "^10.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@whatwg-node/fetch/node_modules/urlpattern-polyfill": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", - "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", - "dev": true - }, - "node_modules/netlify/node_modules/@whatwg-node/node-fetch": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.0.tgz", - "integrity": "sha512-+z00GpWxKV/q8eMETwbdi80TcOoVEVZ4xSRkxYOZpn3kbV3nej5iViNzXVke/j3v4y1YpO5zMS/CVDIASvJnZQ==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^3.1.1", - "@whatwg-node/disposablestack": "^0.0.6", - "@whatwg-node/promise-helpers": "^1.3.2", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@whatwg-node/promise-helpers": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", - "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", - "dev": true, - "dependencies": { - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/netlify/node_modules/@whatwg-node/server": { - "version": "0.10.12", - "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.12.tgz", - "integrity": "sha512-MQIvvQyPvKGna586MzXhgwnEbGtbm7QtOgJ/KPd/tC70M/jbhd1xHdIQQbh3okBw+MrDF/EvaC2vB5oRC7QdlQ==", - "dev": true, - "dependencies": { - "@envelop/instrumentation": "^1.0.0", - "@whatwg-node/disposablestack": "^0.0.6", - "@whatwg-node/fetch": "^0.10.10", - "@whatwg-node/promise-helpers": "^1.3.2", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/archive-type": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-6.0.1.tgz", - "integrity": "sha512-PB3NeJL8xARZt52yDBupK0dNPn8uIVQDe15qNehUpoeeLWCZyAOam4vGXnoZGz2N9D1VXtjievJuCsXam2TmbQ==", - "dev": true, - "dependencies": { - "file-type": "^18.5.0" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-9.0.1.tgz", - "integrity": "sha512-9Lvlt6Qdpo9SaRQyRIXCo3lgU++eMZ68lzgjcTwtuKDrlwT635+5zsHZ1yrSx/Blc5IDuVLlPkBPj5CZkx+2+Q==", - "dev": true, - "dependencies": { - "@xhmikosr/decompress-tar": "^7.0.0", - "@xhmikosr/decompress-tarbz2": "^7.0.0", - "@xhmikosr/decompress-targz": "^7.0.0", - "@xhmikosr/decompress-unzip": "^6.0.0", - "graceful-fs": "^4.2.11", - "make-dir": "^4.0.0", - "strip-dirs": "^3.0.0" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-tar": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-7.0.0.tgz", - "integrity": "sha512-kyWf2hybtQVbWtB+FdRyOT+jyR5jxCNZPLqvQGB7djZj75lrpLUPEmRbyo86AtJ5OEtivpYaNWjCkqSJ8xtRWw==", - "dev": true, - "dependencies": { - "file-type": "^18.5.0", - "is-stream": "^3.0.0", - "tar-stream": "^3.1.4" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-tar/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-tarbz2": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-7.0.0.tgz", - "integrity": "sha512-3QnjipYkRgh3Dee1MWDgKmANWxOQBVN4e1IwiGNe2fHYfMYTeSkVvWREt87UIoSucKUh3E95v8uGFttgTknZcA==", - "dev": true, - "dependencies": { - "@xhmikosr/decompress-tar": "^7.0.0", - "file-type": "^18.5.0", - "is-stream": "^3.0.0", - "seek-bzip": "^1.0.6", - "unbzip2-stream": "^1.4.3" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-tarbz2/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-targz": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-7.0.0.tgz", - "integrity": "sha512-7BNHJl92g9OLhw89zqcFS67V1LAtm4Ex02j6OiQzuE8P7Yy9lQcyBuEL3x6v436grLdL+BcFjgbmhWxnem4GHw==", - "dev": true, - "dependencies": { - "@xhmikosr/decompress-tar": "^7.0.0", - "file-type": "^18.5.0", - "is-stream": "^3.0.0" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-targz/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-unzip": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-6.0.0.tgz", - "integrity": "sha512-R1HAkjXLS7RAL74YFLxYY9zYflCcYGssld9KKFDu87PnJ4h4btdhzXfSC8J5i5A2njH3oYIoCzx03RIGTH07Sg==", - "dev": true, - "dependencies": { - "file-type": "^18.5.0", - "get-stream": "^6.0.1", - "yauzl": "^2.10.0" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/decompress-unzip/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/downloader": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-13.0.1.tgz", - "integrity": "sha512-mBvWew1kZJHfNQVVfVllMjUDwCGN9apPa0t4/z1zaUJ9MzpXjRL3w8fsfJKB8gHN/h4rik9HneKfDbh2fErN+w==", - "dev": true, - "dependencies": { - "@xhmikosr/archive-type": "^6.0.1", - "@xhmikosr/decompress": "^9.0.1", - "content-disposition": "^0.5.4", - "ext-name": "^5.0.0", - "file-type": "^18.5.0", - "filenamify": "^5.1.1", - "get-stream": "^6.0.1", - "got": "^12.6.1", - "merge-options": "^3.0.4", - "p-event": "^5.0.1" - }, - "engines": { - "node": "^14.14.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/@xhmikosr/downloader/node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "dev": true, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/netlify/node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/netlify/node_modules/abstract-logging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", - "dev": true - }, - "node_modules/netlify/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/netlify/node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/netlify/node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/netlify/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/netlify/node_modules/ajv-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", - "dev": true, - "peerDependencies": { - "ajv": "^8.0.1" - } - }, - "node_modules/netlify/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/netlify/node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/netlify/node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", - "dev": true, - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/netlify/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/ansi-to-html": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz", - "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==", - "dev": true, - "dependencies": { - "entities": "^2.2.0" - }, - "bin": { - "ansi-to-html": "bin/ansi-to-html" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/netlify/node_modules/ansis": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.1.0.tgz", - "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/netlify/node_modules/archiver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/archiver-utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", - "dev": true, - "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/netlify/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/netlify/node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true - }, - "node_modules/netlify/node_modules/ascii-table": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", - "integrity": "sha512-xpkr6sCDIYTPqzvjG8M3ncw1YOTaloWZOyrUmicoEifBEKzQzt+ooUpRpQ/AbOoJfO/p2ZKiyp79qHThzJDulQ==", - "dev": true - }, - "node_modules/netlify/node_modules/ast-module-types": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz", - "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/netlify/node_modules/async-sema": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true - }, - "node_modules/netlify/node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/netlify/node_modules/atomically": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.3.tgz", - "integrity": "sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==", - "dev": true, - "dependencies": { - "stubborn-fs": "^1.2.5", - "when-exit": "^2.1.1" - } - }, - "node_modules/netlify/node_modules/avvio": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", - "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", - "dev": true, - "dependencies": { - "@fastify/error": "^3.3.0", - "fastq": "^1.17.1" - } - }, - "node_modules/netlify/node_modules/b4a": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.2.tgz", - "integrity": "sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==", - "dev": true, - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", - "dev": true, - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/netlify/node_modules/bare-events": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz", - "integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==", - "dev": true - }, - "node_modules/netlify/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/before-after-hook": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", - "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/netlify/node_modules/better-ajv-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-1.2.0.tgz", - "integrity": "sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@humanwhocodes/momoa": "^2.0.2", - "chalk": "^4.1.2", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0 < 4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "ajv": "4.11.8 - 8" - } - }, - "node_modules/netlify/node_modules/better-ajv-errors/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/better-ajv-errors/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/better-ajv-errors/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/better-ajv-errors/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/netlify/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/netlify/node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/netlify/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/netlify/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/netlify/node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/netlify/node_modules/body-parser/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/netlify/node_modules/boxen": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", - "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^8.0.0", - "chalk": "^5.3.0", - "cli-boxes": "^3.0.0", - "string-width": "^7.2.0", - "type-fest": "^4.21.0", - "widest-line": "^5.0.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/netlify/node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/netlify/node_modules/buffer-crc32": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/netlify/node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "node_modules/netlify/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/netlify/node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "dev": true, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/netlify/node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/netlify/node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/netlify/node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "dev": true - }, - "node_modules/netlify/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/netlify/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "dependencies": { - "consola": "^3.2.3" - } - }, - "node_modules/netlify/node_modules/clean-deep": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", - "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", - "dev": true, - "dependencies": { - "lodash.isempty": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.transform": "^4.6.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/netlify/node_modules/clean-stack": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", - "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/netlify/node_modules/clipboardy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", - "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", - "dev": true, - "dependencies": { - "execa": "^8.0.1", - "is-wsl": "^3.1.0", - "is64bit": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/clipboardy/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/netlify/node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/netlify/node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/netlify/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/netlify/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/netlify/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/netlify/node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/netlify/node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/netlify/node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dev": true, - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/netlify/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/comment-json": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.3.0.tgz", - "integrity": "sha512-DczdmbvWLd09KATFWY0xcihOO45b32+5V34vZg1oelxqgjtGJotaLrrdFpJRLOdG6Wb031qcg4zOKgnQoBWbEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/netlify/node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/netlify/node_modules/compress-commons": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/compress-commons/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true - }, - "node_modules/netlify/node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/netlify/node_modules/configstore": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz", - "integrity": "sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==", - "dev": true, - "dependencies": { - "atomically": "^2.0.3", - "dot-prop": "^9.0.0", - "graceful-fs": "^4.2.11", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/netlify/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/cookie-es": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", - "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", - "dev": true - }, - "node_modules/netlify/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/netlify/node_modules/copy-file": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.1.0.tgz", - "integrity": "sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.11", - "p-event": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/netlify/node_modules/cpy": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-11.1.0.tgz", - "integrity": "sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==", - "dev": true, - "dependencies": { - "copy-file": "^11.0.0", - "globby": "^14.0.2", - "junk": "^4.0.1", - "micromatch": "^4.0.7", - "p-filter": "^4.1.0", - "p-map": "^7.0.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/netlify/node_modules/crc32-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/netlify/node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", - "dev": true, - "dependencies": { - "luxon": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/netlify/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/cross-spawn/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", - "dev": true, - "dependencies": { - "uncrypto": "^0.1.3" - } - }, - "node_modules/netlify/node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/netlify/node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dev": true, - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/netlify/node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/netlify/node_modules/cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "dev": true - }, - "node_modules/netlify/node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true - }, - "node_modules/netlify/node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true - }, - "node_modules/netlify/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/netlify/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "dependencies": { - "callsite": "^1.0.0" - } - }, - "node_modules/netlify/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/netlify/node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dev": true, - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true - }, - "node_modules/netlify/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "dev": true - }, - "node_modules/netlify/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/netlify/node_modules/detect-libc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz", - "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/detective-amd": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz", - "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==", - "dev": true, - "dependencies": { - "ast-module-types": "^6.0.1", - "escodegen": "^2.1.0", - "get-amd-module-type": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/detective-cjs": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz", - "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==", - "dev": true, - "dependencies": { - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/detective-es6": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz", - "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==", - "dev": true, - "dependencies": { - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/detective-postcss": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz", - "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==", - "dev": true, - "dependencies": { - "is-url": "^1.2.4", - "postcss-values-parser": "^6.0.2" - }, - "engines": { - "node": "^14.0.0 || >=16.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.47" - } - }, - "node_modules/netlify/node_modules/detective-sass": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz", - "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/detective-scss": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz", - "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/detective-stylus": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz", - "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/detective-typescript": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz", - "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "^8.23.0", - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "typescript": "^5.4.4" - } - }, - "node_modules/netlify/node_modules/detective-vue2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz", - "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==", - "dev": true, - "dependencies": { - "@dependents/detective-less": "^5.0.1", - "@vue/compiler-sfc": "^3.5.13", - "detective-es6": "^5.0.1", - "detective-sass": "^6.0.1", - "detective-scss": "^5.0.1", - "detective-stylus": "^5.0.1", - "detective-typescript": "^14.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "typescript": "^5.4.4" - } - }, - "node_modules/netlify/node_modules/dettle": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/dettle/-/dettle-1.0.5.tgz", - "integrity": "sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==", - "dev": true - }, - "node_modules/netlify/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/netlify/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/netlify/node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/netlify/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/netlify/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/netlify/node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/netlify/node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", - "dev": true, - "dependencies": { - "type-fest": "^4.18.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/netlify/node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/netlify/node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/netlify/node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/netlify/node_modules/emoji-regex": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", - "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", - "dev": true - }, - "node_modules/netlify/node_modules/empathic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", - "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true - }, - "node_modules/netlify/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/netlify/node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/netlify/node_modules/enquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/enquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/netlify/node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/envinfo": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.15.0.tgz", - "integrity": "sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/netlify/node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/netlify/node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true - }, - "node_modules/netlify/node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/esbuild": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.10", - "@esbuild/android-arm": "0.25.10", - "@esbuild/android-arm64": "0.25.10", - "@esbuild/android-x64": "0.25.10", - "@esbuild/darwin-arm64": "0.25.10", - "@esbuild/darwin-x64": "0.25.10", - "@esbuild/freebsd-arm64": "0.25.10", - "@esbuild/freebsd-x64": "0.25.10", - "@esbuild/linux-arm": "0.25.10", - "@esbuild/linux-arm64": "0.25.10", - "@esbuild/linux-ia32": "0.25.10", - "@esbuild/linux-loong64": "0.25.10", - "@esbuild/linux-mips64el": "0.25.10", - "@esbuild/linux-ppc64": "0.25.10", - "@esbuild/linux-riscv64": "0.25.10", - "@esbuild/linux-s390x": "0.25.10", - "@esbuild/linux-x64": "0.25.10", - "@esbuild/netbsd-arm64": "0.25.10", - "@esbuild/netbsd-x64": "0.25.10", - "@esbuild/openbsd-arm64": "0.25.10", - "@esbuild/openbsd-x64": "0.25.10", - "@esbuild/openharmony-arm64": "0.25.10", - "@esbuild/sunos-x64": "0.25.10", - "@esbuild/win32-arm64": "0.25.10", - "@esbuild/win32-ia32": "0.25.10", - "@esbuild/win32-x64": "0.25.10" - } - }, - "node_modules/netlify/node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/netlify/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/netlify/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/netlify/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/netlify/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/netlify/node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/netlify/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/netlify/node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "dependencies": { - "bare-events": "^2.7.0" - } - }, - "node_modules/netlify/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/execa/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/netlify/node_modules/express-logging": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/express-logging/-/express-logging-1.1.1.tgz", - "integrity": "sha512-1KboYwxxCG5kwkJHR5LjFDTD1Mgl8n4PIMcCuhhd/1OqaxlC68P3QKbvvAbZVUtVgtlxEdTgSUwf6yxwzRCuuA==", - "dev": true, - "dependencies": { - "on-headers": "^1.0.0" - }, - "engines": { - "node": ">= 0.10.26" - } - }, - "node_modules/netlify/node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/netlify/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/netlify/node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/netlify/node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/netlify/node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/fast-content-type-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", - "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/netlify/node_modules/fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true - }, - "node_modules/netlify/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/netlify/node_modules/fast-equals": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-3.0.3.tgz", - "integrity": "sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg==", - "dev": true - }, - "node_modules/netlify/node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true - }, - "node_modules/netlify/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/netlify/node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/netlify/node_modules/fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", - "dev": true, - "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", - "ajv-formats": "^3.0.1", - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", - "json-schema-ref-resolver": "^1.0.1", - "rfdc": "^1.2.0" - } - }, - "node_modules/netlify/node_modules/fast-json-stringify/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/fast-json-stringify/node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", - "dev": true - }, - "node_modules/netlify/node_modules/fast-querystring": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", - "dev": true, - "dependencies": { - "fast-decode-uri-component": "^1.0.1" - } - }, - "node_modules/netlify/node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/netlify/node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/netlify/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/netlify/node_modules/fastify": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.29.1.tgz", - "integrity": "sha512-m2kMNHIG92tSNWv+Z3UeTR9AWLLuo7KctC7mlFPtMEVrfjIhmQhkQnT9v15qA/BfVq3vvj134Y0jl9SBje3jXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", - "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", - "pino": "^9.0.0", - "process-warning": "^3.0.0", - "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", - "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" - } - }, - "node_modules/netlify/node_modules/fastify-plugin": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", - "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", - "dev": true - }, - "node_modules/netlify/node_modules/fastify/node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "dev": true - }, - "node_modules/netlify/node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/netlify/node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/netlify/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true - }, - "node_modules/netlify/node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/netlify/node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", - "dev": true, - "dependencies": { - "is-unicode-supported": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/file-type": { - "version": "18.7.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz", - "integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==", - "dev": true, - "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0", - "token-types": "^5.0.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/netlify/node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "node_modules/netlify/node_modules/filename-reserved-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/filenamify": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz", - "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==", - "dev": true, - "dependencies": { - "filename-reserved-regex": "^3.0.0", - "strip-outer": "^2.0.0", - "trim-repeated": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/filter-obj": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-6.1.0.tgz", - "integrity": "sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/netlify/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/netlify/node_modules/find-my-way": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", - "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-querystring": "^1.0.0", - "safe-regex2": "^3.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dev": true, - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true - }, - "node_modules/netlify/node_modules/folder-walker": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/folder-walker/-/folder-walker-3.2.0.tgz", - "integrity": "sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==", - "dev": true, - "dependencies": { - "from2": "^2.1.0" - } - }, - "node_modules/netlify/node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "dev": true, - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/netlify/node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/netlify/node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/netlify/node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/netlify/node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/netlify/node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/netlify/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/netlify/node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/netlify/node_modules/get-amd-module-type": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz", - "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==", - "dev": true, - "dependencies": { - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/netlify/node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/get-port-please": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", - "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", - "dev": true - }, - "node_modules/netlify/node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/gh-release-fetch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gh-release-fetch/-/gh-release-fetch-4.0.3.tgz", - "integrity": "sha512-TOiP1nwLsH5shG85Yt6v6Kjq5JU/44jXyEpbcfPgmj3C829yeXIlx9nAEwQRaxtRF3SJinn2lz7XUkfG9W/U4g==", - "dev": true, - "dependencies": { - "@xhmikosr/downloader": "^13.0.0", - "node-fetch": "^3.3.1", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.18.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/netlify/node_modules/git-repo-info": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", - "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", - "dev": true, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/netlify/node_modules/gitconfiglocal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz", - "integrity": "sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==", - "dev": true, - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/netlify/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, - "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/global-directory/node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/netlify/node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/globby/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/netlify/node_modules/globby/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/netlify/node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/netlify/node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/netlify/node_modules/h3": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", - "integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==", - "dev": true, - "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.5", - "defu": "^6.1.4", - "destr": "^2.0.5", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.2", - "radix3": "^1.1.2", - "ufo": "^1.6.1", - "uncrypto": "^0.1.3" - } - }, - "node_modules/netlify/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/netlify/node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/netlify/node_modules/hot-shots": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-11.1.0.tgz", - "integrity": "sha512-D4iAs/145g7EJ/wIzBLVANEpysTPthUy/K+4EUIw02YJQTqvzD1vUpYiM3vwR0qPAQj4FhQpQz8wBpY8KDcM0g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "unix-dgram": "2.x" - } - }, - "node_modules/netlify/node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "dev": true - }, - "node_modules/netlify/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/netlify/node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/http-shutdown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", - "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/netlify/node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/netlify/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/netlify/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/image-meta": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.1.tgz", - "integrity": "sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==", - "dev": true - }, - "node_modules/netlify/node_modules/image-size": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", - "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "dev": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/netlify/node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/netlify/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/index-to-position": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", - "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/netlify/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/netlify/node_modules/inquirer": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", - "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", - "dev": true, - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", - "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "figures": "^3.2.0", - "run-async": "^2.4.0", - "rxjs": "^6.6.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "inquirer": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/netlify/node_modules/inquirer-autocomplete-prompt/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/netlify/node_modules/inquirer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/inspect-with-kind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", - "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - } - }, - "node_modules/netlify/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/netlify/node_modules/ipx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ipx/-/ipx-3.1.1.tgz", - "integrity": "sha512-7Xnt54Dco7uYkfdAw0r2vCly3z0rSaVhEXMzPvl3FndsTVm5p26j+PO+gyinkYmcsEUvX2Rh7OGK7KzYWRu6BA==", - "dev": true, - "dependencies": { - "@fastify/accept-negotiator": "^2.0.1", - "citty": "^0.1.6", - "consola": "^3.4.2", - "defu": "^6.1.4", - "destr": "^2.0.5", - "etag": "^1.8.1", - "h3": "^1.15.3", - "image-meta": "^0.2.1", - "listhen": "^1.9.0", - "ofetch": "^1.4.1", - "pathe": "^2.0.3", - "sharp": "^0.34.3", - "svgo": "^4.0.0", - "ufo": "^1.6.1", - "unstorage": "^1.16.1", - "xss": "^1.0.15" - }, - "bin": { - "ipx": "bin/ipx.mjs" - } - }, - "node_modules/netlify/node_modules/ipx/node_modules/@fastify/accept-negotiator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz", - "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/netlify/node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/brc-dd" - } - }, - "node_modules/netlify/node_modules/is-arrayish": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", - "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", - "dev": true - }, - "node_modules/netlify/node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-error-instance": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-error-instance/-/is-error-instance-2.0.0.tgz", - "integrity": "sha512-5RuM+oFY0P5MRa1nXJo6IcTx9m2VyXYhRtb4h0olsi2GHci4bqZ6akHk+GmCYvDrAR9yInbiYdr2pnoqiOMw/Q==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/is-in-ci": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-1.0.0.tgz", - "integrity": "sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==", - "dev": true, - "bin": { - "is-in-ci": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", - "dev": true, - "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/is-network-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", - "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-npm": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", - "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/netlify/node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "node_modules/netlify/node_modules/is-url-superb": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/is64bit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", - "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", - "dev": true, - "dependencies": { - "system-architecture": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/netlify/node_modules/iserror": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", - "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==", - "dev": true - }, - "node_modules/netlify/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/netlify/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/netlify/node_modules/jiti": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.0.tgz", - "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==", - "dev": true, - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/netlify/node_modules/jpeg-js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", - "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", - "dev": true - }, - "node_modules/netlify/node_modules/js-image-generator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/js-image-generator/-/js-image-generator-1.0.4.tgz", - "integrity": "sha512-ckb7kyVojGAnArouVR+5lBIuwU1fcrn7E/YYSd0FK7oIngAkMmRvHASLro9Zt5SQdWToaI66NybG+OGxPw/HlQ==", - "dev": true, - "dependencies": { - "jpeg-js": "^0.4.2" - } - }, - "node_modules/netlify/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/netlify/node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/netlify/node_modules/json-schema-ref-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/netlify/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/netlify/node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/netlify/node_modules/junk": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/netlify/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/netlify/node_modules/jwt-decode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/keep-func-props": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/keep-func-props/-/keep-func-props-6.0.0.tgz", - "integrity": "sha512-XDYA44ccm6W2MXZeQcDZykS5srkTpPf6Z59AEuOFbfuqdQ5TVxhAjxgzAEFBpr8XpsCEgr/XeCBFAmc9x6wRmQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/netlify/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, - "node_modules/netlify/node_modules/ky": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.10.0.tgz", - "integrity": "sha512-YRPCzHEWZffbfvmRrfwa+5nwBHwZuYiTrfDX0wuhGBPV0pA/zCqcOq93MDssON/baIkpYbvehIX5aLpMxrRhaA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/netlify/node_modules/lambda-local": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.2.0.tgz", - "integrity": "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==", - "dev": true, - "dependencies": { - "commander": "^10.0.1", - "dotenv": "^16.3.1", - "winston": "^3.10.0" - }, - "bin": { - "lambda-local": "build/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/lambda-local/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/lambda-local/node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/netlify/node_modules/latest-version": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz", - "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==", - "dev": true, - "dependencies": { - "package-json": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/netlify/node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/netlify/node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/netlify/node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/netlify/node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/light-my-request": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", - "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", - "dev": true, - "dependencies": { - "cookie": "^0.7.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" - } - }, - "node_modules/netlify/node_modules/light-my-request/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/listhen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", - "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", - "dev": true, - "dependencies": { - "@parcel/watcher": "^2.4.1", - "@parcel/watcher-wasm": "^2.4.1", - "citty": "^0.1.6", - "clipboardy": "^4.0.0", - "consola": "^3.2.3", - "crossws": ">=0.2.0 <0.4.0", - "defu": "^6.1.4", - "get-port-please": "^3.1.2", - "h3": "^1.12.0", - "http-shutdown": "^1.2.2", - "jiti": "^2.1.2", - "mlly": "^1.7.1", - "node-forge": "^1.3.1", - "pathe": "^1.1.2", - "std-env": "^3.7.0", - "ufo": "^1.5.4", - "untun": "^0.1.3", - "uqr": "^0.1.2" - }, - "bin": { - "listen": "bin/listhen.mjs", - "listhen": "bin/listhen.mjs" - } - }, - "node_modules/netlify/node_modules/listhen/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/netlify/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/netlify/node_modules/lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", - "dev": true - }, - "node_modules/netlify/node_modules/log-process-errors": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-11.0.1.tgz", - "integrity": "sha512-HXYU83z3kH0VHfJgGyv9ZP9z7uNEayssgvpeQwSzh60mvpNqUBCPyXLSzCDSMxfGvAUUa0Kw06wJjVR46Ohd3A==", - "dev": true, - "dependencies": { - "is-error-instance": "^2.0.0", - "is-plain-obj": "^4.1.0", - "normalize-exception": "^3.0.0", - "set-error-message": "^2.0.1" - }, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-update/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-update/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-update/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/log-update/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "dev": true, - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/netlify/node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/luxon": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", - "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/macos-release": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-3.4.0.tgz", - "integrity": "sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/netlify/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/netlify/node_modules/map-obj": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz", - "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/netlify/node_modules/maxstache": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/maxstache/-/maxstache-1.0.7.tgz", - "integrity": "sha512-53ZBxHrZM+W//5AcRVewiLpDunHnucfdzZUGz54Fnvo4tE+J3p8EL66kBrs2UhBXvYKTWckWYYWBqJqoTcenqg==", - "dev": true - }, - "node_modules/netlify/node_modules/maxstache-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/maxstache-stream/-/maxstache-stream-1.0.4.tgz", - "integrity": "sha512-v8qlfPN0pSp7bdSoLo1NTjG43GXGqk5W2NWFnOCq2GlmFFqebGzPCjLKSbShuqIOVorOtZSAy7O/S1OCCRONUw==", - "dev": true, - "dependencies": { - "maxstache": "^1.0.0", - "pump": "^1.0.0", - "split2": "^1.0.0", - "through2": "^2.0.0" - } - }, - "node_modules/netlify/node_modules/maxstache-stream/node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/netlify/node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", - "dev": true - }, - "node_modules/netlify/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", - "dev": true - }, - "node_modules/netlify/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "dev": true, - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/merge-options/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/netlify/node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/micro-memoize": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.1.3.tgz", - "integrity": "sha512-DzRMi8smUZXT7rCGikRwldEh6eO6qzKiPPopcr1+2EY3AYKpy5fu159PKWwIS9A6IWnrvPKDMcuFtyrroZa8Bw==", - "dev": true - }, - "node_modules/netlify/node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/netlify/node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/netlify/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/netlify/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/netlify/node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/netlify/node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", - "dev": true, - "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" - } - }, - "node_modules/netlify/node_modules/module-definition": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz", - "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==", - "dev": true, - "dependencies": { - "ast-module-types": "^6.0.1", - "node-source-walk": "^7.0.1" - }, - "bin": { - "module-definition": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/moize": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", - "integrity": "sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q==", - "dev": true, - "dependencies": { - "fast-equals": "^3.0.1", - "micro-memoize": "^4.1.2" - } - }, - "node_modules/netlify/node_modules/move-file": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/move-file/-/move-file-3.1.0.tgz", - "integrity": "sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==", - "dev": true, - "dependencies": { - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/netlify/node_modules/multiparty": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz", - "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==", - "dev": true, - "dependencies": { - "http-errors": "~1.8.1", - "safe-buffer": "5.2.1", - "uid-safe": "2.1.5" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/netlify/node_modules/multiparty/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/multiparty/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/multiparty/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/netlify/node_modules/nan": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", - "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", - "dev": true, - "optional": true - }, - "node_modules/netlify/node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/netlify/node_modules/nanospinner": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz", - "integrity": "sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==", - "dev": true, - "dependencies": { - "picocolors": "^1.1.1" - } - }, - "node_modules/netlify/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/netlify-redirector": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/netlify-redirector/-/netlify-redirector-0.5.0.tgz", - "integrity": "sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==", - "dev": true - }, - "node_modules/netlify/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true - }, - "node_modules/netlify/node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/netlify/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/netlify/node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", - "dev": true - }, - "node_modules/netlify/node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/netlify/node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/netlify/node_modules/node-mock-http": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.3.tgz", - "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", - "dev": true - }, - "node_modules/netlify/node_modules/node-source-walk": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz", - "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.26.7" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "dev": true, - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/netlify/node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "dev": true, - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/netlify/node_modules/normalize-exception": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-exception/-/normalize-exception-3.0.0.tgz", - "integrity": "sha512-SMZtWSLjls45KBgwvS2jWyXLtOI9j90JyQ6tJstl91Gti4W7QwZyF/nWwlFRz/Cx4Gy70DAtLT0EzXYXcPJJUw==", - "dev": true, - "dependencies": { - "is-error-instance": "^2.0.0", - "is-plain-obj": "^4.1.0" - }, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/normalize-package-data": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.1.tgz", - "integrity": "sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^8.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/netlify/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/normalize-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/netlify/node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/ofetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", - "dev": true, - "dependencies": { - "destr": "^2.0.3", - "node-fetch-native": "^1.6.4", - "ufo": "^1.5.4" - } - }, - "node_modules/netlify/node_modules/omit.js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", - "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==", - "dev": true - }, - "node_modules/netlify/node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/netlify/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/netlify/node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dev": true, - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/netlify/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "dev": true, - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/os-name": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-6.1.0.tgz", - "integrity": "sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==", - "dev": true, - "dependencies": { - "macos-release": "^3.3.0", - "windows-release": "^6.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/netlify/node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", - "dev": true, - "dependencies": { - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-event/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", - "dev": true, - "dependencies": { - "p-map": "^7.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-wait-for": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", - "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==", - "dev": true, - "dependencies": { - "p-timeout": "^6.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/p-wait-for/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/package-directory": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/package-directory/-/package-directory-8.1.0.tgz", - "integrity": "sha512-qHKRW0pw3lYdZMQVkjDBqh8HlamH/LCww2PH7OWEp4Qrt3SFeYMNpnJrQzlSnGrDD5zGR51XqBh7FnNCdVNEHA==", - "dev": true, - "dependencies": { - "find-up-simple": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/package-json": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", - "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==", - "dev": true, - "dependencies": { - "ky": "^1.2.0", - "registry-auth-token": "^5.0.2", - "registry-url": "^6.0.1", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true - }, - "node_modules/netlify/node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/netlify/node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/netlify/node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/netlify/node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/netlify/node_modules/parse-github-url": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.3.tgz", - "integrity": "sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==", - "dev": true, - "bin": { - "parse-github-url": "cli.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/netlify/node_modules/parse-gitignore": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", - "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/parse-imports": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", - "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", - "dev": true, - "dependencies": { - "es-module-lexer": "^1.5.3", - "slashes": "^3.0.12" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/netlify/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/netlify/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/netlify/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true - }, - "node_modules/netlify/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true - }, - "node_modules/netlify/node_modules/peek-readable": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", - "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/netlify/node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/netlify/node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/netlify/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/netlify/node_modules/picoquery": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/picoquery/-/picoquery-2.5.0.tgz", - "integrity": "sha512-j1kgOFxtaCyoFCkpoYG2Oj3OdGakadO7HZ7o5CqyRazlmBekKhbDoUnNnXASE07xSY4nDImWZkrZv7toSxMi/g==", - "dev": true - }, - "node_modules/netlify/node_modules/pino": { - "version": "9.11.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.11.0.tgz", - "integrity": "sha512-+YIodBB9sxcWeR8PrXC2K3gEDyfkUuVEITOcbqrfcj+z5QW4ioIcqZfYFbrLTYLsmAwunbS7nfU/dpBB6PZc1g==", - "dev": true, - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/netlify/node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", - "dev": true, - "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/netlify/node_modules/pino-abstract-transport/node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/netlify/node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "dev": true - }, - "node_modules/netlify/node_modules/pino/node_modules/process-warning": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", - "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/netlify/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/netlify/node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/netlify/node_modules/postcss-values-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", - "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", - "dev": true, - "dependencies": { - "color-name": "^1.1.4", - "is-url-superb": "^4.0.0", - "quote-unquote": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.2.9" - } - }, - "node_modules/netlify/node_modules/precinct": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz", - "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==", - "dev": true, - "dependencies": { - "@dependents/detective-less": "^5.0.1", - "commander": "^12.1.0", - "detective-amd": "^6.0.1", - "detective-cjs": "^6.0.1", - "detective-es6": "^5.0.1", - "detective-postcss": "^7.0.1", - "detective-sass": "^6.0.1", - "detective-scss": "^5.0.1", - "detective-stylus": "^5.0.1", - "detective-typescript": "^14.0.0", - "detective-vue2": "^2.2.0", - "module-definition": "^6.0.1", - "node-source-walk": "^7.0.1", - "postcss": "^8.5.1", - "typescript": "^5.7.3" - }, - "bin": { - "precinct": "bin/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", - "dev": true, - "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/prettyjson": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", - "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", - "dev": true, - "dependencies": { - "colors": "1.4.0", - "minimist": "^1.2.0" - }, - "bin": { - "prettyjson": "bin/prettyjson" - } - }, - "node_modules/netlify/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/netlify/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/netlify/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true - }, - "node_modules/netlify/node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/netlify/node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/netlify/node_modules/ps-list": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.1.tgz", - "integrity": "sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/netlify/node_modules/pupa": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", - "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", - "dev": true, - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "dev": true - }, - "node_modules/netlify/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/quote-unquote": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", - "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", - "dev": true - }, - "node_modules/netlify/node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", - "dev": true - }, - "node_modules/netlify/node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/raw-body": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.7.0", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/netlify/node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/netlify/node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/netlify/node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/read-package-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", - "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", - "dev": true, - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/netlify/node_modules/read-pkg/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/netlify/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/netlify/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/netlify/node_modules/readable-stream/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/netlify/node_modules/readable-web-to-node-stream": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz", - "integrity": "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==", - "dev": true, - "dependencies": { - "readable-stream": "^4.7.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/netlify/node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/netlify/node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/netlify/node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/netlify/node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "dev": true, - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/netlify/node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dev": true, - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/netlify/node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/require-package-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", - "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", - "dev": true - }, - "node_modules/netlify/node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/netlify/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/netlify/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dev": true, - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/netlify/node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true - }, - "node_modules/netlify/node_modules/rollup": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", - "integrity": "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.2", - "@rollup/rollup-android-arm64": "4.52.2", - "@rollup/rollup-darwin-arm64": "4.52.2", - "@rollup/rollup-darwin-x64": "4.52.2", - "@rollup/rollup-freebsd-arm64": "4.52.2", - "@rollup/rollup-freebsd-x64": "4.52.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", - "@rollup/rollup-linux-arm-musleabihf": "4.52.2", - "@rollup/rollup-linux-arm64-gnu": "4.52.2", - "@rollup/rollup-linux-arm64-musl": "4.52.2", - "@rollup/rollup-linux-loong64-gnu": "4.52.2", - "@rollup/rollup-linux-ppc64-gnu": "4.52.2", - "@rollup/rollup-linux-riscv64-gnu": "4.52.2", - "@rollup/rollup-linux-riscv64-musl": "4.52.2", - "@rollup/rollup-linux-s390x-gnu": "4.52.2", - "@rollup/rollup-linux-x64-gnu": "4.52.2", - "@rollup/rollup-linux-x64-musl": "4.52.2", - "@rollup/rollup-openharmony-arm64": "4.52.2", - "@rollup/rollup-win32-arm64-msvc": "4.52.2", - "@rollup/rollup-win32-ia32-msvc": "4.52.2", - "@rollup/rollup-win32-x64-gnu": "4.52.2", - "@rollup/rollup-win32-x64-msvc": "4.52.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/netlify/node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/netlify/node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/netlify/node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/netlify/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/netlify/node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "dev": true - }, - "node_modules/netlify/node_modules/safe-regex2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", - "dev": true, - "dependencies": { - "ret": "~0.4.0" - } - }, - "node_modules/netlify/node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/netlify/node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true - }, - "node_modules/netlify/node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true - }, - "node_modules/netlify/node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/netlify/node_modules/seek-bzip/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/netlify/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/netlify/node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/netlify/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/netlify/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/netlify/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/netlify/node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", - "dev": true - }, - "node_modules/netlify/node_modules/set-error-message": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-error-message/-/set-error-message-2.0.1.tgz", - "integrity": "sha512-s/eeP0f4ed1S3fl0KbxZoy5Pbeg5D6Nbple9nut4VPwHTvEIk5r7vKq0FwjNjszdUPdlTrs4GJCOkWUqWeTeWg==", - "dev": true, - "dependencies": { - "normalize-exception": "^3.0.0" - }, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/netlify/node_modules/sharp": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.0", - "semver": "^7.7.2" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.4", - "@img/sharp-darwin-x64": "0.34.4", - "@img/sharp-libvips-darwin-arm64": "1.2.3", - "@img/sharp-libvips-darwin-x64": "1.2.3", - "@img/sharp-libvips-linux-arm": "1.2.3", - "@img/sharp-libvips-linux-arm64": "1.2.3", - "@img/sharp-libvips-linux-ppc64": "1.2.3", - "@img/sharp-libvips-linux-s390x": "1.2.3", - "@img/sharp-libvips-linux-x64": "1.2.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", - "@img/sharp-libvips-linuxmusl-x64": "1.2.3", - "@img/sharp-linux-arm": "0.34.4", - "@img/sharp-linux-arm64": "0.34.4", - "@img/sharp-linux-ppc64": "0.34.4", - "@img/sharp-linux-s390x": "0.34.4", - "@img/sharp-linux-x64": "0.34.4", - "@img/sharp-linuxmusl-arm64": "0.34.4", - "@img/sharp-linuxmusl-x64": "0.34.4", - "@img/sharp-wasm32": "0.34.4", - "@img/sharp-win32-arm64": "0.34.4", - "@img/sharp-win32-ia32": "0.34.4", - "@img/sharp-win32-x64": "0.34.4" - } - }, - "node_modules/netlify/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/netlify/node_modules/simple-swizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", - "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/netlify/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/slashes": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", - "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", - "dev": true - }, - "node_modules/netlify/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", - "dev": true, - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/netlify/node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", - "dev": true, - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/netlify/node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/netlify/node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/netlify/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/netlify/node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true - }, - "node_modules/netlify/node_modules/split2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", - "integrity": "sha512-cfurE2q8LamExY+lJ9Ex3ZfBwqAPduzOKVscPDXNCLLMvyaeD3DTz1yk7fVIs6Chco+12XeD0BB6HEoYzPYbXA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0" - } - }, - "node_modules/netlify/node_modules/stack-generator": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", - "dev": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/netlify/node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/netlify/node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "node_modules/netlify/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "dev": true - }, - "node_modules/netlify/node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "dev": true, - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "node_modules/netlify/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/netlify/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/netlify/node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/strip-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-3.0.0.tgz", - "integrity": "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==", - "dev": true, - "dependencies": { - "inspect-with-kind": "^1.0.5", - "is-plain-obj": "^1.1.0" - } - }, - "node_modules/netlify/node_modules/strip-dirs/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/strip-outer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz", - "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/strtok3": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz", - "integrity": "sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==", - "dev": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.1.3" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/netlify/node_modules/stubborn-fs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.5.tgz", - "integrity": "sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==", - "dev": true - }, - "node_modules/netlify/node_modules/supports-color": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", - "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/netlify/node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" - } - }, - "node_modules/netlify/node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/netlify/node_modules/svgo": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", - "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", - "dev": true, - "dependencies": { - "commander": "^11.1.0", - "css-select": "^5.1.0", - "css-tree": "^3.0.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.1.1", - "sax": "^1.4.1" - }, - "bin": { - "svgo": "bin/svgo.js" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/netlify/node_modules/svgo/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/netlify/node_modules/system-architecture": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", - "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", - "dev": true, - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dev": true, - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/netlify/node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/netlify/node_modules/terminal-link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", - "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^7.0.0", - "supports-hyperlinks": "^3.2.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "dev": true, - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/netlify/node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true - }, - "node_modules/netlify/node_modules/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", - "dev": true, - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/netlify/node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/netlify/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/netlify/node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/netlify/node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/netlify/node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/netlify/node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/netlify/node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dev": true, - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/netlify/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/netlify/node_modules/toad-cache": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/netlify/node_modules/token-types": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz", - "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==", - "dev": true, - "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/netlify/node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true - }, - "node_modules/netlify/node_modules/tomlify-j0.4": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz", - "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==", - "dev": true - }, - "node_modules/netlify/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/netlify/node_modules/trim-repeated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz", - "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "dev": true, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/netlify/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/netlify/node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/netlify/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netlify/node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/netlify/node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true - }, - "node_modules/netlify/node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dev": true, - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/ulid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.1.tgz", - "integrity": "sha512-dPJyqPzx8preQhqq24bBG1YNkvigm87K8kVEHCD+ruZg24t6IFEFv00xMWfxcC4djmFtiTLdFuADn4+DOz6R7Q==", - "dev": true, - "bin": { - "ulid": "dist/cli.js" - } - }, - "node_modules/netlify/node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/netlify/node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "dev": true - }, - "node_modules/netlify/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true - }, - "node_modules/netlify/node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/universal-user-agent": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", - "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", - "dev": true, - "license": "ISC" - }, - "node_modules/netlify/node_modules/unix-dgram": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.7.tgz", - "integrity": "sha512-pWaQorcdxEUBFIKjCqqIlQaOoNVmchyoaNAJ/1LwyyfK2XSxcBhgJNiSE8ZRhR0xkNGyk4xInt1G03QPoKXY5A==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.20.0" - }, - "engines": { - "node": ">=0.10.48" - } - }, - "node_modules/netlify/node_modules/unixify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", - "dev": true, - "dependencies": { - "normalize-path": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/unixify/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/netlify/node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/unstorage": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", - "dev": true, - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.4", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.7", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/functions": "^2.2.12 || ^3.0.0", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/functions": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/unstorage/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/netlify/node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/untun": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", - "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", - "dev": true, - "dependencies": { - "citty": "^0.1.5", - "consola": "^3.2.3", - "pathe": "^1.1.1" - }, - "bin": { - "untun": "bin/untun.mjs" - } - }, - "node_modules/netlify/node_modules/untun/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/netlify/node_modules/update-notifier": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", - "integrity": "sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==", - "dev": true, - "dependencies": { - "boxen": "^8.0.1", - "chalk": "^5.3.0", - "configstore": "^7.0.0", - "is-in-ci": "^1.0.0", - "is-installed-globally": "^1.0.0", - "is-npm": "^6.0.0", - "latest-version": "^9.0.0", - "pupa": "^3.1.0", - "semver": "^7.6.3", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/netlify/node_modules/uqr": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", - "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", - "dev": true - }, - "node_modules/netlify/node_modules/urlpattern-polyfill": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "dev": true - }, - "node_modules/netlify/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/netlify/node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/netlify/node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, - "node_modules/netlify/node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/netlify/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/netlify/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/netlify/node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/netlify/node_modules/wait-port": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-1.1.0.tgz", - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "commander": "^9.3.0", - "debug": "^4.3.4" - }, - "bin": { - "wait-port": "bin/wait-port.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/wait-port/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/wait-port/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/netlify/node_modules/wait-port/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/wait-port/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/netlify/node_modules/wait-port/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/netlify/node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/netlify/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/netlify/node_modules/when-exit": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.4.tgz", - "integrity": "sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==", - "dev": true - }, - "node_modules/netlify/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/netlify/node_modules/which/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/netlify/node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "dev": true, - "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/windows-release": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-6.1.0.tgz", - "integrity": "sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==", - "dev": true, - "dependencies": { - "execa": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/windows-release/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "dev": true, - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/netlify/node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "dev": true, - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/netlify/node_modules/winston-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/netlify/node_modules/winston/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/winston/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/netlify/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/netlify/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/netlify/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/netlify/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/netlify/node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "dev": true, - "dependencies": { - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/xss": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", - "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", - "dev": true, - "dependencies": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "bin": { - "xss": "bin/xss" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/netlify/node_modules/xss/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/netlify/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/netlify/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/netlify/node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, - "node_modules/netlify/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/netlify/node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/netlify/node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/netlify/node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/netlify/node_modules/yauzl/node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/netlify/node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/netlify/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/netlify/node_modules/zip-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", - "dev": true, - "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/netlify/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/nlcst-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", - "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", - "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-mock-http": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.1.tgz", - "integrity": "sha512-0gJJgENizp4ghds/Ywu2FCmcRsgBTmRQzYPZm61wy+Em2sBarSka0OhQS5huLBg6od1zkNpnWMCZloQDFVvOMQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-webtokens": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/node-webtokens/-/node-webtokens-1.0.4.tgz", - "integrity": "sha512-Sla56CeSLWvPbwud2kogqf5edQtKNXZBtXDDpmOzAgNZjwETbK/Am6PXfs54iZPLBm8K8amZ9XWaCQwGqZmKyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ofetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", - "dev": true, - "license": "MIT", - "dependencies": { - "destr": "^2.0.3", - "node-fetch-native": "^1.6.4", - "ufo": "^1.5.4" - } - }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/oniguruma-parser": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", - "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/oniguruma-to-es": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", - "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "oniguruma-parser": "^0.12.1", - "regex": "^6.0.1", - "regex-recursion": "^6.0.2" - } - }, - "node_modules/p-limit": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", - "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/package-manager-detector": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", - "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-latin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", - "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "@types/unist": "^3.0.0", - "nlcst-to-string": "^4.0.0", - "unist-util-modify-children": "^4.0.0", - "unist-util-visit-children": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-sort": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/path-sort/-/path-sort-0.1.0.tgz", - "integrity": "sha512-70MSq7edKtbODYKkqXYzSMQxtYMjDgP3K6D15Fu4KUvpyBPlxDWPvv8JI9GjNDF2K5baPHFEtlg818dOmf2ifg==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/peek-readable": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", - "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/purgecss": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-7.0.2.tgz", - "integrity": "sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^12.1.0", - "glob": "^11.0.0", - "postcss": "^8.4.47", - "postcss-selector-parser": "^6.1.2" - }, - "bin": { - "purgecss": "bin/purgecss.js" - } - }, - "node_modules/query-string": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.3.1.tgz", - "integrity": "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==", - "license": "MIT", - "dependencies": { - "decode-uri-component": "^0.4.1", - "filter-obj": "^5.1.0", - "split-on-first": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/reachdown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reachdown/-/reachdown-1.1.0.tgz", - "integrity": "sha512-6LsdRe4cZyOjw4NnvbhUd/rGG7WQ9HMopPr+kyL018Uci4kijtxcGR5kVb5Ln13k4PEE+fEFQbjfOvNw7cnXmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/react-redux": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", - "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux-sentry-middleware": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/redux-sentry-middleware/-/redux-sentry-middleware-0.1.8.tgz", - "integrity": "sha512-xubpYH9RgE31tZUESeRW5agwQa19Yd6Gy+4iO09raW/2TITPO5fhJdXpVwJfpGMbIYhEmHFqE2wD5Lnz7YtAeA==", - "license": "MIT" - }, - "node_modules/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "license": "MIT", - "peerDependencies": { - "redux": "^4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "license": "MIT" - }, - "node_modules/regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, - "license": "MIT" - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rehype": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", - "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "rehype-parse": "^9.0.0", - "rehype-stringify": "^10.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", - "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-from-html": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", - "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-smartypants": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", - "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", - "dev": true, - "license": "MIT", - "dependencies": { - "retext": "^9.0.0", - "retext-smartypants": "^6.0.0", - "unified": "^11.0.4", - "unist-util-visit": "^5.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remove": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/remove/-/remove-0.1.5.tgz", - "integrity": "sha512-AJMA9oWvJzdTjwIGwSQZsjGQiRx73YTmiOWmfCp1fpLa/D4n7jKcpoA+CZiVLJqKcEKUuh1Suq80c5wF+L/qVQ==", - "license": "MIT", - "dependencies": { - "seq": ">= 0.3.5" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/reselect": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz", - "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/restructure": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", - "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/retext": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", - "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "retext-latin": "^4.0.0", - "retext-stringify": "^4.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/retext-latin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", - "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "parse-latin": "^7.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/retext-smartypants": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", - "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "nlcst-to-string": "^4.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/retext-stringify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", - "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/nlcst": "^2.0.0", - "nlcst-to-string": "^4.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/riff-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/riff-file/-/riff-file-1.0.3.tgz", - "integrity": "sha512-Vv8wwGr0BCks7VMI3Lv0houZee4DaHFjjTT0LMhMJKio2YmLncLeIVpK63ydSverngNk8XQPU3fbeP3bWgSIig==", - "license": "MIT", - "dependencies": { - "byte-data": "^18.0.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rndm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", - "integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/rollup": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", - "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.44.0", - "@rollup/rollup-android-arm64": "4.44.0", - "@rollup/rollup-darwin-arm64": "4.44.0", - "@rollup/rollup-darwin-x64": "4.44.0", - "@rollup/rollup-freebsd-arm64": "4.44.0", - "@rollup/rollup-freebsd-x64": "4.44.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", - "@rollup/rollup-linux-arm-musleabihf": "4.44.0", - "@rollup/rollup-linux-arm64-gnu": "4.44.0", - "@rollup/rollup-linux-arm64-musl": "4.44.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", - "@rollup/rollup-linux-riscv64-gnu": "4.44.0", - "@rollup/rollup-linux-riscv64-musl": "4.44.0", - "@rollup/rollup-linux-s390x-gnu": "4.44.0", - "@rollup/rollup-linux-x64-gnu": "4.44.0", - "@rollup/rollup-linux-x64-musl": "4.44.0", - "@rollup/rollup-win32-arm64-msvc": "4.44.0", - "@rollup/rollup-win32-ia32-msvc": "4.44.0", - "@rollup/rollup-win32-x64-msvc": "4.44.0", - "fsevents": "~2.3.2" - } - }, - "node_modules/router": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.8.tgz", - "integrity": "sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-flatten": "3.0.0", - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/router/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/router/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-series": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/run-waterfall": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/run-waterfall/-/run-waterfall-1.1.7.tgz", - "integrity": "sha512-iFPgh7SatHXOG1ClcpdwHI63geV3Hc/iL6crGSyBlH2PY7Rm/za+zoKz6FfY/Qlw5K7JwSol8pseO8fN6CMhhQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/seq": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/seq/-/seq-0.3.5.tgz", - "integrity": "sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g==", - "license": "MIT/X11", - "dependencies": { - "chainsaw": ">=0.0.7 <0.1", - "hashish": ">=0.0.2 <0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "node_modules/sha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sha/-/sha-3.0.0.tgz", - "integrity": "sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT)", - "dependencies": { - "graceful-fs": "^4.1.2" - } - }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sha.js/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/sharp/node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.7.0.tgz", - "integrity": "sha512-ZcI4UT9n6N2pDuM2n3Jbk0sR4Swzq43nLPgS/4h0E3B/NrFn2HKElrDtceSf8Zx/OWYOo7G1SAtBLypCp+YXqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "3.7.0", - "@shikijs/engine-javascript": "3.7.0", - "@shikijs/engine-oniguruma": "3.7.0", - "@shikijs/langs": "3.7.0", - "@shikijs/themes": "3.7.0", - "@shikijs/types": "3.7.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/smol-toml": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz", - "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-resolve/node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/split-on-first": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", - "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strtok3": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", - "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/subleveldown": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/subleveldown/-/subleveldown-5.0.1.tgz", - "integrity": "sha512-cVqd/URpp7si1HWu5YqQ3vqQkjuolAwHypY1B4itPlS71/lsf6TQPZ2Y0ijT22EYVkvH5ove9JFJf4u7VGPuZw==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^6.3.0", - "encoding-down": "^6.2.0", - "inherits": "^2.0.3", - "level-option-wrap": "^1.1.0", - "levelup": "^4.4.0", - "reachdown": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/subleveldown/node_modules/abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/subleveldown/node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/subsonic-api": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/subsonic-api/-/subsonic-api-3.2.0.tgz", - "integrity": "sha512-BADBQ2hONdLb3agCiSDzNzTIFLWJAuxJTUJvC2zDFvXUVfnK3yy7r8xFu3NkrQl8p5UVI7q8Qfm62N1lFxWbww==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symlink-or-copy": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz", - "integrity": "sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/then-read-stream": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/then-read-stream/-/then-read-stream-1.5.1.tgz", - "integrity": "sha512-I+iiemYWhp1ysJQEioqpEICgvHlqHS5WrQGZkboFLs7Jm350Kvq4cN3qRCzHpETUuq5+NsdrdWEg6M0NFxtwtQ==", - "deprecated": "Package renamed to peak-readable.", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", - "license": "MIT", - "engines": { - "node": ">=12.22" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-json-http": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tiny-json-http/-/tiny-json-http-7.5.1.tgz", - "integrity": "sha512-lB7qkBGpL3HR/8gidBu3MMfgfnDj2mlvK/eYXgSbO06gKphemLKGp/TgRTy/BKVD7nCbgIeCm41lMNayXO1f2w==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyqueue": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", - "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==", - "license": "ISC" - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-buffer/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-buffer/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/token-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", - "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.1.0", - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/token-types/node_modules/@borewit/text-codec": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", - "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "license": "MIT/X11", - "engines": { - "node": "*" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tsconfck": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", - "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", - "dev": true, - "license": "MIT", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, - "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.x" - } - }, - "node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dev": true, - "license": "MIT", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uint8array-extras": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", - "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uint8arrays": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", - "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", - "license": "Apache-2.0 OR MIT", - "dependencies": { - "multiformats": "^13.0.0" - } - }, - "node_modules/ultrahtml": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", - "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unifont": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.5.2.tgz", - "integrity": "sha512-LzR4WUqzH9ILFvjLAUU7dK3Lnou/qd5kD+IakBtBK4S15/+x2y9VX+DcWQv6s551R6W+vzwgVS6tFg3XggGBgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^3.0.0", - "ofetch": "^1.4.1", - "ohash": "^2.0.0" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-util-find-after": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", - "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-modify-children": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", - "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "array-iterate": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-children": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", - "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unstorage": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", - "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.5", - "h3": "^1.15.2", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.6", - "ofetch": "^1.4.1", - "ufo": "^1.6.1" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3 || ^7.0.0", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } - } - }, - "node_modules/unstorage/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/update-notifier-cjs": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/update-notifier-cjs/-/update-notifier-cjs-5.1.7.tgz", - "integrity": "sha512-eZWTh8F+VCEoC4UIh0pKmh8h4izj65VvLhCpJpVefUxdYe0fU3GBrC4Sbh1AoWA/miNPAb6UVlp2fUQNsfp+3g==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "isomorphic-fetch": "^3.0.0", - "pupa": "^2.1.1", - "registry-auth-token": "^5.0.1", - "registry-url": "^5.1.0", - "semver": "^7.3.7", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/update-notifier-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/update-notifier-cjs/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier-cjs/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier-cjs/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/update-notifier-cjs/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/update-notifier-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier-cjs/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier-cjs/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier-cjs/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/utf8-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utf8-buffer/-/utf8-buffer-1.0.0.tgz", - "integrity": "sha512-ueuhzvWnp5JU5CiGSY4WdKbiN/PO2AZ/lpeLiz2l38qwdLy/cW40XobgyuIWucNyum0B33bVB0owjFCeGBSLqg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite-plugin-wasm": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.4.1.tgz", - "integrity": "sha512-ja3nSo2UCkVeitltJGkS3pfQHAanHv/DqGatdI39ja6McgABlpsZ5hVgl6wuR8Qx5etY3T5qgDQhOWzc5RReZA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "vite": "^2 || ^3 || ^4 || ^5 || ^6" - } - }, - "node_modules/vite-tsconfig-paths": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", - "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" - }, - "peerDependencies": { - "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/vitefu": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.7.tgz", - "integrity": "sha512-eRWXLBbJjW3X5z5P5IHcSm2yYbYRPb2kQuc+oqsbAl99WB5kVsPbiiox+cymo8twTzifA6itvhr2CmjnaZZp0Q==", - "dev": true, - "license": "MIT", - "workspaces": [ - "tests/deps/*", - "tests/projects/*" - ], - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webamp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webamp/-/webamp-2.2.0.tgz", - "integrity": "sha512-XzKr65Z4d+4rxA1J//aPkZRqvPS0aqAxpryNKaWt/EDQ4uCJadxjr966QElagH+iZxWMCDekW5dV/dTx5b+WPQ==", - "license": "MIT", - "dependencies": { - "@redux-devtools/extension": "^3.3.0", - "@sentry/browser": "5.9.1", - "ani-cursor": "0.0.5", - "butterchurn": "3.0.0-beta.5", - "butterchurn-presets": "3.0.0-beta.4", - "classnames": "^2.2.5", - "fscreen": "^1.0.2", - "invariant": "^2.2.3", - "jszip": "^3.10.1", - "lodash": "^4.17.21", - "milkdrop-preset-converter-aws": "^0.1.6", - "music-metadata": "^11.6.0", - "music-metadata-browser": "^0.6.1", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-redux": "^8.0.5", - "redux": "^5.0.0-alpha.0", - "redux-sentry-middleware": "^0.1.3", - "redux-thunk": "^2.4.0", - "reselect": "^3.0.1", - "strtok3": "^10.3.1", - "tinyqueue": "^1.2.3", - "winamp-eqf": "1.0.0" - } - }, - "node_modules/webamp/node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webamp/node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/webamp/node_modules/redux": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" - }, - "node_modules/webamp/node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-5.0.0.tgz", - "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winamp-eqf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/winamp-eqf/-/winamp-eqf-1.0.0.tgz", - "integrity": "sha512-yUIb4+lTYBKP4L6nPXdDj1CQBXlJ+/PrNAkT1VbTAgeFjX8lPxAthsUE5NxQP4s8SO4YMJemsrErZ49Bh+/Veg==", - "license": "ISC" - }, - "node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/xxh32": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/xxh32/-/xxh32-2.0.5.tgz", - "integrity": "sha512-glQIaPvLHV4xG2Sn0E4mZWY25JT34+XcG4e2c8OMIH2SXxVrm6MmJ8miCsqGBLtf+rn2YcaeS11vq/66vkXGUQ==", - "license": "MIT" - }, - "node_modules/xxhash-wasm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", - "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yocto-spinner": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-0.2.3.tgz", - "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18.19" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", - "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.25.67", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", - "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } - }, - "node_modules/zod-to-ts": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zod-to-ts/-/zod-to-ts-1.2.0.tgz", - "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==", - "dev": true, - "peerDependencies": { - "typescript": "^4.9.4 || ^5.0.2", - "zod": "^3" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/src/common/element.d.ts b/src/common/element.d.ts new file mode 100644 index 000000000..ca11f329e --- /dev/null +++ b/src/common/element.d.ts @@ -0,0 +1,6 @@ +export type HtmlTagFunction = ( + strings: string[] | ArrayLike, + ...values: unknown[] +) => string; + +export type RenderArg = { html: HtmlTagFunction; state: State }; diff --git a/src/common/element.js b/src/common/element.js new file mode 100644 index 000000000..1387ee0bb --- /dev/null +++ b/src/common/element.js @@ -0,0 +1,68 @@ +import morphdom from "morphdom"; + +/** + * @import {HtmlTagFunction, RenderArg} from "./element.d.ts" + */ + +/** + * @template [State={}] + */ +export default class DiffuseElement extends HTMLElement { + constructor() { + super(); + this.process = this.process.bind(this); + } + + process() { + const tmp = this.render({ + html: this.html, + state: this.state, + }); + + const updated = document.createElement("div"); + updated.innerHTML = tmp.trim(); + const root = this.shadowRoot ? this.shadowRoot : this; + + /* @ts-ignore */ + morphdom( + root, + updated, + { + childrenOnly: true, + }, + ); + } + + /** + * @param {string} _name + * @param {string} oldValue + * @param {string} newValue + */ + attributeChangedCallback(_name, oldValue, newValue) { + if (oldValue !== newValue) this.process(); + } + + /** + * @type {HtmlTagFunction} + */ + html(strings, ...values) { + return String.raw({ raw: strings }, ...values); + } + + // TO OVERRIDE + + /** + * @param {RenderArg} _arg + */ + render(_arg) { + return ""; + } + + /** + * @returns {State} + */ + get state() { + /* @ts-ignore */ + return {}; + } +} diff --git a/src/common/signals.d.ts b/src/common/signals.d.ts new file mode 100644 index 000000000..e55bc7210 --- /dev/null +++ b/src/common/signals.d.ts @@ -0,0 +1,3 @@ +import type { signal } from "alien-signals"; + +export type Signal = ReturnType>; diff --git a/app/common/signals/index.mjs b/src/common/signals.js similarity index 100% rename from app/common/signals/index.mjs rename to src/common/signals.js diff --git a/src/elements/constituent/blur/browser-list.js b/src/elements/constituent/blur/browser-list.js new file mode 100644 index 000000000..783dd4f2a --- /dev/null +++ b/src/elements/constituent/blur/browser-list.js @@ -0,0 +1,88 @@ +import DiffuseElement from "@common/element.js"; +import { effect, signal } from "@common/signals.js"; + +/** + * @import {RenderArg} from "@common/element.d.ts" + * @import {Signal} from "@common/signals.d.ts" + * @import {Track} from "@elements/core/types.d.ts" + */ + +/** + * @typedef {{ tracks: Signal }} State + */ + +/** + * @type {Track[]} + */ +const TRACKS = []; + +//////////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////////// + +class List extends DiffuseElement { + #teardown = () => {}; + + /** + * @type {Signal} + */ + tracks = signal(TRACKS); + + // STATE + + /** + * @override + * @returns {State} + */ + get state() { + return { + tracks: this.tracks, + }; + } + + // LIFECYCLE + + connectedCallback() { + this.#teardown = effect(() => { + this.innerHTML = this.render({ html: this.html, state: this.state }); + }); + } + + disconnectedCallback() { + this.#teardown(); + } + + // RENDER + + /** + * @override + * @param {RenderArg} _ + */ + render({ html, state }) { + console.log("Rendering", state.tracks); + + const list = (state.tracks() || []).map((t) => + html` +
    ${t}
    + ` + ); + + return html` + +
    ${list.join("")}
    + `; + } +} + +export { List as ConstituentBlurBrowserList }; +export default List; + +//////////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////////// + +customElements.define("constituent-blur-browser-list", List); diff --git a/src/pages/core/types.d.ts b/src/elements/core/types.d.ts similarity index 100% rename from src/pages/core/types.d.ts rename to src/elements/core/types.d.ts diff --git a/src/themes/blur/index.vto b/src/themes/blur/index.vto new file mode 100644 index 000000000..e6c178f1c --- /dev/null +++ b/src/themes/blur/index.vto @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 8b937678e..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "include": [".astro/types.d.ts", "**/*"], - "exclude": ["dist"], - "compilerOptions": { - "allowImportingTsExtensions": true, - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "experimentalDecorators": false, - "isolatedModules": true, - "lib": ["DOM", "ESNext", "WebWorker"], - "module": "esnext", - "moduleResolution": "bundler", - "moduleDetection": "auto", - "noEmit": true, - "noImplicitOverride": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext", - "useDefineForClassFields": true, - "verbatimModuleSyntax": true, - "baseUrl": ".", - "paths": { - "@applets/*": ["src/pages/*"], - "@layouts/*": ["src/layouts/*"], - "@pages/*": ["src/pages/*"], - "@scripts/*": ["src/scripts/*"], - "@styles/*": ["src/styles/*"], - "@src/*": ["src/*"], - "@phosphor-icons/*": ["node_modules/@phosphor-icons/web/src/*"] - } - } -} From 234a8d97941f5d2a74170ebae5d056b264e181b0 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 12 Oct 2025 12:52:03 +0200 Subject: [PATCH 016/244] feat: move old styles to lume except for picocss --- _backup/styles/pico.scss | 7 - _config.ts | 8 + deno.jsonc | 2 +- deno.lock | 295 +++++++++++++++++- {_backup => src}/styles/animations.css | 0 {_backup => src}/styles/applet/common.css | 0 {_backup => src}/styles/diffuse/colors.css | 0 {_backup => src}/styles/diffuse/fonts.css | 0 {_backup => src}/styles/fonts.css | 0 {_backup => src}/styles/icons/iconoir.css | 0 {_backup => src}/styles/icons/phosphor.css | 0 {_backup => src}/styles/page/index.css | 0 {_backup => src}/styles/reset.css | 0 {_backup => src}/styles/theme/blur/index.css | 0 .../styles/theme/blur/variables.css | 0 {_backup => src}/styles/theme/pilot/index.css | 0 .../styles/theme/pilot/variables.css | 0 .../styles/theme/webamp/index.css | 0 {_backup => src}/styles/variables.css | 0 src/{themes => theme}/blur/index.vto | 2 + 20 files changed, 305 insertions(+), 9 deletions(-) delete mode 100644 _backup/styles/pico.scss rename {_backup => src}/styles/animations.css (100%) rename {_backup => src}/styles/applet/common.css (100%) rename {_backup => src}/styles/diffuse/colors.css (100%) rename {_backup => src}/styles/diffuse/fonts.css (100%) rename {_backup => src}/styles/fonts.css (100%) rename {_backup => src}/styles/icons/iconoir.css (100%) rename {_backup => src}/styles/icons/phosphor.css (100%) rename {_backup => src}/styles/page/index.css (100%) rename {_backup => src}/styles/reset.css (100%) rename {_backup => src}/styles/theme/blur/index.css (100%) rename {_backup => src}/styles/theme/blur/variables.css (100%) rename {_backup => src}/styles/theme/pilot/index.css (100%) rename {_backup => src}/styles/theme/pilot/variables.css (100%) rename {_backup => src}/styles/theme/webamp/index.css (100%) rename {_backup => src}/styles/variables.css (100%) rename src/{themes => theme}/blur/index.vto (77%) diff --git a/_backup/styles/pico.scss b/_backup/styles/pico.scss deleted file mode 100644 index feb10f5b0..000000000 --- a/_backup/styles/pico.scss +++ /dev/null @@ -1,7 +0,0 @@ -@use "@picocss/pico/scss/pico" with ( - $enable-responsive-spacings: true, - $enable-responsive-typography: true, - $theme-color: "slate" -); - -@use "@picocss/pico/scss/colors/utilities"; diff --git a/_config.ts b/_config.ts index a33620f42..96027ac8b 100644 --- a/_config.ts +++ b/_config.ts @@ -1,5 +1,7 @@ import lume from "lume/mod.ts"; + import esbuild from "lume/plugins/esbuild.ts"; +import postcss from "lume/plugins/postcss.ts"; const site = lume({ src: "./src", @@ -17,3 +19,9 @@ site.use(esbuild({ site.add([".js", ".d.ts"]); export default site; + +// CSS + +site.use(postcss({ includes: false })); + +site.add([".css"]); diff --git a/deno.jsonc b/deno.jsonc index b05b4c2f2..764389a43 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -15,7 +15,7 @@ "build": "deno task lume", "copy-types": "deno run --allow-read --allow-write tasks/copy-types.ts", "deploy:netlify": "npx netlify deploy --prod", - "lume": "echo \"import 'lume/cli.ts'\" | DENO_DIR=_vendor deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run -", + "lume": "echo \"import 'lume/cli.ts'\" | DENO_DIR=_vendor deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run --allow-sys -", "serve": "deno task lume -s", }, "compilerOptions": { diff --git a/deno.lock b/deno.lock index 7cc9be29b..e654f9996 100644 --- a/deno.lock +++ b/deno.lock @@ -34,11 +34,15 @@ "jsr:@std/yaml@^1.0.5": "1.0.9", "npm:@types/node@*": "24.2.0", "npm:alien-signals@3": "3.0.0", + "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:lightningcss-wasm@1.30.1": "1.30.1", "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", "npm:markdown-it-deflist@3.0.0": "3.0.0", "npm:markdown-it@14.1.0": "14.1.0", - "npm:morphdom@^2.7.7": "2.7.7" + "npm:morphdom@^2.7.7": "2.7.7", + "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", + "npm:postcss@8.5.6": "8.5.6", + "npm:sass@1.93.2": "1.93.2" }, "jsr": { "@deno/loader@0.3.6": { @@ -140,6 +144,96 @@ } }, "npm": { + "@parcel/watcher-android-arm64@2.5.1": { + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@parcel/watcher-darwin-arm64@2.5.1": { + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@parcel/watcher-darwin-x64@2.5.1": { + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@parcel/watcher-freebsd-x64@2.5.1": { + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@parcel/watcher-linux-arm-glibc@2.5.1": { + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@parcel/watcher-linux-arm-musl@2.5.1": { + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@parcel/watcher-linux-arm64-glibc@2.5.1": { + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@parcel/watcher-linux-arm64-musl@2.5.1": { + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@parcel/watcher-linux-x64-glibc@2.5.1": { + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@parcel/watcher-linux-x64-musl@2.5.1": { + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@parcel/watcher-win32-arm64@2.5.1": { + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@parcel/watcher-win32-ia32@2.5.1": { + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@parcel/watcher-win32-x64@2.5.1": { + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@parcel/watcher@2.5.1": { + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dependencies": [ + "detect-libc", + "is-glob", + "micromatch", + "node-addon-api" + ], + "optionalDependencies": [ + "@parcel/watcher-android-arm64", + "@parcel/watcher-darwin-arm64", + "@parcel/watcher-darwin-x64", + "@parcel/watcher-freebsd-x64", + "@parcel/watcher-linux-arm-glibc", + "@parcel/watcher-linux-arm-musl", + "@parcel/watcher-linux-arm64-glibc", + "@parcel/watcher-linux-arm64-musl", + "@parcel/watcher-linux-x64-glibc", + "@parcel/watcher-linux-x64-musl", + "@parcel/watcher-win32-arm64", + "@parcel/watcher-win32-ia32", + "@parcel/watcher-win32-x64" + ], + "scripts": true + }, "@types/node@24.2.0": { "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", "dependencies": [ @@ -152,9 +246,101 @@ "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "autoprefixer@10.4.21_postcss@8.5.6": { + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dependencies": [ + "browserslist", + "caniuse-lite", + "fraction.js", + "normalize-range", + "picocolors", + "postcss", + "postcss-value-parser" + ], + "bin": true + }, + "baseline-browser-mapping@2.8.16": { + "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "bin": true + }, + "braces@3.0.3": { + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": [ + "fill-range" + ] + }, + "browserslist@4.26.3": { + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "dependencies": [ + "baseline-browser-mapping", + "caniuse-lite", + "electron-to-chromium", + "node-releases", + "update-browserslist-db" + ], + "bin": true + }, + "caniuse-lite@1.0.30001750": { + "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==" + }, + "chokidar@4.0.3": { + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": [ + "readdirp" + ] + }, + "detect-libc@1.0.3": { + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": true + }, + "electron-to-chromium@1.5.234": { + "integrity": "sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==" + }, "entities@4.5.0": { "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, + "escalade@3.2.0": { + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "fill-range@7.1.1": { + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": [ + "to-regex-range" + ] + }, + "fraction.js@4.3.7": { + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" + }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "hasown@2.0.2": { + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": [ + "function-bind" + ] + }, + "immutable@5.1.3": { + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==" + }, + "is-core-module@2.16.1": { + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": [ + "hasown" + ] + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": [ + "is-extglob" + ] + }, + "is-number@7.0.0": { + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, "lightningcss-wasm@1.30.1": { "integrity": "sha512-KJTnKEn0REV6DoJzxG0m5EKVEFA1CVE1isDYpXjsuqWXwLKFPJtA9Z9BSzPZJwAZFN2KaUzy+IWGP59p5bm2sA==" }, @@ -188,17 +374,120 @@ "mdurl@2.0.0": { "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, + "micromatch@4.0.8": { + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": [ + "braces", + "picomatch" + ] + }, "morphdom@2.7.7": { "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==" }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "bin": true + }, + "node-addon-api@7.1.1": { + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node-releases@2.0.23": { + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==" + }, + "normalize-range@0.1.2": { + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "path-parse@1.0.7": { + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch@2.3.1": { + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify@2.3.0": { + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "postcss-import@16.1.1_postcss@8.5.6": { + "integrity": "sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==", + "dependencies": [ + "postcss", + "postcss-value-parser", + "read-cache", + "resolve" + ] + }, + "postcss-value-parser@4.2.0": { + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "postcss@8.5.6": { + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, "punycode.js@2.3.1": { "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" }, + "read-cache@1.0.0": { + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": [ + "pify" + ] + }, + "readdirp@4.1.2": { + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" + }, + "resolve@1.22.10": { + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": [ + "is-core-module", + "path-parse", + "supports-preserve-symlinks-flag" + ], + "bin": true + }, + "sass@1.93.2": { + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "dependencies": [ + "chokidar", + "immutable", + "source-map-js" + ], + "optionalDependencies": [ + "@parcel/watcher" + ], + "bin": true + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "supports-preserve-symlinks-flag@1.0.0": { + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "to-regex-range@5.0.1": { + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": [ + "is-number" + ] + }, "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, "undici-types@7.10.0": { "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" + }, + "update-browserslist-db@1.1.3_browserslist@4.26.3": { + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dependencies": [ + "browserslist", + "escalade", + "picocolors" + ], + "bin": true } }, "remote": { @@ -403,6 +692,8 @@ "https://deno.land/x/lume@v3.0.11/deps/lightningcss.ts": "5f5167c6eb306ef759f0043f8f33f2eaf63c69210aa1aa837505e990ee619c46", "https://deno.land/x/lume@v3.0.11/deps/markdown_it.ts": "24c1c0fd18c99b9067d9ff5d051f934cb7c3446e6afbad934f6268af8d1ceb4d", "https://deno.land/x/lume@v3.0.11/deps/path.ts": "f970dec772314a3ffbe672329eeb398e3eb66e875581c62af6db80c41d093aea", + "https://deno.land/x/lume@v3.0.11/deps/postcss.ts": "7ad7485032d40a2bc7977eb71d9431df8d52b53d61153e60b38c29d1c98cb870", + "https://deno.land/x/lume@v3.0.11/deps/sass.ts": "0863ca98807966a7308344257da08c54eb2dbeef9cb9c3f6362bf5ec3248c9fc", "https://deno.land/x/lume@v3.0.11/deps/semver.ts": "f850a82a6cf8551e9b927d77f34218961027b1cbe44f3a88c387df62267e31f2", "https://deno.land/x/lume@v3.0.11/deps/toml.ts": "32830bda333eaf4f1c3d79e4306ba449c17a85b25f94aae9b327d3790a2d1dea", "https://deno.land/x/lume@v3.0.11/deps/vento.ts": "78db4022ee124fbcfd84caeb6c5a70f2c1e1706ec9f6415d0f1fe2e9aabcba2b", @@ -422,6 +713,8 @@ "https://deno.land/x/lume@v3.0.11/plugins/markdown.ts": "7e82d897c1e35bf119dcd18b6aec7a6ba5aa06848897b34ff9cd161ec7c8757e", "https://deno.land/x/lume@v3.0.11/plugins/modules.ts": "4e177c0ffe972b9deef10db2bf0ae52b405418af4dbac03db9e7ffbd6a3ec6ae", "https://deno.land/x/lume@v3.0.11/plugins/paginate.ts": "6a1a9a24d0fabed2f722a6a6f29d98559219c69475685034181816e82d367f2e", + "https://deno.land/x/lume@v3.0.11/plugins/postcss.ts": "5a45a017b1385bb6cc30832d7de21d7d7d146a6c6e037f48446b33e36deafbd3", + "https://deno.land/x/lume@v3.0.11/plugins/sass.ts": "09636afcb43a3fecc327e4822202df567509f6999962fa0890b75dbf2dbe06f6", "https://deno.land/x/lume@v3.0.11/plugins/search.ts": "5acb5be828bbbd012fb9226cb97ec3e370d43d05aa44d16e7e7d50bab368b442", "https://deno.land/x/lume@v3.0.11/plugins/source_maps.ts": "10afd5d8617003ed68db9895bc13e57d1742697fa55657e27efd535da6e52c34", "https://deno.land/x/lume@v3.0.11/plugins/toml.ts": "e5bf35ed4915587acd453f002b00ae9b88c1782cadc25c703d7642a390af43ea", diff --git a/_backup/styles/animations.css b/src/styles/animations.css similarity index 100% rename from _backup/styles/animations.css rename to src/styles/animations.css diff --git a/_backup/styles/applet/common.css b/src/styles/applet/common.css similarity index 100% rename from _backup/styles/applet/common.css rename to src/styles/applet/common.css diff --git a/_backup/styles/diffuse/colors.css b/src/styles/diffuse/colors.css similarity index 100% rename from _backup/styles/diffuse/colors.css rename to src/styles/diffuse/colors.css diff --git a/_backup/styles/diffuse/fonts.css b/src/styles/diffuse/fonts.css similarity index 100% rename from _backup/styles/diffuse/fonts.css rename to src/styles/diffuse/fonts.css diff --git a/_backup/styles/fonts.css b/src/styles/fonts.css similarity index 100% rename from _backup/styles/fonts.css rename to src/styles/fonts.css diff --git a/_backup/styles/icons/iconoir.css b/src/styles/icons/iconoir.css similarity index 100% rename from _backup/styles/icons/iconoir.css rename to src/styles/icons/iconoir.css diff --git a/_backup/styles/icons/phosphor.css b/src/styles/icons/phosphor.css similarity index 100% rename from _backup/styles/icons/phosphor.css rename to src/styles/icons/phosphor.css diff --git a/_backup/styles/page/index.css b/src/styles/page/index.css similarity index 100% rename from _backup/styles/page/index.css rename to src/styles/page/index.css diff --git a/_backup/styles/reset.css b/src/styles/reset.css similarity index 100% rename from _backup/styles/reset.css rename to src/styles/reset.css diff --git a/_backup/styles/theme/blur/index.css b/src/styles/theme/blur/index.css similarity index 100% rename from _backup/styles/theme/blur/index.css rename to src/styles/theme/blur/index.css diff --git a/_backup/styles/theme/blur/variables.css b/src/styles/theme/blur/variables.css similarity index 100% rename from _backup/styles/theme/blur/variables.css rename to src/styles/theme/blur/variables.css diff --git a/_backup/styles/theme/pilot/index.css b/src/styles/theme/pilot/index.css similarity index 100% rename from _backup/styles/theme/pilot/index.css rename to src/styles/theme/pilot/index.css diff --git a/_backup/styles/theme/pilot/variables.css b/src/styles/theme/pilot/variables.css similarity index 100% rename from _backup/styles/theme/pilot/variables.css rename to src/styles/theme/pilot/variables.css diff --git a/_backup/styles/theme/webamp/index.css b/src/styles/theme/webamp/index.css similarity index 100% rename from _backup/styles/theme/webamp/index.css rename to src/styles/theme/webamp/index.css diff --git a/_backup/styles/variables.css b/src/styles/variables.css similarity index 100% rename from _backup/styles/variables.css rename to src/styles/variables.css diff --git a/src/themes/blur/index.vto b/src/theme/blur/index.vto similarity index 77% rename from src/themes/blur/index.vto rename to src/theme/blur/index.vto index e6c178f1c..3de20d3c1 100644 --- a/src/themes/blur/index.vto +++ b/src/theme/blur/index.vto @@ -1,6 +1,8 @@ + + From d361075ed36b0673836b32d251cba9f701528ad2 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 12 Oct 2025 13:24:43 +0200 Subject: [PATCH 017/244] chore: simplify element --- src/common/element.js | 43 +++++++++++-------- .../constituent/blur/browser-list.d.ts | 4 ++ src/elements/constituent/blur/browser-list.js | 42 +++--------------- 3 files changed, 34 insertions(+), 55 deletions(-) create mode 100644 src/elements/constituent/blur/browser-list.d.ts diff --git a/src/common/element.js b/src/common/element.js index 1387ee0bb..fa82874bb 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,19 +1,22 @@ -import morphdom from "morphdom"; +import morphdom from "morphdom/dist/morphdom.js"; +import { effect } from "@common/signals.js"; /** - * @import {HtmlTagFunction, RenderArg} from "./element.d.ts" + * @import {HtmlTagFunction} from "./element.d.ts" */ -/** - * @template [State={}] - */ export default class DiffuseElement extends HTMLElement { + #teardown = () => {}; + constructor() { super(); this.process = this.process.bind(this); } process() { + if (!("render" in this && typeof this.render === "function")) return; + if (!("state" in this)) return; + const tmp = this.render({ html: this.html, state: this.state, @@ -23,14 +26,16 @@ export default class DiffuseElement extends HTMLElement { updated.innerHTML = tmp.trim(); const root = this.shadowRoot ? this.shadowRoot : this; - /* @ts-ignore */ - morphdom( + /** @type {Node} */ + const result = morphdom( root, updated, { childrenOnly: true, }, ); + + return result; } /** @@ -49,20 +54,20 @@ export default class DiffuseElement extends HTMLElement { return String.raw({ raw: strings }, ...values); } - // TO OVERRIDE + // LIFECYCLE - /** - * @param {RenderArg} _arg - */ - render(_arg) { - return ""; + connectedCallback() { + if (!("render" in this && typeof this.render === "function")) return; + + this.#teardown = effect(() => { + if (!("render" in this && typeof this.render === "function")) return; + if (!("state" in this)) return; + + this.innerHTML = this.render({ html: this.html, state: this.state }); + }); } - /** - * @returns {State} - */ - get state() { - /* @ts-ignore */ - return {}; + disconnectedCallback() { + this.#teardown(); } } diff --git a/src/elements/constituent/blur/browser-list.d.ts b/src/elements/constituent/blur/browser-list.d.ts new file mode 100644 index 000000000..ec5de6210 --- /dev/null +++ b/src/elements/constituent/blur/browser-list.d.ts @@ -0,0 +1,4 @@ +import { Signal } from "@common/signals.d.ts"; +import { Track } from "@elements/core/types.d.ts"; + +export type State = { tracks: Signal }; diff --git a/src/elements/constituent/blur/browser-list.js b/src/elements/constituent/blur/browser-list.js index 783dd4f2a..89dba2f20 100644 --- a/src/elements/constituent/blur/browser-list.js +++ b/src/elements/constituent/blur/browser-list.js @@ -1,67 +1,37 @@ import DiffuseElement from "@common/element.js"; -import { effect, signal } from "@common/signals.js"; +import { signal } from "@common/signals.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {Signal} from "@common/signals.d.ts" * @import {Track} from "@elements/core/types.d.ts" + * + * @import {State} from "./browser-list.d.ts" */ -/** - * @typedef {{ tracks: Signal }} State - */ - -/** - * @type {Track[]} - */ -const TRACKS = []; - //////////////////////////////////////////////// // ELEMENT //////////////////////////////////////////////// class List extends DiffuseElement { - #teardown = () => {}; - - /** - * @type {Signal} - */ - tracks = signal(TRACKS); + tracks = signal(/** @type {Track[]} */ ([])); // STATE - /** - * @override - * @returns {State} - */ get state() { return { tracks: this.tracks, }; } - // LIFECYCLE - - connectedCallback() { - this.#teardown = effect(() => { - this.innerHTML = this.render({ html: this.html, state: this.state }); - }); - } - - disconnectedCallback() { - this.#teardown(); - } - // RENDER /** - * @override * @param {RenderArg} _ */ render({ html, state }) { - console.log("Rendering", state.tracks); + console.log("Rendering", state.tracks()); - const list = (state.tracks() || []).map((t) => + const list = state.tracks().map((t) => html`
    ${t}
    ` From 0baed127f051524730db0df51070b04bb933a05a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 12 Oct 2025 14:07:12 +0200 Subject: [PATCH 018/244] feat: improve diffuse element --- src/common/element.js | 28 +++++--- src/elements/constituent/blur/browser-list.js | 58 --------------- .../constituent/blur/browser-list/index.js | 70 +++++++++++++++++++ .../types.d.ts} | 0 src/theme/blur/index.vto | 2 +- 5 files changed, 89 insertions(+), 69 deletions(-) delete mode 100644 src/elements/constituent/blur/browser-list.js create mode 100644 src/elements/constituent/blur/browser-list/index.js rename src/elements/constituent/blur/{browser-list.d.ts => browser-list/types.d.ts} (100%) diff --git a/src/common/element.js b/src/common/element.js index fa82874bb..4cdacabaa 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -6,14 +6,18 @@ import { effect } from "@common/signals.js"; */ export default class DiffuseElement extends HTMLElement { - #teardown = () => {}; + #disposables = /** @type {Array<() => void>} */ ([]); + + #teardown() { + this.#disposables.forEach((fn) => fn()); + } constructor() { super(); - this.process = this.process.bind(this); + this.morphedRender = this.morphedRender.bind(this); } - process() { + morphedRender() { if (!("render" in this && typeof this.render === "function")) return; if (!("state" in this)) return; @@ -26,16 +30,13 @@ export default class DiffuseElement extends HTMLElement { updated.innerHTML = tmp.trim(); const root = this.shadowRoot ? this.shadowRoot : this; - /** @type {Node} */ - const result = morphdom( + morphdom( root, updated, { childrenOnly: true, }, ); - - return result; } /** @@ -44,7 +45,14 @@ export default class DiffuseElement extends HTMLElement { * @param {string} newValue */ attributeChangedCallback(_name, oldValue, newValue) { - if (oldValue !== newValue) this.process(); + if (oldValue !== newValue) this.morphedRender(); + } + + /** + * @param {() => void} fn + */ + effect(fn) { + this.#disposables.push(effect(fn)); } /** @@ -59,11 +67,11 @@ export default class DiffuseElement extends HTMLElement { connectedCallback() { if (!("render" in this && typeof this.render === "function")) return; - this.#teardown = effect(() => { + this.effect(() => { if (!("render" in this && typeof this.render === "function")) return; if (!("state" in this)) return; - this.innerHTML = this.render({ html: this.html, state: this.state }); + this.morphedRender(); }); } diff --git a/src/elements/constituent/blur/browser-list.js b/src/elements/constituent/blur/browser-list.js deleted file mode 100644 index 89dba2f20..000000000 --- a/src/elements/constituent/blur/browser-list.js +++ /dev/null @@ -1,58 +0,0 @@ -import DiffuseElement from "@common/element.js"; -import { signal } from "@common/signals.js"; - -/** - * @import {RenderArg} from "@common/element.d.ts" - * @import {Track} from "@elements/core/types.d.ts" - * - * @import {State} from "./browser-list.d.ts" - */ - -//////////////////////////////////////////////// -// ELEMENT -//////////////////////////////////////////////// - -class List extends DiffuseElement { - tracks = signal(/** @type {Track[]} */ ([])); - - // STATE - - get state() { - return { - tracks: this.tracks, - }; - } - - // RENDER - - /** - * @param {RenderArg} _ - */ - render({ html, state }) { - console.log("Rendering", state.tracks()); - - const list = state.tracks().map((t) => - html` -
    ${t}
    - ` - ); - - return html` - -
    ${list.join("")}
    - `; - } -} - -export { List as ConstituentBlurBrowserList }; -export default List; - -//////////////////////////////////////////////// -// REGISTER -//////////////////////////////////////////////// - -customElements.define("constituent-blur-browser-list", List); diff --git a/src/elements/constituent/blur/browser-list/index.js b/src/elements/constituent/blur/browser-list/index.js new file mode 100644 index 000000000..73951fc8c --- /dev/null +++ b/src/elements/constituent/blur/browser-list/index.js @@ -0,0 +1,70 @@ +import DiffuseElement from "@common/element.js"; +import { signal } from "@common/signals.js"; + +/** + * @import {RenderArg} from "@common/element.d.ts" + * @import {Track} from "@elements/core/types.d.ts" + * + * @import {State} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class BrowserList extends DiffuseElement { + tracks = signal(/** @type {Track[]} */ ([])); + + // STATE + + get state() { + return { + tracks: this.tracks, + }; + } + + // LIFECYCLE + + /** + * @override + * + * TODO: Remove, just an example. + */ + connectedCallback() { + super.connectedCallback(); + this.effect(() => {}); + } + + // RENDER + + /** + * @param {RenderArg} _ + */ + render({ html, state }) { + console.log("Rendering", state.tracks()); + + const list = state.tracks().map((t, idx) => + html` +
    ${t}
    + ` + ); + + return html` + +
    ${list.join("")}
    + `; + } +} + +export { BrowserList as ConstituentBlurBrowserList }; +export default BrowserList; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +customElements.define("constituent-blur-browser-list", BrowserList); diff --git a/src/elements/constituent/blur/browser-list.d.ts b/src/elements/constituent/blur/browser-list/types.d.ts similarity index 100% rename from src/elements/constituent/blur/browser-list.d.ts rename to src/elements/constituent/blur/browser-list/types.d.ts diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 3de20d3c1..433031e72 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,7 +4,7 @@ From 2dc52119f63581331f4435a8093f929b7eacacc1 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 12 Oct 2025 22:43:29 +0200 Subject: [PATCH 019/244] feat: audio engine --- src/common/element.d.ts | 17 + src/common/element.js | 59 ++- src/common/{signals.d.ts => signal.d.ts} | 0 src/common/{signals.js => signal.js} | 0 .../constituent/blur/browser-list/index.js | 25 +- src/elements/engine/audio/index.js | 413 ++++++++++++++++++ .../elements}/engine/audio/types.d.ts | 8 +- src/theme/blur/index.vto | 4 +- 8 files changed, 487 insertions(+), 39 deletions(-) rename src/common/{signals.d.ts => signal.d.ts} (100%) rename src/common/{signals.js => signal.js} (100%) create mode 100644 src/elements/engine/audio/index.js rename {_backup/pages => src/elements}/engine/audio/types.d.ts (80%) diff --git a/src/common/element.d.ts b/src/common/element.d.ts index ca11f329e..8576ffe5b 100644 --- a/src/common/element.d.ts +++ b/src/common/element.d.ts @@ -3,4 +3,21 @@ export type HtmlTagFunction = ( ...values: unknown[] ) => string; +type MorphOptions = { + getNodeKey?: (node: Node) => unknown; + onBeforeNodeAdded?: (node: Node) => false | Node; + onNodeAdded?: (node: Node) => void; + onBeforeElUpdated?: (fromEl: HTMLElement, toEl: HTMLElement) => boolean; + onElUpdated?: (el: HTMLElement) => void; + onBeforeNodeDiscarded?: (node: Node) => boolean; + onNodeDiscarded?: (node: Node) => void; + onBeforeElChildrenUpdated?: ( + fromEl: HTMLElement, + toEl: HTMLElement, + ) => boolean; + skipFromChildren?: (fromEl: HTMLElement) => boolean; + addChild?: (parent: HTMLElement, child: HTMLElement) => void; + childrenOnly?: boolean; +}; + export type RenderArg = { html: HtmlTagFunction; state: State }; diff --git a/src/common/element.js b/src/common/element.js index 4cdacabaa..2b9e80a8b 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,8 +1,8 @@ import morphdom from "morphdom/dist/morphdom.js"; -import { effect } from "@common/signals.js"; +import { effect } from "@common/signal.js"; /** - * @import {HtmlTagFunction} from "./element.d.ts" + * @import {HtmlTagFunction, MorphOptions} from "./element.d.ts" */ export default class DiffuseElement extends HTMLElement { @@ -17,6 +17,36 @@ export default class DiffuseElement extends HTMLElement { this.morphedRender = this.morphedRender.bind(this); } + /** + * @param {string} _name + * @param {string} oldValue + * @param {string} newValue + */ + attributeChangedCallback(_name, oldValue, newValue) { + if (oldValue !== newValue) this.morphedRender(); + } + + /** + * Effect helper that automatically disposes it + * when this element is removed from the DOM. + * + * @param {() => void} fn + */ + effect(fn) { + this.#disposables.push(effect(fn)); + } + + /** + * @type {HtmlTagFunction} + */ + html(strings, ...values) { + return String.raw({ raw: strings }, ...values); + } + + /** + * Avoid replacing the whole subtree, + * morph the existing DOM into the new given tree. + */ morphedRender() { if (!("render" in this && typeof this.render === "function")) return; if (!("state" in this)) return; @@ -34,33 +64,16 @@ export default class DiffuseElement extends HTMLElement { root, updated, { + ...this.morphOptions, childrenOnly: true, }, ); } - /** - * @param {string} _name - * @param {string} oldValue - * @param {string} newValue - */ - attributeChangedCallback(_name, oldValue, newValue) { - if (oldValue !== newValue) this.morphedRender(); - } + // MORPH STUFF - /** - * @param {() => void} fn - */ - effect(fn) { - this.#disposables.push(effect(fn)); - } - - /** - * @type {HtmlTagFunction} - */ - html(strings, ...values) { - return String.raw({ raw: strings }, ...values); - } + /** @type {MorphOptions} */ + morphOptions = {}; // LIFECYCLE diff --git a/src/common/signals.d.ts b/src/common/signal.d.ts similarity index 100% rename from src/common/signals.d.ts rename to src/common/signal.d.ts diff --git a/src/common/signals.js b/src/common/signal.js similarity index 100% rename from src/common/signals.js rename to src/common/signal.js diff --git a/src/elements/constituent/blur/browser-list/index.js b/src/elements/constituent/blur/browser-list/index.js index 73951fc8c..45237aa28 100644 --- a/src/elements/constituent/blur/browser-list/index.js +++ b/src/elements/constituent/blur/browser-list/index.js @@ -1,11 +1,10 @@ import DiffuseElement from "@common/element.js"; -import { signal } from "@common/signals.js"; +import { signal } from "@common/signal.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {Track} from "@elements/core/types.d.ts" - * * @import {State} from "./types.d.ts" + * @import {Track} from "@elements/core/types.d.ts" */ //////////////////////////////////////////// @@ -43,11 +42,16 @@ class BrowserList extends DiffuseElement { render({ html, state }) { console.log("Rendering", state.tracks()); - const list = state.tracks().map((t, idx) => - html` -
    ${t}
    - ` - ); + const list = state.tracks().map( + /** + * @param {Track} t + * @param {number} idx + */ + (t, idx) => + html` +
    ${t}
    + `, + ).join(""); return html` -
    ${list.join("")}
    +
    ${list}
    `; } } -export { BrowserList as ConstituentBlurBrowserList }; export default BrowserList; //////////////////////////////////////////// // REGISTER //////////////////////////////////////////// -customElements.define("constituent-blur-browser-list", BrowserList); +customElements.define("dcb-browser-list", BrowserList); diff --git a/src/elements/engine/audio/index.js b/src/elements/engine/audio/index.js new file mode 100644 index 000000000..4f7a2c7f5 --- /dev/null +++ b/src/elements/engine/audio/index.js @@ -0,0 +1,413 @@ +import DiffuseElement from "@common/element.js"; +import { effect, signal } from "@common/signal.js"; + +/** + * @import {Audio, AudioState, State} from "./types.d.ts" + * @import {RenderArg} from "@common/element.d.ts" + * @import {Signal} from "@common/signal.d.ts" + */ + +//////////////////////////////////////////// +// CONSTANTS +//////////////////////////////////////////// +const SILENT_MP3 = + "data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV"; + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class AudioEngine extends DiffuseElement { + static observedAttributes = ["is-playing", "volume"]; + + constructor() { + super(); + + // TODO: Get volume from previous session if possible + // const VOLUME_KEY = `@elements/engine/audio/${this.groupId}/volume`; + // const vol = localStorage.getItem(VOLUME_KEY); + } + + // SIGNALS + + defaultVolume = signal(0.5); + isPlaying = signal(false); + items = signal(/** @type {Audio[]} */ ([])); + + // STATE + + get state() { + return { + isPlaying: this.isPlaying, + items: this.items, + volume: { default: this.defaultVolume() }, + }; + } + + // ACTIONS + + /** + * @param {{ audioId: string }} _ + */ + pause({ audioId }) { + this.withAudioNode(audioId, (audio) => audio.pause()); + } + + /** + * @param {{ audioId: string; volume?: number }} _ + */ + play({ audioId, volume }) { + this.withAudioNode(audioId, (audio, item) => { + audio.volume = volume ?? this.state.volume.default; + audio.muted = false; + + if (audio.readyState === 0) audio.load(); + if (!audio.isConnected) return; + + const promise = audio.play() || Promise.resolve(); + item.state = { isPlaying: true }; + + promise.catch((e) => { + if (!audio.isConnected) { + return; /* The node was removed from the DOM, we can ignore this error */ + } + const err = + "Couldn't play audio automatically. Please resume playback manually."; + console.error(err, e); + item.state = { isPlaying: false }; + }); + }); + } + + /** + * @param {{ audioId: string; play: boolean; progress?: number }} args + */ + reload(args) { + this.withAudioNode(args.audioId, (audio, item) => { + if (audio.readyState === 0 || audio.error?.code === 2) { + audio.load(); + + if (args.progress !== undefined) { + item.setAttribute( + "initial-progress", + JSON.stringify(args.progress), + ); + } + + if (args.play) { + this.play({ audioId: args.audioId, volume: audio.volume }); + } + } + }); + } + + /** + * @param {{ audioId: string; percentage: number }} _ + */ + seek({ audioId, percentage }) { + this.withAudioNode(audioId, (audio) => { + if (!isNaN(audio.duration)) { + audio.currentTime = audio.duration * percentage; + } + }); + } + + /** + * @param {{ audioId?: string; volume: number }} args + */ + volume(args) { + // TODO: + // if (!args.audioId) update({ volume: { default: args.volume } }); + + Array.from(this.querySelectorAll("de-audio-item audio")).forEach((node) => { + const audio = /** @type {HTMLAudioElement} */ (node); + if (audio.hasAttribute("preload")) return; + if (args.audioId === undefined || args.audioId === audio.id) { + audio.volume = args.volume; + } + }); + } + + /** + * @param {{ audio: Audio[]; play?: { audioId: string; volume?: number } }} args + */ + yield(args) { + this.items(args.audio); + if (args.play) this.play(args.play); + } + + // RENDER + + /** + * @param {RenderArg} _ + */ + render({ html, state }) { + console.log("Render"); + + const nodes = state.items().map((audio) => { + const ip = audio.progress === undefined + ? "0" + : JSON.stringify(audio.progress); + + return html` + + + + `; + }); + + return html` +
    + ${nodes.join("")} +
    + `; + } + + // 🛠️ + + /** + * @param {string} audioId + * @param {(audio: HTMLAudioElement, item: AudioEngineItem) => void} fn + */ + withAudioNode(audioId, fn) { + const node = this.querySelector( + `de-audio-item[id="${audioId}"]:not([preload])`, + ); + + if (node) { + const item = /** @type {AudioEngineItem} */ (node); + fn(item.audio, item); + } + } +} + +export default AudioEngine; + +//////////////////////////////////////////// +// ITEM ELEMENT +//////////////////////////////////////////// + +export class AudioEngineItem extends HTMLElement { + /** + * @type {AudioState} + */ + #state; + + constructor() { + super(); + + const ip = this.getAttribute("initial-progress"); + + this.#state = { + duration: 0, + hasEnded: false, + id: this.id, + isPlaying: true, + isPreload: this.hasAttribute("preload"), + loadingState: "loading", + mimeType: this.getAttribute("mime-type") ?? undefined, + progress: ip ? parseFloat(ip) : 0, + url: this.getAttribute("url") ?? "", + }; + + const audio = this.audio; + + audio.addEventListener("canplay", this.canplayEvent); + audio.addEventListener("durationchange", this.durationchangeEvent); + audio.addEventListener("ended", this.endedEvent); + audio.addEventListener("error", this.errorEvent); + audio.addEventListener("pause", this.pauseEvent); + audio.addEventListener("play", this.playEvent); + audio.addEventListener("suspend", this.suspendEvent); + audio.addEventListener("timeupdate", this.timeupdateEvent); + audio.addEventListener("waiting", this.waitingEvent); + } + + // RELATED ELEMENTS + + get audio() { + const el = this.querySelector("audio"); + if (el) return /** @type {HTMLAudioElement} */ (el); + else throw new Error("Cannot find child audio element"); + } + + get engine() { + const el = this.closest("de-audio"); + if (el) return /** @type {AudioEngine} */ (el); + else throw new Error("Cannot find parent de-audio element"); + } + + // STATE + + get state() { + return { ...this.#state }; + } + + /** + * @param {Partial} s + */ + set state(s) { + this.#state = { ...this.#state, ...s }; + } + + // EVENTS + + /** + * @param {Event} event + */ + canplayEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + const item = engineItem(audio); + + if ( + item.hasAttribute("initial-progress") && + audio.duration && + !isNaN(audio.duration) + ) { + const progress = JSON.parse( + item.getAttribute("initial-progress") ?? "0", + ); + audio.currentTime = audio.duration * progress; + item.removeAttribute("initial-progress"); + } + + finishedLoading(event); + } + + /** + * @param {Event} event + */ + durationchangeEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + + if (!isNaN(audio.duration)) { + engineItem(audio).state = { duration: audio.duration }; + } + } + + /** + * @param {Event} event + */ + endedEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + audio.currentTime = 0; + + engineItem(audio).state = { hasEnded: true }; + } + + /** + * @param {Event} event + */ + errorEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + const code = audio.error?.code || 0; + + engineItem(audio).state = { loadingState: { error: { code } } }; + } + + /** + * @param {Event} event + */ + pauseEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + + const item = engineItem(audio).state; + const ended = item ? item.hasEnded || item.progress === 1 : false; + + engineItem(audio).state = { isPlaying: false }; + engineItem(audio).engine.isPlaying(ended); + } + + /** + * @param {Event} event + */ + playEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + + engineItem(audio).state = { isPlaying: true }; + engineItem(audio).engine.isPlaying(true); + + // In case audio was preloaded: + if (audio.readyState === 4) finishedLoading(event); + } + + /** + * @param {Event} event + */ + suspendEvent(event) { + finishedLoading(event); + } + + /** + * @param {Event} event + */ + timeupdateEvent(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + + engineItem(audio).state = { + progress: isNaN(audio.duration) || audio.duration === 0 + ? 0 + : audio.currentTime / audio.duration, + }; + } + + /** + * @param {Event} event + */ + waitingEvent(event) { + initiateLoading(event); + } +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +/** + * @param {HTMLAudioElement} audio + */ +function engineItem(audio) { + const c = audio.closest("de-audio-item"); + if (c) return /** @type {AudioEngineItem} */ (c); + else throw new Error("Cannot find parent de-audio-item element"); +} + +/** + * @param {Event} event + */ +function finishedLoading(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + engineItem(audio).state = { loadingState: "loaded" }; +} + +/** + * @param {Event} event + */ +function initiateLoading(event) { + const audio = /** @type {HTMLAudioElement} */ (event.target); + if (audio.readyState < 4) { + engineItem(audio).state = { loadingState: "loading" }; + } +} + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +customElements.define("de-audio", AudioEngine); +customElements.define("de-audio-item", AudioEngineItem); diff --git a/_backup/pages/engine/audio/types.d.ts b/src/elements/engine/audio/types.d.ts similarity index 80% rename from _backup/pages/engine/audio/types.d.ts rename to src/elements/engine/audio/types.d.ts index afbbd4207..e3d343d42 100644 --- a/_backup/pages/engine/audio/types.d.ts +++ b/src/elements/engine/audio/types.d.ts @@ -1,6 +1,8 @@ +import { Signal } from "@common/signal.d.ts"; + export interface State { isPlaying: boolean; - items: Record; + items: Signal; volume: { default: number }; } @@ -21,8 +23,8 @@ export interface AudioState { | "loading" | "loaded" | { - error: { code: number }; - }; + error: { code: number }; + }; isPlaying: boolean; isPreload: boolean; mimeType?: string; diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 433031e72..9e1a414a1 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,10 +4,10 @@ - + From cb67fe98346fc64b5d913b9a1ee96aaee84c8087 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 14 Oct 2025 12:55:21 +0200 Subject: [PATCH 020/244] chore: reorganise --- deno.jsonc | 2 +- .../constituent/blur/browser-list/element.js} | 14 +--- .../constituent/blur/browser-list/types.d.ts | 0 src/{elements => component}/core/types.d.ts | 0 .../engine/audio/element.js} | 71 +++++++++++-------- .../engine/audio/types.d.ts | 20 ++++-- src/theme/blur/index.vto | 2 +- 7 files changed, 61 insertions(+), 48 deletions(-) rename src/{elements/constituent/blur/browser-list/index.js => component/constituent/blur/browser-list/element.js} (83%) rename src/{elements => component}/constituent/blur/browser-list/types.d.ts (100%) rename src/{elements => component}/core/types.d.ts (100%) rename src/{elements/engine/audio/index.js => component/engine/audio/element.js} (89%) rename src/{elements => component}/engine/audio/types.d.ts (50%) diff --git a/deno.jsonc b/deno.jsonc index 764389a43..f460db8e3 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -9,7 +9,7 @@ // Source "@common/": "./src/common/", - "@elements/": "./src/elements/", + "@component/": "./src/component/", }, "tasks": { "build": "deno task lume", diff --git a/src/elements/constituent/blur/browser-list/index.js b/src/component/constituent/blur/browser-list/element.js similarity index 83% rename from src/elements/constituent/blur/browser-list/index.js rename to src/component/constituent/blur/browser-list/element.js index 45237aa28..b505c2ed4 100644 --- a/src/elements/constituent/blur/browser-list/index.js +++ b/src/component/constituent/blur/browser-list/element.js @@ -4,7 +4,7 @@ import { signal } from "@common/signal.js"; /** * @import {RenderArg} from "@common/element.d.ts" * @import {State} from "./types.d.ts" - * @import {Track} from "@elements/core/types.d.ts" + * @import {Track} from "@component/core/types.d.ts" */ //////////////////////////////////////////// @@ -22,18 +22,6 @@ class BrowserList extends DiffuseElement { }; } - // LIFECYCLE - - /** - * @override - * - * TODO: Remove, just an example. - */ - connectedCallback() { - super.connectedCallback(); - this.effect(() => {}); - } - // RENDER /** diff --git a/src/elements/constituent/blur/browser-list/types.d.ts b/src/component/constituent/blur/browser-list/types.d.ts similarity index 100% rename from src/elements/constituent/blur/browser-list/types.d.ts rename to src/component/constituent/blur/browser-list/types.d.ts diff --git a/src/elements/core/types.d.ts b/src/component/core/types.d.ts similarity index 100% rename from src/elements/core/types.d.ts rename to src/component/core/types.d.ts diff --git a/src/elements/engine/audio/index.js b/src/component/engine/audio/element.js similarity index 89% rename from src/elements/engine/audio/index.js rename to src/component/engine/audio/element.js index 4f7a2c7f5..c5076e349 100644 --- a/src/elements/engine/audio/index.js +++ b/src/component/engine/audio/element.js @@ -1,22 +1,25 @@ import DiffuseElement from "@common/element.js"; -import { effect, signal } from "@common/signal.js"; +import { signal } from "@common/signal.js"; /** - * @import {Audio, AudioState, State} from "./types.d.ts" + * @import {Actions, Audio, AudioState, Signals, State} from "./types.d.ts" * @import {RenderArg} from "@common/element.d.ts" - * @import {Signal} from "@common/signal.d.ts" */ //////////////////////////////////////////// // CONSTANTS //////////////////////////////////////////// -const SILENT_MP3 = +const _SILENT_MP3 = "data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV"; //////////////////////////////////////////// // ELEMENT //////////////////////////////////////////// +/** + * @implements {Actions} + * @implements {Signals} + */ class AudioEngine extends DiffuseElement { static observedAttributes = ["is-playing", "volume"]; @@ -30,35 +33,59 @@ class AudioEngine extends DiffuseElement { // SIGNALS - defaultVolume = signal(0.5); + volume = signal(0.5); isPlaying = signal(false); items = signal(/** @type {Audio[]} */ ([])); // STATE + /** + * @type {State} + */ get state() { return { isPlaying: this.isPlaying, items: this.items, - volume: { default: this.defaultVolume() }, + volume: this.volume, }; } + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + this.effect(() => { + // NOTE: Support different volume levels for audio elements? + + Array.from(this.querySelectorAll("de-audio-item audio")).forEach( + (node) => { + const audio = /** @type {HTMLAudioElement} */ (node); + if (audio.hasAttribute("preload")) return; + audio.volume = this.volume(); + }, + ); + }); + } + // ACTIONS /** - * @param {{ audioId: string }} _ + * @type {Actions["pause"]} */ pause({ audioId }) { this.withAudioNode(audioId, (audio) => audio.pause()); } /** - * @param {{ audioId: string; volume?: number }} _ + * @type {Actions["play"]} */ play({ audioId, volume }) { this.withAudioNode(audioId, (audio, item) => { - audio.volume = volume ?? this.state.volume.default; + audio.volume = volume ?? this.state.volume(); audio.muted = false; if (audio.readyState === 0) audio.load(); @@ -80,7 +107,7 @@ class AudioEngine extends DiffuseElement { } /** - * @param {{ audioId: string; play: boolean; progress?: number }} args + * @type {Actions["reload"]} */ reload(args) { this.withAudioNode(args.audioId, (audio, item) => { @@ -102,7 +129,7 @@ class AudioEngine extends DiffuseElement { } /** - * @param {{ audioId: string; percentage: number }} _ + * @type {Actions["seek"]} */ seek({ audioId, percentage }) { this.withAudioNode(audioId, (audio) => { @@ -113,23 +140,7 @@ class AudioEngine extends DiffuseElement { } /** - * @param {{ audioId?: string; volume: number }} args - */ - volume(args) { - // TODO: - // if (!args.audioId) update({ volume: { default: args.volume } }); - - Array.from(this.querySelectorAll("de-audio-item audio")).forEach((node) => { - const audio = /** @type {HTMLAudioElement} */ (node); - if (audio.hasAttribute("preload")) return; - if (args.audioId === undefined || args.audioId === audio.id) { - audio.volume = args.volume; - } - }); - } - - /** - * @param {{ audio: Audio[]; play?: { audioId: string; volume?: number } }} args + * @type {Actions["yield"]} */ yield(args) { this.items(args.audio); @@ -202,7 +213,7 @@ export default AudioEngine; // ITEM ELEMENT //////////////////////////////////////////// -export class AudioEngineItem extends HTMLElement { +class AudioEngineItem extends HTMLElement { /** * @type {AudioState} */ @@ -374,6 +385,8 @@ export class AudioEngineItem extends HTMLElement { } } +export { AudioEngineItem }; + //////////////////////////////////////////// // 🛠️ //////////////////////////////////////////// diff --git a/src/elements/engine/audio/types.d.ts b/src/component/engine/audio/types.d.ts similarity index 50% rename from src/elements/engine/audio/types.d.ts rename to src/component/engine/audio/types.d.ts index e3d343d42..91af78007 100644 --- a/src/elements/engine/audio/types.d.ts +++ b/src/component/engine/audio/types.d.ts @@ -1,9 +1,13 @@ import { Signal } from "@common/signal.d.ts"; -export interface State { - isPlaying: boolean; - items: Signal; - volume: { default: number }; +export interface Actions { + pause: (_: { audioId: string }) => void; + play: (_: { audioId: string; volume?: number }) => void; + reload: (_: { audioId: string; play: boolean; progress?: number }) => void; + seek: (_: { audioId: string; percentage: number }) => void; + yield: ( + _: { audio: Audio[]; play?: { audioId: string; volume?: number } }, + ) => void; } export interface Audio { @@ -31,3 +35,11 @@ export interface AudioState { progress: number; url: string; } + +export interface Signals { + isPlaying: Signal; + items: Signal; + volume: Signal; +} + +export type State = Signals; diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 9e1a414a1..3e62098c5 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,7 +4,7 @@ From c2279b220306422c590787c0d098cc20acf8fb7b Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 14 Oct 2025 13:07:28 +0200 Subject: [PATCH 021/244] fix: better handling of removal of playing audio --- src/component/engine/audio/element.js | 52 +++++++++++++-------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index c5076e349..99954382d 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -92,7 +92,7 @@ class AudioEngine extends DiffuseElement { if (!audio.isConnected) return; const promise = audio.play() || Promise.resolve(); - item.state = { isPlaying: true }; + item.state({ isPlaying: true }); promise.catch((e) => { if (!audio.isConnected) { @@ -101,7 +101,7 @@ class AudioEngine extends DiffuseElement { const err = "Couldn't play audio automatically. Please resume playback manually."; console.error(err, e); - item.state = { isPlaying: false }; + item.state({ isPlaying: false }); }); }); } @@ -202,7 +202,7 @@ class AudioEngine extends DiffuseElement { if (node) { const item = /** @type {AudioEngineItem} */ (node); - fn(item.audio, item); + if (item) fn(item.audio, item); } } } @@ -260,20 +260,17 @@ class AudioEngineItem extends HTMLElement { get engine() { const el = this.closest("de-audio"); if (el) return /** @type {AudioEngine} */ (el); - else throw new Error("Cannot find parent de-audio element"); + else return null; } // STATE - get state() { - return { ...this.#state }; - } - /** - * @param {Partial} s + * @param {Partial | undefined} [s] */ - set state(s) { - this.#state = { ...this.#state, ...s }; + state(s) { + if (s) this.#state = { ...this.#state, ...s }; + else return { ...this.#state }; } // EVENTS @@ -286,7 +283,7 @@ class AudioEngineItem extends HTMLElement { const item = engineItem(audio); if ( - item.hasAttribute("initial-progress") && + item?.hasAttribute("initial-progress") && audio.duration && !isNaN(audio.duration) ) { @@ -307,7 +304,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); if (!isNaN(audio.duration)) { - engineItem(audio).state = { duration: audio.duration }; + engineItem(audio)?.state({ duration: audio.duration }); } } @@ -318,7 +315,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); audio.currentTime = 0; - engineItem(audio).state = { hasEnded: true }; + engineItem(audio)?.state({ hasEnded: true }); } /** @@ -328,7 +325,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); const code = audio.error?.code || 0; - engineItem(audio).state = { loadingState: { error: { code } } }; + engineItem(audio)?.state({ loadingState: { error: { code } } }); } /** @@ -337,11 +334,14 @@ class AudioEngineItem extends HTMLElement { pauseEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - const item = engineItem(audio).state; - const ended = item ? item.hasEnded || item.progress === 1 : false; + const item = engineItem(audio); + const itemState = item?.state(); + const ended = itemState + ? itemState.hasEnded || itemState.progress === 1 + : false; - engineItem(audio).state = { isPlaying: false }; - engineItem(audio).engine.isPlaying(ended); + item?.state({ isPlaying: false }); + item?.engine?.isPlaying(ended); } /** @@ -350,8 +350,8 @@ class AudioEngineItem extends HTMLElement { playEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio).state = { isPlaying: true }; - engineItem(audio).engine.isPlaying(true); + engineItem(audio)?.state({ isPlaying: true }); + engineItem(audio)?.engine?.isPlaying(true); // In case audio was preloaded: if (audio.readyState === 4) finishedLoading(event); @@ -370,11 +370,11 @@ class AudioEngineItem extends HTMLElement { timeupdateEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio).state = { + engineItem(audio)?.state({ progress: isNaN(audio.duration) || audio.duration === 0 ? 0 : audio.currentTime / audio.duration, - }; + }); } /** @@ -397,7 +397,7 @@ export { AudioEngineItem }; function engineItem(audio) { const c = audio.closest("de-audio-item"); if (c) return /** @type {AudioEngineItem} */ (c); - else throw new Error("Cannot find parent de-audio-item element"); + else return null; } /** @@ -405,7 +405,7 @@ function engineItem(audio) { */ function finishedLoading(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio).state = { loadingState: "loaded" }; + engineItem(audio)?.state({ loadingState: "loaded" }); } /** @@ -414,7 +414,7 @@ function finishedLoading(event) { function initiateLoading(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); if (audio.readyState < 4) { - engineItem(audio).state = { loadingState: "loading" }; + engineItem(audio)?.state({ loadingState: "loading" }); } } From b48caaf215b2579ec64e103a8b35dd8cffb58b3d Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 15 Oct 2025 23:12:42 +0200 Subject: [PATCH 022/244] feat: initial setup for workers --- _backup/scripts/common.ts | 17 -------- deno.jsonc | 5 ++- deno.lock | 30 +++++++++++++- src/common/index.js | 21 ++++++++++ src/common/worker.d.ts | 2 + src/common/worker.js | 59 ++++++++++++++++++++++++++++ src/component/engine/queue/worker.js | 42 ++++++++++++++++++++ 7 files changed, 156 insertions(+), 20 deletions(-) create mode 100644 src/common/index.js create mode 100644 src/common/worker.d.ts create mode 100644 src/common/worker.js create mode 100644 src/component/engine/queue/worker.js diff --git a/_backup/scripts/common.ts b/_backup/scripts/common.ts index a4331f9d5..aaaef8c65 100644 --- a/_backup/scripts/common.ts +++ b/_backup/scripts/common.ts @@ -22,23 +22,6 @@ export type WorkerTasks = { // 🛠️ //////////////////////////////////////////// -export function arrayShuffle(array: Array): Array { - if (array.length === 0) { - return []; - } - - array = [...array]; - - for (let index = array.length - 1; index > 0; index--) { - const randArr = crypto.getRandomValues(new Uint32Array(1)); - const randVal = randArr[0] / 2 ** 32; - const newIndex = Math.floor(randVal * (index + 1)); - [array[index], array[newIndex]] = [array[newIndex], array[index]]; - } - - return array; -} - export function cleanUndefinedValuesForTracks(tracks: Track[]): Track[] { return tracks.map((track) => { const t = { ...track }; diff --git a/deno.jsonc b/deno.jsonc index f460db8e3..7479a2872 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,6 +1,8 @@ { "imports": { - // Dependencies + "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", + "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", + "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "@std/fs": "jsr:@std/fs@^1.0.15", "alien-signals": "npm:alien-signals@^3.0.0", "lume/": "https://deno.land/x/lume@v3.0.11/", @@ -10,6 +12,7 @@ // Source "@common/": "./src/common/", "@component/": "./src/component/", + "xxh32": "npm:xxh32@^2.0.5", }, "tasks": { "build": "deno task lume", diff --git a/deno.lock b/deno.lock index e654f9996..ec4ce51e6 100644 --- a/deno.lock +++ b/deno.lock @@ -2,6 +2,9 @@ "version": "5", "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", + "jsr:@mys/m-rpc@~0.12.2": "0.12.2", + "jsr:@mys/worker-fn@^3.2.1": "3.2.1", + "jsr:@okikio/transferables@^1.0.2": "1.0.2", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -42,12 +45,28 @@ "npm:morphdom@^2.7.7": "2.7.7", "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", "npm:postcss@8.5.6": "8.5.6", - "npm:sass@1.93.2": "1.93.2" + "npm:sass@1.93.2": "1.93.2", + "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { "@deno/loader@0.3.6": { "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" }, + "@mys/m-rpc@0.12.2": { + "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", + "dependencies": [ + "jsr:@okikio/transferables" + ] + }, + "@mys/worker-fn@3.2.1": { + "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", + "dependencies": [ + "jsr:@mys/m-rpc" + ] + }, + "@okikio/transferables@1.0.2": { + "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" + }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -488,6 +507,9 @@ "picocolors" ], "bin": true + }, + "xxh32@2.0.5": { + "integrity": "sha512-glQIaPvLHV4xG2Sn0E4mZWY25JT34+XcG4e2c8OMIH2SXxVrm6MmJ8miCsqGBLtf+rn2YcaeS11vq/66vkXGUQ==" } }, "remote": { @@ -748,9 +770,13 @@ }, "workspace": { "dependencies": [ + "jsr:@mys/m-rpc@~0.12.2", + "jsr:@mys/worker-fn@^3.2.1", + "jsr:@okikio/transferables@^1.0.2", "jsr:@std/fs@^1.0.15", "npm:alien-signals@3", - "npm:morphdom@^2.7.7" + "npm:morphdom@^2.7.7", + "npm:xxh32@^2.0.5" ] } } diff --git a/src/common/index.js b/src/common/index.js new file mode 100644 index 000000000..79ad04046 --- /dev/null +++ b/src/common/index.js @@ -0,0 +1,21 @@ +/** + * @template T + * @param {Array} array + * @returns Array + */ +export function arrayShuffle(array) { + if (array.length === 0) { + return []; + } + + array = [...array]; + + for (let index = array.length - 1; index > 0; index--) { + const randArr = crypto.getRandomValues(new Uint32Array(1)); + const randVal = randArr[0] / 2 ** 32; + const newIndex = Math.floor(randVal * (index + 1)); + [array[index], array[newIndex]] = [array[newIndex], array[index]]; + } + + return array; +} diff --git a/src/common/worker.d.ts b/src/common/worker.d.ts new file mode 100644 index 000000000..e3d64f4af --- /dev/null +++ b/src/common/worker.d.ts @@ -0,0 +1,2 @@ +export type Announcement = MRpcBaseMsg & { type: "announcement"; args: T }; +export type MRpcBaseMsg = { ns: string; name: string; key: number }; diff --git a/src/common/worker.js b/src/common/worker.js new file mode 100644 index 000000000..39d6163cc --- /dev/null +++ b/src/common/worker.js @@ -0,0 +1,59 @@ +import { defineWorkerFn, useWorkerFn } from "@mys/worker-fn"; +import { getTransferables } from "@okikio/transferables"; +import { xxh32 } from "xxh32"; + +/** + * @import {Announcement} from "./worker.d.ts" + */ + +export const define = defineWorkerFn; +export const use = useWorkerFn; + +/** + * @template T + * @param {string} name + * @param {T} args + */ +export function announce(name, args) { + const transferables = getTransferables(args); + globalThis.postMessage(constructMsg(name, args), { transfer: transferables }); +} + +/** + * @template T + * @param {string} name + * @param {(args: T) => void} fn + */ +export function listen(name, fn) { + globalThis.addEventListener("message", (event) => { + const announcement = + /** @type {Announcement} */ (/** @type {unknown} */ (event)); + const { ns, type } = announcement; + + if (announcement.name !== name) return; + if (ns !== ANNOUNCEMENT || type !== ANNOUNCEMENT) return; + + fn(announcement.args); + }); +} + +// PRIVATE + +const ANNOUNCEMENT = "announcement"; + +/** + * @template T + * @param {string} name + * @param {T} args + * @returns {Announcement} + */ +function constructMsg(name, args) { + return { + ns: ANNOUNCEMENT, + name, + key: xxh32(crypto.randomUUID()), + + type: ANNOUNCEMENT, + args, + }; +} diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js new file mode 100644 index 000000000..31d76c26e --- /dev/null +++ b/src/component/engine/queue/worker.js @@ -0,0 +1,42 @@ +import { announce, define } from "@common/worker.js"; +import { effect, signal } from "@common/signal.js"; + +/** + * @import {Track} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// STATE +//////////////////////////////////////////// + +const pools = signal(/** @type {Record} */ ({})); + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +define("pool", pool); + +/** + * @param {{ groupId: string; tracks: Track[] }} _ + */ +function pool({ groupId, tracks }) { + fill(); + + // TODO: + // Create a signal for each group: future, past, now + // Whenever that state changes it should create an annoucement. + // Custom elements on the main thread can then listen for those. +} + +// PRIVATE + +function fill() { +} + +function todo() { + effect(() => { + const data = groupSignal(); + announce("some-name", data); + }); +} From 31b4ae73c00f54ee03722c27a4458c2dbb0f3bd6 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 16 Oct 2025 18:44:09 +0200 Subject: [PATCH 023/244] feat: queue --- _config.ts | 1 + deno.jsonc | 1 + deno.lock | 8 ++ src/common/worker.d.ts | 6 ++ src/common/worker.js | 29 +++++--- src/component/engine/audio/element.js | 7 +- src/component/engine/audio/types.d.ts | 2 +- src/component/engine/queue/element.js | 70 +++++++++++++++++ src/component/engine/queue/types.d.ts | 17 +++++ src/component/engine/queue/worker.js | 103 ++++++++++++++++++++++---- src/theme/blur/index.vto | 15 +++- 11 files changed, 229 insertions(+), 30 deletions(-) create mode 100644 src/component/engine/queue/element.js create mode 100644 src/component/engine/queue/types.d.ts diff --git a/_config.ts b/_config.ts index 96027ac8b..6ee956c39 100644 --- a/_config.ts +++ b/_config.ts @@ -12,6 +12,7 @@ const site = lume({ site.use(esbuild({ options: { bundle: true, + minify: false, splitting: true, }, })); diff --git a/deno.jsonc b/deno.jsonc index 7479a2872..edbb76653 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,6 +4,7 @@ "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "@std/fs": "jsr:@std/fs@^1.0.15", + "alien-deepsignals": "npm:alien-deepsignals@^0.2.7", "alien-signals": "npm:alien-signals@^3.0.0", "lume/": "https://deno.land/x/lume@v3.0.11/", "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", diff --git a/deno.lock b/deno.lock index ec4ce51e6..992a8196f 100644 --- a/deno.lock +++ b/deno.lock @@ -36,6 +36,7 @@ "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", "npm:@types/node@*": "24.2.0", + "npm:alien-deepsignals@~0.2.7": "0.2.7_alien-signals@3.0.0", "npm:alien-signals@3": "3.0.0", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:lightningcss-wasm@1.30.1": "1.30.1", @@ -259,6 +260,12 @@ "undici-types" ] }, + "alien-deepsignals@0.2.7_alien-signals@3.0.0": { + "integrity": "sha512-fERozTuMRWzO5fv9xBNk1Zm0ZxUllRPiMckoyQcEcCBZ4mpEiZhVnmmSqn26i5KwYnDcZxjS2LAo/o6QjzoEOQ==", + "dependencies": [ + "alien-signals" + ] + }, "alien-signals@3.0.0": { "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==" }, @@ -774,6 +781,7 @@ "jsr:@mys/worker-fn@^3.2.1", "jsr:@okikio/transferables@^1.0.2", "jsr:@std/fs@^1.0.15", + "npm:alien-deepsignals@~0.2.7", "npm:alien-signals@3", "npm:morphdom@^2.7.7", "npm:xxh32@^2.0.5" diff --git a/src/common/worker.d.ts b/src/common/worker.d.ts index e3d64f4af..c20b5a037 100644 --- a/src/common/worker.d.ts +++ b/src/common/worker.d.ts @@ -1,2 +1,8 @@ export type Announcement = MRpcBaseMsg & { type: "announcement"; args: T }; + +/** + * Comes from the `@mys/m-rpc` library, + * but it is not exported. Used to identify + * messages sent via `postMessage`. + */ export type MRpcBaseMsg = { ns: string; name: string; key: number }; diff --git a/src/common/worker.js b/src/common/worker.js index 39d6163cc..90e6984cb 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -1,8 +1,10 @@ import { defineWorkerFn, useWorkerFn } from "@mys/worker-fn"; import { getTransferables } from "@okikio/transferables"; + import { xxh32 } from "xxh32"; /** + * @import {NodeWorkerOrNodeMessagePort} from "@mys/m-rpc"; * @import {Announcement} from "./worker.d.ts" */ @@ -23,21 +25,30 @@ export function announce(name, args) { * @template T * @param {string} name * @param {(args: T) => void} fn + * @param {Worker | NodeWorkerOrNodeMessagePort} context */ -export function listen(name, fn) { - globalThis.addEventListener("message", (event) => { - const announcement = - /** @type {Announcement} */ (/** @type {unknown} */ (event)); - const { ns, type } = announcement; +export function listen( + name, + fn, + context = globalThis, +) { + context.addEventListener( + "message", + /** @param {MessageEvent} event */ (event) => { + const announcement = /** @type {Announcement} */ (event.data); + const { ns, type } = announcement; - if (announcement.name !== name) return; - if (ns !== ANNOUNCEMENT || type !== ANNOUNCEMENT) return; + if (announcement.name !== name) return; + if (ns !== ANNOUNCEMENT || type !== ANNOUNCEMENT) return; - fn(announcement.args); - }); + fn(announcement.args); + }, + ); } +//////////////////////////////////////////// // PRIVATE +//////////////////////////////////////////// const ANNOUNCEMENT = "announcement"; diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 99954382d..d968fd7c5 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -422,5 +422,8 @@ function initiateLoading(event) { // REGISTER //////////////////////////////////////////// -customElements.define("de-audio", AudioEngine); -customElements.define("de-audio-item", AudioEngineItem); +export const NAME = "de-audio"; +export const NAME_ITEM = "de-audio-item"; + +customElements.define(NAME, AudioEngine); +customElements.define(NAME_ITEM, AudioEngineItem); diff --git a/src/component/engine/audio/types.d.ts b/src/component/engine/audio/types.d.ts index 91af78007..70f01be6d 100644 --- a/src/component/engine/audio/types.d.ts +++ b/src/component/engine/audio/types.d.ts @@ -1,4 +1,4 @@ -import { Signal } from "@common/signal.d.ts"; +import type { Signal } from "@common/signal.d.ts"; export interface Actions { pause: (_: { audioId: string }) => void; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js new file mode 100644 index 000000000..2b8c81256 --- /dev/null +++ b/src/component/engine/queue/element.js @@ -0,0 +1,70 @@ +import DiffuseElement from "@common/element.js"; +import { signal } from "@common/signal.js"; +import { listen, use } from "@common/worker.js"; + +/** + * @import {Actions, Item, Signals} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {Actions} + * @implements {Signals} + */ +class QueueEngine extends DiffuseElement { + constructor() { + super(); + + // TODO: + // const worker = new SharedWorker(new URL("./worker.js", import.meta.url), { + // type: "module", + // }); + // + // const port = worker.port; + + const worker = new Worker(new URL("./worker.js", import.meta.url), { + type: "module", + }); + + const port = worker; + + listen("future", this.future, port); + listen("now", this.now, port); + listen("past", this.past, port); + + this.add = use("add", port); + + this.load(port); + } + + /** + * @param {Worker} port + */ + async load(port) { + const f = await use("future", port)(); + const n = await use("now", port)(); + const p = await use("past", port)(); + + this.future(f); + this.now(n); + this.past(p); + } + + // SIGNALS + + future = signal(/** @type {Array} */ ([])); + now = signal(/** @type {Item | null} */ (null)); + past = signal(/** @type {Array} */ ([])); +} + +export default QueueEngine; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const NAME = "de-queue"; +customElements.define(NAME, QueueEngine); diff --git a/src/component/engine/queue/types.d.ts b/src/component/engine/queue/types.d.ts new file mode 100644 index 000000000..9a294e6be --- /dev/null +++ b/src/component/engine/queue/types.d.ts @@ -0,0 +1,17 @@ +import type { Track, TrackStats, TrackTags } from "@component/core/types.d.ts"; +import type { Signal } from "@common/signal.d.ts"; + +export interface Actions { + add: (items: Item[]) => void; + // TODO +} + +export type Item = + & Track + & { manualEntry?: boolean }; + +export interface Signals { + future: Signal; + now: Signal; + past: Signal; +} diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 31d76c26e..927c9913c 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -1,42 +1,117 @@ import { announce, define } from "@common/worker.js"; import { effect, signal } from "@common/signal.js"; +import { arrayShuffle } from "@common/index.js"; /** + * @import {Item} from "./types.d.ts" * @import {Track} from "@component/core/types.d.ts" */ +const QUEUE_SIZE = 25; + //////////////////////////////////////////// // STATE //////////////////////////////////////////// -const pools = signal(/** @type {Record} */ ({})); +const future = signal(/** @type {Item[]} */ ([])); +const lake = signal(/** @type {Track[]} */ ([])); +const now = signal(/** @type {Item | null} */ (null)); +const past = signal(/** @type {Item[]} */ ([])); + +effect(() => announce("future", future())); +effect(() => announce("now", now())); +effect(() => announce("past", past())); + +define("future", () => future()); +define("now", () => now()); +define("past", () => past()); //////////////////////////////////////////// // ACTIONS //////////////////////////////////////////// +define("add", add); define("pool", pool); +define("shift", shift); +define("unshift", unshift); + +/** + * @param {Item[]} items + */ +function add(items) { + future([...future(), ...items]); +} /** - * @param {{ groupId: string; tracks: Track[] }} _ + * @param {Track[]} tracks */ -function pool({ groupId, tracks }) { - fill(); +function pool(tracks) { + lake(tracks); - // TODO: - // Create a signal for each group: future, past, now - // Whenever that state changes it should create an annoucement. - // Custom elements on the main thread can then listen for those. + // TODO: If the pool changes, only remove non-existing tracks + // instead of resetting the whole future queue. + // + // What about past queue items? + + future(fill([])); + + // Automatically insert track if there isn't any + if (!now()) return shift(); } -// PRIVATE +function shift() { + const n = now(); + const f = future(); + + now(f[0] ?? null); + + if (n) past([...past(), n]); + future(fill(f.slice(1))); +} -function fill() { +function unshift() { + const p = past(); + if (p.length === 0) return; + + const n = now(); + const [last] = p.splice(p.length - 1, 1); + + now(last ?? null); + if (n) future([n, ...future()]); } -function todo() { - effect(() => { - const data = groupSignal(); - announce("some-name", data); +//////////////////////////////////////////// +// PRIVATE +//////////////////////////////////////////// + +/** + * @param {Item[]} future + * @returns {Item[]} + */ +function fill(future) { + if (future.length >= QUEUE_SIZE) return future; + + /** @type {Track[]} */ + const pool = []; + + let p = new Set(past().map((t) => t.id)); + let reducedPool = pool; + + lake().forEach((track) => { + if (p.has(track.id)) { + p = p.difference(new Set(track.id)); + } else { + pool.push(track); + } }); + + if (reducedPool.length === 0) { + reducedPool = lake(); + } + + const poolSelection = arrayShuffle(reducedPool).slice( + 0, + QUEUE_SIZE - future.length, + ); + return [...future, ...poolSelection]; } diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 3e62098c5..7f37fbf5b 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -2,12 +2,19 @@ + + + - - - From 0f62dff9e600852574547cae5f9062b06cb3d9f4 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 17 Oct 2025 16:08:19 +0200 Subject: [PATCH 024/244] feat: deep diff signals --- deno.jsonc | 4 ++-- deno.lock | 13 +++++-------- src/common/signal.js | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/deno.jsonc b/deno.jsonc index edbb76653..4fb303c92 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,19 +1,19 @@ { "imports": { + "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "@std/fs": "jsr:@std/fs@^1.0.15", - "alien-deepsignals": "npm:alien-deepsignals@^0.2.7", "alien-signals": "npm:alien-signals@^3.0.0", "lume/": "https://deno.land/x/lume@v3.0.11/", "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", "morphdom": "npm:morphdom@^2.7.7", + "xxh32": "npm:xxh32@^2.0.5", // Source "@common/": "./src/common/", "@component/": "./src/component/", - "xxh32": "npm:xxh32@^2.0.5", }, "tasks": { "build": "deno task lume", diff --git a/deno.lock b/deno.lock index 992a8196f..6ae4ef54c 100644 --- a/deno.lock +++ b/deno.lock @@ -2,6 +2,7 @@ "version": "5", "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", + "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", "jsr:@mys/m-rpc@~0.12.2": "0.12.2", "jsr:@mys/worker-fn@^3.2.1": "3.2.1", "jsr:@okikio/transferables@^1.0.2": "1.0.2", @@ -36,7 +37,6 @@ "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", "npm:@types/node@*": "24.2.0", - "npm:alien-deepsignals@~0.2.7": "0.2.7_alien-signals@3.0.0", "npm:alien-signals@3": "3.0.0", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:lightningcss-wasm@1.30.1": "1.30.1", @@ -53,6 +53,9 @@ "@deno/loader@0.3.6": { "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" }, + "@fry69/deep-diff@0.1.10": { + "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" + }, "@mys/m-rpc@0.12.2": { "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", "dependencies": [ @@ -260,12 +263,6 @@ "undici-types" ] }, - "alien-deepsignals@0.2.7_alien-signals@3.0.0": { - "integrity": "sha512-fERozTuMRWzO5fv9xBNk1Zm0ZxUllRPiMckoyQcEcCBZ4mpEiZhVnmmSqn26i5KwYnDcZxjS2LAo/o6QjzoEOQ==", - "dependencies": [ - "alien-signals" - ] - }, "alien-signals@3.0.0": { "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==" }, @@ -777,11 +774,11 @@ }, "workspace": { "dependencies": [ + "jsr:@fry69/deep-diff@~0.1.10", "jsr:@mys/m-rpc@~0.12.2", "jsr:@mys/worker-fn@^3.2.1", "jsr:@okikio/transferables@^1.0.2", "jsr:@std/fs@^1.0.15", - "npm:alien-deepsignals@~0.2.7", "npm:alien-signals@3", "npm:morphdom@^2.7.7", "npm:xxh32@^2.0.5" diff --git a/src/common/signal.js b/src/common/signal.js index df5e51922..cdc00b54f 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -1 +1,27 @@ +import deepDiff from "@fry69/deep-diff"; +import { signal as alienSignal } from "alien-signals"; + export * from "alien-signals"; + +/** + * @import {Signal} from "./signal.d.ts" + */ + +/** + * @template T + * @param {T} initialValue + * @returns {Signal} + */ +export function signal(initialValue) { + const s = alienSignal(initialValue); + const isPrimitive = Object(initialValue) !== initialValue; + if (isPrimitive) return s; + + return /** @type {Signal} */ ((b) => { + const a = s(); + if (b === undefined) return a; + + const diff = deepDiff(a, b); + if (diff) s(b); + }); +} From 97f7816d01f18311f97c9e0d490fef11f24f67b6 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 17 Oct 2025 18:27:08 +0200 Subject: [PATCH 025/244] feat: shared worker --- src/common/worker.js | 91 ++++++++++++++++++++++++--- src/component/engine/queue/element.js | 30 ++------- src/component/engine/queue/worker.js | 40 +++++++----- 3 files changed, 113 insertions(+), 48 deletions(-) diff --git a/src/common/worker.js b/src/common/worker.js index 90e6984cb..453fdd463 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -4,37 +4,79 @@ import { getTransferables } from "@okikio/transferables"; import { xxh32 } from "xxh32"; /** - * @import {NodeWorkerOrNodeMessagePort} from "@mys/m-rpc"; + * @import {NodeWorkerOrNodeMessagePort, WorkerGlobalScope} from "@mys/m-rpc"; * @import {Announcement} from "./worker.d.ts" */ -export const define = defineWorkerFn; -export const use = useWorkerFn; +//////////////////////////////////////////// +// MISC +//////////////////////////////////////////// + +/** + * Manage incoming connections for a shared worker. + * If a regular worker is used instead, it'll just execute the callback immediately. + * + * @template {MessagePort | Worker | WorkerGlobalScope} T + * @param {(context: MessagePort | T) => void} callback + * @param {T} [context] Uses `globalThis` by default. + */ +export function ostiary( + callback, + context = /** @type {T} */ (/** @type {unknown} */ (globalThis)), +) { + if (/** @type {any} */ (context).onmessage === null) { + return callback(context); + } + + context.addEventListener( + "connect", + /** + * @param {any} event + */ + (event) => { + /** @type {MessagePort} */ + const port = event.ports[0]; + port.start(); + + // Initiate setup + callback(port); + }, + ); +} + +//////////////////////////////////////////// +// RAW +//////////////////////////////////////////// /** * @template T * @param {string} name * @param {T} args + * @param {MessagePort | Worker | WorkerGlobalScope} [context] Uses `globalThis` by default. */ -export function announce(name, args) { +export function announce( + name, + args, + context = /** @type {WorkerGlobalScope} */ (globalThis), +) { const transferables = getTransferables(args); - globalThis.postMessage(constructMsg(name, args), { transfer: transferables }); + context.postMessage(constructMsg(name, args), { transfer: transferables }); } /** * @template T * @param {string} name * @param {(args: T) => void} fn - * @param {Worker | NodeWorkerOrNodeMessagePort} context + * @param {MessagePort | Worker | WorkerGlobalScope} [context] */ export function listen( name, fn, - context = globalThis, + context = /** @type {WorkerGlobalScope} */ (globalThis), ) { context.addEventListener( "message", - /** @param {MessageEvent} event */ (event) => { + /** @param {any} event */ (event) => { const announcement = /** @type {Announcement} */ (event.data); const { ns, type } = announcement; @@ -47,7 +89,38 @@ export function listen( } //////////////////////////////////////////// -// PRIVATE +// RPC +//////////////////////////////////////////// + +/** + * @template {(...args: any[]) => any} Fn + * @param {string} name + * @param {Fn} fn + * @param {MessagePort | Worker | WorkerGlobalScope} [context] Uses `globalThis` by default. + */ +export function define( + name, + fn, + context = /** @type {WorkerGlobalScope} */ (globalThis), +) { + return defineWorkerFn(name, fn, { + port: /** @type {any} */ (context), + }); +} + +/** + * @param {string} name + * @param {MessagePort | Worker | WorkerGlobalScope} [context] Uses `globalThis` by default. + */ +export function use( + name, + context = /** @type {WorkerGlobalScope} */ (globalThis), +) { + return useWorkerFn(name, /** @type {any} */ (context)); +} + +//////////////////////////////////////////// +// ⛔️ //////////////////////////////////////////// const ANNOUNCEMENT = "announcement"; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 2b8c81256..1cbdb6b6c 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -18,39 +18,21 @@ class QueueEngine extends DiffuseElement { constructor() { super(); - // TODO: - // const worker = new SharedWorker(new URL("./worker.js", import.meta.url), { - // type: "module", - // }); - // - // const port = worker.port; - - const worker = new Worker(new URL("./worker.js", import.meta.url), { + // Setup shared worker + const worker = new SharedWorker(new URL("./worker.js", import.meta.url), { type: "module", }); - const port = worker; + const port = worker.port; + port.start(); + // Sync data with worker listen("future", this.future, port); listen("now", this.now, port); listen("past", this.past, port); + // Worker proxy this.add = use("add", port); - - this.load(port); - } - - /** - * @param {Worker} port - */ - async load(port) { - const f = await use("future", port)(); - const n = await use("now", port)(); - const p = await use("past", port)(); - - this.future(f); - this.now(n); - this.past(p); } // SIGNALS diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 927c9913c..d2cbc8a8b 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -1,4 +1,4 @@ -import { announce, define } from "@common/worker.js"; +import { announce, define, ostiary } from "@common/worker.js"; import { effect, signal } from "@common/signal.js"; import { arrayShuffle } from "@common/index.js"; @@ -18,23 +18,10 @@ const lake = signal(/** @type {Track[]} */ ([])); const now = signal(/** @type {Item | null} */ (null)); const past = signal(/** @type {Item[]} */ ([])); -effect(() => announce("future", future())); -effect(() => announce("now", now())); -effect(() => announce("past", past())); - -define("future", () => future()); -define("now", () => now()); -define("past", () => past()); - //////////////////////////////////////////// // ACTIONS //////////////////////////////////////////// -define("add", add); -define("pool", pool); -define("shift", shift); -define("unshift", unshift); - /** * @param {Item[]} items */ @@ -81,7 +68,30 @@ function unshift() { } //////////////////////////////////////////// -// PRIVATE +// ⚡️ +//////////////////////////////////////////// + +ostiary((port) => { + // Setup RPC + + define("future", () => future(), port); + define("now", () => now(), port); + define("past", () => past(), port); + + define("add", add, port); + define("pool", pool, port); + define("shift", shift, port); + define("unshift", unshift, port); + + // Communicate + + effect(() => announce("future", future(), port)); + effect(() => announce("now", now(), port)); + effect(() => announce("past", past(), port)); +}); + +//////////////////////////////////////////// +// ⛔️ //////////////////////////////////////////// /** From 9e0340bc94e92785fec09f108585dbd6be0e4ed7 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 18 Oct 2025 16:44:20 +0200 Subject: [PATCH 026/244] feat: index page --- _backup/components/Applet.astro | 15 - _backup/components/List.astro | 17 - _backup/content.config.ts | 8 - _backup/env.d.ts | 2 - _backup/layouts/applet-pico-ui.astro | 24 - _backup/layouts/applet.astro | 17 - _backup/pages/[...manifest].json.ts | 19 - _backup/pages/engine/audio/_applet.astro | 360 ------------- _backup/pages/engine/audio/_manifest.json | 131 ----- _backup/pages/engine/audio/index.astro | 9 - _backup/pages/engine/queue/_applet.astro | 59 --- _backup/pages/engine/queue/_manifest.json | 47 -- _backup/pages/engine/queue/index.astro | 9 - _backup/pages/engine/queue/types.d.ts | 1 - _backup/pages/index.astro | 265 ---------- _backup/pages/test/cross-origin/blur.astro | 31 -- _backup/pages/test/cross-origin/output.astro | 15 - _backup/pages/theme/pilot/audio/_applet.astro | 147 ------ .../pages/theme/pilot/audio/_manifest.json | 21 - _backup/pages/theme/pilot/audio/index.astro | 9 - _backup/pages/theme/pilot/audio/types.d.ts | 4 - _backup/pages/theme/pilot/index.astro | 11 - _backup/scripts/applet/common.ts | 496 ------------------ _backup/scripts/engine/queue/types.d.ts | 11 - _backup/scripts/engine/queue/worker.ts | 147 ------ _backup/scripts/theme/blur/index.ts | 46 -- _backup/scripts/theme/pilot/index.ts | 90 ---- _config.ts | 6 + src/_components/element.vto | 9 + src/_components/list.vto | 11 + .../_includes/layouts/diffuse.vto | 12 +- .../favicons/android-chrome-192x192.png | Bin .../favicons/android-chrome-512x512.png | Bin {public => src}/favicons/apple-touch-icon.png | Bin {public => src}/favicons/browserconfig.xml | 0 {public => src}/favicons/favicon-16x16.png | Bin {public => src}/favicons/favicon-32x32.png | Bin {public => src}/favicons/favicon.ico | Bin {public => src}/favicons/mstile-150x150.png | Bin .../favicons/safari-pinned-tab.svg | 0 .../fonts/InterVariable-Italic.woff2 | Bin {public => src}/fonts/InterVariable.woff2 | Bin {public => src}/images/background/1.jpg | Bin {public => src}/images/background/10.jpg | Bin {public => src}/images/background/11.jpg | Bin {public => src}/images/background/12.jpg | Bin {public => src}/images/background/13.jpg | Bin {public => src}/images/background/14.jpg | Bin {public => src}/images/background/15.jpg | Bin {public => src}/images/background/16.jpg | Bin {public => src}/images/background/17.jpg | Bin {public => src}/images/background/18.jpg | Bin {public => src}/images/background/19.jpg | Bin {public => src}/images/background/2.jpg | Bin {public => src}/images/background/20.jpg | Bin {public => src}/images/background/21.jpg | Bin {public => src}/images/background/22.jpg | Bin {public => src}/images/background/23.jpg | Bin {public => src}/images/background/24.jpg | Bin {public => src}/images/background/25.jpg | Bin {public => src}/images/background/26.jpg | Bin {public => src}/images/background/27.jpg | Bin {public => src}/images/background/28.jpg | Bin {public => src}/images/background/29.jpg | Bin {public => src}/images/background/3.jpg | Bin {public => src}/images/background/30.jpg | Bin {public => src}/images/background/4.jpg | Bin {public => src}/images/background/5.jpg | Bin {public => src}/images/background/6.jpg | Bin {public => src}/images/background/7.jpg | Bin {public => src}/images/background/8.jpg | Bin {public => src}/images/background/9.jpg | Bin .../images/background/thumbnails/1.jpg | Bin .../images/background/thumbnails/10.jpg | Bin .../images/background/thumbnails/11.jpg | Bin .../images/background/thumbnails/12.jpg | Bin .../images/background/thumbnails/13.jpg | Bin .../images/background/thumbnails/14.jpg | Bin .../images/background/thumbnails/15.jpg | Bin .../images/background/thumbnails/16.jpg | Bin .../images/background/thumbnails/17.jpg | Bin .../images/background/thumbnails/18.jpg | Bin .../images/background/thumbnails/19.jpg | Bin .../images/background/thumbnails/2.jpg | Bin .../images/background/thumbnails/20.jpg | Bin .../images/background/thumbnails/21.jpg | Bin .../images/background/thumbnails/22.jpg | Bin .../images/background/thumbnails/23.jpg | Bin .../images/background/thumbnails/24.jpg | Bin .../images/background/thumbnails/25.jpg | Bin .../images/background/thumbnails/26.jpg | Bin .../images/background/thumbnails/27.jpg | Bin .../images/background/thumbnails/28.jpg | Bin .../images/background/thumbnails/29.jpg | Bin .../images/background/thumbnails/3.jpg | Bin .../images/background/thumbnails/30.jpg | Bin .../images/background/thumbnails/4.jpg | Bin .../images/background/thumbnails/5.jpg | Bin .../images/background/thumbnails/6.jpg | Bin .../images/background/thumbnails/7.jpg | Bin .../images/background/thumbnails/8.jpg | Bin .../images/background/thumbnails/9.jpg | Bin {public => src}/images/diffuse-current.svg | 0 {public => src}/images/diffuse-dark.svg | 0 {public => src}/images/diffuse-grey.svg | 0 {public => src}/images/diffuse-light.svg | 0 {public => src}/images/diffuse__icon-dark.svg | 0 {public => src}/images/diffuse__icon-grey.svg | 0 .../images/diffuse__icon-light.svg | 0 {public => src}/images/icon-square-ws.png | Bin {public => src}/images/icon-square.png | Bin {public => src}/images/icon.png | Bin .../icons/windows_98/cd_audio_cd_a-4.png | Bin .../windows_98/directory_open_cool-0.png | Bin .../directory_open_file_mydocs_2k-2.png | Bin src/index.vto | 116 ++++ src/styles/applet/common.css | 5 - src/styles/fonts.css | 4 +- src/styles/page/index.css | 7 +- src/styles/theme/pilot/index.css | 78 --- src/styles/theme/pilot/variables.css | 26 - 121 files changed, 156 insertions(+), 2129 deletions(-) delete mode 100644 _backup/components/Applet.astro delete mode 100644 _backup/components/List.astro delete mode 100644 _backup/content.config.ts delete mode 100644 _backup/env.d.ts delete mode 100644 _backup/layouts/applet-pico-ui.astro delete mode 100644 _backup/layouts/applet.astro delete mode 100644 _backup/pages/[...manifest].json.ts delete mode 100644 _backup/pages/engine/audio/_applet.astro delete mode 100644 _backup/pages/engine/audio/_manifest.json delete mode 100644 _backup/pages/engine/audio/index.astro delete mode 100644 _backup/pages/engine/queue/_applet.astro delete mode 100644 _backup/pages/engine/queue/_manifest.json delete mode 100644 _backup/pages/engine/queue/index.astro delete mode 100644 _backup/pages/engine/queue/types.d.ts delete mode 100644 _backup/pages/index.astro delete mode 100644 _backup/pages/test/cross-origin/blur.astro delete mode 100644 _backup/pages/test/cross-origin/output.astro delete mode 100644 _backup/pages/theme/pilot/audio/_applet.astro delete mode 100644 _backup/pages/theme/pilot/audio/_manifest.json delete mode 100644 _backup/pages/theme/pilot/audio/index.astro delete mode 100644 _backup/pages/theme/pilot/audio/types.d.ts delete mode 100644 _backup/pages/theme/pilot/index.astro delete mode 100644 _backup/scripts/applet/common.ts delete mode 100644 _backup/scripts/engine/queue/types.d.ts delete mode 100644 _backup/scripts/engine/queue/worker.ts delete mode 100644 _backup/scripts/theme/blur/index.ts delete mode 100644 _backup/scripts/theme/pilot/index.ts create mode 100644 src/_components/element.vto create mode 100644 src/_components/list.vto rename _backup/layouts/page.astro => src/_includes/layouts/diffuse.vto (52%) rename {public => src}/favicons/android-chrome-192x192.png (100%) rename {public => src}/favicons/android-chrome-512x512.png (100%) rename {public => src}/favicons/apple-touch-icon.png (100%) rename {public => src}/favicons/browserconfig.xml (100%) rename {public => src}/favicons/favicon-16x16.png (100%) rename {public => src}/favicons/favicon-32x32.png (100%) rename {public => src}/favicons/favicon.ico (100%) rename {public => src}/favicons/mstile-150x150.png (100%) rename {public => src}/favicons/safari-pinned-tab.svg (100%) rename {public => src}/fonts/InterVariable-Italic.woff2 (100%) rename {public => src}/fonts/InterVariable.woff2 (100%) rename {public => src}/images/background/1.jpg (100%) rename {public => src}/images/background/10.jpg (100%) rename {public => src}/images/background/11.jpg (100%) rename {public => src}/images/background/12.jpg (100%) rename {public => src}/images/background/13.jpg (100%) rename {public => src}/images/background/14.jpg (100%) rename {public => src}/images/background/15.jpg (100%) rename {public => src}/images/background/16.jpg (100%) rename {public => src}/images/background/17.jpg (100%) rename {public => src}/images/background/18.jpg (100%) rename {public => src}/images/background/19.jpg (100%) rename {public => src}/images/background/2.jpg (100%) rename {public => src}/images/background/20.jpg (100%) rename {public => src}/images/background/21.jpg (100%) rename {public => src}/images/background/22.jpg (100%) rename {public => src}/images/background/23.jpg (100%) rename {public => src}/images/background/24.jpg (100%) rename {public => src}/images/background/25.jpg (100%) rename {public => src}/images/background/26.jpg (100%) rename {public => src}/images/background/27.jpg (100%) rename {public => src}/images/background/28.jpg (100%) rename {public => src}/images/background/29.jpg (100%) rename {public => src}/images/background/3.jpg (100%) rename {public => src}/images/background/30.jpg (100%) rename {public => src}/images/background/4.jpg (100%) rename {public => src}/images/background/5.jpg (100%) rename {public => src}/images/background/6.jpg (100%) rename {public => src}/images/background/7.jpg (100%) rename {public => src}/images/background/8.jpg (100%) rename {public => src}/images/background/9.jpg (100%) rename {public => src}/images/background/thumbnails/1.jpg (100%) rename {public => src}/images/background/thumbnails/10.jpg (100%) rename {public => src}/images/background/thumbnails/11.jpg (100%) rename {public => src}/images/background/thumbnails/12.jpg (100%) rename {public => src}/images/background/thumbnails/13.jpg (100%) rename {public => src}/images/background/thumbnails/14.jpg (100%) rename {public => src}/images/background/thumbnails/15.jpg (100%) rename {public => src}/images/background/thumbnails/16.jpg (100%) rename {public => src}/images/background/thumbnails/17.jpg (100%) rename {public => src}/images/background/thumbnails/18.jpg (100%) rename {public => src}/images/background/thumbnails/19.jpg (100%) rename {public => src}/images/background/thumbnails/2.jpg (100%) rename {public => src}/images/background/thumbnails/20.jpg (100%) rename {public => src}/images/background/thumbnails/21.jpg (100%) rename {public => src}/images/background/thumbnails/22.jpg (100%) rename {public => src}/images/background/thumbnails/23.jpg (100%) rename {public => src}/images/background/thumbnails/24.jpg (100%) rename {public => src}/images/background/thumbnails/25.jpg (100%) rename {public => src}/images/background/thumbnails/26.jpg (100%) rename {public => src}/images/background/thumbnails/27.jpg (100%) rename {public => src}/images/background/thumbnails/28.jpg (100%) rename {public => src}/images/background/thumbnails/29.jpg (100%) rename {public => src}/images/background/thumbnails/3.jpg (100%) rename {public => src}/images/background/thumbnails/30.jpg (100%) rename {public => src}/images/background/thumbnails/4.jpg (100%) rename {public => src}/images/background/thumbnails/5.jpg (100%) rename {public => src}/images/background/thumbnails/6.jpg (100%) rename {public => src}/images/background/thumbnails/7.jpg (100%) rename {public => src}/images/background/thumbnails/8.jpg (100%) rename {public => src}/images/background/thumbnails/9.jpg (100%) rename {public => src}/images/diffuse-current.svg (100%) rename {public => src}/images/diffuse-dark.svg (100%) rename {public => src}/images/diffuse-grey.svg (100%) rename {public => src}/images/diffuse-light.svg (100%) rename {public => src}/images/diffuse__icon-dark.svg (100%) rename {public => src}/images/diffuse__icon-grey.svg (100%) rename {public => src}/images/diffuse__icon-light.svg (100%) rename {public => src}/images/icon-square-ws.png (100%) rename {public => src}/images/icon-square.png (100%) rename {public => src}/images/icon.png (100%) rename {public => src}/images/icons/windows_98/cd_audio_cd_a-4.png (100%) rename {public => src}/images/icons/windows_98/directory_open_cool-0.png (100%) rename {public => src}/images/icons/windows_98/directory_open_file_mydocs_2k-2.png (100%) create mode 100644 src/index.vto delete mode 100644 src/styles/applet/common.css delete mode 100644 src/styles/theme/pilot/index.css delete mode 100644 src/styles/theme/pilot/variables.css diff --git a/_backup/components/Applet.astro b/_backup/components/Applet.astro deleted file mode 100644 index 5a6bdac8f..000000000 --- a/_backup/components/Applet.astro +++ /dev/null @@ -1,15 +0,0 @@ ---- -import List from "../components/List.astro"; - -const { list, title } = Astro.props; ---- - -
    -

    {title}

    - -

    - -

    - - -
    diff --git a/_backup/components/List.astro b/_backup/components/List.astro deleted file mode 100644 index 478b20419..000000000 --- a/_backup/components/List.astro +++ /dev/null @@ -1,17 +0,0 @@ ---- -const { items } = Astro.props; ---- - -
      - { - items.map((item: { title: string; url: string }) => ( -
    • - {item.title.startsWith("(TODO) ") ? ( - {item.title} - ) : ( - {item.title} - )} -
    • - )) - } -
    diff --git a/_backup/content.config.ts b/_backup/content.config.ts deleted file mode 100644 index 6cf35bee1..000000000 --- a/_backup/content.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineCollection } from "astro:content"; -import { glob } from "astro/loaders"; - -const manifests = defineCollection({ - loader: glob({ pattern: "**/_manifest.json", base: "./src/pages" }), -}); - -export const collections = { manifests }; diff --git a/_backup/env.d.ts b/_backup/env.d.ts deleted file mode 100644 index 5b0a7e0c5..000000000 --- a/_backup/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// \ No newline at end of file diff --git a/_backup/layouts/applet-pico-ui.astro b/_backup/layouts/applet-pico-ui.astro deleted file mode 100644 index a1ddec0b7..000000000 --- a/_backup/layouts/applet-pico-ui.astro +++ /dev/null @@ -1,24 +0,0 @@ ---- -import "@styles/reset.css"; -import "@styles/variables.css"; -import "@styles/fonts.css"; -import "@styles/icons/iconoir.css"; -import "@styles/pico.scss"; -import "@styles/applet/common.css"; - -const { title } = Astro.props; ---- - - - - - - - - - {title} - - - - - diff --git a/_backup/layouts/applet.astro b/_backup/layouts/applet.astro deleted file mode 100644 index e7016c1e3..000000000 --- a/_backup/layouts/applet.astro +++ /dev/null @@ -1,17 +0,0 @@ ---- -const { title } = Astro.props; ---- - - - - - - - - - {title} - - - - - diff --git a/_backup/pages/[...manifest].json.ts b/_backup/pages/[...manifest].json.ts deleted file mode 100644 index 934aedf95..000000000 --- a/_backup/pages/[...manifest].json.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { APIRoute } from "astro"; -import { getCollection } from "astro:content"; - -// API Route -export const GET: APIRoute = ({ params, props, request }) => { - return new Response(JSON.stringify(props.manifest)); -}; - -// Generate static paths -export async function getStaticPaths() { - const manifests = await getCollection("manifests"); - - return manifests.map((manifest) => { - return { - params: { manifest: manifest.id.replace("/_manifest", "/manifest") }, - props: { manifest: manifest.data }, - }; - }); -} diff --git a/_backup/pages/engine/audio/_applet.astro b/_backup/pages/engine/audio/_applet.astro deleted file mode 100644 index 481585cae..000000000 --- a/_backup/pages/engine/audio/_applet.astro +++ /dev/null @@ -1,360 +0,0 @@ - diff --git a/_backup/pages/engine/audio/_manifest.json b/_backup/pages/engine/audio/_manifest.json deleted file mode 100644 index 200987dd0..000000000 --- a/_backup/pages/engine/audio/_manifest.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "name": "diffuse/engine/audio", - "title": "Diffuse Audio", - "entrypoint": "index.html", - "actions": { - "pause": { - "title": "Pause", - "description": "Pause audio", - "params_schema": { - "type": "object", - "properties": { - "audioId": { - "type": "string" - } - }, - "required": ["audioId"] - } - }, - "play": { - "title": "Play", - "description": "Play audio", - "params_schema": { - "type": "object", - "properties": { - "audioId": { - "type": "string" - }, - "volume": { - "type": "number", - "default": 0.5 - } - }, - "required": ["audioId"] - } - }, - "render": { - "title": "Render", - "description": "Determine the active set of audio elements.", - "params_schema": { - "type": "object", - "properties": { - "audio": { - "type": "array", - "description": "The audio items we want to render. These represent the audio elements that are in the DOM.", - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "isPreload": { "type": "boolean" }, - "mimeType": { "type": "string" }, - "progress": { "type": "number" }, - "url": { "type": "string" } - }, - "required": ["id", "url"] - } - }, - "play": { - "type": "object", - "description": "Pass in this object to immediately start playing one of the rendered audio items.", - "properties": { - "audioId": { - "type": "string", - "description": "The id of the rendered audio item we want to play." - }, - "volume": { - "type": "number", - "default": 0.5, - "description": "A number equal to, or between, 0 and 1, that determines how loud the audio should play." - } - }, - "required": ["audioId"] - } - }, - "required": ["audio"] - } - }, - "reload": { - "title": "Reload", - "description": "Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.", - "params_schema": { - "type": "object", - "properties": { - "audioId": { - "type": "string" - }, - "play": { - "type": "boolean" - }, - "progress": { - "type": "number" - } - }, - "required": ["audioId", "percentage"] - } - }, - "seek": { - "title": "Seek", - "description": "Seek audio to a given position", - "params_schema": { - "type": "object", - "properties": { - "audioId": { - "type": "string" - }, - "percentage": { - "type": "number", - "description": "A number between 0 and 1 that determines the new current position in the audio" - } - }, - "required": ["audioId", "percentage"] - } - }, - "volume": { - "title": "Volume", - "description": "Set the volume of all audio and the default value, or a specific audio node.", - "params_schema": { - "type": "object", - "properties": { - "audioId": { - "type": "string" - }, - "volume": { - "type": "number", - "description": "A number between 0 and 1 that determines the new volume of all audio elements" - } - }, - "required": ["volume"] - } - } - } -} diff --git a/_backup/pages/engine/audio/index.astro b/_backup/pages/engine/audio/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/engine/audio/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/engine/queue/_applet.astro b/_backup/pages/engine/queue/_applet.astro deleted file mode 100644 index cac59300a..000000000 --- a/_backup/pages/engine/queue/_applet.astro +++ /dev/null @@ -1,59 +0,0 @@ - diff --git a/_backup/pages/engine/queue/_manifest.json b/_backup/pages/engine/queue/_manifest.json deleted file mode 100644 index 8c64b832f..000000000 --- a/_backup/pages/engine/queue/_manifest.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "diffuse/engine/queue", - "title": "Diffuse Queue", - "entrypoint": "index.html", - "actions": { - "add": { - "title": "Add", - "description": "Add tracks to the queue.", - "params_schema": { - "type": "array", - "description": "Array of tracks", - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "uri": { "type": "string" } - }, - "required": ["id", "uri"] - } - } - }, - "pool": { - "title": "Pool", - "description": "Set the queue pool.", - "params_schema": { - "type": "array", - "description": "Array of tracks", - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "uri": { "type": "string" } - }, - "required": ["id", "uri"] - } - } - }, - "shift": { - "title": "Shift", - "description": "Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list." - }, - "unshift": { - "title": "Unshift", - "description": "Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list." - } - } -} diff --git a/_backup/pages/engine/queue/index.astro b/_backup/pages/engine/queue/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/engine/queue/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/engine/queue/types.d.ts b/_backup/pages/engine/queue/types.d.ts deleted file mode 100644 index fddaddd5a..000000000 --- a/_backup/pages/engine/queue/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "@scripts/engine/queue/types.d.ts"; diff --git a/_backup/pages/index.astro b/_backup/pages/index.astro deleted file mode 100644 index a000c85f0..000000000 --- a/_backup/pages/index.astro +++ /dev/null @@ -1,265 +0,0 @@ ---- -import Applet from "../components/Applet.astro"; -import List from "../components/List.astro"; -import Page from "../layouts/page.astro"; - -import "../styles/page/index.css"; - -// Types -type Ref = { - url: string; - title: string; -}; - -// Links -const WEB_APPLETS_HREF = "https://unternet.co/docs/web-applets/introduction"; - -// Themes -const themes = [ - { url: "theme/blur/", title: "(WIP) Blur" }, - { url: "theme/pilot/", title: "(WIP) Pilot" }, - { url: "theme/webamp/", title: "Webamp" }, -]; - -// Abstractions -// TODO - -// Constituents -const constituents = [ - { url: "constituent/blur/artwork-controller/", title: "Blur ⦚ Artwork Controller" }, - { url: "constituent/blur/browser/", title: "(WIP) Blur ⦚ Browser" }, -]; - -// Applets -const configurators = [ - { url: "configurator/input/", title: "Input" }, - { url: "configurator/output/", title: "Output" }, -]; - -const engines = [ - { url: "engine/audio/", title: "Audio" }, - { url: "engine/queue/", title: "Queue" }, -]; - -const input = [ - { url: "input/native-fs/", title: "Native File System" }, - { url: "input/opensubsonic/", title: "Opensubsonic" }, - { url: "input/s3/", title: "S3-Compatible API" }, -]; - -const orchestrators = [ - { url: "orchestrator/queue-audio/", title: "Queue ⭤ Audio" }, - { url: "orchestrator/queue-tracks/", title: "Queue ⭤ Tracks" }, - { url: "orchestrator/process-tracks/", title: "Process inputs into tracks" }, -]; - -const output = [ - { url: "output/indexed-db/", title: "IndexedDB" }, - { url: "output/native-fs/", title: "Native File System" }, - { url: "output/storacha-automerge/", title: "(WIP) Storacha Storage + Automerge CRDT" }, - { url: "output/todo/", title: "(TODO) Keyhive/Beelay" }, - { url: "output/todo/", title: "(TODO) Dialog DB" }, -]; - -const processors = [ - { url: "processor/artwork/", title: "Artwork retrieval" }, - { url: "processor/metadata/", title: "Metadata retrieval" }, - { url: "processor/search/", title: "Search" }, -]; - -// Demos -const demos = [{ url: "demo/s3-tracks/", title: "Add sample S3 music" }]; ---- - - -
    -

    - - Diffuse - - -

    -

    - Diffuse is a collection of web applets that make it possible to - listen to audio from various sources on your devices and the web, and to create the ideal digital - listening experience for you. -

    -

    These applets can be used in various ways. The main ways so far are through:

    -
      -
    • Themes, a traditional browser (web application) approach.
    • -
    • Abstractions, for non-browser systems.
    • -
    • - Using various parts of themes and abstractions separately in different - browser tabs. -
    • -
    -

    - ⚠️ Heavily experimental -

    -
    -
    -
    - -
    -

    Themes

    - -

    - Themes are “applet compositions” and provide a traditional browser web application way of - using them. Each theme is unique, not just a skin (eg. not like winamp skins). -

    - -

    - For example, most themes here will limit the currently playing audio tracks to one item, - but you might as well create a DJ theme that can play multiple items at the same time. -

    - - -
    - - -
    -

    Abstractions

    - -

    - These are applet configurations that enable certain use cases outside the traditional web - app experience. Just like themes, these include various assumptions of how certain parts - of the system should interact. -

    - -

    TODO: Enable intelligent user (ai) agent use-case.

    - - -
    -
    - - -
    -

    Constituents

    - -

    - Constituents are UI applets that are used in themes and abstractions. These are organised - per theme or abstraction, but that doesn't mean they are restricted to that theme or - abstraction, you can mix and match as you like. You can even use them on their own. -

    - -

    - Some themes may be constructed out of various applets that are not listed here. The reason - for that is those applets cannot be used solely on their own, they require an external - context to coordinate them. -

    - -

    - There's tradeoffs to both approaches. A particular tradeoff to keep in mind for constituents - is that they'll have nested dependencies. So when overriding applets dependencies, the - overrides need to be passed down the tree. -

    - - -
    - - -
    -

    Applets

    - -

    - Applets are web applets, the components of the system. These - are then recombined into an entire music player experience, or whatever you want to build. -

    - -
    - - Applets that serve as an intermediate in order to make a particular kind of applet - configurable. In other words, these allow for an applet to be swapped out with another - that takes the same, or a subset of the actions and data output. - - - - Applets with each a singular purpose and don't have any UI. There are specialised UI and - orchestrators applets that control these. - - - - Inputs are sources of audio tracks. Each track is an entry in the list of possible items - to play. These can be files or streams, static or dynamic. - - - - These too are applet compositions. However, unlike themes, these are purely logical. - Mostly exist in order to construct sensible defaults to use across themes and - abstractions. - - - - Output is application-derived data such as playlists. These applets can receive such data - and keep it around. - - - - These applets work with the tracks generated by the input applets to add more data to - them, or process them in some other way. - - - Additional applets, such as scrobblers. -
    -
    - - -
    -

    Demos

    - -

    Just some utility web pages to help demo the system.

    - - -
    - - -
    -

    Cross-Origin

    - -

    - You can use applets from different origins. However, one important caveat to remember is state partitioning. This causes local state (eg. IndexedDB) to be different when the applet is used on a - different domain versus using the applet directly. There might be ways around state - partitioning, but I haven't found a user-friendly way of doing so. -

    - -

    - That said, there isn't that much local state that needs to be shared cross origin. Much of it is associated with the input applets and that configuration is saved in your chosen - output applet. So essentially, state partitioning behaves as if the two domains are on different - devices; so using an output applet to sync data between devices works nicely. It does mean you - have to somehow configure the same output applet in both contexts. -

    -
    - - -
    -

    Build your own

    - -

    - Ideally you'd be able to mix and match these applets to build your own music player. There - are still a few todos and unknowns here: -

    - -
      -
    • - This is currently using a fork of the web applets SDK that adds a few features (waiting on - PRs). Meaning that it won't be as easy to write your own applets in the same way as done - here. -
    • -
    • - I wrote some custom code on top of the web applets SDK that makes the applets talk to each - other over a broadcast channel. This should ideally become a JS library or added to the - web applets SDK. Though you can just copy-paste from the Diffuse repo if you want (it's - not that much code). -
    • -
    • ... Probably a bunch of stuff I'm forgetting, teaching materials, etc ...
    • -
    -
    -
    -
    diff --git a/_backup/pages/test/cross-origin/blur.astro b/_backup/pages/test/cross-origin/blur.astro deleted file mode 100644 index eda7ec950..000000000 --- a/_backup/pages/test/cross-origin/blur.astro +++ /dev/null @@ -1,31 +0,0 @@ ---- -import Page from "../../../layouts/page.astro"; -import "@styles/theme/blur/index.css"; ---- - - - - -
    -
    diff --git a/_backup/pages/test/cross-origin/output.astro b/_backup/pages/test/cross-origin/output.astro deleted file mode 100644 index b1b62f9db..000000000 --- a/_backup/pages/test/cross-origin/output.astro +++ /dev/null @@ -1,15 +0,0 @@ ---- -import Page from "../../../layouts/page.astro"; ---- - - - - - - diff --git a/_backup/pages/theme/pilot/audio/_applet.astro b/_backup/pages/theme/pilot/audio/_applet.astro deleted file mode 100644 index 90574c885..000000000 --- a/_backup/pages/theme/pilot/audio/_applet.astro +++ /dev/null @@ -1,147 +0,0 @@ ---- -import "@styles/reset.css"; -import "@styles/variables.css"; -import "@styles/fonts.css"; -import "@styles/icons/iconoir.css"; -import "@styles/theme/pilot/variables.css"; ---- - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - - - - diff --git a/_backup/pages/theme/pilot/audio/_manifest.json b/_backup/pages/theme/pilot/audio/_manifest.json deleted file mode 100644 index 70cb090da..000000000 --- a/_backup/pages/theme/pilot/audio/_manifest.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "diffuse/constituent/pilot/audio", - "title": "", - "entrypoint": "index.html", - "actions": { - "modifyIsPlaying": { - "title": "Set is-playing state", - "description": "Indicate if audio is playing or not.", - "params_schema": { - "type": "boolean" - } - }, - "modifyProgress": { - "title": "Set progress", - "description": "Indicate how far the audio has progressed.", - "params_schema": { - "type": "number" - } - } - } -} diff --git a/_backup/pages/theme/pilot/audio/index.astro b/_backup/pages/theme/pilot/audio/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/theme/pilot/audio/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/theme/pilot/audio/types.d.ts b/_backup/pages/theme/pilot/audio/types.d.ts deleted file mode 100644 index abb4cae96..000000000 --- a/_backup/pages/theme/pilot/audio/types.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface State { - isPlaying: boolean; - seekPosition?: number; -} diff --git a/_backup/pages/theme/pilot/index.astro b/_backup/pages/theme/pilot/index.astro deleted file mode 100644 index 157211b27..000000000 --- a/_backup/pages/theme/pilot/index.astro +++ /dev/null @@ -1,11 +0,0 @@ ---- -import Page from "../../../layouts/page.astro"; -import "@styles/theme/pilot/index.css"; ---- - - - - - -
    -
    diff --git a/_backup/scripts/applet/common.ts b/_backup/scripts/applet/common.ts deleted file mode 100644 index 838bda201..000000000 --- a/_backup/scripts/applet/common.ts +++ /dev/null @@ -1,496 +0,0 @@ -import type { Applet, AppletEvent, AppletScope } from "@web-applets/sdk"; -import * as Comlink from "comlink"; - -import { applets } from "@web-applets/sdk"; -import QS from "query-string"; - -import { type ElementConfigurator, h as hyperscript } from "@scripts/spellcaster/hyperscript.js"; -import { isSignal, type Signal, signal } from "@scripts/spellcaster"; - -import type { ResolvedUri } from "@applets/core/types"; -import { transfer, type WorkerTasks } from "@scripts/common"; - -//////////////////////////////////////////// -// 🪟 Applet connecting -//////////////////////////////////////////// -export async function applet( - src: string, - opts: { - addSlashSuffix?: boolean; - container?: HTMLElement | Element; - context?: Window; - frameId?: string; - groupId?: string; - newInstance?: boolean; - setHeight?: boolean; - } = {}, -): Promise> { - src = `${src}${ - src.endsWith("/") - ? "" - : opts.addSlashSuffix === undefined || opts.addSlashSuffix === true - ? "/" - : "" - }`; - - let query: undefined | Record; - query = { groupId: opts.groupId || "main" }; - - if (query) { - src = QS.stringifyUrl({ url: src, query }); - } - - let context = opts.newInstance ? self : opts.context || self.top || self.parent; - - let existingFrame: HTMLIFrameElement | null; - - // TODO: Ideally we do some cross-origin detection here - try { - existingFrame = opts.newInstance ? null : context.document.querySelector(`[src="${src}"]`); - } catch (err) { - existingFrame = null; - context = self; - } - - let frame; - - if (existingFrame) { - frame = existingFrame; - } else { - frame = document.createElement("iframe"); - frame.loading = "eager"; - frame.src = src; - if (opts.frameId) frame.id = opts.frameId; - - if (opts.container) { - opts.container.appendChild(frame); - } else { - context.document.body.appendChild(frame); - } - } - - if (frame.contentWindow === null) { - throw new Error("iframe does not have a contentWindow"); - } - - const applet = await applets.connect(frame.contentWindow, { context }).catch((err) => { - console.error("Error connecting to " + src, err); - throw err; - }); - - if (opts.setHeight) { - applet.onresize = () => { - frame.height = `${applet.height}px`; - frame.classList.add("has-loaded"); - }; - } else { - if (frame.contentDocument?.readyState === "complete") { - frame.classList.add("has-loaded"); - } - - frame.addEventListener("load", () => { - frame.classList.add("has-loaded"); - }); - } - - return applet; -} - -export function tunnel( - worker: Comlink.Remote, - connections: Record>, -) { - Object.entries(connections).forEach(([scheme, promise]) => { - Promise.resolve(promise).then((conn) => { - return worker._manage(scheme, transfer(conn.ports.worker)); - }); - }); -} - -//////////////////////////////////////////// -// 🪟 Applet registration -//////////////////////////////////////////// -export type DiffuseApplet = { - groupId: string | undefined; - scope: AppletScope; - - settled(): Promise; - - get instanceId(): string; - set data(data: T); - - codec: Codec; - unloadHandler?: () => void; - - isMainInstance(): boolean | null; - setActionHandler(actionId: string, actionHandler: H): void; -}; - -export type Codec = { - decode(data: any): T; - encode(data: T): any; -}; - -export function lookupGroupId() { - const url = new URL(location.href); - return url.searchParams.get("groupId") || "main"; -} - -export function register( - options: { mode?: "broadcast" | "shared-worker"; worker?: Comlink.Remote } = {}, -): DiffuseApplet { - const mode = options.mode ?? "broadcast"; - const scope = applets.register(); - - const groupId = lookupGroupId(); - const channelId = `${location.host}${location.pathname}/${groupId}`; - const instanceId = crypto.randomUUID(); - - // Codec - const codec = { - decode: (data: any) => data as DataType, - encode: (data: DataType) => data as any, - }; - - // Context - const context: DiffuseApplet = { - groupId, - scope, - - settled() { - return channelContext?.promise.then(() => {}) ?? Promise.resolve(); - }, - - get instanceId() { - return instanceId; - }, - - get data() { - return scope.data; - }, - - set data(data: DataType) { - scope.data = data; - }, - - codec, - - isMainInstance() { - return channelContext?.mainSignal() ?? null; - }, - - setActionHandler: (actionId: string, actionHandler: H) => { - switch (mode) { - case "broadcast": - return channelContext?.setActionHandler(actionId, actionHandler); - - case "shared-worker": - return scope.setActionHandler(actionId, actionHandler); - } - }, - }; - - if (options.worker) { - context.scope.onworkerport = (event) => { - if (!event.port) return; - options.worker?._listen(transfer(event.port)); - }; - } - - // Channel - const channelContext = - mode === "broadcast" - ? broadcastChannel({ - channelId, - context, - instanceId, - scope, - }) - : undefined; - - return context; -} - -function broadcastChannel({ - channelId, - context, - instanceId, - scope, -}: { - channelId: string; - context: DiffuseApplet; - instanceId: string; - scope: AppletScope; -}) { - const isMain = signal(true); - - // One instance to rule them all - // - // Ping other instances to see if there are any. - // As long as there aren't any, it is considered the main instance. - // - // Actions are performed on the main instance, - // and data is replicated from main to the other instances. - const channel = new BroadcastChannel(channelId); - - channel.addEventListener("message", async (event) => { - switch (event.data?.type) { - case "PING": { - channel.postMessage({ - type: "PONG", - instanceId: event.data.instanceId, - originInstanceId: instanceId, - }); - - if (isMain() && event.data?.isInitialPing === true) { - channel.postMessage({ - type: "data", - data: context.codec.encode(scope.data), - }); - } - break; - } - - case "PONG": { - if (event.data.instanceId === instanceId) { - isMain(false); - } - break; - } - - case "UNLOADED": { - if (!context.isMainInstance()) { - // We need to wait until the other side is actually unloaded 🤷‍♀️ - setTimeout(async () => { - const promised = await makeMainPromise(); - isMain(promised.isMain); - if (promised.isMain) context.unloadHandler?.(); - }, 250); - } - break; - } - - case "action": { - if (isMain()) { - const result = await scope.actionHandlers[event.data.actionId]?.(...event.data.arguments); - channel.postMessage({ - type: "actioncomplete", - actionInstanceId: event.data.actionInstanceId, - result, - }); - } - break; - } - - case "data": { - scope.data = context.codec.decode(event.data.data); - break; - } - } - }); - - // Promise that fullfills whenever it figures out its the main instance or not. - let pinged = false; - - function makeMainPromise(timeoutDuration: number = 500) { - return new Promise<{ isMain: boolean }>((resolve) => { - const timeoutId = setTimeout(() => { - channel.removeEventListener("message", handler); - resolve({ isMain: true }); - }, timeoutDuration); - - const handler = (event: MessageEvent) => { - if ( - (event.data?.type === "PONG" || event.data?.type === "PING") && - event.data?.instanceId === instanceId - ) { - clearTimeout(timeoutId); - channel.removeEventListener("message", handler); - resolve({ isMain: false }); - } - }; - - channel.addEventListener("message", handler); - channel.postMessage({ - type: "PING", - instanceId, - isInitialPing: !pinged, - }); - - pinged = true; - }); - } - - const promise = makeMainPromise(); - - // If the data on the main instance changes, - // pass it on to other instances. - scope.addEventListener("data", async (event: AppletEvent) => { - await promise; - - if (isMain()) { - channel.postMessage({ - type: "data", - data: context.codec.encode(event.data), - }); - } - }); - - // Action handler - const setActionHandler = (actionId: string, actionHandler: H) => { - const handler = async (...args: any) => { - if (isMain()) { - return actionHandler(...args); - } - - // Check if a main instance is still available, - // if not, then this is the new main. - const promised = await makeMainPromise(); - isMain(promised.isMain); - - if (isMain()) { - return actionHandler(...args); - } - - const actionMessage = { - actionInstanceId: crypto.randomUUID(), - actionId, - type: "action", - arguments: args, - }; - - return await new Promise((resolve) => { - const actionCallback = (event: MessageEvent) => { - if ( - event.data?.type === "actioncomplete" && - event.data?.actionInstanceId === actionMessage.actionInstanceId - ) { - channel.removeEventListener("message", actionCallback); - resolve(event.data.result); - } - }; - - channel.addEventListener("message", actionCallback); - channel.postMessage(actionMessage); - }); - }; - - scope.setActionHandler(actionId, handler); - }; - - // Before unload - self.addEventListener("beforeunload", (event) => { - if (context.isMainInstance()) { - channel.postMessage({ - type: "UNLOADED", - }); - } - }); - - // Fin - return { - channel, - mainSignal: isMain, - promise, - setActionHandler, - }; -} - -//////////////////////////////////////////// -// 🔮 Reactive state management -//////////////////////////////////////////// -export function reactive( - applet: Applet | AppletScope, - dataFn: (data: D) => T, - effectFn: (t: T) => void, -) { - let value = dataFn(applet.data); - effectFn(value); - - applet.addEventListener("data", (event: AppletEvent) => { - const newData = dataFn(event.data); - if (newData !== value) { - value = newData; - effectFn(value); - } - }); -} - -//////////////////////////////////////////// -// ⚡️ COMMON ACTION CALLS -//////////////////////////////////////////// - -export async function inputUrl(input: Applet, uri: string, method = "GET") { - return await input.sendAction( - "resolve", - { - method, - uri, - }, - { - timeoutDuration: 60000 * 5, - worker: true, - }, - ); -} - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// -export function addScope(astroScope: string, object: O): O { - return { - ...object, - attrs: { - ...((object as any).attrs || {}), - [`data-astro-cid-${astroScope}`]: "", - }, - }; -} - -export function appletScopePort() { - let port: MessagePort | undefined; - - function connection(event: AppletEvent) { - if (event.data?.type === "appletconnect") { - window.removeEventListener("message", connection); - port = (event as any).ports[0]; - } - } - - window.addEventListener("message", connection); - - return () => port; -} - -export const hs = - (astroScope: string) => - ( - tag: string, - props?: Record | (() => Record), - configure?: ElementConfigurator, - ) => { - const propsWithScope = - props && isSignal(props) - ? () => addScope(astroScope, props()) - : addScope(astroScope, props || {}); - - return hyperscript(tag, propsWithScope, configure); - }; - -export function wait(applet: Applet, dataFn: (a: A | undefined) => boolean): Promise { - return new Promise((resolve) => { - if (dataFn(applet.data) === true) { - resolve(); - return; - } - - const callback = (event: AppletEvent) => { - if (dataFn(event.data) === true) { - applet.removeEventListener("data", callback); - resolve(); - } - }; - - applet.addEventListener("data", callback); - }); -} diff --git a/_backup/scripts/engine/queue/types.d.ts b/_backup/scripts/engine/queue/types.d.ts deleted file mode 100644 index 6038dc1e3..000000000 --- a/_backup/scripts/engine/queue/types.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Track } from "@applets/core/types"; - -export type Item = Track & { - manualEntry?: boolean; -}; - -export interface State { - past: Item[]; - now: Item | null; - future: Item[]; -} diff --git a/_backup/scripts/engine/queue/worker.ts b/_backup/scripts/engine/queue/worker.ts deleted file mode 100644 index ba31164dd..000000000 --- a/_backup/scripts/engine/queue/worker.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { getTransferables } from "@okikio/transferables"; - -import type { Track } from "@applets/core/types.js"; -import type { Item, State } from "./types"; -import { arrayShuffle, postMessages, provide } from "@scripts/common.ts"; - -//////////////////////////////////////////// -// SETUP -//////////////////////////////////////////// - -const actions = { - add, - pool, - shift, - unshift, -}; - -const { ports, tasks } = provide({ - actions, - tasks: { ...actions, data }, -}); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -//////////////////////////////////////////// -// STATE -//////////////////////////////////////////// - -const QUEUE_SIZE = 25; - -const _internal: Record = {}; -const _state: Record = {}; - -function data(groupId: string) { - return state(groupId); -} - -function emptyState(groupId: string): State { - return { - future: [], - now: null, - past: [], - }; -} - -function notify(groupId: string) { - const d = data(groupId); - - postMessages({ - data: { - type: "data", - data: d, - groupId, - }, - ports: ports.applets, - transfer: getTransferables(d), - }); -} - -function internal(groupId: string) { - _internal[groupId] ??= { pool: [] }; - return _internal[groupId]; -} - -function state(groupId: string) { - _state[groupId] ??= emptyState(groupId); - return _state[groupId]; -} - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// - -function add({ groupId, items }: { groupId: string; items: Item[] }) { - state(groupId).future = [...state(groupId).future, ...items]; - notify(groupId); -} - -function pool({ groupId, tracks }: { groupId: string; tracks: Track[] }) { - internal(groupId).pool = tracks; - const queue = state(groupId); - - // TODO: If the pool changes, only remove non-existing tracks - // instead of resetting the whole future queue. - // - // What about past queue items? - - queue.future = []; - fill(groupId); - - // Automatically insert track if there isn't any - if (!queue.now) return shift({ groupId }); - else notify(groupId); -} - -function shift({ groupId }: { groupId: string }) { - const queue = state(groupId); - const now = queue.future[0] ?? null; - queue.now = now; - - queue.future = queue.future.slice(1); - queue.past = now ? [...queue.past, now] : queue.past; - - fill(groupId); -} - -function unshift({ groupId }: { groupId: string }) { - const queue = state(groupId); - if (queue.past.length === 0) return; - - const [last] = queue.past.splice(queue.past.length - 1, 1); - const now = last ?? null; - - queue.now = now; - queue.future = now ? [now, ...queue.future] : queue.future; - - notify(groupId); -} - -// 🛠️ - -// TODO: Most likely there's a more performant solution -function fill(groupId: string) { - const queue = state(groupId); - if (queue.future.length >= QUEUE_SIZE) return; - - const pool: Track[] = []; - - let past = new Set(queue.past.map((t) => t.id)); - let reducedPool = pool; - - internal(groupId).pool.forEach((track: Track) => { - if (past.has(track.id)) { - past = past.difference(new Set(track.id)); - } else { - pool.push(track); - } - }); - - if (reducedPool.length === 0) { - reducedPool = internal(groupId).pool; - } - - const poolSelection = arrayShuffle(reducedPool).slice(0, QUEUE_SIZE - queue.future.length); - add({ groupId, items: poolSelection }); -} diff --git a/_backup/scripts/theme/blur/index.ts b/_backup/scripts/theme/blur/index.ts deleted file mode 100644 index 67918ad7c..000000000 --- a/_backup/scripts/theme/blur/index.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { ManagedOutput } from "@applets/core/types"; -import { applet } from "@scripts/applet/common"; - -//////////////////////////////////////////// -// 🗂️ Applets -//////////////////////////////////////////// -import type * as QueueEngine from "@applets/engine/queue/types.d.ts"; - -const container = document.querySelector("main"); -if (!container) throw new Error("Missing container"); - -const labelA = "Deck A"; -const labelB = "Deck B"; - -// const configurator = { -// output: await applet("/configurator/output"), -// }; - -const constituent = { - a: applet("/constituent/blur/artwork-controller", { - container, - groupId: labelA, - }), - b: applet("/constituent/blur/artwork-controller", { - container, - groupId: labelB, - }), - browser: applet("/constituent/blur/browser", { - container, - }), -}; - -// TODO: -// const _orchestrator = { -// primary: applet("/orchestrator/primary", { groupId: labelA }), -// }; - -// const engine = { -// queue: { -// a: await applet("/engine/queue", { groupId: labelA }), -// b: await applet("/engine/queue", { groupId: labelB }), -// }, -// }; - -// const deckA = engine.queue.a; -// const deckB = engine.queue.b; diff --git a/_backup/scripts/theme/pilot/index.ts b/_backup/scripts/theme/pilot/index.ts deleted file mode 100644 index ef53b72e2..000000000 --- a/_backup/scripts/theme/pilot/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { applet, reactive } from "@scripts/applet/common"; - -//////////////////////////////////////////// -// 🗂️ Applets -//////////////////////////////////////////// -import type * as AudioEngine from "@applets/engine/audio/types.d.ts"; -import type * as QueueEngine from "@applets/engine/queue/types.d.ts"; - -import type * as AudioUI from "@applets/theme/pilot/audio/types"; - -const engine = { - audio: await applet("/engine/audio"), - queue: await applet("/engine/queue"), -}; - -const orchestrator = { - queueAudio: applet("/orchestrator/queue-audio"), - queueTracks: applet("/orchestrator/queue-tracks"), - processTracks: applet("/orchestrator/process-tracks"), -}; - -const ui = { - audio: await applet("/theme/pilot/audio/", { setHeight: true }), -}; - -//////////////////////////////////////////// -// ⚙️ [Connections → Engines] -// 🔉 AUDIO -//////////////////////////////////////////// - -// NOTE: -// These could probably be optimised, but it works. - -reactive( - engine.audio, - (data) => - data.isPlaying && (data.items[engine.queue.data.now?.id ?? Infinity]?.isPlaying ?? false), - (isPlaying) => ui.audio.sendAction("modifyIsPlaying", isPlaying), -); - -reactive( - engine.audio, - (data) => data.items[engine.queue.data.now?.id ?? Infinity]?.progress ?? 0, - (progress: number) => ui.audio.sendAction("modifyProgress", progress), -); - -//////////////////////////////////////////// -// 🌅 [Connections → UI] -// 🔉 AUDIO -//////////////////////////////////////////// - -let initialAudioChecked = false; - -reactive( - ui.audio, - (data) => data.isPlaying, - async (isPlaying) => { - const audioId = engine.queue.data.now?.id; - - // Sync audio state and ui state - // TODO: Figure out a better way to do this - if (!initialAudioChecked) { - if (engine.audio.data.isPlaying && !isPlaying) { - ui.audio.sendAction("modifyIsPlaying", true); - initialAudioChecked = true; - return; - } - } - - // Otherwise just control the audio - if (isPlaying) { - engine.audio.sendAction("play", { audioId }); - } else { - engine.audio.sendAction("pause", { audioId }); - } - }, -); - -reactive( - ui.audio, - (data: AudioUI.State) => data.seekPosition, - (seekPosition) => { - if (seekPosition !== undefined && engine.queue.data.now?.id) { - engine.audio.sendAction("seek", { - percentage: seekPosition, - audioId: engine.queue.data.now.id, - }); - } - }, -); diff --git a/_config.ts b/_config.ts index 6ee956c39..0978ba115 100644 --- a/_config.ts +++ b/_config.ts @@ -26,3 +26,9 @@ export default site; site.use(postcss({ includes: false })); site.add([".css"]); + +// BINARY ASSETS + +site.add("/favicons"); +site.add("/fonts"); +site.add("/images"); diff --git a/src/_components/element.vto b/src/_components/element.vto new file mode 100644 index 000000000..43ad66508 --- /dev/null +++ b/src/_components/element.vto @@ -0,0 +1,9 @@ +
    +

    {{title}}

    + +

    + {{content}} +

    + + {{ await comp.list({ items }) }} +
    diff --git a/src/_components/list.vto b/src/_components/list.vto new file mode 100644 index 000000000..77c6fa436 --- /dev/null +++ b/src/_components/list.vto @@ -0,0 +1,11 @@ +
    diff --git a/_backup/layouts/page.astro b/src/_includes/layouts/diffuse.vto similarity index 52% rename from _backup/layouts/page.astro rename to src/_includes/layouts/diffuse.vto index 2d33e4249..82ccd526c 100644 --- a/_backup/layouts/page.astro +++ b/src/_includes/layouts/diffuse.vto @@ -1,5 +1,5 @@ --- -const { title } = Astro.props; +title: "Diffuse" --- @@ -7,15 +7,15 @@ const { title } = Astro.props; - {title} + {{title}} - + {{ content }} diff --git a/public/favicons/android-chrome-192x192.png b/src/favicons/android-chrome-192x192.png similarity index 100% rename from public/favicons/android-chrome-192x192.png rename to src/favicons/android-chrome-192x192.png diff --git a/public/favicons/android-chrome-512x512.png b/src/favicons/android-chrome-512x512.png similarity index 100% rename from public/favicons/android-chrome-512x512.png rename to src/favicons/android-chrome-512x512.png diff --git a/public/favicons/apple-touch-icon.png b/src/favicons/apple-touch-icon.png similarity index 100% rename from public/favicons/apple-touch-icon.png rename to src/favicons/apple-touch-icon.png diff --git a/public/favicons/browserconfig.xml b/src/favicons/browserconfig.xml similarity index 100% rename from public/favicons/browserconfig.xml rename to src/favicons/browserconfig.xml diff --git a/public/favicons/favicon-16x16.png b/src/favicons/favicon-16x16.png similarity index 100% rename from public/favicons/favicon-16x16.png rename to src/favicons/favicon-16x16.png diff --git a/public/favicons/favicon-32x32.png b/src/favicons/favicon-32x32.png similarity index 100% rename from public/favicons/favicon-32x32.png rename to src/favicons/favicon-32x32.png diff --git a/public/favicons/favicon.ico b/src/favicons/favicon.ico similarity index 100% rename from public/favicons/favicon.ico rename to src/favicons/favicon.ico diff --git a/public/favicons/mstile-150x150.png b/src/favicons/mstile-150x150.png similarity index 100% rename from public/favicons/mstile-150x150.png rename to src/favicons/mstile-150x150.png diff --git a/public/favicons/safari-pinned-tab.svg b/src/favicons/safari-pinned-tab.svg similarity index 100% rename from public/favicons/safari-pinned-tab.svg rename to src/favicons/safari-pinned-tab.svg diff --git a/public/fonts/InterVariable-Italic.woff2 b/src/fonts/InterVariable-Italic.woff2 similarity index 100% rename from public/fonts/InterVariable-Italic.woff2 rename to src/fonts/InterVariable-Italic.woff2 diff --git a/public/fonts/InterVariable.woff2 b/src/fonts/InterVariable.woff2 similarity index 100% rename from public/fonts/InterVariable.woff2 rename to src/fonts/InterVariable.woff2 diff --git a/public/images/background/1.jpg b/src/images/background/1.jpg similarity index 100% rename from public/images/background/1.jpg rename to src/images/background/1.jpg diff --git a/public/images/background/10.jpg b/src/images/background/10.jpg similarity index 100% rename from public/images/background/10.jpg rename to src/images/background/10.jpg diff --git a/public/images/background/11.jpg b/src/images/background/11.jpg similarity index 100% rename from public/images/background/11.jpg rename to src/images/background/11.jpg diff --git a/public/images/background/12.jpg b/src/images/background/12.jpg similarity index 100% rename from public/images/background/12.jpg rename to src/images/background/12.jpg diff --git a/public/images/background/13.jpg b/src/images/background/13.jpg similarity index 100% rename from public/images/background/13.jpg rename to src/images/background/13.jpg diff --git a/public/images/background/14.jpg b/src/images/background/14.jpg similarity index 100% rename from public/images/background/14.jpg rename to src/images/background/14.jpg diff --git a/public/images/background/15.jpg b/src/images/background/15.jpg similarity index 100% rename from public/images/background/15.jpg rename to src/images/background/15.jpg diff --git a/public/images/background/16.jpg b/src/images/background/16.jpg similarity index 100% rename from public/images/background/16.jpg rename to src/images/background/16.jpg diff --git a/public/images/background/17.jpg b/src/images/background/17.jpg similarity index 100% rename from public/images/background/17.jpg rename to src/images/background/17.jpg diff --git a/public/images/background/18.jpg b/src/images/background/18.jpg similarity index 100% rename from public/images/background/18.jpg rename to src/images/background/18.jpg diff --git a/public/images/background/19.jpg b/src/images/background/19.jpg similarity index 100% rename from public/images/background/19.jpg rename to src/images/background/19.jpg diff --git a/public/images/background/2.jpg b/src/images/background/2.jpg similarity index 100% rename from public/images/background/2.jpg rename to src/images/background/2.jpg diff --git a/public/images/background/20.jpg b/src/images/background/20.jpg similarity index 100% rename from public/images/background/20.jpg rename to src/images/background/20.jpg diff --git a/public/images/background/21.jpg b/src/images/background/21.jpg similarity index 100% rename from public/images/background/21.jpg rename to src/images/background/21.jpg diff --git a/public/images/background/22.jpg b/src/images/background/22.jpg similarity index 100% rename from public/images/background/22.jpg rename to src/images/background/22.jpg diff --git a/public/images/background/23.jpg b/src/images/background/23.jpg similarity index 100% rename from public/images/background/23.jpg rename to src/images/background/23.jpg diff --git a/public/images/background/24.jpg b/src/images/background/24.jpg similarity index 100% rename from public/images/background/24.jpg rename to src/images/background/24.jpg diff --git a/public/images/background/25.jpg b/src/images/background/25.jpg similarity index 100% rename from public/images/background/25.jpg rename to src/images/background/25.jpg diff --git a/public/images/background/26.jpg b/src/images/background/26.jpg similarity index 100% rename from public/images/background/26.jpg rename to src/images/background/26.jpg diff --git a/public/images/background/27.jpg b/src/images/background/27.jpg similarity index 100% rename from public/images/background/27.jpg rename to src/images/background/27.jpg diff --git a/public/images/background/28.jpg b/src/images/background/28.jpg similarity index 100% rename from public/images/background/28.jpg rename to src/images/background/28.jpg diff --git a/public/images/background/29.jpg b/src/images/background/29.jpg similarity index 100% rename from public/images/background/29.jpg rename to src/images/background/29.jpg diff --git a/public/images/background/3.jpg b/src/images/background/3.jpg similarity index 100% rename from public/images/background/3.jpg rename to src/images/background/3.jpg diff --git a/public/images/background/30.jpg b/src/images/background/30.jpg similarity index 100% rename from public/images/background/30.jpg rename to src/images/background/30.jpg diff --git a/public/images/background/4.jpg b/src/images/background/4.jpg similarity index 100% rename from public/images/background/4.jpg rename to src/images/background/4.jpg diff --git a/public/images/background/5.jpg b/src/images/background/5.jpg similarity index 100% rename from public/images/background/5.jpg rename to src/images/background/5.jpg diff --git a/public/images/background/6.jpg b/src/images/background/6.jpg similarity index 100% rename from public/images/background/6.jpg rename to src/images/background/6.jpg diff --git a/public/images/background/7.jpg b/src/images/background/7.jpg similarity index 100% rename from public/images/background/7.jpg rename to src/images/background/7.jpg diff --git a/public/images/background/8.jpg b/src/images/background/8.jpg similarity index 100% rename from public/images/background/8.jpg rename to src/images/background/8.jpg diff --git a/public/images/background/9.jpg b/src/images/background/9.jpg similarity index 100% rename from public/images/background/9.jpg rename to src/images/background/9.jpg diff --git a/public/images/background/thumbnails/1.jpg b/src/images/background/thumbnails/1.jpg similarity index 100% rename from public/images/background/thumbnails/1.jpg rename to src/images/background/thumbnails/1.jpg diff --git a/public/images/background/thumbnails/10.jpg b/src/images/background/thumbnails/10.jpg similarity index 100% rename from public/images/background/thumbnails/10.jpg rename to src/images/background/thumbnails/10.jpg diff --git a/public/images/background/thumbnails/11.jpg b/src/images/background/thumbnails/11.jpg similarity index 100% rename from public/images/background/thumbnails/11.jpg rename to src/images/background/thumbnails/11.jpg diff --git a/public/images/background/thumbnails/12.jpg b/src/images/background/thumbnails/12.jpg similarity index 100% rename from public/images/background/thumbnails/12.jpg rename to src/images/background/thumbnails/12.jpg diff --git a/public/images/background/thumbnails/13.jpg b/src/images/background/thumbnails/13.jpg similarity index 100% rename from public/images/background/thumbnails/13.jpg rename to src/images/background/thumbnails/13.jpg diff --git a/public/images/background/thumbnails/14.jpg b/src/images/background/thumbnails/14.jpg similarity index 100% rename from public/images/background/thumbnails/14.jpg rename to src/images/background/thumbnails/14.jpg diff --git a/public/images/background/thumbnails/15.jpg b/src/images/background/thumbnails/15.jpg similarity index 100% rename from public/images/background/thumbnails/15.jpg rename to src/images/background/thumbnails/15.jpg diff --git a/public/images/background/thumbnails/16.jpg b/src/images/background/thumbnails/16.jpg similarity index 100% rename from public/images/background/thumbnails/16.jpg rename to src/images/background/thumbnails/16.jpg diff --git a/public/images/background/thumbnails/17.jpg b/src/images/background/thumbnails/17.jpg similarity index 100% rename from public/images/background/thumbnails/17.jpg rename to src/images/background/thumbnails/17.jpg diff --git a/public/images/background/thumbnails/18.jpg b/src/images/background/thumbnails/18.jpg similarity index 100% rename from public/images/background/thumbnails/18.jpg rename to src/images/background/thumbnails/18.jpg diff --git a/public/images/background/thumbnails/19.jpg b/src/images/background/thumbnails/19.jpg similarity index 100% rename from public/images/background/thumbnails/19.jpg rename to src/images/background/thumbnails/19.jpg diff --git a/public/images/background/thumbnails/2.jpg b/src/images/background/thumbnails/2.jpg similarity index 100% rename from public/images/background/thumbnails/2.jpg rename to src/images/background/thumbnails/2.jpg diff --git a/public/images/background/thumbnails/20.jpg b/src/images/background/thumbnails/20.jpg similarity index 100% rename from public/images/background/thumbnails/20.jpg rename to src/images/background/thumbnails/20.jpg diff --git a/public/images/background/thumbnails/21.jpg b/src/images/background/thumbnails/21.jpg similarity index 100% rename from public/images/background/thumbnails/21.jpg rename to src/images/background/thumbnails/21.jpg diff --git a/public/images/background/thumbnails/22.jpg b/src/images/background/thumbnails/22.jpg similarity index 100% rename from public/images/background/thumbnails/22.jpg rename to src/images/background/thumbnails/22.jpg diff --git a/public/images/background/thumbnails/23.jpg b/src/images/background/thumbnails/23.jpg similarity index 100% rename from public/images/background/thumbnails/23.jpg rename to src/images/background/thumbnails/23.jpg diff --git a/public/images/background/thumbnails/24.jpg b/src/images/background/thumbnails/24.jpg similarity index 100% rename from public/images/background/thumbnails/24.jpg rename to src/images/background/thumbnails/24.jpg diff --git a/public/images/background/thumbnails/25.jpg b/src/images/background/thumbnails/25.jpg similarity index 100% rename from public/images/background/thumbnails/25.jpg rename to src/images/background/thumbnails/25.jpg diff --git a/public/images/background/thumbnails/26.jpg b/src/images/background/thumbnails/26.jpg similarity index 100% rename from public/images/background/thumbnails/26.jpg rename to src/images/background/thumbnails/26.jpg diff --git a/public/images/background/thumbnails/27.jpg b/src/images/background/thumbnails/27.jpg similarity index 100% rename from public/images/background/thumbnails/27.jpg rename to src/images/background/thumbnails/27.jpg diff --git a/public/images/background/thumbnails/28.jpg b/src/images/background/thumbnails/28.jpg similarity index 100% rename from public/images/background/thumbnails/28.jpg rename to src/images/background/thumbnails/28.jpg diff --git a/public/images/background/thumbnails/29.jpg b/src/images/background/thumbnails/29.jpg similarity index 100% rename from public/images/background/thumbnails/29.jpg rename to src/images/background/thumbnails/29.jpg diff --git a/public/images/background/thumbnails/3.jpg b/src/images/background/thumbnails/3.jpg similarity index 100% rename from public/images/background/thumbnails/3.jpg rename to src/images/background/thumbnails/3.jpg diff --git a/public/images/background/thumbnails/30.jpg b/src/images/background/thumbnails/30.jpg similarity index 100% rename from public/images/background/thumbnails/30.jpg rename to src/images/background/thumbnails/30.jpg diff --git a/public/images/background/thumbnails/4.jpg b/src/images/background/thumbnails/4.jpg similarity index 100% rename from public/images/background/thumbnails/4.jpg rename to src/images/background/thumbnails/4.jpg diff --git a/public/images/background/thumbnails/5.jpg b/src/images/background/thumbnails/5.jpg similarity index 100% rename from public/images/background/thumbnails/5.jpg rename to src/images/background/thumbnails/5.jpg diff --git a/public/images/background/thumbnails/6.jpg b/src/images/background/thumbnails/6.jpg similarity index 100% rename from public/images/background/thumbnails/6.jpg rename to src/images/background/thumbnails/6.jpg diff --git a/public/images/background/thumbnails/7.jpg b/src/images/background/thumbnails/7.jpg similarity index 100% rename from public/images/background/thumbnails/7.jpg rename to src/images/background/thumbnails/7.jpg diff --git a/public/images/background/thumbnails/8.jpg b/src/images/background/thumbnails/8.jpg similarity index 100% rename from public/images/background/thumbnails/8.jpg rename to src/images/background/thumbnails/8.jpg diff --git a/public/images/background/thumbnails/9.jpg b/src/images/background/thumbnails/9.jpg similarity index 100% rename from public/images/background/thumbnails/9.jpg rename to src/images/background/thumbnails/9.jpg diff --git a/public/images/diffuse-current.svg b/src/images/diffuse-current.svg similarity index 100% rename from public/images/diffuse-current.svg rename to src/images/diffuse-current.svg diff --git a/public/images/diffuse-dark.svg b/src/images/diffuse-dark.svg similarity index 100% rename from public/images/diffuse-dark.svg rename to src/images/diffuse-dark.svg diff --git a/public/images/diffuse-grey.svg b/src/images/diffuse-grey.svg similarity index 100% rename from public/images/diffuse-grey.svg rename to src/images/diffuse-grey.svg diff --git a/public/images/diffuse-light.svg b/src/images/diffuse-light.svg similarity index 100% rename from public/images/diffuse-light.svg rename to src/images/diffuse-light.svg diff --git a/public/images/diffuse__icon-dark.svg b/src/images/diffuse__icon-dark.svg similarity index 100% rename from public/images/diffuse__icon-dark.svg rename to src/images/diffuse__icon-dark.svg diff --git a/public/images/diffuse__icon-grey.svg b/src/images/diffuse__icon-grey.svg similarity index 100% rename from public/images/diffuse__icon-grey.svg rename to src/images/diffuse__icon-grey.svg diff --git a/public/images/diffuse__icon-light.svg b/src/images/diffuse__icon-light.svg similarity index 100% rename from public/images/diffuse__icon-light.svg rename to src/images/diffuse__icon-light.svg diff --git a/public/images/icon-square-ws.png b/src/images/icon-square-ws.png similarity index 100% rename from public/images/icon-square-ws.png rename to src/images/icon-square-ws.png diff --git a/public/images/icon-square.png b/src/images/icon-square.png similarity index 100% rename from public/images/icon-square.png rename to src/images/icon-square.png diff --git a/public/images/icon.png b/src/images/icon.png similarity index 100% rename from public/images/icon.png rename to src/images/icon.png diff --git a/public/images/icons/windows_98/cd_audio_cd_a-4.png b/src/images/icons/windows_98/cd_audio_cd_a-4.png similarity index 100% rename from public/images/icons/windows_98/cd_audio_cd_a-4.png rename to src/images/icons/windows_98/cd_audio_cd_a-4.png diff --git a/public/images/icons/windows_98/directory_open_cool-0.png b/src/images/icons/windows_98/directory_open_cool-0.png similarity index 100% rename from public/images/icons/windows_98/directory_open_cool-0.png rename to src/images/icons/windows_98/directory_open_cool-0.png diff --git a/public/images/icons/windows_98/directory_open_file_mydocs_2k-2.png b/src/images/icons/windows_98/directory_open_file_mydocs_2k-2.png similarity index 100% rename from public/images/icons/windows_98/directory_open_file_mydocs_2k-2.png rename to src/images/icons/windows_98/directory_open_file_mydocs_2k-2.png diff --git a/src/index.vto b/src/index.vto new file mode 100644 index 000000000..1ca3479b2 --- /dev/null +++ b/src/index.vto @@ -0,0 +1,116 @@ +--- +layout: layouts/diffuse.vto + +engines: + - url: "engine/audio/" + title: "Audio" + - url: "engine/queue/" + title: "Queue" + +--- + + +
    +

    + + Diffuse + + +

    +

    + Diffuse is a collection of custom elements that make it possible to + listen to audio from various sources on your devices and the web, and to create the ideal digital + listening experience for you. +

    +

    + ⚠️ Heavily experimental +

    +
    +
    +
    + +
    +

    Themes

    + +

    + Themes are compositions and provide a traditional browser web application way of + using them. Each theme is unique, not just a skin (ie. not like winamp skins). +

    + +

    + For example, most themes here will limit the currently playing audio tracks to one item, + but you might as well create a DJ theme that can play multiple items at the same time. +

    +
    + + + +
    + + + + + +
    +

    Elements

    + +

    + The (web) components of the system. These + are then recombined into an entire music player experience, or whatever you want to build. +

    + +
    + {{ await comp.element({ + title: "Engines", + items: engines, + content: ` + Elements with each a singular purpose and don't have any UI. There are specialised UI and + orchestrator elements that control these. + ` + }) }} + + +
    +
    + + + + + + +
    diff --git a/src/styles/applet/common.css b/src/styles/applet/common.css deleted file mode 100644 index 86c12e429..000000000 --- a/src/styles/applet/common.css +++ /dev/null @@ -1,5 +0,0 @@ -.with-icon { - align-items: center; - display: inline-flex; - gap: 0.75em; -} diff --git a/src/styles/fonts.css b/src/styles/fonts.css index 62a900f84..ade90e099 100644 --- a/src/styles/fonts.css +++ b/src/styles/fonts.css @@ -3,7 +3,7 @@ font-family: InterVariable; font-style: normal; font-weight: 100 900; - src: url("/fonts/InterVariable.woff2") format("woff2"); + src: url("../fonts/InterVariable.woff2") format("woff2"); } @font-face { @@ -11,5 +11,5 @@ font-family: InterVariable; font-style: italic; font-weight: 100 900; - src: url("/fonts/InterVariable-Italic.woff2") format("woff2"); + src: url("../fonts/InterVariable-Italic.woff2") format("woff2"); } diff --git a/src/styles/page/index.css b/src/styles/page/index.css index d1a2355d0..19b05a7bc 100644 --- a/src/styles/page/index.css +++ b/src/styles/page/index.css @@ -16,6 +16,11 @@ a { text-underline-offset: 6px; } +h1 { + margin: var(--space-lg) 0 var(--space-lg); + padding-top: var(--space-2xs); +} + h1 svg { fill: oklch(from var(--bg-color) calc(l - 0.5) c h); opacity: 0.125; @@ -70,7 +75,7 @@ ol { gap: 0 var(--space-3xl); } -.applet { +.element { min-width: min(var(--container-xs), 100%); width: 32.5%; } diff --git a/src/styles/theme/pilot/index.css b/src/styles/theme/pilot/index.css deleted file mode 100644 index daf99920e..000000000 --- a/src/styles/theme/pilot/index.css +++ /dev/null @@ -1,78 +0,0 @@ -@import "./variables.css"; - -/*********************************** - * Fonts - ***********************************/ -:root { - font-family: "Inter", sans-serif; - font-size: var(--fs-base); -} - -@supports (font-variation-settings: normal) { - :root { - font-family: "InterVariable", sans-serif; - font-feature-settings: - "ss03" 2, - "ss02" 2; - font-optical-sizing: auto; - } -} - -body { - background-color: var(--delicate-cloud); - color: var(--made-in-the-shade); - display: flex; - flex-direction: column; - overflow: hidden; - height: 100dvh; -} - -iframe { - border: 0; -} - -/*********************************** - * Applets (UI) - ***********************************/ -#applet__ui__audio { - opacity: 0; - pointer-events: none; - transition: 375ms opacity; - transition-delay: 250ms; - width: 100%; - - &.has-loaded { - opacity: 1; - pointer-events: initial; - } -} - -/*********************************** - * Applets (No UI) - ***********************************/ -iframe[src*="/configurator/"], -iframe[src*="/engine/"], -iframe[src*="/input/"], -iframe[src*="/orchestrator/"], -iframe[src*="/processor/"], -iframe[src*="/output/"] { - height: 0; - left: 110vw; - opacity: 0; - overflow: hidden; - pointer-events: none; - position: absolute; - top: 110vh; - width: 0; -} - -/* Audio is a special case, iframe needs to be "visible" in order to play the audio. */ -#applet__engine__audio { - height: 1px; - left: 0; - opacity: 0; - pointer-events: none; - position: absolute; - top: 0; - width: 1px; -} diff --git a/src/styles/theme/pilot/variables.css b/src/styles/theme/pilot/variables.css deleted file mode 100644 index 89795a72c..000000000 --- a/src/styles/theme/pilot/variables.css +++ /dev/null @@ -1,26 +0,0 @@ -:root { - /* Colors */ - /* https://farbvelo.elastiq.ch/?s=eyJzIjoiZTBjNjIyMTdiNTcxZSIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4xNzUsIm1kIjo2MCwiY20iOiJsYWIiLCJmIjoiTGVnYWN5IiwiYyI6ImhzbHV2Iiwic2MiOmZhbHNlLCJidyI6dHJ1ZSwiYWgiOmZhbHNlLCJpdSI6IiIsImxtIjp0cnVlLCJzbSI6ZmFsc2UsImN2IjoiaGV4IiwicW0iOiJhcnQtcGFsZXR0ZSIsIm5sIjoiYmVzdE9mIn0= */ - --moonscape: #7f6c71; - --grandma’s-pink-tiles: #e1bac0; - --cinderella: #f8d1c6; - --young-apricot: #f8d7b6; - --cereal-flake: #f0d8ad; - --oatmeal: #cdc5b9; - - /* https://farbvelo.elastiq.ch/?s=eyJzIjoiZmZjY2JkZDg2ZjEzYiIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4xNzgzMDcwODQxNjMzNDY2LCJtZCI6NjAsImNtIjoibGFiIiwiZiI6IkxlZ2FjeSIsImMiOiJoc2x1diIsInNjIjpmYWxzZSwiYnciOnRydWUsImFoIjpmYWxzZSwiaXUiOiIiLCJsbSI6dHJ1ZSwic20iOmZhbHNlLCJjdiI6ImhzbCIsInFtIjoiYXJ0LXBhbGV0dGUiLCJubCI6ImJlc3RPZiJ9 */ - --made-in-the-shade: #67717c; - --misty-mountains: #b8cce0; - --lucid-dreams: #c7e6f4; - --icy-breeze: #c2eff1; - --crushed-ice: #bdf5ed; - --water-leaf: #b7efe7; - - /* https://farbvelo.elastiq.ch/?s=eyJzIjoiODJiN2FjMjU1ODRiOCIsImEiOjYsImNnIjo0LCJoZyI6dHJ1ZSwiaGIiOmZhbHNlLCJobyI6ZmFsc2UsImhjIjpmYWxzZSwiaHQiOmZhbHNlLCJiIjpmYWxzZSwicCI6MC4yMTkxOTgyMDcxNzEzMTQ3LCJtZCI6NjAsImNtIjoibGFiIiwiZiI6IkxlZ2FjeSIsImMiOiJoc2x1diIsInNjIjpmYWxzZSwiYnciOnRydWUsImFoIjpmYWxzZSwiaXUiOiIiLCJsbSI6dHJ1ZSwic20iOmZhbHNlLCJjdiI6ImhleCIsInFtIjoiYXJ0LXBhbGV0dGUiLCJubCI6ImJlc3RPZiJ9 */ - --wizards-brew: #9d8bb3; - --innocent-snowdrop: #cec0fa; - --foggy-plateau: #d5d2fb; - --puffy-cloud: #dce3fb; - --diamond-white: #e1f4fb; - --delicate-cloud: #d9dbe4; -} From ee4e24b09ff96d0bdb56274e11f82bf80f2e955d Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 18 Oct 2025 17:20:19 +0200 Subject: [PATCH 027/244] feat: shared queue if enabled --- src/component/engine/queue/element.js | 24 ++++++++++++++++++------ src/component/engine/queue/worker.js | 1 + src/index.vto | 6 ++++++ src/theme/blur/index.vto | 6 +++++- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 1cbdb6b6c..909faa008 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -18,13 +18,22 @@ class QueueEngine extends DiffuseElement { constructor() { super(); - // Setup shared worker - const worker = new SharedWorker(new URL("./worker.js", import.meta.url), { - type: "module", - }); + // Setup worker + const group = this.getAttribute("group") || crypto.randomUUID(); + const isShared = this.hasAttribute("shared"); + const name = `diffuse/engine/queue/${group}`; + const url = new URL("./worker.js", import.meta.url); - const port = worker.port; - port.start(); + let port; + + if (isShared) { + const worker = new SharedWorker(url, { name, type: "module" }); + port = worker.port; + port.start(); + } else { + const worker = new Worker(url, { name, type: "module" }); + port = worker; + } // Sync data with worker listen("future", this.future, port); @@ -33,6 +42,9 @@ class QueueEngine extends DiffuseElement { // Worker proxy this.add = use("add", port); + this.pool = use("pool", port); + this.shift = use("shift", port); + this.unshift = use("unshift", port); } // SIGNALS diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index d2cbc8a8b..128f8c737 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -123,5 +123,6 @@ function fill(future) { 0, QUEUE_SIZE - future.length, ); + return [...future, ...poolSelection]; } diff --git a/src/index.vto b/src/index.vto index 1ca3479b2..e2360e12c 100644 --- a/src/index.vto +++ b/src/index.vto @@ -1,6 +1,10 @@ --- layout: layouts/diffuse.vto +themes: + - url: "theme/blur/" + title: "Blur" + engines: - url: "engine/audio/" title: "Audio" @@ -43,6 +47,8 @@ engines: For example, most themes here will limit the currently playing audio tracks to one item, but you might as well create a DJ theme that can play multiple items at the same time.

    + + {{ await comp.list({ items: themes }) }} diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 7f37fbf5b..03ed99557 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,7 +4,7 @@ - + From af6749aa9a9c7f7e196cabe1fa326897caf8dd46 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 18 Oct 2025 23:30:58 +0200 Subject: [PATCH 028/244] feat: copy types to output --- _config.ts | 33 ++- deno.jsonc | 4 +- deno.lock | 217 +----------------- .../constituent/blur/browser-list/types.d.ts | 2 +- tasks/copy-types.ts | 12 - 5 files changed, 44 insertions(+), 224 deletions(-) delete mode 100644 tasks/copy-types.ts diff --git a/_config.ts b/_config.ts index 0978ba115..cfb52e51e 100644 --- a/_config.ts +++ b/_config.ts @@ -3,13 +3,20 @@ import lume from "lume/mod.ts"; import esbuild from "lume/plugins/esbuild.ts"; import postcss from "lume/plugins/postcss.ts"; +import * as path from "@std/path"; +import { ensureDirSync } from "@std/fs/ensure-dir"; +import { walkSync } from "@std/fs/walk"; + const site = lume({ src: "./src", }); +export default site; + // JS site.use(esbuild({ + extensions: [".js"], options: { bundle: true, minify: false, @@ -17,14 +24,11 @@ site.use(esbuild({ }, })); -site.add([".js", ".d.ts"]); - -export default site; +site.add([".js"]); // CSS site.use(postcss({ includes: false })); - site.add([".css"]); // BINARY ASSETS @@ -32,3 +36,24 @@ site.add([".css"]); site.add("/favicons"); site.add("/fonts"); site.add("/images"); + +// SCRIPTS + +site.script("copy-type-defs", () => { + for ( + const f of walkSync( + "./src/", + { includeDirs: false, exts: [".d.ts"] }, + ) + ) { + const dest = "_site/" + f.path.replace(/^src\//, ""); + const dir = path.dirname(dest); + ensureDirSync(dir); + console.log(dest); + Deno.copyFileSync(f.path, dest); + } +}); + +site.addEventListener("afterBuild", () => { + site.run("copy-type-defs"); +}); diff --git a/deno.jsonc b/deno.jsonc index 4fb303c92..ebe407ede 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,7 +4,8 @@ "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", - "@std/fs": "jsr:@std/fs@^1.0.15", + "@std/fs": "jsr:@std/fs@^1.0.19", + "@std/path": "jsr:@std/path@^1.1.2", "alien-signals": "npm:alien-signals@^3.0.0", "lume/": "https://deno.land/x/lume@v3.0.11/", "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", @@ -17,7 +18,6 @@ }, "tasks": { "build": "deno task lume", - "copy-types": "deno run --allow-read --allow-write tasks/copy-types.ts", "deploy:netlify": "npx netlify deploy --prod", "lume": "echo \"import 'lume/cli.ts'\" | DENO_DIR=_vendor deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run --allow-sys -", "serve": "deno task lume -s", diff --git a/deno.lock b/deno.lock index 6ae4ef54c..4d84578cc 100644 --- a/deno.lock +++ b/deno.lock @@ -15,28 +15,24 @@ "jsr:@std/fmt@1.0.8": "1.0.8", "jsr:@std/fmt@^1.0.8": "1.0.8", "jsr:@std/front-matter@1.0.9": "1.0.9", - "jsr:@std/fs@1": "1.0.16", "jsr:@std/fs@1.0.19": "1.0.19", - "jsr:@std/fs@^1.0.15": "1.0.19", "jsr:@std/fs@^1.0.19": "1.0.19", "jsr:@std/html@^1.0.4": "1.0.5", "jsr:@std/http@1.0.20": "1.0.20", "jsr:@std/internal@^1.0.10": "1.0.12", "jsr:@std/internal@^1.0.9": "1.0.12", - "jsr:@std/json@^1.0.2": "1.0.2", "jsr:@std/jsonc@1.0.2": "1.0.2", "jsr:@std/media-types@^1.1.0": "1.1.0", "jsr:@std/net@^1.0.4": "1.0.6", "jsr:@std/path@1.1.2": "1.1.2", - "jsr:@std/path@^1.0.8": "1.0.8", "jsr:@std/path@^1.1.1": "1.1.2", + "jsr:@std/path@^1.1.2": "1.1.2", "jsr:@std/semver@1.0.5": "1.0.5", "jsr:@std/streams@^1.0.10": "1.0.13", "jsr:@std/toml@1.0.10": "1.0.10", "jsr:@std/toml@^1.0.3": "1.0.10", "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", - "npm:@types/node@*": "24.2.0", "npm:alien-signals@3": "3.0.0", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:lightningcss-wasm@1.30.1": "1.30.1", @@ -46,7 +42,6 @@ "npm:morphdom@^2.7.7": "2.7.7", "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", "npm:postcss@8.5.6": "8.5.6", - "npm:sass@1.93.2": "1.93.2", "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { @@ -93,12 +88,6 @@ "jsr:@std/yaml@^1.0.5" ] }, - "@std/fs@1.0.16": { - "integrity": "81878f62b6eeda0bf546197fc3daa5327c132fee1273f6113f940784a468b036", - "dependencies": [ - "jsr:@std/path@^1.0.8" - ] - }, "@std/fs@1.0.19": { "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", "dependencies": [ @@ -126,14 +115,8 @@ "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" }, - "@std/json@1.0.2": { - "integrity": "d9e5497801c15fb679f55a2c01c7794ad7a5dfda4dd1bebab5e409cb5e0d34d4" - }, "@std/jsonc@1.0.2": { - "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7", - "dependencies": [ - "jsr:@std/json" - ] + "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7" }, "@std/media-types@1.1.0": { "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" @@ -141,9 +124,6 @@ "@std/net@1.0.6": { "integrity": "110735f93e95bb9feb95790a8b1d1bf69ec0dc74f3f97a00a76ea5efea25500c" }, - "@std/path@1.0.8": { - "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" - }, "@std/path@1.1.2": { "integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038", "dependencies": [ @@ -167,102 +147,6 @@ } }, "npm": { - "@parcel/watcher-android-arm64@2.5.1": { - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "os": ["android"], - "cpu": ["arm64"] - }, - "@parcel/watcher-darwin-arm64@2.5.1": { - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "os": ["darwin"], - "cpu": ["arm64"] - }, - "@parcel/watcher-darwin-x64@2.5.1": { - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "os": ["darwin"], - "cpu": ["x64"] - }, - "@parcel/watcher-freebsd-x64@2.5.1": { - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "os": ["freebsd"], - "cpu": ["x64"] - }, - "@parcel/watcher-linux-arm-glibc@2.5.1": { - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "os": ["linux"], - "cpu": ["arm"] - }, - "@parcel/watcher-linux-arm-musl@2.5.1": { - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "os": ["linux"], - "cpu": ["arm"] - }, - "@parcel/watcher-linux-arm64-glibc@2.5.1": { - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "os": ["linux"], - "cpu": ["arm64"] - }, - "@parcel/watcher-linux-arm64-musl@2.5.1": { - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "os": ["linux"], - "cpu": ["arm64"] - }, - "@parcel/watcher-linux-x64-glibc@2.5.1": { - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "os": ["linux"], - "cpu": ["x64"] - }, - "@parcel/watcher-linux-x64-musl@2.5.1": { - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "os": ["linux"], - "cpu": ["x64"] - }, - "@parcel/watcher-win32-arm64@2.5.1": { - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "os": ["win32"], - "cpu": ["arm64"] - }, - "@parcel/watcher-win32-ia32@2.5.1": { - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "os": ["win32"], - "cpu": ["ia32"] - }, - "@parcel/watcher-win32-x64@2.5.1": { - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "os": ["win32"], - "cpu": ["x64"] - }, - "@parcel/watcher@2.5.1": { - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dependencies": [ - "detect-libc", - "is-glob", - "micromatch", - "node-addon-api" - ], - "optionalDependencies": [ - "@parcel/watcher-android-arm64", - "@parcel/watcher-darwin-arm64", - "@parcel/watcher-darwin-x64", - "@parcel/watcher-freebsd-x64", - "@parcel/watcher-linux-arm-glibc", - "@parcel/watcher-linux-arm-musl", - "@parcel/watcher-linux-arm64-glibc", - "@parcel/watcher-linux-arm64-musl", - "@parcel/watcher-linux-x64-glibc", - "@parcel/watcher-linux-x64-musl", - "@parcel/watcher-win32-arm64", - "@parcel/watcher-win32-ia32", - "@parcel/watcher-win32-x64" - ], - "scripts": true - }, - "@types/node@24.2.0": { - "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", - "dependencies": [ - "undici-types" - ] - }, "alien-signals@3.0.0": { "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==" }, @@ -282,16 +166,10 @@ ], "bin": true }, - "baseline-browser-mapping@2.8.16": { - "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "baseline-browser-mapping@2.8.18": { + "integrity": "sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==", "bin": true }, - "braces@3.0.3": { - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": [ - "fill-range" - ] - }, "browserslist@4.26.3": { "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dependencies": [ @@ -303,21 +181,11 @@ ], "bin": true }, - "caniuse-lite@1.0.30001750": { - "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==" - }, - "chokidar@4.0.3": { - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dependencies": [ - "readdirp" - ] - }, - "detect-libc@1.0.3": { - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": true + "caniuse-lite@1.0.30001751": { + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==" }, - "electron-to-chromium@1.5.234": { - "integrity": "sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==" + "electron-to-chromium@1.5.237": { + "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==" }, "entities@4.5.0": { "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" @@ -325,12 +193,6 @@ "escalade@3.2.0": { "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, - "fill-range@7.1.1": { - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": [ - "to-regex-range" - ] - }, "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, @@ -343,27 +205,12 @@ "function-bind" ] }, - "immutable@5.1.3": { - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==" - }, "is-core-module@2.16.1": { "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": [ "hasown" ] }, - "is-extglob@2.1.1": { - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob@4.0.3": { - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": [ - "is-extglob" - ] - }, - "is-number@7.0.0": { - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, "lightningcss-wasm@1.30.1": { "integrity": "sha512-KJTnKEn0REV6DoJzxG0m5EKVEFA1CVE1isDYpXjsuqWXwLKFPJtA9Z9BSzPZJwAZFN2KaUzy+IWGP59p5bm2sA==" }, @@ -397,13 +244,6 @@ "mdurl@2.0.0": { "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, - "micromatch@4.0.8": { - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": [ - "braces", - "picomatch" - ] - }, "morphdom@2.7.7": { "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==" }, @@ -411,11 +251,8 @@ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "bin": true }, - "node-addon-api@7.1.1": { - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" - }, - "node-releases@2.0.23": { - "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==" + "node-releases@2.0.25": { + "integrity": "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==" }, "normalize-range@0.1.2": { "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" @@ -426,9 +263,6 @@ "picocolors@1.1.1": { "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, - "picomatch@2.3.1": { - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, "pify@2.3.0": { "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" }, @@ -461,9 +295,6 @@ "pify" ] }, - "readdirp@4.1.2": { - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" - }, "resolve@1.22.10": { "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dependencies": [ @@ -473,36 +304,15 @@ ], "bin": true }, - "sass@1.93.2": { - "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", - "dependencies": [ - "chokidar", - "immutable", - "source-map-js" - ], - "optionalDependencies": [ - "@parcel/watcher" - ], - "bin": true - }, "source-map-js@1.2.1": { "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "supports-preserve-symlinks-flag@1.0.0": { "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "to-regex-range@5.0.1": { - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": [ - "is-number" - ] - }, "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, - "undici-types@7.10.0": { - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" - }, "update-browserslist-db@1.1.3_browserslist@4.26.3": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ @@ -517,7 +327,6 @@ } }, "remote": { - "https://cdn.jsdelivr.net/gh/lumeland/bar@0.1.11/types.ts": "38f3714e1432c174009495333972f85fb306eb6313112ac8830fda9f1f47e87f", "https://deno.land/std@0.170.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", "https://deno.land/std@0.170.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", "https://deno.land/std@0.170.0/encoding/base64.ts": "8605e018e49211efc767686f6f687827d7f5fd5217163e981d8d693105640d7a", @@ -719,7 +528,6 @@ "https://deno.land/x/lume@v3.0.11/deps/markdown_it.ts": "24c1c0fd18c99b9067d9ff5d051f934cb7c3446e6afbad934f6268af8d1ceb4d", "https://deno.land/x/lume@v3.0.11/deps/path.ts": "f970dec772314a3ffbe672329eeb398e3eb66e875581c62af6db80c41d093aea", "https://deno.land/x/lume@v3.0.11/deps/postcss.ts": "7ad7485032d40a2bc7977eb71d9431df8d52b53d61153e60b38c29d1c98cb870", - "https://deno.land/x/lume@v3.0.11/deps/sass.ts": "0863ca98807966a7308344257da08c54eb2dbeef9cb9c3f6362bf5ec3248c9fc", "https://deno.land/x/lume@v3.0.11/deps/semver.ts": "f850a82a6cf8551e9b927d77f34218961027b1cbe44f3a88c387df62267e31f2", "https://deno.land/x/lume@v3.0.11/deps/toml.ts": "32830bda333eaf4f1c3d79e4306ba449c17a85b25f94aae9b327d3790a2d1dea", "https://deno.land/x/lume@v3.0.11/deps/vento.ts": "78db4022ee124fbcfd84caeb6c5a70f2c1e1706ec9f6415d0f1fe2e9aabcba2b", @@ -740,14 +548,12 @@ "https://deno.land/x/lume@v3.0.11/plugins/modules.ts": "4e177c0ffe972b9deef10db2bf0ae52b405418af4dbac03db9e7ffbd6a3ec6ae", "https://deno.land/x/lume@v3.0.11/plugins/paginate.ts": "6a1a9a24d0fabed2f722a6a6f29d98559219c69475685034181816e82d367f2e", "https://deno.land/x/lume@v3.0.11/plugins/postcss.ts": "5a45a017b1385bb6cc30832d7de21d7d7d146a6c6e037f48446b33e36deafbd3", - "https://deno.land/x/lume@v3.0.11/plugins/sass.ts": "09636afcb43a3fecc327e4822202df567509f6999962fa0890b75dbf2dbe06f6", "https://deno.land/x/lume@v3.0.11/plugins/search.ts": "5acb5be828bbbd012fb9226cb97ec3e370d43d05aa44d16e7e7d50bab368b442", "https://deno.land/x/lume@v3.0.11/plugins/source_maps.ts": "10afd5d8617003ed68db9895bc13e57d1742697fa55657e27efd535da6e52c34", "https://deno.land/x/lume@v3.0.11/plugins/toml.ts": "e5bf35ed4915587acd453f002b00ae9b88c1782cadc25c703d7642a390af43ea", "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", - "https://deno.land/x/lume@v3.0.11/types.ts": "5f580502f366b9b25106eb72d49b30d9af7715c8a304fe6e21f382d3c2a4cc38", "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", @@ -778,7 +584,8 @@ "jsr:@mys/m-rpc@~0.12.2", "jsr:@mys/worker-fn@^3.2.1", "jsr:@okikio/transferables@^1.0.2", - "jsr:@std/fs@^1.0.15", + "jsr:@std/fs@^1.0.19", + "jsr:@std/path@^1.1.2", "npm:alien-signals@3", "npm:morphdom@^2.7.7", "npm:xxh32@^2.0.5" diff --git a/src/component/constituent/blur/browser-list/types.d.ts b/src/component/constituent/blur/browser-list/types.d.ts index ec5de6210..d4b45053c 100644 --- a/src/component/constituent/blur/browser-list/types.d.ts +++ b/src/component/constituent/blur/browser-list/types.d.ts @@ -1,4 +1,4 @@ -import { Signal } from "@common/signals.d.ts"; +import { Signal } from "@common/signal.d.ts"; import { Track } from "@elements/core/types.d.ts"; export type State = { tracks: Signal }; diff --git a/tasks/copy-types.ts b/tasks/copy-types.ts deleted file mode 100644 index 9ca2f6721..000000000 --- a/tasks/copy-types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { walk } from "jsr:@std/fs@^1.0"; - -// Copy .d.ts files to dist dir -const it = walk("./src/pages/", { exts: [".d.ts"] }); - -for await (const item of it) { - const target = `dist/${item.path.replace("src/pages/", "")}`; - const targetDir = target.split("/").slice(0, -1).join("/"); - - Deno.mkdirSync(targetDir, { recursive: true }); - Deno.copyFileSync(item.path, target); -} From ec9fd628b55c225d73463c9f6b7674ce918d39ea Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 19 Oct 2025 18:48:32 +0200 Subject: [PATCH 029/244] chore: build system improvements --- .gitignore | 1 + _config.ts | 10 ++-- _package.backup.json | 55 ------------------- deno.jsonc | 28 ++++++---- deno.lock | 45 +++++++-------- netlify-imports.json | 6 -- src/common/element.js | 2 +- .../constituent/blur/browser-list/types.d.ts | 4 +- src/component/engine/audio/types.d.ts | 2 +- src/component/engine/queue/types.d.ts | 8 ++- src/mod.ts | 1 + 11 files changed, 58 insertions(+), 104 deletions(-) delete mode 100644 _package.backup.json delete mode 100644 netlify-imports.json create mode 100644 src/mod.ts diff --git a/.gitignore b/.gitignore index fa8c4e30f..e9c2f814d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules /_site /_vendor /dist +/vendor diff --git a/_config.ts b/_config.ts index cfb52e51e..3e1458bb5 100644 --- a/_config.ts +++ b/_config.ts @@ -19,7 +19,8 @@ site.use(esbuild({ extensions: [".js"], options: { bundle: true, - minify: false, + // minify: true, + // outExtension: { ".js": ".min.js" }, splitting: true, }, })); @@ -49,11 +50,10 @@ site.script("copy-type-defs", () => { const dest = "_site/" + f.path.replace(/^src\//, ""); const dir = path.dirname(dest); ensureDirSync(dir); - console.log(dest); Deno.copyFileSync(f.path, dest); } }); -site.addEventListener("afterBuild", () => { - site.run("copy-type-defs"); -}); +// site.addEventListener("afterBuild", () => { +// site.run("copy-type-defs"); +// }); diff --git a/_package.backup.json b/_package.backup.json deleted file mode 100644 index 7f058b8c7..000000000 --- a/_package.backup.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "dependencies": { - "@automerge/automerge": "^3.1.2", - "@bradenmacdonald/s3-lite-client": "npm:@jsr/bradenmacdonald__s3-lite-client@^0.9.0", - "@enhance/base-element": "^1.3.2", - "@enhance/element": "^1.4.6", - "@enhance/event-handler-mixin": "^1.0.4", - "@enhance/morphdom-mixin": "^1.1.3", - "@enhance/shadow-element-mixin": "^1.0.2", - "@js-temporal/polyfill": "^0.5.1", - "@lift-html/alien": "^0.0.1", - "@okikio/sharedworker": "^1.1.0", - "@okikio/transferables": "npm:@jsr/okikio__transferables@^1.0.2", - "@orama/orama": "^3.1.7", - "@orama/plugin-qps": "^3.1.7", - "@phosphor-icons/web": "^2.1.2", - "@picocss/pico": "^2.1.1", - "@std/media-types": "npm:@jsr/std__media-types@^1.1.0", - "@tokenizer/http": "^0.9.2", - "@tokenizer/range": "^0.13.0", - "@web-applets/sdk": "https://gitpkg.vercel.app/unternet-co/web-applets/sdk?tokono.ma/experiment&scripts.postinstall=npm%20i%20%40types%2Fnode%20%26%26%20npx%20tsc", - "98.css": "^0.1.21", - "alien-signals": "^3.0.0", - "comlink": "^4.4.2", - "fast-average-color": "^9.5.0", - "iconoir": "^7.11.0", - "idb-keyval": "^6.2.1", - "music-metadata": "^11.9.0", - "query-string": "^9.3.1", - "subsonic-api": "^3.2.0", - "throttle-debounce": "^5.0.2", - "uint8arrays": "^5.1.0", - "uri-js": "^4.4.1", - "webamp": "^2.2.0", - "xxh32": "^2.0.5" - }, - "devDependencies": { - "@enhance/arc-plugin-enhance": "^11.0.4", - "@enhance/arc-plugin-styles": "^5.0.5", - "@enhance/cli": "^1.2.1", - "@enhance/plugin-typescript": "^0.2.2", - "@enhance/styles-cribsheet": "^0.0.11", - "@enhance/types": "^0.7.0", - "@types/throttle-debounce": "^5.0.2", - "@types/wicg-file-system-access": "^2023.10.6", - "astro": "^5.7.4", - "astro-purgecss": "^5.2.2", - "astro-scope": "^3.0.1", - "netlify": "^23.9.1", - "purgecss": "^7.0.2", - "sass": "^1.87.0", - "vite-plugin-wasm": "^3.4.1", - "vite-tsconfig-paths": "^5.1.4" - } -} diff --git a/deno.jsonc b/deno.jsonc index ebe407ede..2882aba25 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,32 +1,37 @@ { + "name": "@tokono.ma/diffuse", + "version": "4.0.0", + "vendor": true, "imports": { "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", - "@std/fs": "jsr:@std/fs@^1.0.19", - "@std/path": "jsr:@std/path@^1.1.2", "alien-signals": "npm:alien-signals@^3.0.0", - "lume/": "https://deno.land/x/lume@v3.0.11/", - "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", - "morphdom": "npm:morphdom@^2.7.7", + "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", "xxh32": "npm:xxh32@^2.0.5", - // Source + // Paths "@common/": "./src/common/", "@component/": "./src/component/", + + // Build + "@std/fs": "jsr:@std/fs@^1.0.19", + "@std/path": "jsr:@std/path@^1.1.2", + "lume/": "https://deno.land/x/lume@v3.0.11/", + "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", + }, + "exports": { + ".": "./src/mod.ts", }, "tasks": { "build": "deno task lume", "deploy:netlify": "npx netlify deploy --prod", - "lume": "echo \"import 'lume/cli.ts'\" | DENO_DIR=_vendor deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run --allow-sys -", + "lume": "echo \"import 'lume/cli.ts'\" | deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run --allow-sys -", "serve": "deno task lume -s", }, "compilerOptions": { "checkJs": true, - "paths": { - "@src/*": ["src/*"], - }, "types": ["lume/types.ts"], }, "unstable": ["temporal", "fmt-component"], @@ -36,4 +41,7 @@ "exclude": ["no-import-prefix"], }, }, + "publish": { + "include": ["LICENSE", "README.md", "src/**/*.js", "src/**/*.ts"], + }, } diff --git a/deno.lock b/deno.lock index 4d84578cc..bf6fbb4c1 100644 --- a/deno.lock +++ b/deno.lock @@ -3,9 +3,6 @@ "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", - "jsr:@mys/m-rpc@~0.12.2": "0.12.2", - "jsr:@mys/worker-fn@^3.2.1": "3.2.1", - "jsr:@okikio/transferables@^1.0.2": "1.0.2", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -21,6 +18,7 @@ "jsr:@std/http@1.0.20": "1.0.20", "jsr:@std/internal@^1.0.10": "1.0.12", "jsr:@std/internal@^1.0.9": "1.0.12", + "jsr:@std/json@^1.0.2": "1.0.2", "jsr:@std/jsonc@1.0.2": "1.0.2", "jsr:@std/media-types@^1.1.0": "1.1.0", "jsr:@std/net@^1.0.4": "1.0.6", @@ -33,7 +31,8 @@ "jsr:@std/toml@^1.0.3": "1.0.10", "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", - "npm:alien-signals@3": "3.0.0", + "npm:@types/node@*": "24.2.0", + "npm:alien-signals@3": "3.0.1", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:lightningcss-wasm@1.30.1": "1.30.1", "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", @@ -51,21 +50,6 @@ "@fry69/deep-diff@0.1.10": { "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" }, - "@mys/m-rpc@0.12.2": { - "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", - "dependencies": [ - "jsr:@okikio/transferables" - ] - }, - "@mys/worker-fn@3.2.1": { - "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", - "dependencies": [ - "jsr:@mys/m-rpc" - ] - }, - "@okikio/transferables@1.0.2": { - "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" - }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -115,8 +99,14 @@ "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" }, + "@std/json@1.0.2": { + "integrity": "d9e5497801c15fb679f55a2c01c7794ad7a5dfda4dd1bebab5e409cb5e0d34d4" + }, "@std/jsonc@1.0.2": { - "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7" + "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7", + "dependencies": [ + "jsr:@std/json" + ] }, "@std/media-types@1.1.0": { "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" @@ -147,8 +137,14 @@ } }, "npm": { - "alien-signals@3.0.0": { - "integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==" + "@types/node@24.2.0": { + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", + "dependencies": [ + "undici-types" + ] + }, + "alien-signals@3.0.1": { + "integrity": "sha512-ec02Wv5iOg7yG979PH9ykv5KN/KHznOxMlKy/Jr8lnBo3T94d4MUGo7FVdM8B2fM0e94twzEcWCyWzfIyeV19g==" }, "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" @@ -313,6 +309,9 @@ "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, + "undici-types@7.10.0": { + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" + }, "update-browserslist-db@1.1.3_browserslist@4.26.3": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ @@ -327,6 +326,7 @@ } }, "remote": { + "https://cdn.jsdelivr.net/gh/lumeland/bar@0.1.11/types.ts": "38f3714e1432c174009495333972f85fb306eb6313112ac8830fda9f1f47e87f", "https://deno.land/std@0.170.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", "https://deno.land/std@0.170.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", "https://deno.land/std@0.170.0/encoding/base64.ts": "8605e018e49211efc767686f6f687827d7f5fd5217163e981d8d693105640d7a", @@ -554,6 +554,7 @@ "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", + "https://deno.land/x/lume@v3.0.11/types.ts": "5f580502f366b9b25106eb72d49b30d9af7715c8a304fe6e21f382d3c2a4cc38", "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", diff --git a/netlify-imports.json b/netlify-imports.json deleted file mode 100644 index 055c53768..000000000 --- a/netlify-imports.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "imports": { - "@common/": "/common/", - "@elements/": "/elements/" - } -} diff --git a/src/common/element.js b/src/common/element.js index 2b9e80a8b..67bf37fac 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,4 +1,4 @@ -import morphdom from "morphdom/dist/morphdom.js"; +import morphdom from "morphdom"; import { effect } from "@common/signal.js"; /** diff --git a/src/component/constituent/blur/browser-list/types.d.ts b/src/component/constituent/blur/browser-list/types.d.ts index d4b45053c..d0b3704aa 100644 --- a/src/component/constituent/blur/browser-list/types.d.ts +++ b/src/component/constituent/blur/browser-list/types.d.ts @@ -1,4 +1,4 @@ -import { Signal } from "@common/signal.d.ts"; -import { Track } from "@elements/core/types.d.ts"; +import type { Signal } from "../../../../common/signal.d.ts"; +import type { Track } from "../../../core/types.d.ts"; export type State = { tracks: Signal }; diff --git a/src/component/engine/audio/types.d.ts b/src/component/engine/audio/types.d.ts index 70f01be6d..9fc1457b1 100644 --- a/src/component/engine/audio/types.d.ts +++ b/src/component/engine/audio/types.d.ts @@ -1,4 +1,4 @@ -import type { Signal } from "@common/signal.d.ts"; +import type { Signal } from "../../../common/signal.d.ts"; export interface Actions { pause: (_: { audioId: string }) => void; diff --git a/src/component/engine/queue/types.d.ts b/src/component/engine/queue/types.d.ts index 9a294e6be..a76ad064d 100644 --- a/src/component/engine/queue/types.d.ts +++ b/src/component/engine/queue/types.d.ts @@ -1,5 +1,9 @@ -import type { Track, TrackStats, TrackTags } from "@component/core/types.d.ts"; -import type { Signal } from "@common/signal.d.ts"; +import type { + Track, + TrackStats, + TrackTags, +} from "../../../component/core/types.d.ts"; +import type { Signal } from "../../../common/signal.d.ts"; export interface Actions { add: (items: Item[]) => void; diff --git a/src/mod.ts b/src/mod.ts new file mode 100644 index 000000000..2d219de64 --- /dev/null +++ b/src/mod.ts @@ -0,0 +1 @@ +export * from "./component/engine/audio/element.js"; From 638a95ca0f8cdaeec0459328932a9b4e5a1ea3d3 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 20 Oct 2025 17:26:58 +0200 Subject: [PATCH 030/244] feat: leader election for audio --- _config.ts | 7 +- deno.jsonc | 2 + deno.lock | 68 ++++++++++++++ src/common/lock.js | 11 +++ src/common/worker.js | 2 +- src/component/engine/audio/element.js | 128 ++++++++++++++++++++++---- src/component/engine/audio/types.d.ts | 7 +- src/component/engine/queue/element.js | 6 +- src/theme/blur/index.vto | 27 ++++-- 9 files changed, 228 insertions(+), 30 deletions(-) create mode 100644 src/common/lock.js diff --git a/_config.ts b/_config.ts index 3e1458bb5..505f56af9 100644 --- a/_config.ts +++ b/_config.ts @@ -2,6 +2,7 @@ import lume from "lume/mod.ts"; import esbuild from "lume/plugins/esbuild.ts"; import postcss from "lume/plugins/postcss.ts"; +import sourceMaps from "lume/plugins/source_maps.ts"; import * as path from "@std/path"; import { ensureDirSync } from "@std/fs/ensure-dir"; @@ -19,7 +20,7 @@ site.use(esbuild({ extensions: [".js"], options: { bundle: true, - // minify: true, + minify: false, // outExtension: { ".js": ".min.js" }, splitting: true, }, @@ -38,6 +39,10 @@ site.add("/favicons"); site.add("/fonts"); site.add("/images"); +// MISC + +site.use(sourceMaps()); + // SCRIPTS site.script("copy-type-defs", () => { diff --git a/deno.jsonc b/deno.jsonc index 2882aba25..edeb8221b 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -8,7 +8,9 @@ "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "alien-signals": "npm:alien-signals@^3.0.0", + "broadcast-channel": "npm:broadcast-channel@^7.1.0", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", + "tab-election": "npm:tab-election@^4.2.8", "xxh32": "npm:xxh32@^2.0.5", // Paths diff --git a/deno.lock b/deno.lock index bf6fbb4c1..1b15f2595 100644 --- a/deno.lock +++ b/deno.lock @@ -3,6 +3,9 @@ "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", + "jsr:@mys/m-rpc@~0.12.2": "0.12.2", + "jsr:@mys/worker-fn@^3.2.1": "3.2.1", + "jsr:@okikio/transferables@^1.0.2": "1.0.2", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -34,6 +37,7 @@ "npm:@types/node@*": "24.2.0", "npm:alien-signals@3": "3.0.1", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", + "npm:broadcast-channel@^7.1.0": "7.1.0", "npm:lightningcss-wasm@1.30.1": "1.30.1", "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", "npm:markdown-it-deflist@3.0.0": "3.0.0", @@ -41,6 +45,7 @@ "npm:morphdom@^2.7.7": "2.7.7", "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", "npm:postcss@8.5.6": "8.5.6", + "npm:tab-election@^4.2.8": "4.2.8", "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { @@ -50,6 +55,21 @@ "@fry69/deep-diff@0.1.10": { "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" }, + "@mys/m-rpc@0.12.2": { + "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", + "dependencies": [ + "jsr:@okikio/transferables" + ] + }, + "@mys/worker-fn@3.2.1": { + "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", + "dependencies": [ + "jsr:@mys/m-rpc" + ] + }, + "@okikio/transferables@1.0.2": { + "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" + }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -137,6 +157,12 @@ } }, "npm": { + "@babel/runtime@7.27.0": { + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "dependencies": [ + "regenerator-runtime" + ] + }, "@types/node@24.2.0": { "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", "dependencies": [ @@ -166,6 +192,15 @@ "integrity": "sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==", "bin": true }, + "broadcast-channel@7.1.0": { + "integrity": "sha512-InJljddsYWbEL8LBnopnCg+qMQp9KcowvYWOt4YWrjD5HmxzDYKdVbDS1w/ji5rFZdRD58V5UxJPtBdpEbEJYw==", + "dependencies": [ + "@babel/runtime", + "oblivious-set", + "p-queue", + "unload" + ] + }, "browserslist@4.26.3": { "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dependencies": [ @@ -189,6 +224,9 @@ "escalade@3.2.0": { "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, + "eventemitter3@4.0.7": { + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, @@ -253,6 +291,25 @@ "normalize-range@0.1.2": { "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, + "oblivious-set@1.4.0": { + "integrity": "sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==" + }, + "p-finally@1.0.0": { + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-queue@6.6.2": { + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": [ + "eventemitter3", + "p-timeout" + ] + }, + "p-timeout@3.2.0": { + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": [ + "p-finally" + ] + }, "path-parse@1.0.7": { "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, @@ -291,6 +348,9 @@ "pify" ] }, + "regenerator-runtime@0.14.1": { + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "resolve@1.22.10": { "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dependencies": [ @@ -306,12 +366,18 @@ "supports-preserve-symlinks-flag@1.0.0": { "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "tab-election@4.2.8": { + "integrity": "sha512-qHmh4jCMh1KKppqhIz3VWQPXGicCWaq2xtx9a37ZQroqbcXmCVUmmaf2rvFb0WThoJr9iaimK0PyHTxPkXcrDQ==" + }, "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, "undici-types@7.10.0": { "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" }, + "unload@2.4.1": { + "integrity": "sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==" + }, "update-browserslist-db@1.1.3_browserslist@4.26.3": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ @@ -588,7 +654,9 @@ "jsr:@std/fs@^1.0.19", "jsr:@std/path@^1.1.2", "npm:alien-signals@3", + "npm:broadcast-channel@^7.1.0", "npm:morphdom@^2.7.7", + "npm:tab-election@^4.2.8", "npm:xxh32@^2.0.5" ] } diff --git a/src/common/lock.js b/src/common/lock.js new file mode 100644 index 000000000..09d83b74d --- /dev/null +++ b/src/common/lock.js @@ -0,0 +1,11 @@ +/** + * @returns {PromiseWithResolvers & { status: PromiseWithResolvers<"acquired" | "waiting"> }} + */ +export function lock() { + const w = Promise.withResolvers(); + + return { + ...w, + status: Promise.withResolvers(), + }; +} diff --git a/src/common/worker.js b/src/common/worker.js index 453fdd463..6a6ffceb9 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -4,7 +4,7 @@ import { getTransferables } from "@okikio/transferables"; import { xxh32 } from "xxh32"; /** - * @import {NodeWorkerOrNodeMessagePort, WorkerGlobalScope} from "@mys/m-rpc"; + * @import {WorkerGlobalScope} from "@mys/m-rpc"; * @import {Announcement} from "./worker.d.ts" */ diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index d968fd7c5..8a205a770 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -1,5 +1,7 @@ import DiffuseElement from "@common/element.js"; import { signal } from "@common/signal.js"; +import { define, use } from "@common/worker.js"; +import { lock } from "@common/lock.js"; /** * @import {Actions, Audio, AudioState, Signals, State} from "./types.d.ts" @@ -21,11 +23,70 @@ const _SILENT_MP3 = * @implements {Signals} */ class AudioEngine extends DiffuseElement { - static observedAttributes = ["is-playing", "volume"]; + // TODO: + // static observedAttributes = ["volume"]; constructor() { super(); + // Group + const group = this.getAttribute("group") || crypto.randomUUID(); + const isShared = this.hasAttribute("group"); + + // Setup leader election if shared + if (isShared) { + const name = `diffuse/engine/audio/${group}`; + + const channel = new BroadcastChannel(name); + const msg = new MessageChannel(); + + channel.onmessage = (event) => msg.port1.postMessage(event.data); + msg.port1.addEventListener( + "message", + (event) => channel.postMessage(event.data), + ); + + msg.port1.start(); + msg.port2.start(); + + // Port 1 = Incoming, from channel. + // Port 2 = Outgoing, to channel. + + this.lock = lock(); + + define("pause", this.#pause.bind(this), msg.port2); + define("play", this.#play.bind(this), msg.port2); + define("reload", this.#reload.bind(this), msg.port2); + define("seek", this.#seek.bind(this), msg.port2); + define("supply", this.#supply.bind(this), msg.port2); + + /** + * @param {string} method + * @param {Function} fn + */ + const u = (method, fn) => { + /** @param {any[]} args */ + return async (...args) => { + const status = await this.lock?.status.promise; + return status === "waiting" + ? use(method, msg.port2)(...args) + : fn.call(this, ...args); + }; + }; + + this.pause = u("pause", this.#pause); + this.play = u("play", this.#play); + this.reload = u("reload", this.#reload); + this.seek = u("seek", this.#seek); + this.supply = u("supply", this.#supply); + } else { + this.pause = this.#pause; + this.play = this.#play; + this.reload = this.#reload; + this.seek = this.#seek; + this.supply = this.#supply; + } + // TODO: Get volume from previous session if possible // const VOLUME_KEY = `@elements/engine/audio/${this.groupId}/volume`; // const vol = localStorage.getItem(VOLUME_KEY); @@ -35,7 +96,7 @@ class AudioEngine extends DiffuseElement { volume = signal(0.5); isPlaying = signal(false); - items = signal(/** @type {Audio[]} */ ([])); + #items = signal(/** @type {Audio[]} */ ([])); // STATE @@ -45,7 +106,7 @@ class AudioEngine extends DiffuseElement { get state() { return { isPlaying: this.isPlaying, - items: this.items, + items: this.#items, volume: this.volume, }; } @@ -58,9 +119,9 @@ class AudioEngine extends DiffuseElement { connectedCallback() { super.connectedCallback(); + // Monitor volume + // NOTE: Support different volume levels for audio elements? this.effect(() => { - // NOTE: Support different volume levels for audio elements? - Array.from(this.querySelectorAll("de-audio-item audio")).forEach( (node) => { const audio = /** @type {HTMLAudioElement} */ (node); @@ -69,21 +130,56 @@ class AudioEngine extends DiffuseElement { }, ); }); + + // Setup leader election if shared + const isShared = this.hasAttribute("group"); + const elementLock = this.lock; + + if (isShared && elementLock) { + navigator.locks.request( + `${name}/lock`, + { ifAvailable: true }, + (lock) => { + elementLock.status.resolve(lock ? "acquired" : "waiting"); + if (lock) return elementLock.promise; + }, + ); + + elementLock.status.promise.then((status) => { + const name = `diffuse/engine/audio/${ + this.getAttribute("group") || "main" + }`; + + if (status === "acquired") { + console.log(`🧙 Elected leader for: ${name}`); + } else { + console.log(`🔮 Watching leader: ${name}`); + } + }); + } } - // ACTIONS + /** + * @override + */ + disconnectedCallback() { + super.disconnectedCallback(); + if (this.lock) this.lock.resolve(); + } + + // ACTIONS (PRIVATE) /** * @type {Actions["pause"]} */ - pause({ audioId }) { + #pause({ audioId }) { this.withAudioNode(audioId, (audio) => audio.pause()); } /** * @type {Actions["play"]} */ - play({ audioId, volume }) { + #play({ audioId, volume }) { this.withAudioNode(audioId, (audio, item) => { audio.volume = volume ?? this.state.volume(); audio.muted = false; @@ -109,7 +205,7 @@ class AudioEngine extends DiffuseElement { /** * @type {Actions["reload"]} */ - reload(args) { + #reload(args) { this.withAudioNode(args.audioId, (audio, item) => { if (audio.readyState === 0 || audio.error?.code === 2) { audio.load(); @@ -122,7 +218,7 @@ class AudioEngine extends DiffuseElement { } if (args.play) { - this.play({ audioId: args.audioId, volume: audio.volume }); + this.#play({ audioId: args.audioId, volume: audio.volume }); } } }); @@ -131,7 +227,7 @@ class AudioEngine extends DiffuseElement { /** * @type {Actions["seek"]} */ - seek({ audioId, percentage }) { + #seek({ audioId, percentage }) { this.withAudioNode(audioId, (audio) => { if (!isNaN(audio.duration)) { audio.currentTime = audio.duration * percentage; @@ -140,11 +236,11 @@ class AudioEngine extends DiffuseElement { } /** - * @type {Actions["yield"]} + * @type {Actions["supply"]} */ - yield(args) { - this.items(args.audio); - if (args.play) this.play(args.play); + #supply(args) { + this.#items(args.audio); + if (args.play) this.#play(args.play); } // RENDER @@ -153,8 +249,6 @@ class AudioEngine extends DiffuseElement { * @param {RenderArg} _ */ render({ html, state }) { - console.log("Render"); - const nodes = state.items().map((audio) => { const ip = audio.progress === undefined ? "0" diff --git a/src/component/engine/audio/types.d.ts b/src/component/engine/audio/types.d.ts index 9fc1457b1..084b19c2d 100644 --- a/src/component/engine/audio/types.d.ts +++ b/src/component/engine/audio/types.d.ts @@ -5,7 +5,7 @@ export interface Actions { play: (_: { audioId: string; volume?: number }) => void; reload: (_: { audioId: string; play: boolean; progress?: number }) => void; seek: (_: { audioId: string; percentage: number }) => void; - yield: ( + supply: ( _: { audio: Audio[]; play?: { audioId: string; volume?: number } }, ) => void; } @@ -38,8 +38,9 @@ export interface AudioState { export interface Signals { isPlaying: Signal; - items: Signal; volume: Signal; } -export type State = Signals; +export type State = Signals & { + items: Signal; +}; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 909faa008..2089cd2dd 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -18,9 +18,11 @@ class QueueEngine extends DiffuseElement { constructor() { super(); - // Setup worker + // Group const group = this.getAttribute("group") || crypto.randomUUID(); - const isShared = this.hasAttribute("shared"); + const isShared = this.hasAttribute("group"); + + // Setup worker const name = `diffuse/engine/queue/${group}`; const url = new URL("./worker.js", import.meta.url); diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 03ed99557..61554d709 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,21 +4,36 @@ - + + From cf326ebd37619d3d34c16010e161ecaf678b86a3 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 21 Oct 2025 16:33:15 +0200 Subject: [PATCH 031/244] feat: BroadcastableDiffuseElement --- src/common/element.d.ts | 4 + src/common/element.js | 167 +++++++++++++++++- src/common/lock.js | 11 -- src/common/signal.js | 2 + src/common/worker.js | 6 +- .../constituent/blur/browser-list/element.js | 2 +- src/component/engine/audio/element.js | 125 ++++--------- src/component/engine/queue/element.js | 2 +- src/theme/blur/index.vto | 2 - 9 files changed, 207 insertions(+), 114 deletions(-) delete mode 100644 src/common/lock.js diff --git a/src/common/element.d.ts b/src/common/element.d.ts index 8576ffe5b..e350271df 100644 --- a/src/common/element.d.ts +++ b/src/common/element.d.ts @@ -1,3 +1,7 @@ +export type BroadcastingStatus = + | { leader: true; initialLeader: boolean } + | { leader: false }; + export type HtmlTagFunction = ( strings: string[] | ArrayLike, ...values: unknown[] diff --git a/src/common/element.js b/src/common/element.js index 67bf37fac..331348512 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,11 +1,18 @@ import morphdom from "morphdom"; -import { effect } from "@common/signal.js"; + +import { effect, unbiasedSignal } from "@common/signal.js"; +import { define, use } from "@common/worker.js"; /** - * @import {HtmlTagFunction, MorphOptions} from "./element.d.ts" + * @import {BroadcastingStatus, HtmlTagFunction, MorphOptions} from "./element.d.ts" + * @import {Signal} from "./signal.d.ts" */ -export default class DiffuseElement extends HTMLElement { +/** + * Base for custom elements, provides some utility functionality + * around rendering and managing signals. + */ +export class DiffuseElement extends HTMLElement { #disposables = /** @type {Array<() => void>} */ ([]); #teardown() { @@ -92,3 +99,157 @@ export default class DiffuseElement extends HTMLElement { this.#teardown(); } } + +/** + * Broadcastable version of the base class. + * + * Share the state of an element across multiple tabs + * of the same origin and have one instance be the leader. + */ +export class BroadcastableDiffuseElement extends DiffuseElement { + broadcasted = false; + + /** @type {PromiseWithResolvers} */ + #lock = Promise.withResolvers(); + + /** @type {PromiseWithResolvers} */ + #status = Promise.withResolvers(); + + constructor() { + super(); + + this.broadcast = this.broadcast.bind(this); + + /** @type {Signal>} */ + this.broadcastingStatus = unbiasedSignal(this.#status.promise); + } + + /** + * @param {string} name + */ + broadcast(name) { + const channel = new BroadcastChannel(name); + const msg = new MessageChannel(); + + this.broadcasted = true; + this.name = name; + + channel.addEventListener( + "message", + async (event) => { + const name = event.data.name?.split(":"); + + if (name[0] === "leader") { + const status = await this.#status.promise; + if (status.leader) { + msg.port1.postMessage({ + ...event.data, + name: name.splice(1).join(":"), + }); + } + } else { + msg.port1.postMessage(event.data); + } + }, + ); + + msg.port1.addEventListener( + "message", + (event) => channel.postMessage(event.data), + ); + + msg.port1.start(); + msg.port2.start(); + + async function anyoneWaiting() { + const state = await navigator.locks.query(); + return !!state.pending?.length; + } + + /** + * @param {string} method + * @param {Function} fn + */ + return (method, fn) => { + define(method, fn.bind(this), msg.port2); + + /** @param {any[]} args */ + const leaderOnly = async (...args) => { + const status = await this.#status.promise; + return status.leader + ? fn.call(this, ...args) + : use(`leader:${method}`, msg.port2)(...args); + }; + + /** @param {any[]} args */ + const replicate = (...args) => { + anyoneWaiting().then((bool) => { + if (bool) use(method, msg.port2)(...args); + }); + return fn.call(this, ...args); + }; + + return { + leaderOnly, + replicate, + }; + }; + } + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + if (!this.broadcasted) return; + + // Grab a lock if it isn't acquired yet, + // and hold it until `this.lock.promise` resolves. + navigator.locks.request( + `${this.name}/lock`, + { ifAvailable: true }, + (lock) => { + this.#status.resolve( + lock ? { leader: true, initialLeader: true } : { leader: false }, + ); + if (lock) return this.#lock.promise; + }, + ); + + // When the lock status is initially determined, log its status. + // Additionally, wait for lock if needed. + this.#status.promise.then((status) => { + if (status.leader) { + console.log(`🧙 Elected leader for: ${this.name}`); + } else { + console.log(`🔮 Watching leader: ${this.name}`); + } + + // Wait for leadership + if (status.leader === false) { + navigator.locks.request( + `${this.name}/lock`, + () => { + this.#status = Promise.withResolvers(); + this.#status.resolve({ leader: true, initialLeader: false }); + + this.broadcastingStatus(this.#status.promise); + + return this.#lock.promise; + }, + ); + } + }); + } + + /** + * @override + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.#lock.resolve(); + } +} diff --git a/src/common/lock.js b/src/common/lock.js deleted file mode 100644 index 09d83b74d..000000000 --- a/src/common/lock.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @returns {PromiseWithResolvers & { status: PromiseWithResolvers<"acquired" | "waiting"> }} - */ -export function lock() { - const w = Promise.withResolvers(); - - return { - ...w, - status: Promise.withResolvers(), - }; -} diff --git a/src/common/signal.js b/src/common/signal.js index cdc00b54f..77d64b76c 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -25,3 +25,5 @@ export function signal(initialValue) { if (diff) s(b); }); } + +export const unbiasedSignal = alienSignal; diff --git a/src/common/worker.js b/src/common/worker.js index 6a6ffceb9..ec9a57394 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -4,7 +4,7 @@ import { getTransferables } from "@okikio/transferables"; import { xxh32 } from "xxh32"; /** - * @import {WorkerGlobalScope} from "@mys/m-rpc"; + * @import {MRpcCallOptions, WorkerGlobalScope} from "@mys/m-rpc"; * @import {Announcement} from "./worker.d.ts" */ @@ -111,12 +111,14 @@ export function define( /** * @param {string} name * @param {MessagePort | Worker | WorkerGlobalScope} [context] Uses `globalThis` by default. + * @param {MRpcCallOptions} [options] */ export function use( name, context = /** @type {WorkerGlobalScope} */ (globalThis), + options, ) { - return useWorkerFn(name, /** @type {any} */ (context)); + return useWorkerFn(name, /** @type {any} */ (context), options); } //////////////////////////////////////////// diff --git a/src/component/constituent/blur/browser-list/element.js b/src/component/constituent/blur/browser-list/element.js index b505c2ed4..b8b710069 100644 --- a/src/component/constituent/blur/browser-list/element.js +++ b/src/component/constituent/blur/browser-list/element.js @@ -1,4 +1,4 @@ -import DiffuseElement from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; /** diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 8a205a770..a76d32971 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -1,7 +1,8 @@ -import DiffuseElement from "@common/element.js"; +import { + BroadcastableDiffuseElement, + DiffuseElement, +} from "@common/element.js"; import { signal } from "@common/signal.js"; -import { define, use } from "@common/worker.js"; -import { lock } from "@common/lock.js"; /** * @import {Actions, Audio, AudioState, Signals, State} from "./types.d.ts" @@ -22,7 +23,7 @@ const _SILENT_MP3 = * @implements {Actions} * @implements {Signals} */ -class AudioEngine extends DiffuseElement { +class AudioEngine extends BroadcastableDiffuseElement { // TODO: // static observedAttributes = ["volume"]; @@ -35,56 +36,16 @@ class AudioEngine extends DiffuseElement { // Setup leader election if shared if (isShared) { - const name = `diffuse/engine/audio/${group}`; + const fn = this.broadcast(`diffuse/engine/audio/${group}`); - const channel = new BroadcastChannel(name); - const msg = new MessageChannel(); + this.pause = fn("pause", this.pause).leaderOnly; + this.play = fn("play", this.play).leaderOnly; + this.reload = fn("reload", this.reload).leaderOnly; + this.seek = fn("seek", this.seek).leaderOnly; + this.supply = fn("supply", this.supply).replicate; - channel.onmessage = (event) => msg.port1.postMessage(event.data); - msg.port1.addEventListener( - "message", - (event) => channel.postMessage(event.data), - ); - - msg.port1.start(); - msg.port2.start(); - - // Port 1 = Incoming, from channel. - // Port 2 = Outgoing, to channel. - - this.lock = lock(); - - define("pause", this.#pause.bind(this), msg.port2); - define("play", this.#play.bind(this), msg.port2); - define("reload", this.#reload.bind(this), msg.port2); - define("seek", this.#seek.bind(this), msg.port2); - define("supply", this.#supply.bind(this), msg.port2); - - /** - * @param {string} method - * @param {Function} fn - */ - const u = (method, fn) => { - /** @param {any[]} args */ - return async (...args) => { - const status = await this.lock?.status.promise; - return status === "waiting" - ? use(method, msg.port2)(...args) - : fn.call(this, ...args); - }; - }; - - this.pause = u("pause", this.#pause); - this.play = u("play", this.#play); - this.reload = u("reload", this.#reload); - this.seek = u("seek", this.#seek); - this.supply = u("supply", this.#supply); - } else { - this.pause = this.#pause; - this.play = this.#play; - this.reload = this.#reload; - this.seek = this.#seek; - this.supply = this.#supply; + this.isPlaying = fn("isPlaying", this.isPlaying).replicate; + this.volume = fn("volume", this.volume).replicate; } // TODO: Get volume from previous session if possible @@ -119,6 +80,17 @@ class AudioEngine extends DiffuseElement { connectedCallback() { super.connectedCallback(); + // Manage playback across tabs if needed + if (this.broadcasted) { + this.effect(async () => { + const status = await this.broadcastingStatus(); + if (status.leader && status.initialLeader === false) { + // TODO: + // console.log("🧙 Leadership acquired"); + } + }); + } + // Monitor volume // NOTE: Support different volume levels for audio elements? this.effect(() => { @@ -130,41 +102,6 @@ class AudioEngine extends DiffuseElement { }, ); }); - - // Setup leader election if shared - const isShared = this.hasAttribute("group"); - const elementLock = this.lock; - - if (isShared && elementLock) { - navigator.locks.request( - `${name}/lock`, - { ifAvailable: true }, - (lock) => { - elementLock.status.resolve(lock ? "acquired" : "waiting"); - if (lock) return elementLock.promise; - }, - ); - - elementLock.status.promise.then((status) => { - const name = `diffuse/engine/audio/${ - this.getAttribute("group") || "main" - }`; - - if (status === "acquired") { - console.log(`🧙 Elected leader for: ${name}`); - } else { - console.log(`🔮 Watching leader: ${name}`); - } - }); - } - } - - /** - * @override - */ - disconnectedCallback() { - super.disconnectedCallback(); - if (this.lock) this.lock.resolve(); } // ACTIONS (PRIVATE) @@ -172,14 +109,14 @@ class AudioEngine extends DiffuseElement { /** * @type {Actions["pause"]} */ - #pause({ audioId }) { + pause({ audioId }) { this.withAudioNode(audioId, (audio) => audio.pause()); } /** * @type {Actions["play"]} */ - #play({ audioId, volume }) { + play({ audioId, volume }) { this.withAudioNode(audioId, (audio, item) => { audio.volume = volume ?? this.state.volume(); audio.muted = false; @@ -205,7 +142,7 @@ class AudioEngine extends DiffuseElement { /** * @type {Actions["reload"]} */ - #reload(args) { + reload(args) { this.withAudioNode(args.audioId, (audio, item) => { if (audio.readyState === 0 || audio.error?.code === 2) { audio.load(); @@ -218,7 +155,7 @@ class AudioEngine extends DiffuseElement { } if (args.play) { - this.#play({ audioId: args.audioId, volume: audio.volume }); + this.play({ audioId: args.audioId, volume: audio.volume }); } } }); @@ -227,7 +164,7 @@ class AudioEngine extends DiffuseElement { /** * @type {Actions["seek"]} */ - #seek({ audioId, percentage }) { + seek({ audioId, percentage }) { this.withAudioNode(audioId, (audio) => { if (!isNaN(audio.duration)) { audio.currentTime = audio.duration * percentage; @@ -238,9 +175,9 @@ class AudioEngine extends DiffuseElement { /** * @type {Actions["supply"]} */ - #supply(args) { + supply(args) { this.#items(args.audio); - if (args.play) this.#play(args.play); + if (args.play) this.play(args.play); } // RENDER diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 2089cd2dd..fa07e2cd7 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -1,4 +1,4 @@ -import DiffuseElement from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; import { listen, use } from "@common/worker.js"; diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 61554d709..a07ad341a 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -15,8 +15,6 @@ const audio = document.querySelector(Audio.NAME) const queue = document.querySelector(Queue.NAME) - // https://archive.org/download/deathofsalesmans00mill/01_Side_1_Death_of_a_salesman_-_Introduction_Act_1__Part_1.mp3 - await audio.supply({ audio: [ { From 9cdea8e0435383dbbfcec503fe9f27f38de128d0 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 21 Oct 2025 17:21:39 +0200 Subject: [PATCH 032/244] chore: minor prep for blur theme --- src/styles/theme/blur/index.css | 40 +++------------------------------ src/theme/blur/index.vto | 7 ++++-- 2 files changed, 8 insertions(+), 39 deletions(-) diff --git a/src/styles/theme/blur/index.css b/src/styles/theme/blur/index.css index 0be5bebd5..4c4b3117f 100644 --- a/src/styles/theme/blur/index.css +++ b/src/styles/theme/blur/index.css @@ -14,40 +14,6 @@ body { height: 100dvh; } -iframe { - border: 0; -} - -/*********************************** - * Applets (No UI) - ***********************************/ -iframe[src*="/configurator/"], -iframe[src*="/engine/"], -iframe[src*="/input/"], -iframe[src*="/orchestrator/"], -iframe[src*="/processor/"], -iframe[src*="/output/"] { - height: 0; - left: 110vw; - opacity: 0; - overflow: hidden; - pointer-events: none; - position: absolute; - top: 110vh; - width: 0; -} - -/* Audio is a special case, iframe needs to be "visible" in order to play the audio. */ -#applet__engine__audio { - height: 1px; - left: 0; - opacity: 0; - pointer-events: none; - position: absolute; - top: 0; - width: 1px; -} - /*********************************** * Main ***********************************/ @@ -60,13 +26,13 @@ main { overflow: hidden; padding: var(--space-md) var(--space-md); - & iframe { + /* TODO: & iframe { border-radius: 6px; - } + }*/ } /*********************************** - * Applets + * Elements ***********************************/ iframe[src*="/artwork-controller/"] { diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index a07ad341a..95173c272 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,8 +4,11 @@ - - + + + +
    +
    diff --git a/_backup/pages/processor/metadata/_manifest.json b/_backup/pages/processor/metadata/_manifest.json deleted file mode 100644 index 715b945c3..000000000 --- a/_backup/pages/processor/metadata/_manifest.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "diffuse/processor/metadata", - "title": "Diffuse Processor | Metadata fetcher", - "entrypoint": "index.html", - "actions": { - "supply": { - "title": "Supply", - "description": "Get the metadata for a given URL or stream.", - "params_schema": { - "type": "object", - "properties": { - "includeArtwork": { - "type": "boolean", - "description": "Include artwork in the output." - }, - "mimeType": { - "type": "string" - }, - "stream": { - "type": "object" - }, - "urls": { - "type": "object", - "properties": { - "get": { "type": "string" }, - "head": { "type": "string" } - }, - "required": ["get", "head"] - } - } - } - } - } -} diff --git a/_backup/pages/processor/metadata/index.astro b/_backup/pages/processor/metadata/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/processor/metadata/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/processor/metadata/types.d.ts b/_backup/pages/processor/metadata/types.d.ts deleted file mode 100644 index 39cf74c28..000000000 --- a/_backup/pages/processor/metadata/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "../../../scripts/processor/metadata/types.d.ts"; diff --git a/_backup/scripts/processor/metadata/types.d.ts b/_backup/scripts/processor/metadata/types.d.ts deleted file mode 100644 index e0ef7e68c..000000000 --- a/_backup/scripts/processor/metadata/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { IPicture } from "music-metadata"; -import type { TrackStats, TrackTags } from "@applets/core/types"; - -export type Extraction = { artwork?: IPicture[]; stats?: TrackStats; tags?: TrackTags }; -export type Urls = { get: string; head: string }; diff --git a/_backup/scripts/processor/metadata/worker.ts b/_backup/scripts/processor/metadata/worker.ts deleted file mode 100644 index f00b1f920..000000000 --- a/_backup/scripts/processor/metadata/worker.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { Extraction, Urls } from "./types.d.ts"; -import { provide, transfer } from "@scripts/common"; -import { musicMetadataTags } from "./common.ts"; - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// -const actions = { - supply, -}; - -const { tasks } = provide({ - actions, - tasks: actions, -}); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -// Actions - -async function supply(args: { - includeArtwork?: boolean; - mimeType?: string; - stream?: ReadableStream; - urls?: Urls; -}): Promise { - // Construct records - // TODO: Use other metadata lib as fallback: https://github.com/buzz/mediainfo.js - const response = await musicMetadataTags(args).catch((err): Extraction => { - console.warn("Metadata processor error:", err); - console.log(args); - - return {}; - }); - - // Fin - return transfer(response); -} diff --git a/deno.jsonc b/deno.jsonc index 2882aba25..a667ab678 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -9,8 +9,14 @@ "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "alien-signals": "npm:alien-signals@^3.0.0", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", + "uri-js": "npm:uri-js@^4.4.1", "xxh32": "npm:xxh32@^2.0.5", + // music-metadata + "@tokenizer/http": "https://esm.sh/@tokenizer/http@0.9.2/lib/http-client.js", + "@tokenizer/range": "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js", + "music-metadata": "https://esm.sh/music-metadata@11.9.0/lib/core.js", + // Paths "@common/": "./src/common/", "@component/": "./src/component/", diff --git a/deno.lock b/deno.lock index 1b15f2595..b76464743 100644 --- a/deno.lock +++ b/deno.lock @@ -2,10 +2,6 @@ "version": "5", "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", - "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", - "jsr:@mys/m-rpc@~0.12.2": "0.12.2", - "jsr:@mys/worker-fn@^3.2.1": "3.2.1", - "jsr:@okikio/transferables@^1.0.2": "1.0.2", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -21,7 +17,6 @@ "jsr:@std/http@1.0.20": "1.0.20", "jsr:@std/internal@^1.0.10": "1.0.12", "jsr:@std/internal@^1.0.9": "1.0.12", - "jsr:@std/json@^1.0.2": "1.0.2", "jsr:@std/jsonc@1.0.2": "1.0.2", "jsr:@std/media-types@^1.1.0": "1.1.0", "jsr:@std/net@^1.0.4": "1.0.6", @@ -34,10 +29,8 @@ "jsr:@std/toml@^1.0.3": "1.0.10", "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", - "npm:@types/node@*": "24.2.0", - "npm:alien-signals@3": "3.0.1", + "npm:alien-signals@3": "3.0.3", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", - "npm:broadcast-channel@^7.1.0": "7.1.0", "npm:lightningcss-wasm@1.30.1": "1.30.1", "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", "npm:markdown-it-deflist@3.0.0": "3.0.0", @@ -45,31 +38,13 @@ "npm:morphdom@^2.7.7": "2.7.7", "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", "npm:postcss@8.5.6": "8.5.6", - "npm:tab-election@^4.2.8": "4.2.8", + "npm:uri-js@^4.4.1": "4.4.1", "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { "@deno/loader@0.3.6": { "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" }, - "@fry69/deep-diff@0.1.10": { - "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" - }, - "@mys/m-rpc@0.12.2": { - "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", - "dependencies": [ - "jsr:@okikio/transferables" - ] - }, - "@mys/worker-fn@3.2.1": { - "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", - "dependencies": [ - "jsr:@mys/m-rpc" - ] - }, - "@okikio/transferables@1.0.2": { - "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" - }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -119,14 +94,8 @@ "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" }, - "@std/json@1.0.2": { - "integrity": "d9e5497801c15fb679f55a2c01c7794ad7a5dfda4dd1bebab5e409cb5e0d34d4" - }, "@std/jsonc@1.0.2": { - "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7", - "dependencies": [ - "jsr:@std/json" - ] + "integrity": "909605dae3af22bd75b1cbda8d64a32cf1fd2cf6efa3f9e224aba6d22c0f44c7" }, "@std/media-types@1.1.0": { "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" @@ -157,20 +126,8 @@ } }, "npm": { - "@babel/runtime@7.27.0": { - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "dependencies": [ - "regenerator-runtime" - ] - }, - "@types/node@24.2.0": { - "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", - "dependencies": [ - "undici-types" - ] - }, - "alien-signals@3.0.1": { - "integrity": "sha512-ec02Wv5iOg7yG979PH9ykv5KN/KHznOxMlKy/Jr8lnBo3T94d4MUGo7FVdM8B2fM0e94twzEcWCyWzfIyeV19g==" + "alien-signals@3.0.3": { + "integrity": "sha512-2JXjom6R7ZwrISpUphLhf4htUq1aKRCennTJ6u9kFfr3sLmC9+I4CxxVi+McoFnIg+p1HnVrfLT/iCt4Dlz//Q==" }, "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" @@ -188,19 +145,10 @@ ], "bin": true }, - "baseline-browser-mapping@2.8.18": { - "integrity": "sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==", + "baseline-browser-mapping@2.8.19": { + "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", "bin": true }, - "broadcast-channel@7.1.0": { - "integrity": "sha512-InJljddsYWbEL8LBnopnCg+qMQp9KcowvYWOt4YWrjD5HmxzDYKdVbDS1w/ji5rFZdRD58V5UxJPtBdpEbEJYw==", - "dependencies": [ - "@babel/runtime", - "oblivious-set", - "p-queue", - "unload" - ] - }, "browserslist@4.26.3": { "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dependencies": [ @@ -224,9 +172,6 @@ "escalade@3.2.0": { "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, - "eventemitter3@4.0.7": { - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, @@ -285,31 +230,12 @@ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "bin": true }, - "node-releases@2.0.25": { - "integrity": "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==" + "node-releases@2.0.26": { + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==" }, "normalize-range@0.1.2": { "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, - "oblivious-set@1.4.0": { - "integrity": "sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==" - }, - "p-finally@1.0.0": { - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - }, - "p-queue@6.6.2": { - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dependencies": [ - "eventemitter3", - "p-timeout" - ] - }, - "p-timeout@3.2.0": { - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dependencies": [ - "p-finally" - ] - }, "path-parse@1.0.7": { "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, @@ -342,17 +268,17 @@ "punycode.js@2.3.1": { "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" }, + "punycode@2.3.1": { + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, "read-cache@1.0.0": { "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dependencies": [ "pify" ] }, - "regenerator-runtime@0.14.1": { - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "resolve@1.22.10": { - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "resolve@1.22.11": { + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dependencies": [ "is-core-module", "path-parse", @@ -366,18 +292,9 @@ "supports-preserve-symlinks-flag@1.0.0": { "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "tab-election@4.2.8": { - "integrity": "sha512-qHmh4jCMh1KKppqhIz3VWQPXGicCWaq2xtx9a37ZQroqbcXmCVUmmaf2rvFb0WThoJr9iaimK0PyHTxPkXcrDQ==" - }, "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, - "undici-types@7.10.0": { - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" - }, - "unload@2.4.1": { - "integrity": "sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==" - }, "update-browserslist-db@1.1.3_browserslist@4.26.3": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ @@ -387,12 +304,17 @@ ], "bin": true }, + "uri-js@4.4.1": { + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": [ + "punycode" + ] + }, "xxh32@2.0.5": { "integrity": "sha512-glQIaPvLHV4xG2Sn0E4mZWY25JT34+XcG4e2c8OMIH2SXxVrm6MmJ8miCsqGBLtf+rn2YcaeS11vq/66vkXGUQ==" } }, "remote": { - "https://cdn.jsdelivr.net/gh/lumeland/bar@0.1.11/types.ts": "38f3714e1432c174009495333972f85fb306eb6313112ac8830fda9f1f47e87f", "https://deno.land/std@0.170.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", "https://deno.land/std@0.170.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", "https://deno.land/std@0.170.0/encoding/base64.ts": "8605e018e49211efc767686f6f687827d7f5fd5217163e981d8d693105640d7a", @@ -598,7 +520,6 @@ "https://deno.land/x/lume@v3.0.11/deps/toml.ts": "32830bda333eaf4f1c3d79e4306ba449c17a85b25f94aae9b327d3790a2d1dea", "https://deno.land/x/lume@v3.0.11/deps/vento.ts": "78db4022ee124fbcfd84caeb6c5a70f2c1e1706ec9f6415d0f1fe2e9aabcba2b", "https://deno.land/x/lume@v3.0.11/deps/yaml.ts": "a639f4fc44ddcfc87f35e38980bbe9fc8101bf8ce34867522e76cc13cb156611", - "https://deno.land/x/lume@v3.0.11/lint.ts": "23cf68a7cc17edfdb16f2e905de3c5d5a1da541638f04fb8f7d5c762288f2c52", "https://deno.land/x/lume@v3.0.11/middlewares/basic_auth.ts": "c18f0da9f88be4581e5e3da99214fd7abdad829ab00dbdd2fb3116f1f876add2", "https://deno.land/x/lume@v3.0.11/middlewares/logger.ts": "c96f1a9f9d5757555b6f141865ce8551ac176f90c8ee3e9ad797b2b400a9a567", "https://deno.land/x/lume@v3.0.11/middlewares/no_cache.ts": "0119e3ae3a596ab12c42df693b93e5b03dd9608e289d862242751a9739438f35", @@ -620,8 +541,6 @@ "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", - "https://deno.land/x/lume@v3.0.11/types.ts": "5f580502f366b9b25106eb72d49b30d9af7715c8a304fe6e21f382d3c2a4cc38", - "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", "https://deno.land/x/vento@v2.1.1/core/js.ts": "83084240150d7e8b83e43ec8fcf78564a8ba8599c3d517976efbb11b208903b2", @@ -654,9 +573,8 @@ "jsr:@std/fs@^1.0.19", "jsr:@std/path@^1.1.2", "npm:alien-signals@3", - "npm:broadcast-channel@^7.1.0", "npm:morphdom@^2.7.7", - "npm:tab-election@^4.2.8", + "npm:uri-js@^4.4.1", "npm:xxh32@^2.0.5" ] } diff --git a/src/common/worker.js b/src/common/worker.js index ec9a57394..1c0f84ad7 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -118,7 +118,10 @@ export function use( context = /** @type {WorkerGlobalScope} */ (globalThis), options, ) { - return useWorkerFn(name, /** @type {any} */ (context), options); + return useWorkerFn(name, /** @type {any} */ (context), { + timeout: 60000, + ...(options || {}), + }); } //////////////////////////////////////////// diff --git a/src/component/engine/audio/types.d.ts b/src/component/engine/audio/types.d.ts index 084b19c2d..b18d662b0 100644 --- a/src/component/engine/audio/types.d.ts +++ b/src/component/engine/audio/types.d.ts @@ -1,6 +1,6 @@ -import type { Signal } from "../../../common/signal.d.ts"; +import type { Signal } from "@common/signal.d.ts"; -export interface Actions { +export type Actions = { pause: (_: { audioId: string }) => void; play: (_: { audioId: string; volume?: number }) => void; reload: (_: { audioId: string; play: boolean; progress?: number }) => void; @@ -8,17 +8,17 @@ export interface Actions { supply: ( _: { audio: Audio[]; play?: { audioId: string; volume?: number } }, ) => void; -} +}; -export interface Audio { +export type Audio = { id: string; isPreload: boolean; mimeType?: string; progress?: number; url: string; -} +}; -export interface AudioState { +export type AudioState = { duration: number; id: string; hasEnded: boolean; @@ -34,12 +34,12 @@ export interface AudioState { mimeType?: string; progress: number; url: string; -} +}; -export interface Signals { +export type Signals = { isPlaying: Signal; volume: Signal; -} +}; export type State = Signals & { items: Signal; diff --git a/src/component/engine/queue/types.d.ts b/src/component/engine/queue/types.d.ts index a76ad064d..843b1fffc 100644 --- a/src/component/engine/queue/types.d.ts +++ b/src/component/engine/queue/types.d.ts @@ -1,21 +1,19 @@ -import type { - Track, - TrackStats, - TrackTags, -} from "../../../component/core/types.d.ts"; -import type { Signal } from "../../../common/signal.d.ts"; +import type { Track, TrackStats, TrackTags } from "@component/core/types.d.ts"; +import type { Signal } from "@common/signal.d.ts"; -export interface Actions { +export type Actions = { add: (items: Item[]) => void; - // TODO -} + pool: (tracks: Track[]) => void; + shift: () => void; + unshift: () => void; +}; export type Item = & Track & { manualEntry?: boolean }; -export interface Signals { +export type Signals = { future: Signal; now: Signal; past: Signal; -} +}; diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 128f8c737..3944a8458 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -3,7 +3,7 @@ import { effect, signal } from "@common/signal.js"; import { arrayShuffle } from "@common/index.js"; /** - * @import {Item} from "./types.d.ts" + * @import {Actions, Item} from "./types.d.ts" * @import {Track} from "@component/core/types.d.ts" */ @@ -13,26 +13,26 @@ const QUEUE_SIZE = 25; // STATE //////////////////////////////////////////// -const future = signal(/** @type {Item[]} */ ([])); -const lake = signal(/** @type {Track[]} */ ([])); -const now = signal(/** @type {Item | null} */ (null)); -const past = signal(/** @type {Item[]} */ ([])); +export const future = signal(/** @type {Item[]} */ ([])); +export const lake = signal(/** @type {Track[]} */ ([])); +export const now = signal(/** @type {Item | null} */ (null)); +export const past = signal(/** @type {Item[]} */ ([])); //////////////////////////////////////////// // ACTIONS //////////////////////////////////////////// /** - * @param {Item[]} items + * @type {Actions['add']} */ -function add(items) { +export function add(items) { future([...future(), ...items]); } /** - * @param {Track[]} tracks + * @type {Actions['pool']} */ -function pool(tracks) { +export function pool(tracks) { lake(tracks); // TODO: If the pool changes, only remove non-existing tracks @@ -46,7 +46,10 @@ function pool(tracks) { if (!now()) return shift(); } -function shift() { +/** + * @type {Actions['shift']} + */ +export function shift() { const n = now(); const f = future(); @@ -56,7 +59,10 @@ function shift() { future(fill(f.slice(1))); } -function unshift() { +/** + * @type {Actions['unshift']} + */ +export function unshift() { const p = past(); if (p.length === 0) return; @@ -83,7 +89,7 @@ ostiary((port) => { define("shift", shift, port); define("unshift", unshift, port); - // Communicate + // Communicate state effect(() => announce("future", future(), port)); effect(() => announce("now", now(), port)); diff --git a/_backup/scripts/processor/metadata/common.ts b/src/component/processor/metadata/common.js similarity index 56% rename from _backup/scripts/processor/metadata/common.ts rename to src/component/processor/metadata/common.js index 9c7f7bb06..18cda49f5 100644 --- a/_backup/scripts/processor/metadata/common.ts +++ b/src/component/processor/metadata/common.js @@ -1,24 +1,25 @@ import { parseBlob, parseFromTokenizer, parseWebStream } from "music-metadata"; import * as URI from "uri-js"; -import * as HTTP_TOKENIZER from "@tokenizer/http"; -import * as RANGE_TOKENIZER from "@tokenizer/range"; +import { HttpClient } from "@tokenizer/http"; +import { tokenizer as rangeTokenizer } from "@tokenizer/range"; -import type { TrackStats, TrackTags } from "@applets/core/types"; -import type { Extraction, Urls } from "./types"; +/** + * @import { TrackStats, TrackTags } from "@component/core/types.d.ts"; + * @import { Extraction, Urls } from "./types.d.ts"; + */ // 🛠️ +/** + * @param {{ includeArtwork?: boolean; mimeType?: string; stream?: ReadableStream; urls?: Urls; }} _ + * @returns {Promise} + */ export async function musicMetadataTags({ includeArtwork, mimeType, stream, urls, -}: { - includeArtwork?: boolean; - mimeType?: string; - stream?: ReadableStream; - urls?: Urls; -}): Promise { +}) { const uri = urls ? URI.parse(urls.get) : undefined; const pathParts = uri?.path?.split("/"); const filename = pathParts?.[pathParts.length - 1]; @@ -29,7 +30,9 @@ export async function musicMetadataTags({ const blob = await fetch(urls.get).then((r) => r.blob()); meta = await parseBlob(blob, { skipCovers: !includeArtwork }); } else if (urls) { - const httpClient = new HTTP_TOKENIZER.HttpClient(urls.head, { resolveUrl: false }); + const httpClient = new HttpClient(urls.head, { + resolveUrl: false, + }); httpClient.resolvedUrl = urls.get; const getHeadInfo = httpClient.getHeadInfo; @@ -39,26 +42,39 @@ export async function musicMetadataTags({ return { ...info, acceptPartialRequests: true }; }; - const tokenizer = await RANGE_TOKENIZER.tokenizer(httpClient); + /** @type {any} */ + const tokenizer = await rangeTokenizer(httpClient); meta = await parseFromTokenizer(tokenizer, { skipCovers: !includeArtwork }); } else if (stream) { - meta = await parseWebStream(stream, { mimeType }, { skipCovers: !includeArtwork }); + meta = await parseWebStream(stream, { mimeType }, { + skipCovers: !includeArtwork, + }); } else { throw new Error("Missing args, need either some urls or a stream."); } - const stats: TrackStats = { + /** @type {TrackStats} */ + const stats = { duration: meta.format.duration, }; - const tags: TrackTags = { + /** @type {TrackTags} */ + const tags = { album: meta.common.album, artist: meta.common.artist, - disc: { no: meta.common.disk.no || 1, of: meta.common.disk.of ?? undefined }, - genre: Array.isArray(meta.common.genre) ? meta.common.genre[0] : meta.common.genre, + disc: { + no: meta.common.disk.no || 1, + of: meta.common.disk.of ?? undefined, + }, + genre: Array.isArray(meta.common.genre) + ? meta.common.genre[0] + : meta.common.genre, title: meta.common.title || filename || urls?.head || "Unknown", - track: { no: meta.common.track.no || 1, of: meta.common.track.of ?? undefined }, + track: { + no: meta.common.track.no || 1, + of: meta.common.track.of ?? undefined, + }, year: meta.common.year, }; diff --git a/src/component/processor/metadata/element.js b/src/component/processor/metadata/element.js new file mode 100644 index 000000000..44c3e145c --- /dev/null +++ b/src/component/processor/metadata/element.js @@ -0,0 +1,39 @@ +import { DiffuseElement } from "@common/element.js"; +import { use } from "@common/worker.js"; + +/** + * @import {Actions} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {Actions} + */ +class MetadataProcessor extends DiffuseElement { + constructor() { + super(); + + // Group + const group = crypto.randomUUID(); + + // Setup worker + const name = `diffuse/processor/metadata/${group}`; + const url = new URL("./worker.js", import.meta.url); + const worker = new Worker(url, { name, type: "module" }); + + // Worker proxy + this.supply = use("supply", worker); + } +} + +export default MetadataProcessor; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const NAME = "dp-metadata"; +customElements.define(NAME, MetadataProcessor); diff --git a/src/component/processor/metadata/types.d.ts b/src/component/processor/metadata/types.d.ts new file mode 100644 index 000000000..924152ba0 --- /dev/null +++ b/src/component/processor/metadata/types.d.ts @@ -0,0 +1,21 @@ +import type { IPicture } from "music-metadata"; +import type { TrackStats, TrackTags } from "@component/core/types.d.ts"; + +export type Actions = { + supply: ( + args: { + includeArtwork?: boolean; + mimeType?: string; + stream?: ReadableStream; + urls?: Urls; + }, + ) => Promise; +}; + +export type Extraction = { + artwork?: IPicture[]; + stats?: TrackStats; + tags?: TrackTags; +}; + +export type Urls = { get: string; head: string }; diff --git a/src/component/processor/metadata/worker.js b/src/component/processor/metadata/worker.js new file mode 100644 index 000000000..7ec732a84 --- /dev/null +++ b/src/component/processor/metadata/worker.js @@ -0,0 +1,43 @@ +import { define, ostiary } from "@common/worker.js"; +import { musicMetadataTags } from "./common.js"; + +/** + * @import { Actions, Extraction } from "./types.d.ts"; + */ + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +/** + * @type {Actions['supply']} + */ +export async function supply(args) { + console.log(args); + + // Construct records + // TODO: Use other metadata lib as fallback: https://github.com/buzz/mediainfo.js + return await musicMetadataTags(args).catch( + /** + * @param {Error} err + * @returns {Extraction} + */ + (err) => { + console.warn("Metadata processor error:", err); + console.log(args); + + return {}; + }, + ); +} + +//////////////////////////////////////////// +// ⚡️ +//////////////////////////////////////////// + +ostiary((port) => { + console.log("SETUP"); + + // Setup RPC + define("supply", supply, port); +}); diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 95173c272..f0de78abf 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -7,23 +7,36 @@ + +
    - -
    - diff --git a/_backup/scripts/processor/artwork/constants.ts b/_backup/scripts/processor/artwork/constants.ts deleted file mode 100644 index 577ca413a..000000000 --- a/_backup/scripts/processor/artwork/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const IDB_PREFIX = "@applets/processor/artwork"; -export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/artwork`; diff --git a/deno.jsonc b/deno.jsonc index a667ab678..ae18049f7 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -8,11 +8,13 @@ "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "alien-signals": "npm:alien-signals@^3.0.0", + "idb-keyval": "npm:idb-keyval@^6.2.2", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", "uri-js": "npm:uri-js@^4.4.1", "xxh32": "npm:xxh32@^2.0.5", // music-metadata + // NOTE: A lot of issues with `node:` imports, hence this mess. "@tokenizer/http": "https://esm.sh/@tokenizer/http@0.9.2/lib/http-client.js", "@tokenizer/range": "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js", "music-metadata": "https://esm.sh/music-metadata@11.9.0/lib/core.js", diff --git a/deno.lock b/deno.lock index f634eb6b3..4229ca9c0 100644 --- a/deno.lock +++ b/deno.lock @@ -2,6 +2,10 @@ "version": "5", "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", + "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", + "jsr:@mys/m-rpc@~0.12.2": "0.12.2", + "jsr:@mys/worker-fn@^3.2.1": "3.2.1", + "jsr:@okikio/transferables@^1.0.2": "1.0.2", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -31,6 +35,7 @@ "jsr:@std/yaml@^1.0.5": "1.0.9", "npm:alien-signals@3": "3.0.3", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", + "npm:idb-keyval@^6.2.2": "6.2.2", "npm:lightningcss-wasm@1.30.1": "1.30.1", "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", "npm:markdown-it-deflist@3.0.0": "3.0.0", @@ -45,6 +50,24 @@ "@deno/loader@0.3.6": { "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" }, + "@fry69/deep-diff@0.1.10": { + "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" + }, + "@mys/m-rpc@0.12.2": { + "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", + "dependencies": [ + "jsr:@okikio/transferables" + ] + }, + "@mys/worker-fn@3.2.1": { + "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", + "dependencies": [ + "jsr:@mys/m-rpc" + ] + }, + "@okikio/transferables@1.0.2": { + "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" + }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -184,6 +207,9 @@ "function-bind" ] }, + "idb-keyval@6.2.2": { + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==" + }, "is-core-module@2.16.1": { "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": [ @@ -542,6 +568,7 @@ "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", + "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", "https://deno.land/x/vento@v2.1.1/core/js.ts": "83084240150d7e8b83e43ec8fcf78564a8ba8599c3d517976efbb11b208903b2", @@ -563,7 +590,69 @@ "https://deno.land/x/vento@v2.1.1/plugins/mod.ts": "017d5bb3e3c80b7f67271cdf8779686f55916070c5d168a143e6a37c35bcd731", "https://deno.land/x/vento@v2.1.1/plugins/set.ts": "cf9dfbf68b52039781fd86ec0b9587a8bcd486fdef9f08989719cfdb7fa233d0", "https://deno.land/x/vento@v2.1.1/plugins/trim.ts": "8d33271327b09ffd8f569ebde85125b1324fa9538a54d6072ac97a9fb5d24264", - "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee" + "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee", + "https://esm.sh/@borewit/text-codec@0.1.1/es2022/text-codec.mjs": "ea8f41f92f2798340cf2b568602fc1e6f9957e8192265d92d6d06725d0bbfcff", + "https://esm.sh/@borewit/text-codec@0.2.0/es2022/text-codec.mjs": "1fa7af74bcd1b8c1a460836447074360915a752cffe0dbdb8ac472f422a7fbd9", + "https://esm.sh/@borewit/text-codec@^0.1.0?target=es2022": "e3ef0acd0c052b05ad09e59f90283c46e8b5d82d92548ab93b11badd8258d78f", + "https://esm.sh/@borewit/text-codec@^0.2.0?target=es2022": "41f958f8bdbc8407bd83126648cdeca660a1c86662ad3358ecc544f84e8a9f25", + "https://esm.sh/@tokenizer/http@0.9.2/es2022/lib/http-client.mjs": "a3b75a64606cf525497598e45357efbc03a9093f5000b180aca3ab278a9c69f3", + "https://esm.sh/@tokenizer/http@0.9.2/lib/http-client.js": "3ebcb337b382c299e9267b8950aa63764404b50909a4f9dfde183005f532fc6b", + "https://esm.sh/@tokenizer/inflate@0.2.7/es2022/inflate.mjs": "8fa443aca90ad2baa671baab9f31c244a65d3e415f0856f6cb7c01a91885a4c7", + "https://esm.sh/@tokenizer/inflate@^0.2.7?target=es2022": "a0937e70b3279c427154214ee94f847f05ee18590d624ed09e13b166bc4b8802", + "https://esm.sh/@tokenizer/range@0.12.0/es2022/range.mjs": "6e0bf369e99ec1608583522af1e3ea8e4967c202ccf0d853d7c180022693da16", + "https://esm.sh/@tokenizer/range@0.13.0/es2022/range.mjs": "0aab315c6101c786d5af2a3442c7afdf619cc9c678529440d99cc9c93bc616e9", + "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js": "b6884ad1ad20d5ca12bcf051481f1d0f36640df2e4f5d827a8b9d100d56a2514", + "https://esm.sh/@tokenizer/range@^0.12.0?target=es2022": "a5be7fc23c6c1538ccdf83ab1d945c97618dbc5c886c099fae9fa2569f9cd389", + "https://esm.sh/content-type@1.0.5/es2022/content-type.mjs": "6fd962b99a80821956a22379aded6b7ca37cfbf95be5639047437e03211e1b56", + "https://esm.sh/content-type@^1.0.5?target=es2022": "ad3579fa1808af61b587ce37a37756eae3306dfbbdea9d02e31a03e0b2ad70d4", + "https://esm.sh/debug@4.4.3/es2022/debug.mjs": "42103c758115e696a3c7c269457f7827d957907fa8abcdbbaca2cb7060c7bd4f", + "https://esm.sh/debug@^4.3.7?target=es2022": "0a96b7d9989513d07f02f0d5533e0dc7a49c492107702631f6490d754fbc4fe7", + "https://esm.sh/debug@^4.4.0?target=es2022": "0a96b7d9989513d07f02f0d5533e0dc7a49c492107702631f6490d754fbc4fe7", + "https://esm.sh/debug@^4.4.3?target=es2022": "0a96b7d9989513d07f02f0d5533e0dc7a49c492107702631f6490d754fbc4fe7", + "https://esm.sh/fflate@0.8.2/es2022/fflate.mjs": "51759ec52e8522bbcd6dce941956a878c733975dcc159618c683c659270a59d3", + "https://esm.sh/fflate@^0.8.2?target=es2022": "c127de9122b64d0866c6988baf5d7b21d6a1aca3989e8828f9c7f27029081b0c", + "https://esm.sh/file-type@21.0.0/es2022/file-type.mjs": "c66d14ae76887e16cca26b4524bef9baba40585a8c499051ad5a0e12c980fcc2", + "https://esm.sh/file-type@^21.0.0?target=es2022": "d9b06a8b5508acf4b5e3b5a6e886517f62f112bb4b25f49d409218d243aa6979", + "https://esm.sh/ieee754@1.2.1/es2022/ieee754.mjs": "6e87635f6124ae21ea355a521f021a04afc277248bd5097dc85edce4d7017f86", + "https://esm.sh/ieee754@^1.2.1?target=es2022": "503072b5aea2f29a14531251e497979ecea64585897d1561010acd83fdb4ce07", + "https://esm.sh/media-typer@1.1.0/es2022/media-typer.mjs": "3dc6174765452b8271cad4031a308c8015c67bee4de2b0aff5daec36cb1b766e", + "https://esm.sh/media-typer@^1.1.0?target=es2022": "c6132b2b491d8f497c7c2158602814796aaceb5bbcaee6bf086842a0a0e36947", + "https://esm.sh/ms@2.1.3/es2022/ms.mjs": "9039464da1f4ae1c2042742d335c82556c048bbe49449b5d0cd5198193afa147", + "https://esm.sh/ms@^2.1.3?target=es2022": "05ddb185b1d26c888c647f2aaac723379f0933fb608b3a9a994e602c41900019", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/aiff/AiffParser.mjs": "63997d01b96586c6e4e25ebe00d71749d42cbddc928ae871dbefa01ffbf7ece6", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/apev2/APEv2Parser.mjs": "5428c9b05edde4fb3781da175c3fa6909c741eca89da7f632c5771288a555c80", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/asf/AsfParser.mjs": "ad8173bfeae034c96cd21a091db2336ad5f389d2afda2ffb31c1f6af9f3e743a", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/core.mjs": "dddd9f4492a00db509f80f6e03c2aaee068793a0f6f35e975446fee39bdf5565", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/dsdiff/DsdiffParser.mjs": "6d77407d3d97a56224a169e367848bde75f3a7bd48429f077cb76be9bb6b490b", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/dsf/DsfParser.mjs": "2dfd30eae0cadd1cdbb9d0685e6f0d7598aefa58cd49b3d65048bd8caf492ef8", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/flac/FlacParser.mjs": "9ac86d7a4136b44b039262c20601a12162d447dcc8ac78c661df5b2caff4eeaf", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/matroska/MatroskaParser.mjs": "d43c319eab16d7b05f6e8f7fe7171ab3ccd401539dd5558f171a6005dfade0a5", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/mp4/MP4Parser.mjs": "46f7ebd05e2e95b31eef24f01a3292759d503cd07df6ed851b5e70c76334ca6b", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/mpeg/MpegParser.mjs": "b5cb01e7abccb149d02207a8ae44ec5127c6bd7d386b3b0150f4e0603d6988d5", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/musepack/MusepackParser.mjs": "02fb87f6653928ed7a23f44e0e5ae47d598b6d3aa8074f662d0540eecef5d82e", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/ogg/OggParser.mjs": "bacd1c45fd7b606b2a6ef2b8569469e979fb834eedd58e2e051e40c9a0aae9ae", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/wav/WaveParser.mjs": "aaa526c14b601e5953d91bb13c73c4e78291ccb4f8ff85c24a1b7f4624f9c34c", + "https://esm.sh/music-metadata@11.9.0/es2022/lib/wavpack/WavPackParser.mjs": "af8ebb6037058ffb9792e3096a3f67c7eaf7ef2c39518274900b7a99bef552e5", + "https://esm.sh/music-metadata@11.9.0/lib/core.js": "57a0a07bfddf9592e6572f2730f6a71acfb3af8719bc6d794cb3fb974d74d8ac", + "https://esm.sh/node/process.mjs": "2c8eeaf6090c03d21bdcec5eddb33b105208c9ba3ef2c7be98f4d9b2495a624e", + "https://esm.sh/peek-readable@5.4.2/es2022/peek-readable.mjs": "7e784eacb3816872f18606f82cc3f30f2d11e674c5199f84e6cf7d820a3ced23", + "https://esm.sh/peek-readable@^5.3.1?target=es2022": "dbd46373159faf17590ec762a4f14921d7a6a5e6c3a64f334f302d96043077b0", + "https://esm.sh/strtok3@10.3.4/es2022/core.mjs": "3183a30c522666467d6d0b5234113fe216e1ec79f4bd135002545458323d62f4", + "https://esm.sh/strtok3@10.3.4/es2022/lib/stream/AbstractStreamReader.mjs": "675c8d26bd83e2e8907a988ba996e1ca45ae10397579d83ed027c14b13e78134", + "https://esm.sh/strtok3@10.3.4/es2022/lib/stream/Errors.mjs": "1459007f24621eb036ba3be2fa592ce39381874722aab8e0302f8d6345a620d6", + "https://esm.sh/strtok3@10.3.4/es2022/lib/stream/index.mjs": "7b6b3d37331712b157f2f6108081831b574d2b6493049aa8738834c4961ae633", + "https://esm.sh/strtok3@10.3.4/es2022/strtok3.mjs": "7228ab10418d0fcee23ac018de8c4843c796471c691c9e940540a23145d589e6", + "https://esm.sh/strtok3@9.1.1/es2022/strtok3.mjs": "f8cf21145d3d1be1cd7b4dff4a006b1587efb84d7c07953ed47a4f2c80759784", + "https://esm.sh/strtok3@^10.2.0?target=es2022": "40daa79a2c4d6133be6732ad5ad53831401eda38a72129b911562d6d42d34fe2", + "https://esm.sh/strtok3@^10.2.2/core?target=es2022": "9e188cff879adba3fe0cb8eb89d284ccda6b662bfa7b436c81370bda44e63415", + "https://esm.sh/strtok3@^10.3.4?target=es2022": "40daa79a2c4d6133be6732ad5ad53831401eda38a72129b911562d6d42d34fe2", + "https://esm.sh/strtok3@^9.1.1?target=es2022": "0b1ee38504da3418cd1f101f127415f5ba191b85089ae5a25beffa333c608499", + "https://esm.sh/token-types@6.1.1/es2022/token-types.mjs": "2d6a177766ee99c5a482c7bf7c55d38f076beff8e4781d1cb8c295f3cb4da5e9", + "https://esm.sh/token-types@^6.0.0?target=es2022": "15b612895b05b0120117c96dc3df21f4e211a7c0b126b36034f1a4ed803d216d", + "https://esm.sh/token-types@^6.1.1?target=es2022": "15b612895b05b0120117c96dc3df21f4e211a7c0b126b36034f1a4ed803d216d", + "https://esm.sh/uint8array-extras@1.5.0/es2022/uint8array-extras.mjs": "660b5b7967799e1ab7274f0062b66fc33a86c68df583429d8c52fa0b32332ae9", + "https://esm.sh/uint8array-extras@^1.4.0?target=es2022": "24bf344529db04523ab848989bd810f22dce714f11f5e9a619dbe113b899b49f", + "https://esm.sh/uint8array-extras@^1.5.0?target=es2022": "24bf344529db04523ab848989bd810f22dce714f11f5e9a619dbe113b899b49f" }, "workspace": { "dependencies": [ @@ -574,6 +663,7 @@ "jsr:@std/fs@^1.0.19", "jsr:@std/path@^1.1.2", "npm:alien-signals@3", + "npm:idb-keyval@^6.2.2", "npm:morphdom@^2.7.7", "npm:uri-js@^4.4.1", "npm:xxh32@^2.0.5" diff --git a/src/component/processor/artwork/constants.js b/src/component/processor/artwork/constants.js new file mode 100644 index 000000000..9659af9cf --- /dev/null +++ b/src/component/processor/artwork/constants.js @@ -0,0 +1,2 @@ +export const IDB_PREFIX = "@component/processor/artwork"; +export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/cache`; diff --git a/src/component/processor/artwork/element.js b/src/component/processor/artwork/element.js new file mode 100644 index 000000000..66e2a5906 --- /dev/null +++ b/src/component/processor/artwork/element.js @@ -0,0 +1,40 @@ +import { DiffuseElement } from "@common/element.js"; +import { use } from "@common/worker.js"; + +/** + * @import {Actions} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {Actions} + */ +class ArtworkProcessor extends DiffuseElement { + constructor() { + super(); + + // Group + const group = crypto.randomUUID(); + + // Setup worker + const name = `diffuse/processor/metadata/${group}`; + const url = new URL("./worker.js", import.meta.url); + const worker = new Worker(url, { name, type: "module" }); + + // Worker proxy + this.artwork = use("artwork", worker); + this.supply = use("supply", worker); + } +} + +export default ArtworkProcessor; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const NAME = "dp-artwork"; +customElements.define(NAME, ArtworkProcessor); diff --git a/_backup/scripts/processor/artwork/types.d.ts b/src/component/processor/artwork/types.d.ts similarity index 66% rename from _backup/scripts/processor/artwork/types.d.ts rename to src/component/processor/artwork/types.d.ts index a8d316f05..230f67176 100644 --- a/_backup/scripts/processor/artwork/types.d.ts +++ b/src/component/processor/artwork/types.d.ts @@ -1,4 +1,9 @@ -import type { TrackTags } from "@applets/core/types"; +import type { TrackTags } from "@component/core/types.d.ts"; + +export type Actions = { + artwork(request: ArtworkRequest): Promise; + supply(items: ArtworkRequest[]): void; +}; export type Artwork = { bytes: Uint8Array; diff --git a/_backup/scripts/processor/artwork/worker.ts b/src/component/processor/artwork/worker.js similarity index 59% rename from _backup/scripts/processor/artwork/worker.ts rename to src/component/processor/artwork/worker.js index 73059bccb..9ec9089cf 100644 --- a/_backup/scripts/processor/artwork/worker.ts +++ b/src/component/processor/artwork/worker.js @@ -1,39 +1,35 @@ -import type { IPicture } from "music-metadata"; import * as IDB from "idb-keyval"; -import type { Artwork, ArtworkRequest } from "./types"; -import type { Extraction } from "../metadata/types"; -import { provide } from "@scripts/common"; -import { IDB_ARTWORK_PREFIX } from "./constants"; -import { musicMetadataTags } from "../metadata/common"; +import { IDB_ARTWORK_PREFIX } from "./constants.js"; +import { musicMetadataTags } from "../metadata/common.js"; -// State -let queue: ArtworkRequest[] = []; +/** + * @import {IPicture} from "music-metadata" + * @import {Actions, Artwork, ArtworkRequest} from "./types.d.ts" + * @import {Extraction} from "../metadata/types.d.ts" + */ -//////////////////////////////////////////// -// SETUP -//////////////////////////////////////////// - -const actions = { - artwork, - supply, -}; - -const { tasks } = provide({ actions, tasks: actions }); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; +/** + * @type {ArtworkRequest[]} + */ +let queue = []; //////////////////////////////////////////// // ACTIONS //////////////////////////////////////////// -async function artwork(request: ArtworkRequest) { +/** + * @type {Actions['artwork']} + */ +export async function artwork(request) { const art = await processRequest(request); return art; } -function supply(items: ArtworkRequest[]) { +/** + * @type {Actions['supply']} + */ +export function supply(items) { const exe = !queue[0]; queue = [...queue, ...items]; if (exe) shiftQueue(); @@ -42,7 +38,11 @@ function supply(items: ArtworkRequest[]) { //////////////////////////////////////////// // 🛠️ //////////////////////////////////////////// -function escapeLucene(str: string) { + +/** + * @param {string} str + */ +function escapeLucene(str) { return [].map .call(str, (char) => { if ( @@ -65,14 +65,18 @@ function escapeLucene(str: string) { char === ":" || char === "\\" || char === "/" - ) + ) { return "\\" + char; - else return char; + } else return char; }) .join(""); } -async function lastFm(req: ArtworkRequest): Promise { +/** + * @param {ArtworkRequest} req + * @returns {Promise} + */ +async function lastFm(req) { if (!navigator.onLine) return []; const query = req.tags?.artist; @@ -88,38 +92,52 @@ async function lastFm(req: ArtworkRequest): Promise { }); } -async function lastFmCover(remainingMatches: any[]): Promise { +/** + * @param {any[]} remainingMatches + * @returns {Promise} + */ +async function lastFmCover(remainingMatches) { const album = remainingMatches[0]; const url = album ? album.image[album.image.length - 1]["#text"] : null; return url && url !== "" ? await fetch(url) - .then((r) => r.blob()) - .then(async (b) => [ - { bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), mime: b.type }, - ]) - .catch((err) => { - console.error(err); - return lastFmCover(remainingMatches.slice(1)); - }) + .then((r) => r.blob()) + .then(async (b) => [ + { + bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), + mime: b.type, + }, + ]) + .catch((err) => { + console.error(err); + return lastFmCover(remainingMatches.slice(1)); + }) : album - ? lastFmCover(remainingMatches.slice(1)) - : []; + ? lastFmCover(remainingMatches.slice(1)) + : []; } -async function musicBrainz(req: ArtworkRequest): Promise { +/** + * @param {ArtworkRequest} req + * @returns {Promise} + */ +async function musicBrainz(req) { const artist = req.tags?.artist; const album = req.tags?.album; if (!navigator.onLine) return []; if (!album && !artist) return []; - const query = - `release:"${escapeLucene(album || "")}"` + - (req.variousArtists ? `` : ` AND artistname:"${escapeLucene(artist || "")}"`); + const query = `release:"${escapeLucene(album || "")}"` + + (req.variousArtists + ? `` + : ` AND artistname:"${escapeLucene(artist || "")}"`); const encodedQuery = encodeURIComponent(query); - return await fetch(`https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`) + return await fetch( + `https://musicbrainz.org/ws/2/release/?query=${encodedQuery}&fmt=json`, + ) .then((r) => r.json()) .then((r) => { if (r.releases.length === 0 && !req.variousArtists) { @@ -134,18 +152,31 @@ async function musicBrainz(req: ArtworkRequest): Promise { }); } -async function musicBrainzCover(remainingReleases: any[], req: ArtworkRequest): Promise { +/** + * @param {any[]} remainingReleases + * @param {ArtworkRequest} req + * @returns {Promise} + */ +async function musicBrainzCover(remainingReleases, req) { const release = remainingReleases[0]; if (!release) return []; const credit = release?.["artist-credit"]?.[0]?.name; - if (req.variousArtists && credit !== "Various Artists" && credit !== req.tags?.artist) return []; + if ( + req.variousArtists && credit !== "Various Artists" && + credit !== req.tags?.artist + ) return []; - return await fetch(`https://coverartarchive.org/release/${release.id}/front-1200`) + return await fetch( + `https://coverartarchive.org/release/${release.id}/front-1200`, + ) .then((r) => r.blob()) .then(async (b) => { if (b.type.startsWith("image/")) { - return [{ bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), mime: b.type }]; + return [{ + bytes: await b.arrayBuffer().then((buf) => new Uint8Array(buf)), + mime: b.type, + }]; } else { return musicBrainzCover(remainingReleases.slice(1), req); } @@ -156,7 +187,11 @@ async function musicBrainzCover(remainingReleases: any[], req: ArtworkRequest): }); } -async function processRequest(req: ArtworkRequest): Promise { +/** + * @param {ArtworkRequest} req + * @returns {Promise} + */ +async function processRequest(req) { // Check if already processed // TODO: Retry if none was found? const cache = await IDB.get(`${IDB_ARTWORK_PREFIX}/${req.cacheId}`); @@ -168,22 +203,31 @@ async function processRequest(req: ArtworkRequest): Promise { } // 🚀 - let art: Artwork[] = []; + + /** @type {Artwork[]} */ + let art = []; // Get metadata + possible artwork from file metadata - const meta = await musicMetadataTags({ ...req, includeArtwork: true }).catch((err) => { - console.error("music-metadata error", err); - const extraction: Extraction = {}; - return extraction; - }); + const meta = await musicMetadataTags({ ...req, includeArtwork: true }).catch( + /** @param {Error} err */ (err) => { + console.error("music-metadata error", err); + /** @type {Extraction} */ + const extraction = {}; + return extraction; + }, + ); if (!req.tags && meta.tags) req.tags = meta.tags; // Add artwork from metadata - const fromMeta = - meta.artwork?.map((a: IPicture) => { + const fromMeta = meta.artwork?.map( + /** + * @param {IPicture} a + */ + (a) => { return { bytes: a.data, mime: a.format }; - }) || []; + }, + ) || []; art.push(...fromMeta); From 9e775e1c3c7e905db5c4d8969cb2d1dbe5eea3e2 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 22 Oct 2025 18:34:17 +0200 Subject: [PATCH 037/244] chore: rework signals --- src/common/element.d.ts | 8 +++- src/common/element.js | 39 +++++++++++----- src/common/signal.d.ts | 11 ++++- src/common/signal.js | 45 ++++++++++++++---- .../constituent/blur/browser-list/element.js | 2 +- .../constituent/blur/browser-list/types.d.ts | 6 +-- src/component/engine/audio/element.js | 46 +++++++------------ src/component/engine/audio/types.d.ts | 13 ++---- src/component/engine/queue/element.js | 21 +++++---- src/component/engine/queue/types.d.ts | 10 ++-- src/component/engine/queue/worker.js | 44 +++++++++--------- 11 files changed, 144 insertions(+), 101 deletions(-) diff --git a/src/common/element.d.ts b/src/common/element.d.ts index e350271df..fa2b35bfc 100644 --- a/src/common/element.d.ts +++ b/src/common/element.d.ts @@ -2,6 +2,9 @@ export type BroadcastingStatus = | { leader: true; initialLeader: boolean } | { leader: false }; +export type FnParams = Fn extends (...args: infer P) => any ? P : never; +export type FnReturn = Fn extends (...args: any[]) => infer P ? P : never; + export type HtmlTagFunction = ( strings: string[] | ArrayLike, ...values: unknown[] @@ -24,4 +27,7 @@ type MorphOptions = { childrenOnly?: boolean; }; -export type RenderArg = { html: HtmlTagFunction; state: State }; +export type RenderArg = { + html: HtmlTagFunction; + state: State; +}; diff --git a/src/common/element.js b/src/common/element.js index 331348512..e1c7ae14f 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,11 +1,11 @@ import morphdom from "morphdom"; -import { effect, unbiasedSignal } from "@common/signal.js"; +import { effect, signal } from "@common/signal.js"; import { define, use } from "@common/worker.js"; /** - * @import {BroadcastingStatus, HtmlTagFunction, MorphOptions} from "./element.d.ts" - * @import {Signal} from "./signal.d.ts" + * @import {BroadcastingStatus, FnParams, FnReturn, HtmlTagFunction, MorphOptions} from "./element.d.ts" + * @import {Signal, SignalReader} from "./signal.d.ts" */ /** @@ -109,6 +109,9 @@ export class DiffuseElement extends HTMLElement { export class BroadcastableDiffuseElement extends DiffuseElement { broadcasted = false; + #broadcastingStatus; + broadcastingStatus; + /** @type {PromiseWithResolvers} */ #lock = Promise.withResolvers(); @@ -121,7 +124,8 @@ export class BroadcastableDiffuseElement extends DiffuseElement { this.broadcast = this.broadcast.bind(this); /** @type {Signal>} */ - this.broadcastingStatus = unbiasedSignal(this.#status.promise); + this.#broadcastingStatus = signal(this.#status.promise, { unbiased: true }); + this.broadcastingStatus = this.#broadcastingStatus.get; } /** @@ -167,26 +171,39 @@ export class BroadcastableDiffuseElement extends DiffuseElement { } /** + * @template I + * @template O + * @template {(...args: I[]) => O} Fn * @param {string} method - * @param {Function} fn + * @param {Fn} fn */ return (method, fn) => { define(method, fn.bind(this), msg.port2); - /** @param {any[]} args */ + /** + * @typedef {FnParams} P + * @typedef {FnReturn} R + */ + + /** @param {P} args */ const leaderOnly = async (...args) => { const status = await this.#status.promise; return status.leader - ? fn.call(this, ...args) - : use(`leader:${method}`, msg.port2)(...args); + ? /** @type {R} */ (fn.call(this, ...args)) + : /** @type {Promise} */ (use(`leader:${method}`, msg.port2)( + ...args, + )); }; - /** @param {any[]} args */ + /** + * @param {P} args + * @returns {R} + */ const replicate = (...args) => { anyoneWaiting().then((bool) => { if (bool) use(method, msg.port2)(...args); }); - return fn.call(this, ...args); + return /** @type {R} */ (fn.call(this, ...args)); }; return { @@ -236,7 +253,7 @@ export class BroadcastableDiffuseElement extends DiffuseElement { this.#status = Promise.withResolvers(); this.#status.resolve({ leader: true, initialLeader: false }); - this.broadcastingStatus(this.#status.promise); + this.#broadcastingStatus.value = this.#status.promise; return this.#lock.promise; }, diff --git a/src/common/signal.d.ts b/src/common/signal.d.ts index e55bc7210..1929f7e76 100644 --- a/src/common/signal.d.ts +++ b/src/common/signal.d.ts @@ -1,3 +1,10 @@ -import type { signal } from "alien-signals"; +export type SignalReader = () => T; +export type SignalWriter = (t: T) => void; -export type Signal = ReturnType>; +export type Signal = { + get: SignalReader; + set: SignalWriter; + + get value(): T; + set value(t: T); +}; diff --git a/src/common/signal.js b/src/common/signal.js index 77d64b76c..1aa003d02 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -4,26 +4,51 @@ import { signal as alienSignal } from "alien-signals"; export * from "alien-signals"; /** - * @import {Signal} from "./signal.d.ts" + * @import {Signal, SignalReader, SignalWriter} from "./signal.d.ts" */ /** * @template T * @param {T} initialValue + * @param {{ unbiased?: boolean }} [options] * @returns {Signal} */ -export function signal(initialValue) { +export function signal(initialValue, options) { const s = alienSignal(initialValue); const isPrimitive = Object(initialValue) !== initialValue; - if (isPrimitive) return s; + if (isPrimitive || options?.unbiased === true) { + return _signal({ + get: () => s(), + set: (v) => s(v), + }); + } - return /** @type {Signal} */ ((b) => { - const a = s(); - if (b === undefined) return a; - - const diff = deepDiff(a, b); - if (diff) s(b); + return _signal({ + get: () => s(), + set: (b) => { + const a = s(); + const diff = deepDiff(a, b); + if (diff) s(b); + }, }); } -export const unbiasedSignal = alienSignal; +/** + * @template T + * @param {{ get: SignalReader; set: SignalWriter }} _ + * @returns {Signal} + */ +function _signal({ get, set }) { + return { + get, + set, + + get value() { + return get(); + }, + + set value(v) { + set(v); + }, + }; +} diff --git a/src/component/constituent/blur/browser-list/element.js b/src/component/constituent/blur/browser-list/element.js index b8b710069..924148f7d 100644 --- a/src/component/constituent/blur/browser-list/element.js +++ b/src/component/constituent/blur/browser-list/element.js @@ -18,7 +18,7 @@ class BrowserList extends DiffuseElement { get state() { return { - tracks: this.tracks, + tracks: this.tracks.get, }; } diff --git a/src/component/constituent/blur/browser-list/types.d.ts b/src/component/constituent/blur/browser-list/types.d.ts index d0b3704aa..be9d63aaf 100644 --- a/src/component/constituent/blur/browser-list/types.d.ts +++ b/src/component/constituent/blur/browser-list/types.d.ts @@ -1,4 +1,4 @@ -import type { Signal } from "../../../../common/signal.d.ts"; -import type { Track } from "../../../core/types.d.ts"; +import type { SignalReader } from "@common/signal.d.ts"; +import type { Track } from "@component/core/types.d.ts"; -export type State = { tracks: Signal }; +export type State = { tracks: SignalReader }; diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index a76d32971..1b916be11 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -1,7 +1,4 @@ -import { - BroadcastableDiffuseElement, - DiffuseElement, -} from "@common/element.js"; +import { BroadcastableDiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; /** @@ -21,12 +18,8 @@ const _SILENT_MP3 = /** * @implements {Actions} - * @implements {Signals} */ class AudioEngine extends BroadcastableDiffuseElement { - // TODO: - // static observedAttributes = ["volume"]; - constructor() { super(); @@ -44,8 +37,7 @@ class AudioEngine extends BroadcastableDiffuseElement { this.seek = fn("seek", this.seek).leaderOnly; this.supply = fn("supply", this.supply).replicate; - this.isPlaying = fn("isPlaying", this.isPlaying).replicate; - this.volume = fn("volume", this.volume).replicate; + this.__isPlaying.set = fn("isPlaying", this.__isPlaying.set).replicate; } // TODO: Get volume from previous session if possible @@ -55,22 +47,16 @@ class AudioEngine extends BroadcastableDiffuseElement { // SIGNALS - volume = signal(0.5); - isPlaying = signal(false); #items = signal(/** @type {Audio[]} */ ([])); + #volume = signal(0.5); + + __isPlaying = signal(false); // STATE - /** - * @type {State} - */ - get state() { - return { - isPlaying: this.isPlaying, - items: this.#items, - volume: this.volume, - }; - } + isPlaying = this.__isPlaying.get; + items = this.#items.get; + volume = this.#volume.get; // LIFECYCLE @@ -98,7 +84,7 @@ class AudioEngine extends BroadcastableDiffuseElement { (node) => { const audio = /** @type {HTMLAudioElement} */ (node); if (audio.hasAttribute("preload")) return; - audio.volume = this.volume(); + audio.volume = this.#volume.value; }, ); }); @@ -118,7 +104,7 @@ class AudioEngine extends BroadcastableDiffuseElement { */ play({ audioId, volume }) { this.withAudioNode(audioId, (audio, item) => { - audio.volume = volume ?? this.state.volume(); + audio.volume = volume ?? this.volume(); audio.muted = false; if (audio.readyState === 0) audio.load(); @@ -176,17 +162,17 @@ class AudioEngine extends BroadcastableDiffuseElement { * @type {Actions["supply"]} */ supply(args) { - this.#items(args.audio); + this.#items.value = args.audio; if (args.play) this.play(args.play); } // RENDER /** - * @param {RenderArg} _ + * @param {RenderArg} _ */ - render({ html, state }) { - const nodes = state.items().map((audio) => { + render({ html }) { + const nodes = this.items().map((audio) => { const ip = audio.progress === undefined ? "0" : JSON.stringify(audio.progress); @@ -372,7 +358,7 @@ class AudioEngineItem extends HTMLElement { : false; item?.state({ isPlaying: false }); - item?.engine?.isPlaying(ended); + item?.engine?.__isPlaying.set(ended); } /** @@ -382,7 +368,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); engineItem(audio)?.state({ isPlaying: true }); - engineItem(audio)?.engine?.isPlaying(true); + engineItem(audio)?.engine?.__isPlaying.set(true); // In case audio was preloaded: if (audio.readyState === 4) finishedLoading(event); diff --git a/src/component/engine/audio/types.d.ts b/src/component/engine/audio/types.d.ts index b18d662b0..2dfc5f635 100644 --- a/src/component/engine/audio/types.d.ts +++ b/src/component/engine/audio/types.d.ts @@ -1,4 +1,4 @@ -import type { Signal } from "@common/signal.d.ts"; +import type { SignalReader } from "@common/signal.d.ts"; export type Actions = { pause: (_: { audioId: string }) => void; @@ -36,11 +36,8 @@ export type AudioState = { url: string; }; -export type Signals = { - isPlaying: Signal; - volume: Signal; -}; - -export type State = Signals & { - items: Signal; +export type State = { + isPlaying: SignalReader; + items: SignalReader; + volume: SignalReader; }; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index fa07e2cd7..7451c74a1 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -3,7 +3,7 @@ import { signal } from "@common/signal.js"; import { listen, use } from "@common/worker.js"; /** - * @import {Actions, Item, Signals} from "./types.d.ts" + * @import {Actions, Item} from "./types.d.ts" */ //////////////////////////////////////////// @@ -12,7 +12,6 @@ import { listen, use } from "@common/worker.js"; /** * @implements {Actions} - * @implements {Signals} */ class QueueEngine extends DiffuseElement { constructor() { @@ -38,9 +37,9 @@ class QueueEngine extends DiffuseElement { } // Sync data with worker - listen("future", this.future, port); - listen("now", this.now, port); - listen("past", this.past, port); + listen("future", this.#future.set, port); + listen("now", this.#now.set, port); + listen("past", this.#past.set, port); // Worker proxy this.add = use("add", port); @@ -51,9 +50,15 @@ class QueueEngine extends DiffuseElement { // SIGNALS - future = signal(/** @type {Array} */ ([])); - now = signal(/** @type {Item | null} */ (null)); - past = signal(/** @type {Array} */ ([])); + #future = signal(/** @type {Array} */ ([])); + #now = signal(/** @type {Item | null} */ (null)); + #past = signal(/** @type {Array} */ ([])); + + // STATE + + future = this.#future.get; + now = this.#now.get; + past = this.#past.get; } export default QueueEngine; diff --git a/src/component/engine/queue/types.d.ts b/src/component/engine/queue/types.d.ts index 843b1fffc..776d83044 100644 --- a/src/component/engine/queue/types.d.ts +++ b/src/component/engine/queue/types.d.ts @@ -1,5 +1,5 @@ import type { Track, TrackStats, TrackTags } from "@component/core/types.d.ts"; -import type { Signal } from "@common/signal.d.ts"; +import type { SignalReader } from "@common/signal.d.ts"; export type Actions = { add: (items: Item[]) => void; @@ -12,8 +12,8 @@ export type Item = & Track & { manualEntry?: boolean }; -export type Signals = { - future: Signal; - now: Signal; - past: Signal; +export type State = { + future: SignalReader; + now: SignalReader; + past: SignalReader; }; diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 3944a8458..7c94f1a5d 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -26,51 +26,51 @@ export const past = signal(/** @type {Item[]} */ ([])); * @type {Actions['add']} */ export function add(items) { - future([...future(), ...items]); + future.value = [...future.value, ...items]; } /** * @type {Actions['pool']} */ export function pool(tracks) { - lake(tracks); + lake.value = tracks; // TODO: If the pool changes, only remove non-existing tracks // instead of resetting the whole future queue. // // What about past queue items? - future(fill([])); + future.value = fill([]); // Automatically insert track if there isn't any - if (!now()) return shift(); + if (!now.value) return shift(); } /** * @type {Actions['shift']} */ export function shift() { - const n = now(); - const f = future(); + const n = now.value; + const f = future.value; - now(f[0] ?? null); + now.value = f[0] ?? null; - if (n) past([...past(), n]); - future(fill(f.slice(1))); + if (n) past.value = [...past.value, n]; + future.value = fill(f.slice(1)); } /** * @type {Actions['unshift']} */ export function unshift() { - const p = past(); + const p = past.value; if (p.length === 0) return; - const n = now(); + const n = now.value; const [last] = p.splice(p.length - 1, 1); - now(last ?? null); - if (n) future([n, ...future()]); + now.value = last ?? null; + if (n) future.value = [n, ...future.value]; } //////////////////////////////////////////// @@ -80,9 +80,9 @@ export function unshift() { ostiary((port) => { // Setup RPC - define("future", () => future(), port); - define("now", () => now(), port); - define("past", () => past(), port); + define("future", future.get, port); + define("now", now.get, port); + define("past", past.get, port); define("add", add, port); define("pool", pool, port); @@ -91,9 +91,9 @@ ostiary((port) => { // Communicate state - effect(() => announce("future", future(), port)); - effect(() => announce("now", now(), port)); - effect(() => announce("past", past(), port)); + effect(() => announce("future", future.value, port)); + effect(() => announce("now", now.value, port)); + effect(() => announce("past", past.value, port)); }); //////////////////////////////////////////// @@ -110,10 +110,10 @@ function fill(future) { /** @type {Track[]} */ const pool = []; - let p = new Set(past().map((t) => t.id)); + let p = new Set(past.value.map((t) => t.id)); let reducedPool = pool; - lake().forEach((track) => { + lake.value.forEach((track) => { if (p.has(track.id)) { p = p.difference(new Set(track.id)); } else { @@ -122,7 +122,7 @@ function fill(future) { }); if (reducedPool.length === 0) { - reducedPool = lake(); + reducedPool = lake.value; } const poolSelection = arrayShuffle(reducedPool).slice( From 44860074f03a34f1ba62d783ad2ceae147a0a719 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 22 Oct 2025 19:00:02 +0200 Subject: [PATCH 038/244] feat: improved workflow for working with custom elements already located in the dom --- src/common/element.js | 26 ++++++++++++++ src/component/engine/audio/element.js | 1 + src/component/engine/queue/element.js | 2 ++ src/component/processor/artwork/element.js | 2 ++ src/component/processor/metadata/element.js | 2 ++ src/theme/blur/index.js | 36 +++++++++++++++++++ src/theme/blur/index.vto | 38 +-------------------- 7 files changed, 70 insertions(+), 37 deletions(-) create mode 100644 src/theme/blur/index.js diff --git a/src/common/element.js b/src/common/element.js index e1c7ae14f..ce23d05ca 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -270,3 +270,29 @@ export class BroadcastableDiffuseElement extends DiffuseElement { this.#lock.resolve(); } } + +/** + * Component DOM selector. + * + * Basically `document.querySelector` but returns the element + * with the correct type based on the element module given. + * + * ``` + * import * as QueryEngine from "@components/engine/query/element.js" + * + * const instance = component(QueryEngine) + * ``` + * + * @template {abstract new (...args: any[]) => any} C + * @param {{ CLASS: C; NAME: string }} elementModule + * @param {string} [id] Optional id to select + */ +export function component(elementModule, id) { + const el = document.querySelector( + id ? `${elementModule.NAME}#${id}` : elementModule.NAME, + ); + if (!el) { + throw new Error(`Element for selector '${elementModule.NAME}' not found.`); + } + return /** @type {InstanceType} */ (el); +} diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 1b916be11..51cb31af4 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -439,6 +439,7 @@ function initiateLoading(event) { // REGISTER //////////////////////////////////////////// +export const CLASS = AudioEngine; export const NAME = "de-audio"; export const NAME_ITEM = "de-audio-item"; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 7451c74a1..53a67b660 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -67,5 +67,7 @@ export default QueueEngine; // REGISTER //////////////////////////////////////////// +export const CLASS = QueueEngine; export const NAME = "de-queue"; + customElements.define(NAME, QueueEngine); diff --git a/src/component/processor/artwork/element.js b/src/component/processor/artwork/element.js index 66e2a5906..12676ce40 100644 --- a/src/component/processor/artwork/element.js +++ b/src/component/processor/artwork/element.js @@ -36,5 +36,7 @@ export default ArtworkProcessor; // REGISTER //////////////////////////////////////////// +export const CLASS = ArtworkProcessor; export const NAME = "dp-artwork"; + customElements.define(NAME, ArtworkProcessor); diff --git a/src/component/processor/metadata/element.js b/src/component/processor/metadata/element.js index 44c3e145c..fc4b11f27 100644 --- a/src/component/processor/metadata/element.js +++ b/src/component/processor/metadata/element.js @@ -35,5 +35,7 @@ export default MetadataProcessor; // REGISTER //////////////////////////////////////////// +export const CLASS = MetadataProcessor; export const NAME = "dp-metadata"; + customElements.define(NAME, MetadataProcessor); diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js new file mode 100644 index 000000000..e8253832a --- /dev/null +++ b/src/theme/blur/index.js @@ -0,0 +1,36 @@ +import * as Audio from "@component/engine/audio/element.js"; +import * as Queue from "@component/engine/queue/element.js"; +import * as Metadata from "@component/processor/metadata/element.js"; + +import { component } from "@common/element.js"; + +const audio = component(Audio); +const queue = component(Queue); +const metadata = component(Metadata); + +const url = + "https://archive.org/download/deathofsalesmans00mill/01_Side_1_Death_of_a_salesman_-_Introduction_Act_1__Part_1.mp3"; + +// const resp = await metadata.supply({ +// urls: { get: url, head: url } +// }) + +// console.log(resp) + +audio.supply({ + audio: [ + { + id: "test", + isPreload: false, + url: url, + }, + ], +}); + +// effect(() => { +// console.log("Future:", queue.future()) +// }) + +// effect(() => { +// console.log("Now:", queue.now()) +// }) diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 458abd5ea..70047a134 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -12,42 +12,6 @@
    - + From 30e3c5ef56c6765cbdf7304fd015b0854b8fc794 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 22 Oct 2025 19:10:32 +0200 Subject: [PATCH 039/244] =?UTF-8?q?chore:=20=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _backup/pages/core/types.d.ts | 72 ------ _backup/pages/processor/artwork/_applet.astro | 35 --- .../pages/processor/artwork/_manifest.json | 38 --- _backup/pages/processor/artwork/index.astro | 9 - _backup/pages/processor/artwork/types.d.ts | 1 - _backup/pages/processor/search/_applet.astro | 49 ---- _backup/pages/processor/search/_manifest.json | 6 - _backup/pages/processor/search/index.astro | 9 - _backup/pages/processor/search/types.d.ts | 1 - _backup/scripts/spellcaster/README.md | 1 - _backup/scripts/spellcaster/hyperscript.ts | 241 ------------------ _backup/scripts/spellcaster/index.ts | 3 - _backup/scripts/spellcaster/spellcaster.ts | 60 ----- _backup/scripts/spellcaster/util.ts | 31 --- src/component/engine/audio/element.js | 10 +- 15 files changed, 5 insertions(+), 561 deletions(-) delete mode 100644 _backup/pages/core/types.d.ts delete mode 100644 _backup/pages/processor/artwork/_applet.astro delete mode 100644 _backup/pages/processor/artwork/_manifest.json delete mode 100644 _backup/pages/processor/artwork/index.astro delete mode 100644 _backup/pages/processor/artwork/types.d.ts delete mode 100644 _backup/pages/processor/search/_applet.astro delete mode 100644 _backup/pages/processor/search/_manifest.json delete mode 100644 _backup/pages/processor/search/index.astro delete mode 100644 _backup/pages/processor/search/types.d.ts delete mode 100644 _backup/scripts/spellcaster/README.md delete mode 100644 _backup/scripts/spellcaster/hyperscript.ts delete mode 100644 _backup/scripts/spellcaster/index.ts delete mode 100644 _backup/scripts/spellcaster/spellcaster.ts delete mode 100644 _backup/scripts/spellcaster/util.ts diff --git a/_backup/pages/core/types.d.ts b/_backup/pages/core/types.d.ts deleted file mode 100644 index 5fc2d6438..000000000 --- a/_backup/pages/core/types.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/* INPUT */ - -/** - * Consultation. - * - * `consult` can be "undetermined" if only a scheme was given - * instead of a full URI. - */ -export type Consult = - | { supported: false; reason: string } - | { supported: true; consult: "undetermined" | boolean }; - -export type ConsultGrouping = - | { available: false; reason: string; tracks: Track[] } - | { available: true; tracks: Track[] }; - -export type GroupConsult = Record; - -export interface InputWorkerTasks { - consult(fileUriOrScheme: string): Promise; - contextualize(tracks: Track[]): Promise; - groupConsult(tracks: Track[]): Promise; - list(cachedTracks: Track[]): Promise; - resolve({ method, uri }: { method: string; uri: string }): Promise; -} - -/* OUTPUT */ - -export interface Output { - tracks: Track[]; -} - -export interface ManagedOutput { - tracks: { - cacheId: string; - state: "loading" | "loaded"; - collection: Track[]; - }; -} - -/* TRACKS */ - -export type ResolvedUri = undefined | { url: string; expiresAt: number }; // TODO: Streams? - -export interface Track { - id: string; - - kind?: "music" | "audiobook" | "podcast" | "miscellaneous"; - stats?: Stats; - tags?: Tags; - - // NOTE: This is a "semi-permanent" URI. - // - // Tracks are cached so you can't, for example, - // use an URL that expires in several hours. - uri: string; -} - -export interface TrackStats { - bitrate?: number; - duration?: number; -} - -export interface TrackTags { - album?: string; - artist?: string; - disc: { no: number; of?: number }; - genre?: string; - title: string; - track: { no: number; of?: number }; - year?: number; -} diff --git a/_backup/pages/processor/artwork/_applet.astro b/_backup/pages/processor/artwork/_applet.astro deleted file mode 100644 index ea2cb7386..000000000 --- a/_backup/pages/processor/artwork/_applet.astro +++ /dev/null @@ -1,35 +0,0 @@ - diff --git a/_backup/pages/processor/artwork/_manifest.json b/_backup/pages/processor/artwork/_manifest.json deleted file mode 100644 index 95a62a2c6..000000000 --- a/_backup/pages/processor/artwork/_manifest.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "diffuse/processor/artwork", - "title": "Diffuse Processor | Artwork fetcher", - "description": "Tries to get artwork for a given URL or stream.", - "entrypoint": "index.html", - "actions": { - "supply": { - "title": "Supply", - "description": "Get the artwork for a given URL.", - "params_schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "cacheId": { - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "stream": { - "type": "object" - }, - "urls": { - "type": "object", - "properties": { - "get": { "type": "string" }, - "head": { "type": "string" } - }, - "required": ["get", "head"] - } - }, - "required": ["cacheId"] - } - } - } - } -} diff --git a/_backup/pages/processor/artwork/index.astro b/_backup/pages/processor/artwork/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/processor/artwork/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/processor/artwork/types.d.ts b/_backup/pages/processor/artwork/types.d.ts deleted file mode 100644 index 3a987db17..000000000 --- a/_backup/pages/processor/artwork/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "../../../scripts/processor/artwork/types.d.ts"; diff --git a/_backup/pages/processor/search/_applet.astro b/_backup/pages/processor/search/_applet.astro deleted file mode 100644 index cf552b686..000000000 --- a/_backup/pages/processor/search/_applet.astro +++ /dev/null @@ -1,49 +0,0 @@ - diff --git a/_backup/pages/processor/search/_manifest.json b/_backup/pages/processor/search/_manifest.json deleted file mode 100644 index 9b3c08009..000000000 --- a/_backup/pages/processor/search/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/processor/search", - "title": "Diffuse Processor | Search", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/processor/search/index.astro b/_backup/pages/processor/search/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/processor/search/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/processor/search/types.d.ts b/_backup/pages/processor/search/types.d.ts deleted file mode 100644 index edec5ae98..000000000 --- a/_backup/pages/processor/search/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "@scripts/processor/search/types.d.ts"; diff --git a/_backup/scripts/spellcaster/README.md b/_backup/scripts/spellcaster/README.md deleted file mode 100644 index d5e6adcf7..000000000 --- a/_backup/scripts/spellcaster/README.md +++ /dev/null @@ -1 +0,0 @@ -Reusing various parts of the `spellcaster` library, swapped out the signals library with `alien-signals`. diff --git a/_backup/scripts/spellcaster/hyperscript.ts b/_backup/scripts/spellcaster/hyperscript.ts deleted file mode 100644 index 2aff1e33d..000000000 --- a/_backup/scripts/spellcaster/hyperscript.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { effect } from "alien-signals"; -import { type Signal, takeValues, sample } from "./spellcaster"; -export { cid, getId, indexById, index, type Identifiable } from "./util"; - -/** A view-constructing function */ -export type View = (state: Signal) => HTMLElement; - -/** Symbol for list item key */ -const __key__ = Symbol("list item key"); - -/** - * Create a function to efficiently render a dynamic list of views on a - * parent element. - */ -export const repeat = - (states: Signal>, view: View) => - (parent: HTMLElement) => - effect(() => { - // Build an index of children and a list of children to remove. - // Note that we must build a list of children to remove, since - // removing in-place would change the live node list and bork iteration. - const children = new Map(); - const removes: Array = []; - - // @ts-ignore - for (const child of parent.children) { - children.set(child[__key__], child); - if (!states().has(child[__key__])) { - removes.push(child); - } - } - - for (const child of removes) { - parent.removeChild(child); - } - - let i = 0; - for (const key of states().keys()) { - const index = i++; - const child = children.get(key); - if (child != null) { - insertElementAt(parent, child, index); - } else { - const child = view(takeValues(() => states().get(key))); - // @ts-ignore - child[__key__] = key; - insertElementAt(parent, child, index); - } - } - }); - -/** - * Insert element at index. - * If element is already at index, this function is a no-op - * (it doesn't remove-and-then-add element). By avoiding moving the element - * unless needed, we preserve focus and selection state for elements that - * don't move. - */ -export const insertElementAt = (parent: HTMLElement, element: HTMLElement, index: number) => { - const elementAtIndex = parent.children[index]; - if (elementAtIndex === element) { - return; - } - parent.insertBefore(element, elementAtIndex); -}; - -export const children = - (...children: Array) => - (parent: HTMLElement) => { - parent.replaceChildren(...children); - }; - -export const shadow = - (...children: Array) => - (parent: HTMLElement) => { - parent.attachShadow({ mode: "open" }); - parent.shadowRoot!.replaceChildren(...children); - }; - -/** - * Write a value or signal of values to the text content of a parent element. - * Value will be coerced to string. If nullish, will be coerced to empty string. - */ -export const text = (text: Signal | any) => (parent: Node) => - effect(() => setProp(parent, "textContent", sample(text) ?? "")); - -const isArray = Array.isArray; - -export type ElementConfigurator = Array | ((element: HTMLElement) => void); - -/** - * Signals-aware hyperscript. - * Create an element that can be updated with signals. - * @param tag - the HTML element type to create - * @param props - a signal or object containing - * properties to set on the element. - * @param configure - either a function called with the element to configure it, - * or an array of HTMLElements and strings to append. Optional. - */ -export const h = ( - tag: string, - props: Record | Signal> = {}, - configure: ElementConfigurator = noConfigure, -): T => { - const element = document.createElement(tag); - - effect(() => setProps(element, sample(props))); - configureElement(element, configure); - - return element as T; -}; - -export type Props = Record | Signal>; - -type TagFactory = (props?: Props, configure?: ElementConfigurator) => HTMLElement; - -/** - * Create a tag factory function - a specialized version of `h()` for a - * specific tag. - * @example - * const div = tag('div') - * div({className: 'wrapper'}) - */ -export const tag = - (tag: string): TagFactory => - (props = {}, configure = noConfigure) => - h(tag, props, configure); - -/** - * Create a tag factory function by accessing any property of `tags`. - * The key will be used as the tag name for the factory. - * Key must be a string, and will be passed verbatim as the tag name to - * `document.createElement()` under the hood. - * @example - * const {div} = tags - * div({className: 'wrapper'}) - */ -export const tags: Record = new Proxy(Object.freeze({}), { - get: (_, key): TagFactory => { - if (typeof key !== "string") { - throw new TypeError("Tag must be string"); - } - return tag(key); - }, -}); - -const noConfigure = (parent: HTMLElement) => {}; - -const configureElement = (element: HTMLElement, configure: ElementConfigurator = noConfigure) => { - if (isArray(configure)) { - element.replaceChildren(...configure); - } else { - configure(element); - } -}; - -/** - * Layout-triggering DOM properties. - * @see https://gist.github.com/paulirish/5d52fb081b3570c81e3a - */ -const LAYOUT_TRIGGERING_PROPS = new Set(["innerText"]); - -/** - * Set object key, but only if value has actually changed. - * This is useful when setting keys on DOM elements, where setting the same - * value twice might trigger an unnecessary reflow or a style recalc. - * prop caches the written value and only writes the new value if it - * is different from the last-written value. - * - * In most cases, we can simply read the value of the DOM property itself. - * However, there are footgun properties such as `innerText` which - * will trigger reflow if you read from them. In these cases we warn developers. - * @see https://gist.github.com/paulirish/5d52fb081b3570c81e3a - * - * @param object - the object to set property on - * @param key - the key - * @param value - the value to set - */ -export const setProp = (element: Node, key: string, value: any) => { - if (LAYOUT_TRIGGERING_PROPS.has(key)) { - console.warn( - `Checking property value for ${key} triggers layout. Consider writing to this property without using setProp().`, - ); - } - - if (key === "attrs" && typeof value === "object" && element instanceof HTMLElement) { - for (const [k, v] of Object.entries(value)) { - const value = typeof v === "string" ? v : (v as any).toString(); - if (element.getAttribute(k) !== value) element.setAttribute(k, value); - } - // @ts-ignore - } else if (element[key] !== value) { - // @ts-ignore - element[key] = value; - } -}; - -/** - * Set properties on an element, but only if the value has actually changed. - */ -const setProps = (element: Node, props: Record) => { - for (const [key, value] of Object.entries(props)) { - setProp(element, key, value); - } -}; - -const createStylesheetCache = () => { - const cache = new Map(); - - /** Get or create a cached stylesheet from a string */ - const stylesheet = (cssString: string): CSSStyleSheet => { - const cachedSheet = cache.get(cssString); - if (cachedSheet) { - return cachedSheet; - } - const sheet = new CSSStyleSheet(); - sheet.replaceSync(cssString); - cache.set(cssString, sheet); - return sheet; - }; - - stylesheet.clearCache = () => { - cache.clear(); - }; - - return stylesheet; -}; - -export const stylesheet = createStylesheetCache(); - -/** - * CSS template literal tag - * Takes a string without replacements and returns a CSSStyleSheet. - */ -export const css = (parts: TemplateStringsArray) => { - if (parts.length !== 1) { - throw new TypeError(`css string must not contain dynamic replacements`); - } - const [cssString] = parts; - return stylesheet(cssString); -}; diff --git a/_backup/scripts/spellcaster/index.ts b/_backup/scripts/spellcaster/index.ts deleted file mode 100644 index c58caf80d..000000000 --- a/_backup/scripts/spellcaster/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "alien-signals"; -export * from "./spellcaster.js"; -export * as hyperscript from "./hyperscript.js"; diff --git a/_backup/scripts/spellcaster/spellcaster.ts b/_backup/scripts/spellcaster/spellcaster.ts deleted file mode 100644 index c4722faa7..000000000 --- a/_backup/scripts/spellcaster/spellcaster.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { computed } from "alien-signals"; - -export type Props = Record | (() => Record); - -/** - * A signal is a zero-argument function that returns a value. - * Reactive signals created with `signal()` will cause reactive contexts - * to automatically re-execute when the signal changes. - * Constant signals can be modeled as zero-argument functions that - * return a constant value. - */ -export type Signal = () => T; - -/** - * Is value a signal-like function? - * A signal is any zero-argument function. - */ -export const isSignal = (value: any): value is Signal => - typeof value === "function" && value.length === 0; - -/** Sample a value that may be a signal, or just an ordinary value */ -export const sample = (value: T | Signal): T => (isSignal(value) ? value() : value); - -/** - * Transform a signal, returning a computed signal that takes values until - * the given signal returns null. Once the given signal returns null, the - * signal is considered to be complete and no further updates will occur. - * - * This utility is useful for signals representing a child in a dynamic - * collection of children, where the child may cease to exist. - * A computed signal looks up the child, returns null if that child no longer - * exists. This completes the signal and breaks the connection with upstream - * signals, allowing the child signal to be garbaged. - */ -export const takeValues = (maybeSignal: Signal) => { - const initial = maybeSignal(); - - if (initial == null) { - throw new TypeError("Signal initial value cannot be null"); - } - - let state = initial; - let isComplete = false; - - return computed(() => { - if (isComplete) { - return state; - } - - const next = maybeSignal(); - - if (next != null) { - state = next; - return state; - } else { - isComplete = true; - return state; - } - }); -}; diff --git a/_backup/scripts/spellcaster/util.ts b/_backup/scripts/spellcaster/util.ts deleted file mode 100644 index 8ef180858..000000000 --- a/_backup/scripts/spellcaster/util.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** The counter that is incremented for `cid()` */ -let _cid = 0; - -/** - * Get an auto-incrementing client-side ID value. - * IDs are NOT guaranteed to be stable across page refreshes. - */ -export const cid = (): string => `cid${_cid++}`; - -/** Index an iterable of items by key, returning a map. */ -export const index = ( - iter: Iterable, - getKey: (item: Item) => Key, -): Map => { - const indexed = new Map(); - for (const item of iter) { - indexed.set(getKey(item), item); - } - return indexed; -}; - -/** An item that exposes an ID field that is unique within its collection */ -export interface Identifiable { - id: any; -} - -export const getId = (item: Item) => item.id; - -/** Index a collection by ID */ -export const indexById = (iter: Iterable): Map => - index(iter, getId); diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 51cb31af4..5440aa165 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -37,7 +37,7 @@ class AudioEngine extends BroadcastableDiffuseElement { this.seek = fn("seek", this.seek).leaderOnly; this.supply = fn("supply", this.supply).replicate; - this.__isPlaying.set = fn("isPlaying", this.__isPlaying.set).replicate; + this.$isPlaying.set = fn("isPlaying", this.$isPlaying.set).replicate; } // TODO: Get volume from previous session if possible @@ -50,11 +50,11 @@ class AudioEngine extends BroadcastableDiffuseElement { #items = signal(/** @type {Audio[]} */ ([])); #volume = signal(0.5); - __isPlaying = signal(false); + $isPlaying = signal(false); // STATE - isPlaying = this.__isPlaying.get; + isPlaying = this.$isPlaying.get; items = this.#items.get; volume = this.#volume.get; @@ -358,7 +358,7 @@ class AudioEngineItem extends HTMLElement { : false; item?.state({ isPlaying: false }); - item?.engine?.__isPlaying.set(ended); + item?.engine?.$isPlaying.set(ended); } /** @@ -368,7 +368,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); engineItem(audio)?.state({ isPlaying: true }); - engineItem(audio)?.engine?.__isPlaying.set(true); + engineItem(audio)?.engine?.$isPlaying.set(true); // In case audio was preloaded: if (audio.readyState === 4) finishedLoading(event); From 9f2fccd5a2c9817a49ff3746ce808c35660d4722 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 23 Oct 2025 15:13:31 +0200 Subject: [PATCH 040/244] feat: search processor --- _backup/scripts/processor/search/constants.ts | 17 -- _backup/scripts/processor/search/types.d.ts | 4 - _backup/scripts/processor/search/worker.ts | 147 ------------------ deno.jsonc | 1 + deno.lock | 5 + src/component/processor/search/constants.js | 17 ++ src/component/processor/search/types.d.ts | 6 + src/component/processor/search/worker.js | 127 +++++++++++++++ 8 files changed, 156 insertions(+), 168 deletions(-) delete mode 100644 _backup/scripts/processor/search/constants.ts delete mode 100644 _backup/scripts/processor/search/types.d.ts delete mode 100644 _backup/scripts/processor/search/worker.ts create mode 100644 src/component/processor/search/constants.js create mode 100644 src/component/processor/search/types.d.ts create mode 100644 src/component/processor/search/worker.js diff --git a/_backup/scripts/processor/search/constants.ts b/_backup/scripts/processor/search/constants.ts deleted file mode 100644 index 439df873a..000000000 --- a/_backup/scripts/processor/search/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -export const SCHEMA = { - id: "string" as const, - kind: "string" as const, - tags: { - album: "string" as const, - artist: "string" as const, - genre: "string" as const, - title: "string" as const, - year: "number" as const, - }, - - // TODO: - // isFavorite: "boolean" as const, - // inPlaylists: [ ... ], - - embeddings: "vector[512]" as const, -}; diff --git a/_backup/scripts/processor/search/types.d.ts b/_backup/scripts/processor/search/types.d.ts deleted file mode 100644 index 8af94374b..000000000 --- a/_backup/scripts/processor/search/types.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type State = { - cacheId: string; - inserted: Set; -}; diff --git a/_backup/scripts/processor/search/worker.ts b/_backup/scripts/processor/search/worker.ts deleted file mode 100644 index 748345f35..000000000 --- a/_backup/scripts/processor/search/worker.ts +++ /dev/null @@ -1,147 +0,0 @@ -import * as Orama from "@orama/orama"; -import { getTransferables } from "@okikio/transferables"; -import { xxh32 } from "xxh32"; -// import { pluginQPS } from "@orama/plugin-qps"; - -import type { Track } from "@applets/core/types"; -import type { State } from "./types"; -import { postMessages, provide, transfer } from "@scripts/common"; -import { SCHEMA } from "./constants"; - -//////////////////////////////////////////// -// SETUP -//////////////////////////////////////////// - -const actions = { - search, - supply, -}; - -const { ports, tasks } = provide({ - actions, - tasks: { ...actions, data }, -}); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -//////////////////////////////////////////// -// STATE -//////////////////////////////////////////// - -let state: State = { - cacheId: "", - inserted: new Set(), -}; - -function data() { - return state; -} - -function notify() { - const d = data(); - - postMessages({ - data: { - type: "data", - data: d, - }, - ports: ports.applets, - transfer: getTransferables(d), - }); -} - -// TODO: Generate embeddings plugin -// -// I tried this and getting some bundler/vite errors about a default import. -// -// const plugin = await pluginEmbeddings({ -// embeddings: { -// defaultProperty: "embeddings", -// onInsert: { -// generate: true, -// // Properties to use for generating embeddings at insert time. -// // These properties will be concatenated and used to generate embeddings. -// properties: ["album", "artist", "title", "year", "kind", "genre"], -// // verbose: true, -// }, -// }, -// }); -// -// TODO: -// -// Does not work either. -// `TypeError: a is undefined` -// -// pluginQPS() - -const PLUGINS: Orama.OramaPlugin[] = []; - -// Search through tracks -const db = Orama.create({ - schema: SCHEMA, - plugins: PLUGINS, - - // components: { - // TODO: - // https://docs.orama.com/open-source/usage/insert#remote-document-storing - // documentStore: { ... } - // }, -}); - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// - -async function search(term: string): Promise { - term = term.trim(); - const tracks: Track[] = await _search(term, []); - return transfer(tracks); -} - -async function _search(term: string, tracks: Track[]) { - console.log("Search with offset:", tracks.length); - - const results = await Orama.search(db, { - // mode: "hybrid", - term, - limit: 10000, - offset: tracks.length, - }); - - const allTracks = tracks.concat(results.hits.map((hit) => hit.document as unknown as Track)); - - if (allTracks.length < results.count) { - return await _search(term, allTracks); - } else { - return allTracks; - } -} - -async function supply(tracks: Track[]) { - // TODO: Generate a hash based on the track itself, - // so we can detect changes to tags or other data. - - const ids: string[] = []; - const tracksMap: Record = {}; - - tracks.forEach((track) => { - ids.push(track.id); - tracksMap[track.id] = track; - }); - - const currentSet = state.inserted; - const newSet = new Set(ids); - - const removedIds = currentSet.difference(newSet); - const newIds = newSet.difference(currentSet); - const newTracks = Array.from(newIds).map((id) => tracksMap[id]); - - await Orama.removeMultiple(db, Array.from(removedIds)); - await Orama.insertMultiple(db, newTracks); - - state.inserted = newSet; - state.cacheId = xxh32(ids.sort().join("")).toString(); - - notify(); -} diff --git a/deno.jsonc b/deno.jsonc index ae18049f7..e29cd0772 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -7,6 +7,7 @@ "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", + "@orama/orama": "jsr:@orama/orama@^2.0.6", "alien-signals": "npm:alien-signals@^3.0.0", "idb-keyval": "npm:idb-keyval@^6.2.2", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", diff --git a/deno.lock b/deno.lock index 4229ca9c0..28015f029 100644 --- a/deno.lock +++ b/deno.lock @@ -6,6 +6,7 @@ "jsr:@mys/m-rpc@~0.12.2": "0.12.2", "jsr:@mys/worker-fn@^3.2.1": "3.2.1", "jsr:@okikio/transferables@^1.0.2": "1.0.2", + "jsr:@orama/orama@^2.0.6": "2.0.6", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -68,6 +69,9 @@ "@okikio/transferables@1.0.2": { "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" }, + "@orama/orama@2.0.6": { + "integrity": "0221bbd9a638e42772fc6e082cf057755f83a8cea919c85fa0baa9bb027ab078" + }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -660,6 +664,7 @@ "jsr:@mys/m-rpc@~0.12.2", "jsr:@mys/worker-fn@^3.2.1", "jsr:@okikio/transferables@^1.0.2", + "jsr:@orama/orama@^2.0.6", "jsr:@std/fs@^1.0.19", "jsr:@std/path@^1.1.2", "npm:alien-signals@3", diff --git a/src/component/processor/search/constants.js b/src/component/processor/search/constants.js new file mode 100644 index 000000000..a6c655fdf --- /dev/null +++ b/src/component/processor/search/constants.js @@ -0,0 +1,17 @@ +export const SCHEMA = { + id: /** @type {const} */ ("string"), + kind: /** @type {const} */ ("string"), + tags: { + album: /** @type {const} */ ("string"), + artist: /** @type {const} */ ("string"), + genre: /** @type {const} */ ("string"), + title: /** @type {const} */ ("string"), + year: /** @type {const} */ ("number"), + }, + + // TODO: + // isFavorite: "boolean" as const, + // inPlaylists: [ ... ], + + embeddings: /** @type {const} */ ("vector[512]"), +}; diff --git a/src/component/processor/search/types.d.ts b/src/component/processor/search/types.d.ts new file mode 100644 index 000000000..a0f80651e --- /dev/null +++ b/src/component/processor/search/types.d.ts @@ -0,0 +1,6 @@ +import type { Track } from "@component/core/types.d.ts"; + +export type Actions = { + search(term: string): Promise; + supply(tracks: Track[]): Promise; +}; diff --git a/src/component/processor/search/worker.js b/src/component/processor/search/worker.js new file mode 100644 index 000000000..d5c94846a --- /dev/null +++ b/src/component/processor/search/worker.js @@ -0,0 +1,127 @@ +import * as Orama from "@orama/orama"; +import { xxh32 } from "xxh32"; +// import { pluginQPS } from "@orama/plugin-qps"; + +import { SCHEMA } from "./constants.js"; +import { define, ostiary } from "@common/worker.js"; +import { signal } from "@common/signal.js"; + +/** + * @import {Track} from "@component/core/types.d.ts" + * @import {Actions} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// STATE +//////////////////////////////////////////// + +export const cacheId = signal(/** @type {string} */ ("")); +export const inserted = signal(/** @type {Set} */ (new Set())); + +//////////////////////////////////////////// +// DATABASE +//////////////////////////////////////////// + +// TODO: +// * pluginEmbeddings +// * pluginQPS + +/** + * @type {Orama.OramaPlugin[]} + */ +const PLUGINS = []; + +const db = Orama.create({ + schema: SCHEMA, + plugins: PLUGINS, + // components: { + // TODO: + // https://docs.orama.com/open-source/usage/insert#remote-document-storing + // documentStore: { ... } + // }, +}); + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +/** + * @type {Actions['search']} + */ +export async function search(term) { + term = term.trim(); + return await _search(term, []); +} + +/** + * @type {Actions['supply']} + */ +export async function supply(tracks) { + // TODO: Generate a hash based on the track itself, + // so we can detect changes to tags or other data. + + /** @type {string[]} */ + const ids = []; + + /** @type {Record} */ + const tracksMap = {}; + + tracks.forEach((track) => { + ids.push(track.id); + tracksMap[track.id] = track; + }); + + const currentSet = inserted.value; + const newSet = new Set(ids); + + const removedIds = currentSet.difference(newSet); + const newIds = newSet.difference(currentSet); + const newTracks = Array.from(newIds).map((id) => tracksMap[id]); + + await Orama.removeMultiple(await db, Array.from(removedIds)); + await Orama.insertMultiple(await db, newTracks); + + inserted.value = newSet; + cacheId.value = xxh32(ids.sort().join("")).toString(); +} + +//////////////////////////////////////////// +// ⚡️ +//////////////////////////////////////////// + +ostiary((port) => { + // Setup RPC + define("search", search, port); + define("supply", supply, port); +}); + +//////////////////////////////////////////// +// ⛔️ +//////////////////////////////////////////// + +/** + * @param {string} term + * @param {Track[]} tracks + */ +async function _search(term, tracks) { + console.log("Search with offset:", tracks.length); + + const results = await Orama.search(await db, { + // mode: "hybrid", + term, + limit: 10000, + offset: tracks.length, + }); + + const allTracks = tracks.concat( + results.hits.map(( + hit, + ) => /** @type {Track} */ (/** @type {unknown} */ (hit.document))), + ); + + if (allTracks.length < results.count) { + return await _search(term, allTracks); + } else { + return allTracks; + } +} From 85545cb6b16c8bae49c511e532320e52427ff698 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 23 Oct 2025 15:36:28 +0200 Subject: [PATCH 041/244] =?UTF-8?q?chore:=20=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _backup/pages/input/native-fs/_applet.astro | 82 --------- _backup/pages/input/native-fs/_manifest.json | 56 ------- _backup/pages/input/native-fs/index.astro | 9 - .../pages/input/opensubsonic/_applet.astro | 80 --------- .../pages/input/opensubsonic/_manifest.json | 63 ------- _backup/pages/input/opensubsonic/index.astro | 9 - _backup/pages/input/opensubsonic/types.d.ts | 1 - _backup/pages/input/s3/_applet.astro | 109 ------------ _backup/pages/input/s3/_manifest.json | 63 ------- _backup/pages/input/s3/index.astro | 9 - _backup/pages/output/indexed-db/_applet.astro | 49 ------ .../pages/output/indexed-db/_manifest.json | 26 --- _backup/pages/output/indexed-db/index.astro | 9 - _backup/pages/output/native-fs/_applet.astro | 75 --------- _backup/pages/output/native-fs/_manifest.json | 26 --- _backup/pages/output/native-fs/index.astro | 9 - .../output/storacha-automerge/_applet.astro | 124 -------------- .../output/storacha-automerge/_manifest.json | 26 --- .../output/storacha-automerge/index.astro | 9 - _backup/scripts/input/common.ts | 3 - _backup/scripts/input/native-fs/common.ts | 86 ---------- _backup/scripts/input/native-fs/constants.ts | 5 - _backup/scripts/input/native-fs/mounting.ts | 33 ---- _backup/scripts/input/native-fs/types.d.ts | 1 - _backup/scripts/input/native-fs/ui.ts | 52 ------ _backup/scripts/input/native-fs/worker.ts | 157 ------------------ _backup/scripts/output/native-fs/constants.ts | 2 - _backup/scripts/output/native-fs/worker.ts | 56 ------- src/component/input/common.js | 6 + 29 files changed, 6 insertions(+), 1229 deletions(-) delete mode 100644 _backup/pages/input/native-fs/_applet.astro delete mode 100644 _backup/pages/input/native-fs/_manifest.json delete mode 100644 _backup/pages/input/native-fs/index.astro delete mode 100644 _backup/pages/input/opensubsonic/_applet.astro delete mode 100644 _backup/pages/input/opensubsonic/_manifest.json delete mode 100644 _backup/pages/input/opensubsonic/index.astro delete mode 100644 _backup/pages/input/opensubsonic/types.d.ts delete mode 100644 _backup/pages/input/s3/_applet.astro delete mode 100644 _backup/pages/input/s3/_manifest.json delete mode 100644 _backup/pages/input/s3/index.astro delete mode 100644 _backup/pages/output/indexed-db/_applet.astro delete mode 100644 _backup/pages/output/indexed-db/_manifest.json delete mode 100644 _backup/pages/output/indexed-db/index.astro delete mode 100644 _backup/pages/output/native-fs/_applet.astro delete mode 100644 _backup/pages/output/native-fs/_manifest.json delete mode 100644 _backup/pages/output/native-fs/index.astro delete mode 100644 _backup/pages/output/storacha-automerge/_applet.astro delete mode 100644 _backup/pages/output/storacha-automerge/_manifest.json delete mode 100644 _backup/pages/output/storacha-automerge/index.astro delete mode 100644 _backup/scripts/input/common.ts delete mode 100644 _backup/scripts/input/native-fs/common.ts delete mode 100644 _backup/scripts/input/native-fs/constants.ts delete mode 100644 _backup/scripts/input/native-fs/mounting.ts delete mode 100644 _backup/scripts/input/native-fs/types.d.ts delete mode 100644 _backup/scripts/input/native-fs/ui.ts delete mode 100644 _backup/scripts/input/native-fs/worker.ts delete mode 100644 _backup/scripts/output/native-fs/constants.ts delete mode 100644 _backup/scripts/output/native-fs/worker.ts create mode 100644 src/component/input/common.js diff --git a/_backup/pages/input/native-fs/_applet.astro b/_backup/pages/input/native-fs/_applet.astro deleted file mode 100644 index 07bacf333..000000000 --- a/_backup/pages/input/native-fs/_applet.astro +++ /dev/null @@ -1,82 +0,0 @@ -
    -

    Native file system input

    -

    - Add music from your device. -
    Music added so far: -

    -
    -

    - - - Just a moment, loading mounted directories. - -

    -
    - -
    - - diff --git a/_backup/pages/input/native-fs/_manifest.json b/_backup/pages/input/native-fs/_manifest.json deleted file mode 100644 index a5a6ff655..000000000 --- a/_backup/pages/input/native-fs/_manifest.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "diffuse/input/native-fs", - "title": "Diffuse Input | Native File System", - "entrypoint": "index.html", - "input_properties": { - "scheme": "file+local" - }, - "actions": { - "consult": { - "title": "Consult", - "description": "Check if a handle is available to be used by passing in a file uri that uses that handle as the host.", - "params_schema": { - "type": "string", - "description": "The uri with the handle to check the availability of." - } - }, - "list": { - "title": "List", - "description": "List tracks.", - "params_schema": { - "type": "array", - "description": "A list of (cached) tracks with an uri matching the scheme", - "items": { - "type": "object" - } - } - }, - "resolve": { - "title": "Resolve", - "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.", - "params_schema": { - "type": "object", - "properties": { - "method": { - "type": "string", - "description": "The HTTP method that is going to be used on the resolved URI." - }, - "uri": { "type": "string", "description": "The URI to resolve." } - }, - "required": ["method", "uri"] - } - }, - "mount": { - "title": "Mount", - "description": "Prepare for usage." - }, - "unmount": { - "title": "Unmount", - "description": "Callback after usage.", - "params_schema": { - "type": "string", - "description": "The handle id to unmount" - } - } - } -} diff --git a/_backup/pages/input/native-fs/index.astro b/_backup/pages/input/native-fs/index.astro deleted file mode 100644 index f6d027092..000000000 --- a/_backup/pages/input/native-fs/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet-pico-ui.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/input/opensubsonic/_applet.astro b/_backup/pages/input/opensubsonic/_applet.astro deleted file mode 100644 index 4694b496c..000000000 --- a/_backup/pages/input/opensubsonic/_applet.astro +++ /dev/null @@ -1,80 +0,0 @@ -
    -

    OpenSubsonic input

    - -

    Mounted servers

    - -
    -

    - - - Just a moment, loading mounted servers. - -

    -
    - -

    Add a new OpenSubsonic-compatible server

    - -
    -
    - - diff --git a/_backup/pages/input/opensubsonic/_manifest.json b/_backup/pages/input/opensubsonic/_manifest.json deleted file mode 100644 index 7814c483d..000000000 --- a/_backup/pages/input/opensubsonic/_manifest.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "diffuse/input/opensubsonic", - "title": "Diffuse Input | OpenSubsonic API", - "entrypoint": "index.html", - "input_properties": { - "scheme": "opensubsonic" - }, - "actions": { - "consult": { - "title": "Consult", - "params_schema": { - "type": "string", - "description": "The uri to check the availability of." - } - }, - "contextualize": { - "title": "Contextualize", - "params_schema": { - "type": "array", - "description": "Array of tracks", - "items": { "type": "object" } - } - }, - "list": { - "title": "List", - "description": "List tracks.", - "params_schema": { - "type": "array", - "description": "A list of (cached) tracks with an uri matching the scheme", - "items": { - "type": "object" - } - } - }, - "resolve": { - "title": "Resolve", - "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.", - "params_schema": { - "type": "object", - "properties": { - "method": { - "type": "string", - "description": "The HTTP method that is going to be used on the resolved URI." - }, - "uri": { "type": "string", "description": "The URI to resolve." } - }, - "required": ["method", "uri"] - } - }, - "mount": { - "title": "Mount", - "description": "Prepare for usage." - }, - "unmount": { - "title": "Unmount", - "description": "Callback after usage.", - "params_schema": { - "type": "string", - "description": "The handle id to unmount" - } - } - } -} diff --git a/_backup/pages/input/opensubsonic/index.astro b/_backup/pages/input/opensubsonic/index.astro deleted file mode 100644 index f6d027092..000000000 --- a/_backup/pages/input/opensubsonic/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet-pico-ui.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/input/opensubsonic/types.d.ts b/_backup/pages/input/opensubsonic/types.d.ts deleted file mode 100644 index 997decc38..000000000 --- a/_backup/pages/input/opensubsonic/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "@scripts/input/opensubsonic/types.d.ts"; diff --git a/_backup/pages/input/s3/_applet.astro b/_backup/pages/input/s3/_applet.astro deleted file mode 100644 index a2755bd66..000000000 --- a/_backup/pages/input/s3/_applet.astro +++ /dev/null @@ -1,109 +0,0 @@ -
    -

    S3-compatible input

    - -

    Mounted buckets

    - -
    -

    - - - Just a moment, loading mounted buckets. - -

    -
    - -

    Add a new S3 bucket

    - -
    - - - -
    - - - - diff --git a/_backup/pages/input/s3/_manifest.json b/_backup/pages/input/s3/_manifest.json deleted file mode 100644 index f79b7c9b8..000000000 --- a/_backup/pages/input/s3/_manifest.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "diffuse/input/s3", - "title": "Diffuse Input | S3", - "entrypoint": "index.html", - "input_properties": { - "scheme": "s3" - }, - "actions": { - "consult": { - "title": "Consult", - "params_schema": { - "type": "string", - "description": "The uri to check the availability of." - } - }, - "contextualize": { - "title": "Contextualize", - "params_schema": { - "type": "array", - "description": "Array of tracks", - "items": { "type": "object" } - } - }, - "list": { - "title": "List", - "description": "List tracks.", - "params_schema": { - "type": "array", - "description": "A list of (cached) tracks with an uri matching the scheme", - "items": { - "type": "object" - } - } - }, - "resolve": { - "title": "Resolve", - "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.", - "params_schema": { - "type": "object", - "properties": { - "method": { - "type": "string", - "description": "The HTTP method that is going to be used on the resolved URI." - }, - "uri": { "type": "string", "description": "The URI to resolve." } - }, - "required": ["method", "uri"] - } - }, - "mount": { - "title": "Mount", - "description": "Prepare for usage." - }, - "unmount": { - "title": "Unmount", - "description": "Callback after usage.", - "params_schema": { - "type": "string", - "description": "The handle id to unmount" - } - } - } -} diff --git a/_backup/pages/input/s3/index.astro b/_backup/pages/input/s3/index.astro deleted file mode 100644 index f6d027092..000000000 --- a/_backup/pages/input/s3/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet-pico-ui.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/output/indexed-db/_applet.astro b/_backup/pages/output/indexed-db/_applet.astro deleted file mode 100644 index 8e356eb79..000000000 --- a/_backup/pages/output/indexed-db/_applet.astro +++ /dev/null @@ -1,49 +0,0 @@ - diff --git a/_backup/pages/output/indexed-db/_manifest.json b/_backup/pages/output/indexed-db/_manifest.json deleted file mode 100644 index 2ad6f9ada..000000000 --- a/_backup/pages/output/indexed-db/_manifest.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "diffuse/output/indexed-db", - "title": "Diffuse Output | IndexedDB", - "entrypoint": "index.html", - "actions": { - "tracks": { - "title": "Tracks", - "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", - "params_schema": { - "type": "array", - "description": "List of tracks", - "items": { - "type": "object" - } - } - }, - "mount": { - "title": "Mount", - "description": "Prepare for usage." - }, - "unmount": { - "title": "Unmount", - "description": "Callback after usage." - } - } -} diff --git a/_backup/pages/output/indexed-db/index.astro b/_backup/pages/output/indexed-db/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/output/indexed-db/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/output/native-fs/_applet.astro b/_backup/pages/output/native-fs/_applet.astro deleted file mode 100644 index 2b0c96415..000000000 --- a/_backup/pages/output/native-fs/_applet.astro +++ /dev/null @@ -1,75 +0,0 @@ - diff --git a/_backup/pages/output/native-fs/_manifest.json b/_backup/pages/output/native-fs/_manifest.json deleted file mode 100644 index 0a95370ed..000000000 --- a/_backup/pages/output/native-fs/_manifest.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "diffuse/output/native-fs", - "title": "Diffuse Output | Native File System", - "entrypoint": "index.html", - "actions": { - "tracks": { - "title": "Tracks", - "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", - "params_schema": { - "type": "array", - "description": "List of tracks", - "items": { - "type": "object" - } - } - }, - "mount": { - "title": "Mount", - "description": "Prepare for usage." - }, - "unmount": { - "title": "Unmount", - "description": "Callback after usage." - } - } -} diff --git a/_backup/pages/output/native-fs/index.astro b/_backup/pages/output/native-fs/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/output/native-fs/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/output/storacha-automerge/_applet.astro b/_backup/pages/output/storacha-automerge/_applet.astro deleted file mode 100644 index f1dd698fb..000000000 --- a/_backup/pages/output/storacha-automerge/_applet.astro +++ /dev/null @@ -1,124 +0,0 @@ - diff --git a/_backup/pages/output/storacha-automerge/_manifest.json b/_backup/pages/output/storacha-automerge/_manifest.json deleted file mode 100644 index c852ec0c3..000000000 --- a/_backup/pages/output/storacha-automerge/_manifest.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "diffuse/output/storacha-automerge", - "title": "Diffuse Output | Storacha Storage + Automerge CRDT", - "entrypoint": "index.html", - "actions": { - "tracks": { - "title": "Tracks", - "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", - "params_schema": { - "type": "array", - "description": "List of tracks", - "items": { - "type": "object" - } - } - }, - "mount": { - "title": "Mount", - "description": "Prepare for usage." - }, - "unmount": { - "title": "Unmount", - "description": "Callback after usage." - } - } -} diff --git a/_backup/pages/output/storacha-automerge/index.astro b/_backup/pages/output/storacha-automerge/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/output/storacha-automerge/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/scripts/input/common.ts b/_backup/scripts/input/common.ts deleted file mode 100644 index 167a7b218..000000000 --- a/_backup/scripts/input/common.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function isAudioFile(filename: string) { - return filename.match(/\.(flac|m4a|mp3|mp4|ogg|opus|wav|webm)$/); -} diff --git a/_backup/scripts/input/native-fs/common.ts b/_backup/scripts/input/native-fs/common.ts deleted file mode 100644 index 0a4e1a7c7..000000000 --- a/_backup/scripts/input/native-fs/common.ts +++ /dev/null @@ -1,86 +0,0 @@ -import * as IDB from "idb-keyval"; -import * as URI from "uri-js"; -import QS from "query-string"; - -import type { Track } from "@applets/core/types.d.ts"; -import type { Handles } from "./types"; -import { isAudioFile } from "@scripts/input/common"; -import { IDB_HANDLES, SCHEME } from "./constants"; - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// -export async function fetchHandles(): Promise { - return (await IDB.get(IDB_HANDLES)) ?? {}; -} - -export async function fetchHandlesList() { - return Object.entries(await fetchHandles()).map(([id, handle]) => { - return { id, handle }; - }); -} -export function groupTracksByHandle(tracks: Track[]) { - const acc: Record = {}; - - tracks.forEach((track: Track) => { - const id = trackHandleId(track); - if (!id) return acc; - - if (acc[id]) { - acc[id].tracks.push(track); - } else { - acc[id] = { tracks: [track] }; - } - }); - - return acc; -} - -export function isSupported() { - return !!(globalThis as any).showDirectoryPicker; -} - -export function trackCid(track: Track): string | undefined { - const a = URI.parse(track.uri); - const cid = a.query ? QS.parse(a.query).cid || undefined : undefined; - return Array.isArray(cid) && cid[0] ? cid[0] : typeof cid === "string" ? cid : undefined; -} - -export function trackHandleId(track: Track): string | undefined { - const a = URI.parse(track.uri); - return a.host; -} - -export async function recursiveList( - dir: FileSystemDirectoryHandle, - rootHandleId: string, - path: string[], -): Promise { - const tracks: Track[] = []; - - for await (const item of dir.values()) { - if (item.kind === "file" && isAudioFile(item.name)) { - const uri = URI.serialize({ - scheme: SCHEME, - host: rootHandleId, - path: `${path.length ? "/" + path.join("/") : ""}/${item.name}`, - }); - - const track: Track = { - id: crypto.randomUUID(), - uri, - }; - - tracks.push(track); - } else if (item.kind === "directory") { - const nestedItems = await recursiveList(item as FileSystemDirectoryHandle, rootHandleId, [ - ...path, - item.name, - ]); - - tracks.push(...nestedItems); - } - } - - return tracks; -} diff --git a/_backup/scripts/input/native-fs/constants.ts b/_backup/scripts/input/native-fs/constants.ts deleted file mode 100644 index fac037cef..000000000 --- a/_backup/scripts/input/native-fs/constants.ts +++ /dev/null @@ -1,5 +0,0 @@ -import manifest from "../../../pages/input/native-fs/_manifest.json"; - -export const IDB_PREFIX = "@applets/input/native-fs"; -export const IDB_HANDLES = `${IDB_PREFIX}/handles`; -export const SCHEME = manifest.input_properties.scheme; diff --git a/_backup/scripts/input/native-fs/mounting.ts b/_backup/scripts/input/native-fs/mounting.ts deleted file mode 100644 index 60f2f63d9..000000000 --- a/_backup/scripts/input/native-fs/mounting.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { signal } from "@scripts/spellcaster"; -import * as IDB from "idb-keyval"; - -import { fetchHandles, fetchHandlesList } from "./common"; -import { IDB_HANDLES } from "./constants"; - -//////////////////////////////////////////// -// SIGNALS -//////////////////////////////////////////// -export const mounts = signal(await fetchHandlesList()); - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// -export const mount = async () => { - await showDirectoryPicker() - .then(async (handle) => { - const existingHandles = await fetchHandles(); - const id = crypto.randomUUID(); - - await handle.requestPermission({ mode: "read" }); - await IDB.set(IDB_HANDLES, { ...existingHandles, [id]: handle }); - mounts(await fetchHandlesList()); - }) - .catch(() => {}); -}; - -export const unmount = async (handleId: string) => { - const handles = await fetchHandles(); - delete handles[handleId]; - await IDB.set(IDB_HANDLES, { ...handles }); - mounts(await fetchHandlesList()); -}; diff --git a/_backup/scripts/input/native-fs/types.d.ts b/_backup/scripts/input/native-fs/types.d.ts deleted file mode 100644 index edfa9c1b9..000000000 --- a/_backup/scripts/input/native-fs/types.d.ts +++ /dev/null @@ -1 +0,0 @@ -export type Handles = Record; diff --git a/_backup/scripts/input/native-fs/ui.ts b/_backup/scripts/input/native-fs/ui.ts deleted file mode 100644 index 4f7415e96..000000000 --- a/_backup/scripts/input/native-fs/ui.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { computed, effect, type Signal } from "@scripts/spellcaster"; -import { repeat, tags, text } from "@scripts/spellcaster/hyperscript.js"; - -import { mount, mounts, unmount } from "./mounting"; -import { isSupported } from "./common"; - -//////////////////////////////////////////// -// SIGNALS -//////////////////////////////////////////// - -// Mount button -document.getElementById("mount")?.addEventListener("click", () => { - if (isSupported()) mount(); - else alert("The File System Access API is not supported on this platform."); -}); - -// Directories -const dirList = computed(() => { - return new Map( - mounts().map((mount) => { - return [mount.id, mount]; - }), - ); -}); - -const Item = (signal: Signal<{ id: string; handle: FileSystemDirectoryHandle }>) => { - const { id, handle } = signal(); - - return tags.li({}, [ - tags.span( - { onclick: () => unmount(id), style: "cursor: pointer;", title: "Click/tap to delete" }, - text(handle.name), - ), - ]); -}; - -const Directories = computed(() => { - if (mounts().length === 0) { - return tags.p({ id: "directories" }, [ - tags.small({}, [ - tags.em({}, text("No audio added yet, click the button below to add some.")), - ]), - ]); - } - - return tags.ul({ id: "directories" }, repeat(dirList, Item)); -}); - -// Add to DOM -effect(() => { - document.getElementById("directories")?.replaceWith(Directories()); -}); diff --git a/_backup/scripts/input/native-fs/worker.ts b/_backup/scripts/input/native-fs/worker.ts deleted file mode 100644 index fa47d8fb5..000000000 --- a/_backup/scripts/input/native-fs/worker.ts +++ /dev/null @@ -1,157 +0,0 @@ -import * as URI from "uri-js"; - -import type { Consult, ConsultGrouping, GroupConsult, Track } from "@applets/core/types.d.ts"; -import { SCHEME } from "./constants"; -import { - fetchHandles, - fetchHandlesList, - groupTracksByHandle, - recursiveList, - trackHandleId, -} from "./common"; -import { provide, transfer } from "@scripts/common"; - -//////////////////////////////////////////// -// TASKS -//////////////////////////////////////////// -const actions = { - consult, - contextualize, - groupConsult, - list, - resolve, -}; - -const { tasks } = provide({ actions, tasks: actions }); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -// Tasks - -export async function consult(fileUriOrScheme: string): Promise { - if (!self.FileSystemDirectoryHandle) { - return { supported: false, reason: "File System Access API is not supported" }; - } - - if (!fileUriOrScheme.includes(":")) { - if (fileUriOrScheme !== SCHEME) return { supported: false, reason: "Scheme does not match" }; - return { supported: true, consult: "undetermined" }; - } - - const handles = await fetchHandles(); - const uri = URI.parse(fileUriOrScheme); - if (uri.scheme !== SCHEME) return { supported: false, reason: "Scheme does not match" }; - return { supported: true, consult: uri.host && !!handles[uri.host] ? true : false }; -} - -export async function contextualize(cachedTracks: Track[]) {} - -async function groupConsult(tracks: Track[]): Promise { - const groups = groupTracksByHandle(tracks); - const handles = await fetchHandles(); - - const promises = Object.entries(groups).map(async ([handleId, { tracks }]) => { - const handle = handles[handleId]; - const grouping: ConsultGrouping = handle - ? { available: true, tracks } - : { available: false, reason: "Handle not available", tracks }; - - return { - key: URI.serialize({ scheme: SCHEME, host: handleId }), - grouping, - }; - }); - - const entries = (await Promise.all(promises)).map((entry) => [entry.key, entry.grouping]); - const obj = Object.fromEntries(entries); - - return transfer(obj); -} - -export async function list(cachedTracks: Track[] = []) { - const handles = await fetchHandlesList(); - - // Recursive listing of all tracks of available handles - const processed: Track[][] = await Promise.all( - handles.map(({ id, handle }) => { - return recursiveList(handle, id, []); - }), - ); - - // Group tracks by handle id & index by track uri - const cache: Record> = {}; - - cachedTracks.forEach((track: Track) => { - const handleId = trackHandleId(track); - if (!handleId) return; - - cache[handleId] ??= {}; - cache[handleId][track.uri] = track; - }); - - // Replace indexes in groups of which we have the handle. - // Keeping around tracks with handles we don't have access to, - // and removing tracks that are no longer available (for handles we do have access to). - - // TODO: Refactor to not use `reduce`, for performance. - const groups = processed.flat(1).reduce( - (acc, track) => { - const handleId = trackHandleId(track); - if (!handleId) throw new Error("New tracks are missing a handle id!"); - - return { ...acc, [handleId]: { ...acc[handleId], [track.uri]: track } }; - }, - handles.reduce((acc: Record>, handle) => { - return { ...acc, [handle.id]: {} }; - }, cache), - ); - - // Transform in track list and sort by uri - const data = Object.values(groups) - .map((tracks) => Object.values(tracks)) - .flat(1) - .sort((a: any, b: any) => { - if (a.uri < b.uri) return -1; - if (a.uri > b.uri) return 1; - return 0; - }); - - // Fin - return transfer(data); -} - -export async function resolve(args: { uri: string }) { - const fileUri = args.uri; - - const uri = URI.parse(fileUri); - if (uri.scheme !== SCHEME) return undefined; - if (!uri.host || !uri.path) return undefined; - - const handles = await fetchHandles(); - const handle = handles[uri.host]; - if (!handle) return undefined; - - const path = URI.unescapeComponent(uri.path); - const parts = (path.startsWith("/") ? path.slice(1) : path).split("/"); - const filename = parts[parts.length - 1]; - - const dirHandle = await parts - .slice(0, -1) - .reduce( - async ( - acc: Promise, - part: string, - ): Promise => { - const h = await acc; - return await h.getDirectoryHandle(part); - }, - Promise.resolve(handle), - ); - - const fileHandle = await dirHandle.getFileHandle(filename); - const file = await fileHandle.getFile(); - const url = URL.createObjectURL(file); - - return { expiresAt: Infinity, url }; -} diff --git a/_backup/scripts/output/native-fs/constants.ts b/_backup/scripts/output/native-fs/constants.ts deleted file mode 100644 index 8a51698ed..000000000 --- a/_backup/scripts/output/native-fs/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const IDB_PREFIX = "@applets/output/native-fs"; -export const IDB_DEVICE_KEY = `${IDB_PREFIX}/device`; diff --git a/_backup/scripts/output/native-fs/worker.ts b/_backup/scripts/output/native-fs/worker.ts deleted file mode 100644 index aa3337127..000000000 --- a/_backup/scripts/output/native-fs/worker.ts +++ /dev/null @@ -1,56 +0,0 @@ -import * as IDB from "idb-keyval"; - -import { expose, jsonDecode, jsonEncode, transfer } from "@scripts/common"; -import type { Track } from "@applets/core/types"; -import { IDB_DEVICE_KEY, IDB_PREFIX } from "./constants"; - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// -const actions = expose({ - getTracks, - putTracks, -}); - -export type Actions = typeof actions; - -// Actions - -async function getTracks() { - const encoded = await get({ name: "tracks.json" }); - if (!encoded) return []; - const tracks = jsonDecode(encoded); - return transfer(tracks); -} - -async function putTracks(tracks: Track[]) { - const data = jsonEncode(tracks); - await put({ name: "tracks.json", data }); -} - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// - -async function get({ name }: { name: string }) { - const handle: FileSystemDirectoryHandle | null = (await IDB.get(IDB_DEVICE_KEY)) ?? null; - if (!handle) throw new Error("Storage not configured properly, handle not found."); - - try { - const fileHandle = await handle.getFileHandle(name); - const file = await fileHandle.getFile(); - const data = await file.bytes(); - return data; - } catch (err) { - return undefined; - } -} - -async function put({ data, name }: { data: Uint8Array; name: string }) { - const handle: FileSystemDirectoryHandle | null = (await IDB.get(IDB_DEVICE_KEY)) ?? null; - if (!handle) throw new Error("Storage not configured properly, handle not found."); - const fileHandle = await handle.getFileHandle(name, { create: true }); - const stream = await fileHandle.createWritable(); - await stream.write(data); - await stream.close(); -} diff --git a/src/component/input/common.js b/src/component/input/common.js new file mode 100644 index 000000000..716a4c108 --- /dev/null +++ b/src/component/input/common.js @@ -0,0 +1,6 @@ +/** + * @param {string} filename + */ +export function isAudioFile(filename) { + return filename.match(/\.(flac|m4a|mp3|mp4|ogg|opus|wav|webm)$/); +} From ac2062af48f321f70a7b8176643af6996b0a5df2 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 23 Oct 2025 19:27:32 +0200 Subject: [PATCH 042/244] feat: opensubsonic input --- .../scripts/input/opensubsonic/constants.ts | 5 - _backup/scripts/input/opensubsonic/ui.ts | 110 --------- _backup/scripts/input/opensubsonic/worker.ts | 171 ------------- deno.jsonc | 2 + deno.lock | 24 ++ src/common/element.js | 5 +- src/common/signal.js | 20 +- src/component/core/types.d.ts | 10 +- src/component/engine/queue/element.js | 12 +- src/component/engine/queue/types.d.ts | 7 + src/component/engine/queue/worker.js | 56 +++-- .../component/input/opensubsonic/common.js | 109 +++++--- src/component/input/opensubsonic/constants.js | 3 + .../component}/input/opensubsonic/types.d.ts | 0 src/component/input/opensubsonic/worker.js | 232 ++++++++++++++++++ src/component/processor/metadata/element.js | 2 +- src/theme/blur/index.js | 59 +++-- 17 files changed, 443 insertions(+), 384 deletions(-) delete mode 100644 _backup/scripts/input/opensubsonic/constants.ts delete mode 100644 _backup/scripts/input/opensubsonic/ui.ts delete mode 100644 _backup/scripts/input/opensubsonic/worker.ts rename _backup/scripts/input/opensubsonic/common.ts => src/component/input/opensubsonic/common.js (53%) create mode 100644 src/component/input/opensubsonic/constants.js rename {_backup/scripts => src/component}/input/opensubsonic/types.d.ts (100%) create mode 100644 src/component/input/opensubsonic/worker.js diff --git a/_backup/scripts/input/opensubsonic/constants.ts b/_backup/scripts/input/opensubsonic/constants.ts deleted file mode 100644 index 91c678b22..000000000 --- a/_backup/scripts/input/opensubsonic/constants.ts +++ /dev/null @@ -1,5 +0,0 @@ -import manifest from "../../../pages/input/opensubsonic/_manifest.json"; - -export const IDB_PREFIX = "@applets/input/opensubsonic"; -export const IDB_SERVERS = `${IDB_PREFIX}/servers`; -export const SCHEME = manifest.input_properties.scheme; diff --git a/_backup/scripts/input/opensubsonic/ui.ts b/_backup/scripts/input/opensubsonic/ui.ts deleted file mode 100644 index 745202bf3..000000000 --- a/_backup/scripts/input/opensubsonic/ui.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { computed, effect, type Signal, signal } from "@scripts/spellcaster"; -import { type Props, repeat, tags, text } from "@scripts/spellcaster/hyperscript.js"; - -import type { Server } from "./types.d.ts"; -import { loadServers, saveServers, serverId } from "./common"; - -//////////////////////////////////////////// -// UI -//////////////////////////////////////////// -export const servers = signal>(await loadServers()); -const form = signal<{ - api_key?: string; - host?: string; - password?: string; - username?: string; -}>({}); - -const serversMap = computed(() => { - return new Map(Object.entries(servers())); -}); - -effect(() => { - saveServers(servers()); -}); - -//////////////////////////////////////////// -// UI ~ SERVERS -//////////////////////////////////////////// -const Server = (server: Signal) => { - const onclick = () => { - const b = server(); - const id = serverId(b); - - const col = { ...servers() }; - delete col[id]; - - servers(col); - }; - - return tags.li({ onclick, style: "cursor: pointer" }, text(server().host)); -}; - -const ServerList = computed(() => { - if (serversMap().size === 0) { - return tags.p({ id: "servers" }, [tags.small({}, text("Nothing added so far."))]); - } - - return tags.ul({ id: "servers" }, repeat(serversMap, Server)); -}); - -effect(() => { - document.querySelector("#servers")?.replaceWith(ServerList()); -}); - -//////////////////////////////////////////// -// UI ~ FORM -//////////////////////////////////////////// -function addServer(event: Event) { - event.preventDefault(); - - const f = form(); - - const server: Server = { - apiKey: f.api_key, - host: f.host?.replace(/^https?:\/\//, "").replace(/\/+$/, "") || "localhost:4533", - username: f.username, - tls: f.host?.startsWith("http://") || f.host?.startsWith("localhost") ? false : true, - password: f.password, - }; - - servers({ - ...servers(), - [serverId(server)]: server, - }); -} - -function Form() { - return tags.form({ onsubmit: addServer }, [ - tags.fieldset({ className: "grid" }, [ - Input("host", "Server host", "my.opensubsonic.server:4747", { required: true }), - ]), - tags.fieldset({ className: "grid" }, [ - Input("username", "Server name", "username", { required: true }), - Input("password", "Password", "password", { required: true, type: "password" }), - ]), - tags.fieldset({ className: "grid" }, [tags.input({ type: "submit", value: "Connect" }, [])]), - ]); -} - -function Input(name: string, label: string, placeholder: string, opts: Props = {}) { - return tags.label({}, [ - tags.span({}, [ - tags.span({}, text(label)), - tags.small({}, text("required" in opts ? "" : " (optional)")), - ]), - tags.input({ - ...opts, - name, - placeholder, - oninput: (event: InputEvent) => formInput(name, (event.target as HTMLInputElement).value), - }), - ]); -} - -function formInput(name: string, value: string) { - form({ ...form(), [name]: value }); -} - -// 🚀 -document.querySelector("#form")?.replaceWith(Form()); diff --git a/_backup/scripts/input/opensubsonic/worker.ts b/_backup/scripts/input/opensubsonic/worker.ts deleted file mode 100644 index bbfe2c40b..000000000 --- a/_backup/scripts/input/opensubsonic/worker.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { SubsonicAPI, type Child } from "subsonic-api"; -import * as URI from "uri-js"; - -import type { Consult, ConsultGrouping, GroupConsult, Track } from "@applets/core/types.d.ts"; -import { SCHEME } from "./constants.ts"; -import { - autoTypeToTrackKind, - buildURI, - consultServer, - createClient, - groupTracksByServer, - loadServers, - parseURI, - serverId, - serversFromTracks, -} from "./common.ts"; -import { provide, transfer } from "@scripts/common.ts"; - -//////////////////////////////////////////// -// TASKS -//////////////////////////////////////////// -const actions = { - consult, - contextualize, - groupConsult, - list, - resolve, -}; - -const { tasks } = provide({ actions, tasks: actions }); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -// Tasks - -async function consult(fileUriOrScheme: string): Promise { - if (!fileUriOrScheme.includes(":")) return { supported: true, consult: "undetermined" }; - - const parsed = parseURI(fileUriOrScheme); - if (!parsed) return { supported: true, consult: "undetermined" }; - - const consult = await consultServer(parsed.server); - return { supported: true, consult }; -} - -async function contextualize(tracks: Track[]) { - return serversFromTracks(tracks); -} - -async function groupConsult(tracks: Track[]): Promise { - const groups = groupTracksByServer(tracks); - - const promises = Object.entries(groups).map(async ([serverId, { server, tracks }]) => { - const available = await consultServer(server); - const grouping: ConsultGrouping = available - ? { available, tracks } - : { available, reason: "Server ping failed", tracks }; - - return { - // key: `${SCHEME}:${serverId}`, - key: SCHEME, - grouping, - }; - }); - - const entries = (await Promise.all(promises)).map((entry) => [entry.key, entry.grouping]); - const obj = Object.fromEntries(entries); - - return transfer(obj); -} - -async function list(cachedTracks: Track[] = []) { - const cache: Record> = {}; - - cachedTracks.forEach((t: Track) => { - const parsed = parseURI(t.uri); - if (!parsed || !parsed.path) return; - - const sid = serverId(parsed?.server); - - cache[sid] ??= {}; - cache[sid][URI.unescapeComponent(parsed.path)] = t; - }); - - async function search(client: SubsonicAPI, offset = 0): Promise { - const result = await client.search3({ - query: "", - artistCount: 0, - albumCount: 0, - songCount: 1000, - songOffset: offset, - }); - - const songs = result.searchResult3.song || []; - - if (songs.length === 1000) { - const moreSongs = await search(client, offset + 1000); - return [...songs, ...moreSongs]; - } - - return songs; - } - - const servers = await loadServers(); - const promises = Object.values(servers).map(async (server) => { - const client = createClient(server); - const sid = serverId(server); - const list = await search(client, 0); - - return list - .filter((song) => !song.isVideo) - .map((song) => { - const path = song.path - ? song.path.startsWith("/") - ? song.path - : `/${song.path}` - : undefined; - - const fromCache = path ? cache[sid]?.[path] : undefined; - if (fromCache) return fromCache; - - const track: Track = { - id: crypto.randomUUID(), - kind: autoTypeToTrackKind(song.type), - uri: buildURI(server, { songId: song.id, path }), - - stats: { - bitrate: song.bitRate, - duration: song.duration, - }, - tags: { - album: song.album, - artist: song.artist, - disc: { no: song.discNumber || 1 }, - genre: song.genre, - title: song.title, - track: { no: song.track || 1 }, - year: song.year, - }, - }; - - return track; - }); - }); - - const tracks = (await Promise.all(promises)).flat(1); - return transfer(tracks); -} - -async function resolve({ uri }: { method: string; uri: string }) { - const parsed = parseURI(uri); - if (!parsed) return undefined; - - const client = createClient(parsed.server); - const songId = parsed.songId; - if (!songId) return undefined; - - // TODO: - // const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days - // const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; - - const url = await client - .download({ - id: songId, - format: "raw", - }) - .then((a) => a.url); - - return { expiresAt: Infinity, url }; -} diff --git a/deno.jsonc b/deno.jsonc index e29cd0772..9d509629c 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -11,6 +11,8 @@ "alien-signals": "npm:alien-signals@^3.0.0", "idb-keyval": "npm:idb-keyval@^6.2.2", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", + "query-string": "npm:query-string@^9.3.1", + "subsonic-api": "npm:subsonic-api@^3.2.0", "uri-js": "npm:uri-js@^4.4.1", "xxh32": "npm:xxh32@^2.0.5", diff --git a/deno.lock b/deno.lock index 28015f029..3b489d49f 100644 --- a/deno.lock +++ b/deno.lock @@ -44,6 +44,8 @@ "npm:morphdom@^2.7.7": "2.7.7", "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", "npm:postcss@8.5.6": "8.5.6", + "npm:query-string@^9.3.1": "9.3.1", + "npm:subsonic-api@^3.2.0": "3.2.0", "npm:uri-js@^4.4.1": "4.4.1", "npm:xxh32@^2.0.5": "2.0.5" }, @@ -190,6 +192,9 @@ "caniuse-lite@1.0.30001751": { "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==" }, + "decode-uri-component@0.4.1": { + "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==" + }, "electron-to-chromium@1.5.237": { "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==" }, @@ -199,6 +204,9 @@ "escalade@3.2.0": { "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, + "filter-obj@5.1.0": { + "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==" + }, "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, @@ -301,6 +309,14 @@ "punycode@2.3.1": { "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, + "query-string@9.3.1": { + "integrity": "sha512-5fBfMOcDi5SA9qj5jZhWAcTtDfKF5WFdd2uD9nVNlbxVv1baq65aALy6qofpNEGELHvisjjasxQp7BlM9gvMzw==", + "dependencies": [ + "decode-uri-component", + "filter-obj", + "split-on-first" + ] + }, "read-cache@1.0.0": { "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dependencies": [ @@ -319,6 +335,12 @@ "source-map-js@1.2.1": { "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, + "split-on-first@3.0.0": { + "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==" + }, + "subsonic-api@3.2.0": { + "integrity": "sha512-BADBQ2hONdLb3agCiSDzNzTIFLWJAuxJTUJvC2zDFvXUVfnK3yy7r8xFu3NkrQl8p5UVI7q8Qfm62N1lFxWbww==" + }, "supports-preserve-symlinks-flag@1.0.0": { "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, @@ -670,6 +692,8 @@ "npm:alien-signals@3", "npm:idb-keyval@^6.2.2", "npm:morphdom@^2.7.7", + "npm:query-string@^9.3.1", + "npm:subsonic-api@^3.2.0", "npm:uri-js@^4.4.1", "npm:xxh32@^2.0.5" ] diff --git a/src/common/element.js b/src/common/element.js index ce23d05ca..6f7a54b5e 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -56,11 +56,10 @@ export class DiffuseElement extends HTMLElement { */ morphedRender() { if (!("render" in this && typeof this.render === "function")) return; - if (!("state" in this)) return; const tmp = this.render({ html: this.html, - state: this.state, + state: "state" in this ? this.state : undefined, }); const updated = document.createElement("div"); @@ -89,8 +88,6 @@ export class DiffuseElement extends HTMLElement { this.effect(() => { if (!("render" in this && typeof this.render === "function")) return; - if (!("state" in this)) return; - this.morphedRender(); }); } diff --git a/src/common/signal.js b/src/common/signal.js index 1aa003d02..a6d30684e 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -1,5 +1,5 @@ import deepDiff from "@fry69/deep-diff"; -import { signal as alienSignal } from "alien-signals"; +import { setActiveSub, signal as alienSignal } from "alien-signals"; export * from "alien-signals"; @@ -15,7 +15,9 @@ export * from "alien-signals"; */ export function signal(initialValue, options) { const s = alienSignal(initialValue); - const isPrimitive = Object(initialValue) !== initialValue; + const isPrimitive = initialValue !== null && + initialValue !== undefined && + Object(initialValue) !== initialValue; if (isPrimitive || options?.unbiased === true) { return _signal({ get: () => s(), @@ -33,6 +35,20 @@ export function signal(initialValue, options) { }); } +/** + * @template T + * @param {function(): T} fn + * @returns {T} + */ +export const untracked = (fn) => { + const sub = setActiveSub(void 0); + try { + return fn(); + } finally { + setActiveSub(sub); + } +}; + /** * @template T * @param {{ get: SignalReader; set: SignalWriter }} _ diff --git a/src/component/core/types.d.ts b/src/component/core/types.d.ts index 5fc2d6438..8926d5bcf 100644 --- a/src/component/core/types.d.ts +++ b/src/component/core/types.d.ts @@ -16,13 +16,15 @@ export type ConsultGrouping = export type GroupConsult = Record; -export interface InputWorkerTasks { +export type InputActions = { consult(fileUriOrScheme: string): Promise; contextualize(tracks: Track[]): Promise; groupConsult(tracks: Track[]): Promise; list(cachedTracks: Track[]): Promise; - resolve({ method, uri }: { method: string; uri: string }): Promise; -} + resolve( + { method, uri }: { method: string; uri: string }, + ): Promise; +}; /* OUTPUT */ @@ -45,7 +47,7 @@ export type ResolvedUri = undefined | { url: string; expiresAt: number }; // TOD export interface Track { id: string; - kind?: "music" | "audiobook" | "podcast" | "miscellaneous"; + kind?: "music" | "audiobook" | "podcast" | "placeholder" | "miscellaneous"; stats?: Stats; tags?: Tags; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 53a67b660..c32067df6 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -3,7 +3,7 @@ import { signal } from "@common/signal.js"; import { listen, use } from "@common/worker.js"; /** - * @import {Actions, Item} from "./types.d.ts" + * @import {Actions, ActionsProxied, Item} from "./types.d.ts" */ //////////////////////////////////////////// @@ -23,7 +23,7 @@ class QueueEngine extends DiffuseElement { // Setup worker const name = `diffuse/engine/queue/${group}`; - const url = new URL("./worker.js", import.meta.url); + const url = "/component/engine/queue/worker.js"; let port; @@ -41,10 +41,16 @@ class QueueEngine extends DiffuseElement { listen("now", this.#now.set, port); listen("past", this.#past.set, port); - // Worker proxy + /** @type {ActionsProxied['add']} */ this.add = use("add", port); + + /** @type {ActionsProxied['pool']} */ this.pool = use("pool", port); + + /** @type {ActionsProxied['shift']} */ this.shift = use("shift", port); + + /** @type {ActionsProxied['unshift']} */ this.unshift = use("unshift", port); } diff --git a/src/component/engine/queue/types.d.ts b/src/component/engine/queue/types.d.ts index 776d83044..abe555463 100644 --- a/src/component/engine/queue/types.d.ts +++ b/src/component/engine/queue/types.d.ts @@ -8,6 +8,13 @@ export type Actions = { unshift: () => void; }; +export type ActionsProxied = { + add: (items: Item[]) => Promise; + pool: (tracks: Track[]) => Promise; + shift: () => Promise; + unshift: () => Promise; +}; + export type Item = & Track & { manualEntry?: boolean }; diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 7c94f1a5d..4db20b5a1 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -13,10 +13,10 @@ const QUEUE_SIZE = 25; // STATE //////////////////////////////////////////// -export const future = signal(/** @type {Item[]} */ ([])); -export const lake = signal(/** @type {Track[]} */ ([])); -export const now = signal(/** @type {Item | null} */ (null)); -export const past = signal(/** @type {Item[]} */ ([])); +export const $future = signal(/** @type {Item[]} */ ([])); +export const $lake = signal(/** @type {Track[]} */ ([])); +export const $now = signal(/** @type {Item | null} */ (null)); +export const $past = signal(/** @type {Item[]} */ ([])); //////////////////////////////////////////// // ACTIONS @@ -26,51 +26,51 @@ export const past = signal(/** @type {Item[]} */ ([])); * @type {Actions['add']} */ export function add(items) { - future.value = [...future.value, ...items]; + $future.value = [...$future.value, ...items]; } /** * @type {Actions['pool']} */ export function pool(tracks) { - lake.value = tracks; + $lake.value = tracks; // TODO: If the pool changes, only remove non-existing tracks // instead of resetting the whole future queue. // // What about past queue items? - future.value = fill([]); + $future.value = fill([]); // Automatically insert track if there isn't any - if (!now.value) return shift(); + if (!$now.value) return shift(); } /** * @type {Actions['shift']} */ export function shift() { - const n = now.value; - const f = future.value; + const n = $now.value; + const f = $future.value; - now.value = f[0] ?? null; + $now.value = f[0] ?? null; - if (n) past.value = [...past.value, n]; - future.value = fill(f.slice(1)); + if (n) $past.value = [...$past.value, n]; + $future.value = fill(f.slice(1)); } /** * @type {Actions['unshift']} */ export function unshift() { - const p = past.value; + const p = $past.value; if (p.length === 0) return; - const n = now.value; + const n = $now.value; const [last] = p.splice(p.length - 1, 1); - now.value = last ?? null; - if (n) future.value = [n, ...future.value]; + $now.value = last ?? null; + if (n) $future.value = [n, ...$future.value]; } //////////////////////////////////////////// @@ -80,9 +80,9 @@ export function unshift() { ostiary((port) => { // Setup RPC - define("future", future.get, port); - define("now", now.get, port); - define("past", past.get, port); + define("future", $future.get, port); + define("now", $now.get, port); + define("past", $past.get, port); define("add", add, port); define("pool", pool, port); @@ -91,9 +91,13 @@ ostiary((port) => { // Communicate state - effect(() => announce("future", future.value, port)); - effect(() => announce("now", now.value, port)); - effect(() => announce("past", past.value, port)); + effect(() => announce("future", $future.value, port)); + effect(() => announce("now", $now.value, port)); + effect(() => announce("past", $past.value, port)); + + effect(() => { + console.log("🔮", $now.value); + }); }); //////////////////////////////////////////// @@ -110,10 +114,10 @@ function fill(future) { /** @type {Track[]} */ const pool = []; - let p = new Set(past.value.map((t) => t.id)); + let p = new Set($past.value.map((t) => t.id)); let reducedPool = pool; - lake.value.forEach((track) => { + $lake.value.forEach((track) => { if (p.has(track.id)) { p = p.difference(new Set(track.id)); } else { @@ -122,7 +126,7 @@ function fill(future) { }); if (reducedPool.length === 0) { - reducedPool = lake.value; + reducedPool = $lake.value; } const poolSelection = arrayShuffle(reducedPool).slice( diff --git a/_backup/scripts/input/opensubsonic/common.ts b/src/component/input/opensubsonic/common.js similarity index 53% rename from _backup/scripts/input/opensubsonic/common.ts rename to src/component/input/opensubsonic/common.js index 447678c46..53777c7cd 100644 --- a/_backup/scripts/input/opensubsonic/common.ts +++ b/src/component/input/opensubsonic/common.js @@ -1,16 +1,21 @@ -import { SubsonicAPI, type Child } from "subsonic-api"; +import { SubsonicAPI } from "subsonic-api"; import * as IDB from "idb-keyval"; import * as URI from "uri-js"; import QS from "query-string"; -import type { Server } from "./types"; -import { IDB_SERVERS, SCHEME } from "./constants"; -import type { Track } from "@applets/core/types"; +import { IDB_SERVERS, SCHEME } from "./constants.js"; -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// -export function autoTypeToTrackKind(type: Child["type"]): Track["kind"] { +/** + * @import {Child} from "subsonic-api" + * @import {Server} from "./types.d.ts"; + * @import {Track} from "@component/core/types.d.ts"; + */ + +/** + * @param {Child["type"]} type + * @returns {Track["kind"]} + */ +export function autoTypeToTrackKind(type) { switch (type?.toLowerCase()) { case "audiobook": return "audiobook"; @@ -26,44 +31,58 @@ export function autoTypeToTrackKind(type: Child["type"]): Track["kind"] { } } -export function buildURI(server: Server, args: { songId: string; path?: string }) { +/** + * @param {Server} server + * @param {{ songId: string; path?: string }} [args] + */ +export function buildURI(server, args) { return URI.serialize({ scheme: SCHEME, userinfo: server.apiKey ? URI.escapeComponent(server.apiKey) - : `${URI.escapeComponent(server.username || "")}:${URI.escapeComponent(server.password || "")}`, + : `${URI.escapeComponent(server.username || "")}:${ + URI.escapeComponent(server.password || "") + }`, host: server.host.replace(/^https?:\/\//, ""), - path: args.path, + path: args?.path, query: QS.stringify({ - songId: args.songId, + songId: args?.songId, tls: server.tls ? "t" : "f", }), }); } -export async function consultServer(server: Server) { +/** + * @param {Server} server + */ +export async function consultServer(server) { const client = createClient(server); const resp = await client.ping().catch(() => undefined); return resp?.status?.toLowerCase() === "ok"; } -export function createClient(server: Server) { +/** + * @param {Server} server + */ +export function createClient(server) { return new SubsonicAPI({ url: `http${server.tls ? "s" : ""}://${server.host}`, - auth: server.apiKey - ? { apiKey: URI.unescapeComponent(server.apiKey) } - : { - username: URI.unescapeComponent(server.username || ""), - password: URI.unescapeComponent(server.password || ""), - }, + auth: server.apiKey ? { apiKey: URI.unescapeComponent(server.apiKey) } : { + username: URI.unescapeComponent(server.username || ""), + password: URI.unescapeComponent(server.password || ""), + }, }); } -export function groupTracksByServer(tracks: Track[]) { - const acc: Record = {}; +/** + * @param {Track[]} tracks + */ +export function groupTracksByServer(tracks) { + /** @type {Record} */ + const acc = {}; - tracks.forEach((track: Track) => { + tracks.forEach((track) => { const parsed = parseURI(track.uri); if (!parsed) return; @@ -79,21 +98,26 @@ export function groupTracksByServer(tracks: Track[]) { return acc; } -export async function loadServers(): Promise> { +/** + * @returns {Promise>} + */ +export async function loadServers() { const i = await IDB.get(IDB_SERVERS); return i ? i : {}; } -export function parseURI( - uriString: string, -): { path: string | undefined; server: Server; songId: string | undefined } | undefined { +/** + * @param {string} uriString + * @returns {{ path: string | undefined; server: Server; songId: string | undefined } | undefined} + */ +export function parseURI(uriString) { const uri = URI.parse(uriString); if (uri.scheme !== SCHEME) return undefined; if (!uri.host) return undefined; - let apiKey: string | undefined = undefined; - let username: string | undefined = undefined; - let password: string | undefined = undefined; + let apiKey = undefined; + let username = undefined; + let password = undefined; if (uri.userinfo?.includes(":")) { // Username + Password @@ -123,14 +147,21 @@ export function parseURI( return { path, server, songId }; } -export async function saveServers(items: Record) { +/** + * @param {Record} items + */ +export async function saveServers(items) { await IDB.set(IDB_SERVERS, items); } -export function serversFromTracks(tracks: Track[]) { - const acc: Record = {}; +/** + * @param {Track[]} tracks + */ +export function serversFromTracks(tracks) { + /** @type {Record} */ + const acc = {}; - tracks.forEach((track: Track) => { + tracks.forEach((track) => { const parsed = parseURI(track.uri); if (!parsed) return; @@ -143,7 +174,10 @@ export function serversFromTracks(tracks: Track[]) { return acc; } -export function serverId(server: Server) { +/** + * @param {Server} server + */ +export function serverId(server) { const parts = { host: server.host, query: `tls=${server.tls ? "t" : "f"}`, @@ -151,7 +185,10 @@ export function serverId(server: Server) { const uri = server.apiKey ? URI.serialize({ ...parts, userinfo: server.apiKey }) - : URI.serialize({ ...parts, userinfo: `${server.username}:${server.password}` }); + : URI.serialize({ + ...parts, + userinfo: `${server.username}:${server.password}`, + }); return btoa(uri); } diff --git a/src/component/input/opensubsonic/constants.js b/src/component/input/opensubsonic/constants.js new file mode 100644 index 000000000..98f81b847 --- /dev/null +++ b/src/component/input/opensubsonic/constants.js @@ -0,0 +1,3 @@ +export const IDB_PREFIX = "@component/input/opensubsonic"; +export const IDB_SERVERS = `${IDB_PREFIX}/servers`; +export const SCHEME = "opensubsonic"; diff --git a/_backup/scripts/input/opensubsonic/types.d.ts b/src/component/input/opensubsonic/types.d.ts similarity index 100% rename from _backup/scripts/input/opensubsonic/types.d.ts rename to src/component/input/opensubsonic/types.d.ts diff --git a/src/component/input/opensubsonic/worker.js b/src/component/input/opensubsonic/worker.js new file mode 100644 index 000000000..4302cf1e6 --- /dev/null +++ b/src/component/input/opensubsonic/worker.js @@ -0,0 +1,232 @@ +import * as URI from "uri-js"; + +import { effect, signal } from "@common/signal.js"; +import { announce, define, ostiary } from "@common/worker.js"; + +import { SCHEME } from "./constants.js"; +import { + autoTypeToTrackKind, + buildURI, + consultServer, + createClient, + groupTracksByServer, + loadServers, + parseURI, + saveServers, + serverId, + serversFromTracks, +} from "./common.js"; + +/** + * @import {Child, SubsonicAPI} from "subsonic-api" + * @import {ConsultGrouping, InputActions as Actions, Track} from "@component/core/types.d.ts"; + * @import {Server} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// STATE +//////////////////////////////////////////// + +const $servers = signal(/** @type {Record} */ ({})); + +effect(() => { + saveServers($servers.value); +}); + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +/** + * @type {Actions['consult']} + */ +export async function consult(fileUriOrScheme) { + if (!fileUriOrScheme.includes(":")) { + return { supported: true, consult: "undetermined" }; + } + + const parsed = parseURI(fileUriOrScheme); + if (!parsed) return { supported: true, consult: "undetermined" }; + + const consult = await consultServer(parsed.server); + return { supported: true, consult }; +} + +/** + * @type {Actions['contextualize']} + */ +export async function contextualize(tracks) { + const servers = serversFromTracks(tracks); + $servers.value = servers; +} + +/** + * @type {Actions['groupConsult']} + */ +export async function groupConsult(tracks) { + const groups = groupTracksByServer(tracks); + + const promises = Object.entries(groups).map( + async ([serverId, { server, tracks }]) => { + const available = await consultServer(server); + + /** @type {ConsultGrouping} */ + const grouping = available + ? { available, tracks } + : { available, reason: "Server ping failed", tracks }; + + return { + // key: `${SCHEME}:${serverId}`, + key: SCHEME, + grouping, + }; + }, + ); + + const entries = (await Promise.all(promises)).map(( + entry, + ) => [entry.key, entry.grouping]); + + return Object.fromEntries(entries); +} + +/** + * @type {Actions['list']} + */ +export async function list(cachedTracks = []) { + /** @type {Record>} */ + const cache = {}; + + cachedTracks.forEach((t) => { + const parsed = parseURI(t.uri); + if (!parsed || !parsed.path) return; + + const sid = serverId(parsed?.server); + + cache[sid] ??= {}; + cache[sid][URI.unescapeComponent(parsed.path)] = t; + }); + + /** + * @param {SubsonicAPI} client + * @returns {Promise} + */ + async function search(client, offset = 0) { + const result = await client.search3({ + query: "", + artistCount: 0, + albumCount: 0, + songCount: 1000, + songOffset: offset, + }); + + const songs = result.searchResult3.song || []; + + if (songs.length === 1000) { + const moreSongs = await search(client, offset + 1000); + return [...songs, ...moreSongs]; + } + + return songs; + } + + const servers = await loadServers(); + const promises = Object.values(servers).map(async (server) => { + const client = createClient(server); + const sid = serverId(server); + const list = await search(client, 0); + + return list + .filter((song) => !song.isVideo) + .map((song) => { + const path = song.path + ? song.path.startsWith("/") ? song.path : `/${song.path}` + : undefined; + + const fromCache = path ? cache[sid]?.[path] : undefined; + if (fromCache) return fromCache; + + /** @type {Track} */ + const track = { + id: crypto.randomUUID(), + kind: autoTypeToTrackKind(song.type), + uri: buildURI(server, { songId: song.id, path }), + + stats: { + bitrate: song.bitRate, + duration: song.duration, + }, + tags: { + album: song.album, + artist: song.artist, + disc: { no: song.discNumber || 1 }, + genre: song.genre, + title: song.title, + track: { no: song.track || 1 }, + year: song.year, + }, + }; + + return track; + }); + }); + + const tracks = (await Promise.all(promises)).flat(1); + if (tracks.length) return tracks; + + // If a server didn't have any tracks, + // keep a placeholder track so the server gets + // picked up whenever it is re-contextualized. + return Object.values(servers).map((server) => { + return { + id: crypto.randomUUID(), + kind: "placeholder", + uri: buildURI(server), + }; + }); +} + +/** + * @type {Actions['resolve']} + */ +export async function resolve({ uri }) { + const parsed = parseURI(uri); + if (!parsed) return undefined; + + const client = createClient(parsed.server); + const songId = parsed.songId; + if (!songId) return undefined; + + // TODO: + // const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days + // const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; + + const url = await client + .download({ + id: songId, + format: "raw", + }) + .then((a) => a.url); + + return { expiresAt: Infinity, url }; +} + +//////////////////////////////////////////// +// ⚡️ +//////////////////////////////////////////// + +ostiary((port) => { + // Setup RPC + + define("servers", $servers.get, port); + + define("consult", consult, port); + define("contextualize", contextualize, port); + define("groupConsult", groupConsult, port); + define("list", list, port); + define("resolve", resolve, port); + + // Communicate state + + effect(() => announce("servers", $servers.value, port)); +}); diff --git a/src/component/processor/metadata/element.js b/src/component/processor/metadata/element.js index fc4b11f27..922694cee 100644 --- a/src/component/processor/metadata/element.js +++ b/src/component/processor/metadata/element.js @@ -21,7 +21,7 @@ class MetadataProcessor extends DiffuseElement { // Setup worker const name = `diffuse/processor/metadata/${group}`; - const url = new URL("./worker.js", import.meta.url); + const url = "/component/processor/metadata/worker.js"; const worker = new Worker(url, { name, type: "module" }); // Worker proxy diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js index e8253832a..25a6cdf57 100644 --- a/src/theme/blur/index.js +++ b/src/theme/blur/index.js @@ -3,34 +3,49 @@ import * as Queue from "@component/engine/queue/element.js"; import * as Metadata from "@component/processor/metadata/element.js"; import { component } from "@common/element.js"; +import { effect, signal, untracked } from "@common/signal.js"; + +/** + * @import {Item} from "@component/engine/queue/types.d.ts" + */ const audio = component(Audio); const queue = component(Queue); const metadata = component(Metadata); -const url = - "https://archive.org/download/deathofsalesmans00mill/01_Side_1_Death_of_a_salesman_-_Introduction_Act_1__Part_1.mp3"; +// METADATA // const resp = await metadata.supply({ -// urls: { get: url, head: url } -// }) - -// console.log(resp) - -audio.supply({ - audio: [ - { - id: "test", - isPreload: false, - url: url, - }, - ], +// urls: { get: url, head: url }, +// }); + +// console.log(resp); + +// QUEUE + +effect(() => { + const now = queue.now(); + console.log("NOW", now); + + if (now === null) return; + + untracked(() => { + audio.supply({ + audio: [ + { + id: now.id, + isPreload: false, + url: now.uri, + }, + ], + }); + }); }); -// effect(() => { -// console.log("Future:", queue.future()) -// }) - -// effect(() => { -// console.log("Now:", queue.now()) -// }) +queue.pool([ + { + id: "test", + uri: + "https://archive.org/download/deathofsalesmans00mill/01_Side_1_Death_of_a_salesman_-_Introduction_Act_1__Part_1.mp3", + }, +]); From 107521b9dca4d8d5d4b7878f9ca6e45283d0eac6 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 15:16:19 +0200 Subject: [PATCH 043/244] fix: issue with custom signals fn --- src/common/signal.js | 2 +- src/component/engine/audio/element.js | 2 +- src/component/engine/queue/worker.js | 4 ---- src/theme/blur/index.js | 22 ++++++++++++---------- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/common/signal.js b/src/common/signal.js index a6d30684e..e0eef924e 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -28,7 +28,7 @@ export function signal(initialValue, options) { return _signal({ get: () => s(), set: (b) => { - const a = s(); + const a = untracked(() => s()); const diff = deepDiff(a, b); if (diff) s(b); }, diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 5440aa165..640095f23 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -2,7 +2,7 @@ import { BroadcastableDiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; /** - * @import {Actions, Audio, AudioState, Signals, State} from "./types.d.ts" + * @import {Actions, Audio, AudioState, State} from "./types.d.ts" * @import {RenderArg} from "@common/element.d.ts" */ diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 4db20b5a1..36a2ec166 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -94,10 +94,6 @@ ostiary((port) => { effect(() => announce("future", $future.value, port)); effect(() => announce("now", $now.value, port)); effect(() => announce("past", $past.value, port)); - - effect(() => { - console.log("🔮", $now.value); - }); }); //////////////////////////////////////////// diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js index 25a6cdf57..75de1b06c 100644 --- a/src/theme/blur/index.js +++ b/src/theme/blur/index.js @@ -29,19 +29,21 @@ effect(() => { if (now === null) return; - untracked(() => { - audio.supply({ - audio: [ - { - id: now.id, - isPreload: false, - url: now.uri, - }, - ], - }); + audio.supply({ + audio: [ + { + id: now.id, + isPreload: false, + url: now.uri, + }, + ], }); }); +effect(() => { + console.log("Audio items:", audio.items()); +}); + queue.pool([ { id: "test", From c9ddbc8fb049d157c479eb0fb4a9fe50cb353a47 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 16:04:17 +0200 Subject: [PATCH 044/244] feat: indexed-db output --- _backup/scripts/common.ts | 260 ------------------ .../scripts/output/indexed-db/constants.ts | 1 - _backup/scripts/output/indexed-db/worker.ts | 41 --- deno.jsonc | 1 + deno.lock | 11 + src/common/element.js | 2 + src/common/index.js | 90 ++++++ src/component/core/types.d.ts | 5 + src/component/engine/audio/element.js | 5 +- src/component/engine/queue/element.js | 5 +- src/component/output/indexed-db/constants.js | 1 + src/component/output/indexed-db/element.js | 39 +++ src/component/output/indexed-db/worker.js | 50 ++++ src/component/processor/artwork/element.js | 5 +- src/component/processor/metadata/element.js | 5 +- src/theme/blur/index.js | 8 +- 16 files changed, 206 insertions(+), 323 deletions(-) delete mode 100644 _backup/scripts/common.ts delete mode 100644 _backup/scripts/output/indexed-db/constants.ts delete mode 100644 _backup/scripts/output/indexed-db/worker.ts create mode 100644 src/component/output/indexed-db/constants.js create mode 100644 src/component/output/indexed-db/element.js create mode 100644 src/component/output/indexed-db/worker.js diff --git a/_backup/scripts/common.ts b/_backup/scripts/common.ts deleted file mode 100644 index aaaef8c65..000000000 --- a/_backup/scripts/common.ts +++ /dev/null @@ -1,260 +0,0 @@ -import * as Uint8 from "uint8arrays"; -import * as Comlink from "comlink"; -import { xxh32 } from "xxh32"; -import { getTransferables } from "@okikio/transferables"; - -import type { Track } from "@applets/core/types"; -import type { DiffuseApplet } from "./applet/common"; - -// export { SharedWorkerPolyfill as SharedWorker } from "@okikio/sharedworker"; -export const SharedWorker = globalThis.SharedWorker; - -//////////////////////////////////////////// -// 🌳 -//////////////////////////////////////////// - -export type WorkerTasks = { - _listen: ReturnType; - _manage: ReturnType; -}; - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// - -export function cleanUndefinedValuesForTracks(tracks: Track[]): Track[] { - return tracks.map((track) => { - const t = { ...track }; - - if (t.tags) { - if ("album" in t.tags && t.tags.album === undefined) delete t.tags.album; - if ("artist" in t.tags && t.tags.artist === undefined) delete t.tags.artist; - if ("genre" in t.tags && t.tags.genre === undefined) delete t.tags.genre; - if ("year" in t.tags && t.tags.year === undefined) delete t.tags.year; - - if ("of" in t.tags.disc && t.tags.disc.of === undefined) delete t.tags.disc.of; - if ("of" in t.tags.track && t.tags.track.of === undefined) delete t.tags.track.of; - } - - return t; - }); -} - -export function comparable(value: unknown) { - return xxh32(JSON.stringify(value)); -} - -export function endpoint = WorkerTasks>(ini: Comlink.Endpoint) { - const e = Comlink.wrap(ini); - if ("start" in ini && typeof ini.start === "function") ini.start(); - return e; -} - -export function expose>( - tasks: A, - opts?: { - ports?: { - applets: MessagePort[]; - consumers: MessagePort[]; - }; - }, -): A { - if (globalThis.SharedWorkerGlobalScope && self instanceof SharedWorkerGlobalScope) { - self.onconnect = (event: MessageEvent) => { - const port = event.ports[0]; - opts?.ports?.applets?.push(port); - Comlink.expose(tasks, port); - port.start(); - }; - - (self as any).connected = true; - } else { - Comlink.expose(tasks, self); - } - - return tasks; -} - -export function groupTracksPerScheme( - tracks: Track[], - initial: Record = {}, -): Record { - const acc: Record = initial; - - tracks.forEach((track) => { - const scheme = track.uri.substring(0, track.uri.indexOf(":")); - acc[scheme] ??= []; - acc[scheme].push(track); - }); - - return acc; -} - -export function inIframe() { - const url = new URL(self.location.href); - const ui = url.searchParams.get("ui")?.toLowerCase(); - - return window.self !== window.top && !(ui === "true" || ui === "t"); -} - -export function initialConnections>(ids: string[]) { - const connections: Record>> = {}; - - ids.forEach((c) => { - connections[c] = Promise.withResolvers>(); - }); - - return connections; -} - -export function isPrimitive(test: unknown) { - return test !== Object(test); -} - -export function jsonDecode(a: any): T { - return JSON.parse(new TextDecoder().decode(a)); -} - -export function jsonEncode(a: T): Uint8Array { - return new TextEncoder().encode(JSON.stringify(a)); -} - -export function postMessages({ - data, - ports, - transfer, -}: { - data: D; - ports: MessagePort[]; - transfer?: Transferable[]; -}) { - ports.forEach((port) => { - port.postMessage(data, transfer ?? []); - }); -} - -export function provide< - C extends Record, - A extends Record, - T extends Record, ->({ - actions, - connections, - tasks, -}: { - actions?: A; - connections?: Record>>; - tasks?: T; -}) { - const portsHolder = { - applets: [] as MessagePort[], - consumers: [] as MessagePort[], - }; - - const allTasks = expose( - { - _listen: _listen(actions || ({} as A), portsHolder), - _manage: _manage(connections || {}), - ...(tasks || ({} as T)), - }, - { - ports: portsHolder, - }, - ); - - return { - connections: connections || ({} as Record>>), - ports: portsHolder, - tasks: allTasks, - }; -} - -export function sync( - context: DiffuseApplet, - port: MessagePort | Worker, - options: { groupId?: string } = {}, -) { - port.onmessage = (event) => { - if ( - event.data?.type === "data" && - (options.groupId ? event.data?.groupId === options.groupId : true) - ) { - context.data = event.data.data; - } - }; -} - -export async function trackArtworkCacheId(track: Track): Promise { - return await crypto.subtle - .digest("SHA-256", new TextEncoder().encode(track.uri)) - .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); -} - -export function transfer(a: T) { - const b = getTransferables(a); - return Comlink.transfer(a, b); -} - -// PRIVATE - -function _listen>( - actions: A, - portsHolder: { - applets: MessagePort[]; - consumers: MessagePort[]; - }, -) { - async function handleAction( - port: MessagePort, - action: { - type: "action"; - id: string; - actionId: string; - arguments: any; - }, - ) { - const result = await actions[action.actionId]?.(action.arguments); - return postMessage(port, action.id, result); - } - - function postMessage(port: MessagePort, id: string, result: T) { - port.postMessage( - { - type: "actioncomplete", - id, - result, - }, - { - transfer: getTransferables(result), - }, - ); - } - - return (port: MessagePort) => { - Comlink.expose(actions, port); - portsHolder.consumers.push(port); - - port.onmessage = async (message) => { - switch (message.data?.type) { - case "action": - return handleAction(port, message.data); - } - }; - }; -} - -function _manage>( - connections: Record>>, -) { - return (connectionId: string, workerPort: MessagePort) => { - let conn = connections[connectionId]; - const remote = endpoint(workerPort); - - if (!conn) { - connections[connectionId] = Promise.withResolvers>(); - conn = connections[connectionId]; - } - - conn.resolve(remote); - }; -} diff --git a/_backup/scripts/output/indexed-db/constants.ts b/_backup/scripts/output/indexed-db/constants.ts deleted file mode 100644 index 34832a8fd..000000000 --- a/_backup/scripts/output/indexed-db/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const IDB_PREFIX = "@applets/output/indexed-db"; diff --git a/_backup/scripts/output/indexed-db/worker.ts b/_backup/scripts/output/indexed-db/worker.ts deleted file mode 100644 index ad64a628f..000000000 --- a/_backup/scripts/output/indexed-db/worker.ts +++ /dev/null @@ -1,41 +0,0 @@ -import * as IDB from "idb-keyval"; - -import { expose, jsonDecode, jsonEncode, transfer } from "@scripts/common"; -import type { Track } from "@applets/core/types"; -import { IDB_PREFIX } from "./constants"; - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// -const actions = expose({ - getTracks, - putTracks, -}); - -export type Actions = typeof actions; - -// Actions - -async function getTracks() { - const encoded = await get({ name: "tracks.json" }); - if (!encoded) return []; - const tracks = jsonDecode(encoded); - return transfer(tracks); -} - -async function putTracks(tracks: Track[]) { - const data = jsonEncode(tracks); - await put({ name: "tracks.json", data }); -} - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// - -async function get({ name }: { name: string }) { - return await IDB.get(`${IDB_PREFIX}/${name}`); -} - -async function put({ data, name }: { data: Uint8Array; name: string }) { - return await IDB.set(`${IDB_PREFIX}/${name}`, data); -} diff --git a/deno.jsonc b/deno.jsonc index 9d509629c..3c92167b1 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -13,6 +13,7 @@ "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", "query-string": "npm:query-string@^9.3.1", "subsonic-api": "npm:subsonic-api@^3.2.0", + "uint8arrays": "npm:uint8arrays@^5.1.0", "uri-js": "npm:uri-js@^4.4.1", "xxh32": "npm:xxh32@^2.0.5", diff --git a/deno.lock b/deno.lock index 3b489d49f..1ef8e5338 100644 --- a/deno.lock +++ b/deno.lock @@ -46,6 +46,7 @@ "npm:postcss@8.5.6": "8.5.6", "npm:query-string@^9.3.1": "9.3.1", "npm:subsonic-api@^3.2.0": "3.2.0", + "npm:uint8arrays@^5.1.0": "5.1.0", "npm:uri-js@^4.4.1": "4.4.1", "npm:xxh32@^2.0.5": "2.0.5" }, @@ -264,6 +265,9 @@ "morphdom@2.7.7": { "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==" }, + "multiformats@13.4.1": { + "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==" + }, "nanoid@3.3.11": { "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "bin": true @@ -347,6 +351,12 @@ "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, + "uint8arrays@5.1.0": { + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "dependencies": [ + "multiformats" + ] + }, "update-browserslist-db@1.1.3_browserslist@4.26.3": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ @@ -694,6 +704,7 @@ "npm:morphdom@^2.7.7", "npm:query-string@^9.3.1", "npm:subsonic-api@^3.2.0", + "npm:uint8arrays@^5.1.0", "npm:uri-js@^4.4.1", "npm:xxh32@^2.0.5" ] diff --git a/src/common/element.js b/src/common/element.js index 6f7a54b5e..1db2e8588 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -21,6 +21,8 @@ export class DiffuseElement extends HTMLElement { constructor() { super(); + + this.group = this.getAttribute("group") || crypto.randomUUID(); this.morphedRender = this.morphedRender.bind(this); } diff --git a/src/common/index.js b/src/common/index.js index 79ad04046..307e8064c 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -1,3 +1,9 @@ +import * as Uint8 from "uint8arrays"; + +/** + * @import {Track} from "@component/core/types.d.ts" + */ + /** * @template T * @param {Array} array @@ -19,3 +25,87 @@ export function arrayShuffle(array) { return array; } + +/** + * @param {Track[]} tracks + * @returns {Track[]} + */ +export function cleanUndefinedValuesForTracks(tracks) { + return tracks.map((track) => { + const t = { ...track }; + + if (t.tags) { + if ("album" in t.tags && t.tags.album === undefined) delete t.tags.album; + if ("artist" in t.tags && t.tags.artist === undefined) { + delete t.tags.artist; + } + if ("genre" in t.tags && t.tags.genre === undefined) delete t.tags.genre; + if ("year" in t.tags && t.tags.year === undefined) delete t.tags.year; + + if ("of" in t.tags.disc && t.tags.disc.of === undefined) { + delete t.tags.disc.of; + } + if ("of" in t.tags.track && t.tags.track.of === undefined) { + delete t.tags.track.of; + } + } + + return t; + }); +} + +/** + * @param {Track[]} tracks + * @param {Record} initial + * @returns {Record} + */ +export function groupTracksPerScheme( + tracks, + initial = {}, +) { + /** @type {Record} */ + const acc = initial; + + tracks.forEach((track) => { + const scheme = track.uri.substring(0, track.uri.indexOf(":")); + acc[scheme] ??= []; + acc[scheme].push(track); + }); + + return acc; +} + +/** + * @param {unknown} test + */ +export function isPrimitive(test) { + return test !== Object(test); +} + +/** + * @template T + * @param {any} a + * @returns {T} + */ +export function jsonDecode(a) { + return JSON.parse(new TextDecoder().decode(a)); +} + +/** + * @template T + * @param {T} a + * @returns Uint8Array + */ +export function jsonEncode(a) { + return new TextEncoder().encode(JSON.stringify(a)); +} + +/** + * @param {Track} track + * @returns {Promise} + */ +export async function trackArtworkCacheId(track) { + return await crypto.subtle + .digest("SHA-256", new TextEncoder().encode(track.uri)) + .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); +} diff --git a/src/component/core/types.d.ts b/src/component/core/types.d.ts index 8926d5bcf..2f51db3d2 100644 --- a/src/component/core/types.d.ts +++ b/src/component/core/types.d.ts @@ -32,6 +32,11 @@ export interface Output { tracks: Track[]; } +export type OutputActions = { + getTracks(): Promise; + putTracks(tracks: Track[]): Promise; +}; + export interface ManagedOutput { tracks: { cacheId: string; diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 640095f23..c9f18f623 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -23,13 +23,12 @@ class AudioEngine extends BroadcastableDiffuseElement { constructor() { super(); - // Group - const group = this.getAttribute("group") || crypto.randomUUID(); + // Is shared? const isShared = this.hasAttribute("group"); // Setup leader election if shared if (isShared) { - const fn = this.broadcast(`diffuse/engine/audio/${group}`); + const fn = this.broadcast(`diffuse/engine/audio/${this.group}`); this.pause = fn("pause", this.pause).leaderOnly; this.play = fn("play", this.play).leaderOnly; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index c32067df6..f1e085e5c 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -17,12 +17,11 @@ class QueueEngine extends DiffuseElement { constructor() { super(); - // Group - const group = this.getAttribute("group") || crypto.randomUUID(); + // Is shared? const isShared = this.hasAttribute("group"); // Setup worker - const name = `diffuse/engine/queue/${group}`; + const name = `diffuse/engine/queue/${this.group}`; const url = "/component/engine/queue/worker.js"; let port; diff --git a/src/component/output/indexed-db/constants.js b/src/component/output/indexed-db/constants.js new file mode 100644 index 000000000..86ff78332 --- /dev/null +++ b/src/component/output/indexed-db/constants.js @@ -0,0 +1 @@ +export const IDB_PREFIX = "@component/output/indexed-db"; diff --git a/src/component/output/indexed-db/element.js b/src/component/output/indexed-db/element.js new file mode 100644 index 000000000..b95e1813c --- /dev/null +++ b/src/component/output/indexed-db/element.js @@ -0,0 +1,39 @@ +import { DiffuseElement } from "@common/element.js"; +import { use } from "@common/worker.js"; + +/** + * @import {OutputActions} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {OutputActions} + */ +class IndexedDBOutput extends DiffuseElement { + constructor() { + super(); + + // Setup worker + const name = `diffuse/output/indexed-db/${this.group}`; + const url = "/component/output/indexed-db/worker.js"; + const worker = new Worker(url, { name, type: "module" }); + + // Worker proxy + this.getTracks = use("getTracks", worker); + this.putTracks = use("putTracks", worker); + } +} + +export default IndexedDBOutput; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = IndexedDBOutput; +export const NAME = "do-indexed-db"; + +customElements.define(NAME, IndexedDBOutput); diff --git a/src/component/output/indexed-db/worker.js b/src/component/output/indexed-db/worker.js new file mode 100644 index 000000000..7d52ba0b1 --- /dev/null +++ b/src/component/output/indexed-db/worker.js @@ -0,0 +1,50 @@ +import * as IDB from "idb-keyval"; + +import { jsonDecode, jsonEncode } from "@common/index.js"; +import { IDB_PREFIX } from "./constants.js"; + +/** + * @import {OutputActions, Track} from "@component/core/types.d.ts"; + */ + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +/** + * @type {OutputActions['getTracks']} + */ +export async function getTracks() { + const encoded = await get({ name: "tracks.json" }); + if (!encoded) return []; + + /** @type {Track[]} */ + const tracks = jsonDecode(encoded); + return tracks; +} + +/** + * @type {OutputActions['putTracks']} + */ +export async function putTracks(tracks) { + const data = jsonEncode(tracks); + await put({ name: "tracks.json", data }); +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +/** + * @param {{ name: string }} _ + */ +async function get({ name }) { + return await IDB.get(`${IDB_PREFIX}/${name}`); +} + +/** + * @param {{ data: Uint8Array; name: string }} _ + */ +async function put({ data, name }) { + return await IDB.set(`${IDB_PREFIX}/${name}`, data); +} diff --git a/src/component/processor/artwork/element.js b/src/component/processor/artwork/element.js index 12676ce40..926d88040 100644 --- a/src/component/processor/artwork/element.js +++ b/src/component/processor/artwork/element.js @@ -16,11 +16,8 @@ class ArtworkProcessor extends DiffuseElement { constructor() { super(); - // Group - const group = crypto.randomUUID(); - // Setup worker - const name = `diffuse/processor/metadata/${group}`; + const name = `diffuse/processor/metadata/${this.group}`; const url = new URL("./worker.js", import.meta.url); const worker = new Worker(url, { name, type: "module" }); diff --git a/src/component/processor/metadata/element.js b/src/component/processor/metadata/element.js index 922694cee..28411ca07 100644 --- a/src/component/processor/metadata/element.js +++ b/src/component/processor/metadata/element.js @@ -16,11 +16,8 @@ class MetadataProcessor extends DiffuseElement { constructor() { super(); - // Group - const group = crypto.randomUUID(); - // Setup worker - const name = `diffuse/processor/metadata/${group}`; + const name = `diffuse/processor/metadata/${this.group}`; const url = "/component/processor/metadata/worker.js"; const worker = new Worker(url, { name, type: "module" }); diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js index 75de1b06c..b8f732faa 100644 --- a/src/theme/blur/index.js +++ b/src/theme/blur/index.js @@ -3,7 +3,7 @@ import * as Queue from "@component/engine/queue/element.js"; import * as Metadata from "@component/processor/metadata/element.js"; import { component } from "@common/element.js"; -import { effect, signal, untracked } from "@common/signal.js"; +import { effect } from "@common/signal.js"; /** * @import {Item} from "@component/engine/queue/types.d.ts" @@ -25,8 +25,6 @@ const metadata = component(Metadata); effect(() => { const now = queue.now(); - console.log("NOW", now); - if (now === null) return; audio.supply({ @@ -40,10 +38,6 @@ effect(() => { }); }); -effect(() => { - console.log("Audio items:", audio.items()); -}); - queue.pool([ { id: "test", From fc78bd3d66eeb67c703b56217b17e67ad687f9bf Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 16:26:27 +0200 Subject: [PATCH 045/244] =?UTF-8?q?chore:=20=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _backup/scripts/output/common.ts | 77 -------------------------------- src/component/core/types.d.ts | 8 ---- 2 files changed, 85 deletions(-) delete mode 100644 _backup/scripts/output/common.ts diff --git a/_backup/scripts/output/common.ts b/_backup/scripts/output/common.ts deleted file mode 100644 index 132c0d01c..000000000 --- a/_backup/scripts/output/common.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { xxh32r } from "xxh32/dist/raw.js"; - -import type { ManagedOutput, Track } from "@applets/core/types"; -import type { DiffuseApplet } from "@scripts/applet/common"; -import { jsonEncode } from "@scripts/common"; - -export const INITIAL_MANAGED_OUTPUT: ManagedOutput = { - tracks: { - cacheId: tracksCacheId([]), - state: "loading", - collection: [], - }, -}; - -export function outputManager(args: { - context: DiffuseApplet; - /* Indicate if the initial data loader may proceed. */ - init?: () => Promise; - tracks: { - get(): Promise; - put(tracks: Track[]): Promise; - }; -}) { - const { context } = args; - - // Initial data loader - async function load() { - await context.settled(); - - if (!context.isMainInstance()) return; - if (args.init && (await args.init()) === false) return; - - const collection = await tracks(); - - context.data = { - ...context.data, - tracks: { - cacheId: tracksCacheId(collection), - state: "loaded", - collection, - }, - }; - } - - load(); - - async function tracks(): Promise; - async function tracks(tracks: Track[]): Promise; - async function tracks(tracks?: Track[]): Promise { - if (tracks) { - // PUT - context.data = { - ...context.data, - tracks: { - cacheId: tracksCacheId(tracks), - state: "loaded", - collection: tracks, - }, - }; - - await args.tracks.put(tracks); - } else { - // GET - return await args.tracks.get(); - } - } - - return { - load, - tracks, - }; -} - -export function tracksCacheId(tracks: Track[]): string { - // TODO: Probably should work with encoded tracks directly? - return xxh32r(jsonEncode(tracks)).toString(); -} diff --git a/src/component/core/types.d.ts b/src/component/core/types.d.ts index 2f51db3d2..6440bd2b8 100644 --- a/src/component/core/types.d.ts +++ b/src/component/core/types.d.ts @@ -37,14 +37,6 @@ export type OutputActions = { putTracks(tracks: Track[]): Promise; }; -export interface ManagedOutput { - tracks: { - cacheId: string; - state: "loading" | "loaded"; - collection: Track[]; - }; -} - /* TRACKS */ export type ResolvedUri = undefined | { url: string; expiresAt: number }; // TODO: Streams? From ce1a93af0bfb4d884b4f4a09266a990fcbe022c5 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 19:13:20 +0200 Subject: [PATCH 046/244] wip: process-tracks orchestrator --- src/component/core/types.d.ts | 15 +++ src/component/input/opensubsonic/element.js | 42 +++++++ .../orchestrator/process-tracks/element.js | 117 ++++++++++++++++++ src/component/output/common.js | 38 ++++++ src/component/output/indexed-db/element.js | 21 +++- src/component/output/indexed-db/worker.js | 15 ++- src/theme/blur/index.js | 16 +-- src/theme/blur/index.vto | 8 ++ 8 files changed, 256 insertions(+), 16 deletions(-) create mode 100644 src/component/input/opensubsonic/element.js create mode 100644 src/component/orchestrator/process-tracks/element.js create mode 100644 src/component/output/common.js diff --git a/src/component/core/types.d.ts b/src/component/core/types.d.ts index 6440bd2b8..651898dc5 100644 --- a/src/component/core/types.d.ts +++ b/src/component/core/types.d.ts @@ -1,3 +1,5 @@ +import type { SignalReader } from "@common/signal.d.ts"; + /* INPUT */ /** @@ -26,6 +28,8 @@ export type InputActions = { ): Promise; }; +export type InputElement = HTMLElement & InputActions; + /* OUTPUT */ export interface Output { @@ -37,6 +41,17 @@ export type OutputActions = { putTracks(tracks: Track[]): Promise; }; +export type OutputElement = HTMLElement & OutputManager; + +export type OutputManager = { + tracks: { + collection: SignalReader; + reload: () => Promise; + state: SignalReader<"loading" | "loaded">; + store: (tracks: Track[]) => Promise; + }; +}; + /* TRACKS */ export type ResolvedUri = undefined | { url: string; expiresAt: number }; // TODO: Streams? diff --git a/src/component/input/opensubsonic/element.js b/src/component/input/opensubsonic/element.js new file mode 100644 index 000000000..cb346d67f --- /dev/null +++ b/src/component/input/opensubsonic/element.js @@ -0,0 +1,42 @@ +import { DiffuseElement } from "@common/element.js"; +import { use } from "@common/worker.js"; + +/** + * @import {InputActions} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {InputActions} + */ +class OpensubsonicInput extends DiffuseElement { + constructor() { + super(); + + // Setup worker + const name = `diffuse/input/opensubsonic/${this.group}`; + const url = "/component/input/opensubsonic/worker.js"; + const worker = new Worker(url, { name, type: "module" }); + + // Worker proxy + this.consult = use("consult", worker); + this.contextualize = use("contextualize", worker); + this.groupConsult = use("groupConsult", worker); + this.list = use("list", worker); + this.resolve = use("resolve", worker); + } +} + +export default OpensubsonicInput; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = OpensubsonicInput; +export const NAME = "di-opensubsonic"; + +customElements.define(NAME, OpensubsonicInput); diff --git a/src/component/orchestrator/process-tracks/element.js b/src/component/orchestrator/process-tracks/element.js new file mode 100644 index 000000000..f82c28ed6 --- /dev/null +++ b/src/component/orchestrator/process-tracks/element.js @@ -0,0 +1,117 @@ +import { DiffuseElement } from "@common/element.js"; +import { signal } from "@common/signal.js"; + +/** + * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class ProcessTracksOrchestrator extends DiffuseElement { + constructor() { + super(); + + this.inputSelector = this.getAttribute("input-selector"); + this.outputSelector = this.getAttribute("output-selector"); + this.metadataProcessorSelector = this.getAttribute( + "metadata-processor-selector", + ); + + if (!this.inputSelector) { + throw new Error("Missing required `input-selector` attribute"); + } + + if (!this.outputSelector) { + throw new Error("Missing required `output-selector` attribute"); + } + + if (!this.metadataProcessorSelector) { + throw new Error( + "Missing required `metadata-processor-selector` attribute", + ); + } + } + + // SIGNALS + + #isProcessing = signal(false); + + // STATE + + isProcessing = this.#isProcessing.get; + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + /** @type {OutputElement | null} */ + const output = document.querySelector(this.outputSelector); + + // Check output element presence + if (!output) throw new Error("Missing required `output` element"); + + // Process whenever tracks are loaded + this.effect(async () => { + // TODO: Make configurable + await customElements.whenDefined("do-indexed-db"); + + const state = output.tracks.state(); + console.log(state); + if (state !== "loaded") return; + + this.process(output.tracks.collection()); + }); + } + + /** + * @param {Track[]} cachedTracks + */ + async process(cachedTracks) { + this.#isProcessing.value = true; + console.log("🪵 Processing initiated"); + + /** @type {InputElement | null} */ + const input = document.querySelector(this.inputSelector); + + // TODO + /** @type {any} */ + const metadataProcessor = document.querySelector( + this.metadataProcessorSelector, + ); + + // Check element presence + if (!input) throw new Error("Missing required `input` element"); + if (!metadataProcessor) { + throw new Error("Missing required `metadata-processor` element"); + } + + // Contextualize + await input.contextualize(cachedTracks); + + // List + const tracks = await input.list(cachedTracks); + + console.log(tracks); + + // Fin + console.log("🪵 Processing completed"); + this.#isProcessing.value = false; + } +} + +export default ProcessTracksOrchestrator; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = ProcessTracksOrchestrator; +export const NAME = "do-process-tracks"; + +customElements.define(NAME, ProcessTracksOrchestrator); diff --git a/src/component/output/common.js b/src/component/output/common.js new file mode 100644 index 000000000..7ea2bf310 --- /dev/null +++ b/src/component/output/common.js @@ -0,0 +1,38 @@ +import { signal } from "@common/signal.js"; + +/** + * @import {OutputManager, Track} from "@component/core/types.d.ts" + */ + +/** + * @param {{ init?: () => Promise; tracks: { get(): Promise; put(tracks: Track[]): Promise; } }} _ + * @returns {OutputManager} + */ +export function outputManager({ init, tracks }) { + const t = signal(/** @type {Track[]} */ ([])); + const ts = signal(/** @type {"loading" | "loaded"} */ ("loading")); + + async function loadTracks() { + console.log("..."); + if (init && (await init()) === false) return; + console.log("start load"); + const a = await tracks.get(); + console.log(a); + t.value = a; + ts.value = "loaded"; + } + + loadTracks(); + + return { + tracks: { + collection: t.get, + reload: loadTracks, + state: ts.get, + store: async (newTracks) => { + t.value = newTracks; + await tracks.put(newTracks); + }, + }, + }; +} diff --git a/src/component/output/indexed-db/element.js b/src/component/output/indexed-db/element.js index b95e1813c..2d92d669c 100644 --- a/src/component/output/indexed-db/element.js +++ b/src/component/output/indexed-db/element.js @@ -1,8 +1,9 @@ import { DiffuseElement } from "@common/element.js"; import { use } from "@common/worker.js"; +import { outputManager } from "../common.js"; /** - * @import {OutputActions} from "@component/core/types.d.ts" + * @import {OutputActions, OutputManager, Track} from "@component/core/types.d.ts" */ //////////////////////////////////////////// @@ -10,7 +11,7 @@ import { use } from "@common/worker.js"; //////////////////////////////////////////// /** - * @implements {OutputActions} + * @implements {OutputManager} */ class IndexedDBOutput extends DiffuseElement { constructor() { @@ -21,9 +22,19 @@ class IndexedDBOutput extends DiffuseElement { const url = "/component/output/indexed-db/worker.js"; const worker = new Worker(url, { name, type: "module" }); - // Worker proxy - this.getTracks = use("getTracks", worker); - this.putTracks = use("putTracks", worker); + // Manager + const manager = outputManager({ + tracks: { + get: () => { + const fn = use("getTracks", worker); + console.log("Call", fn, worker); + return fn(); + }, + put: use("putTracks", worker), + }, + }); + + this.tracks = manager.tracks; } } diff --git a/src/component/output/indexed-db/worker.js b/src/component/output/indexed-db/worker.js index 7d52ba0b1..658b0614d 100644 --- a/src/component/output/indexed-db/worker.js +++ b/src/component/output/indexed-db/worker.js @@ -2,6 +2,7 @@ import * as IDB from "idb-keyval"; import { jsonDecode, jsonEncode } from "@common/index.js"; import { IDB_PREFIX } from "./constants.js"; +import { define, ostiary } from "@common/worker.js"; /** * @import {OutputActions, Track} from "@component/core/types.d.ts"; @@ -15,6 +16,8 @@ import { IDB_PREFIX } from "./constants.js"; * @type {OutputActions['getTracks']} */ export async function getTracks() { + console.log("GET"); + const encoded = await get({ name: "tracks.json" }); if (!encoded) return []; @@ -32,7 +35,17 @@ export async function putTracks(tracks) { } //////////////////////////////////////////// -// 🛠️ +// ⚡️ +//////////////////////////////////////////// + +ostiary((port) => { + // Setup RPC + define("getTracks", getTracks, port); + define("putTracks", putTracks, port); +}); + +//////////////////////////////////////////// +// ⛔️ //////////////////////////////////////////// /** diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js index b8f732faa..731a12024 100644 --- a/src/theme/blur/index.js +++ b/src/theme/blur/index.js @@ -1,6 +1,11 @@ +import "@component/input/opensubsonic/element.js"; +import "@component/output/indexed-db/element.js"; +import "@component/processor/metadata/element.js"; + import * as Audio from "@component/engine/audio/element.js"; import * as Queue from "@component/engine/queue/element.js"; -import * as Metadata from "@component/processor/metadata/element.js"; + +import "@component/orchestrator/process-tracks/element.js"; import { component } from "@common/element.js"; import { effect } from "@common/signal.js"; @@ -11,15 +16,6 @@ import { effect } from "@common/signal.js"; const audio = component(Audio); const queue = component(Queue); -const metadata = component(Metadata); - -// METADATA - -// const resp = await metadata.supply({ -// urls: { get: url, head: url }, -// }); - -// console.log(resp); // QUEUE diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 70047a134..91bd8c6aa 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -7,8 +7,16 @@ + + + +
    From b84e6818a90d3dfdbec4750fb91a3cd860f1548b Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 21:52:35 +0200 Subject: [PATCH 047/244] feat: process tracks --- .../orchestrator/process-tracks/_applet.astro | 121 ------------------ .../process-tracks/_manifest.json | 6 - .../orchestrator/process-tracks/index.astro | 9 -- src/common/index.js | 9 +- src/component/core/types.d.ts | 2 +- src/component/input/opensubsonic/common.js | 6 + .../orchestrator/process-tracks/element.js | 65 ++++++++-- src/component/output/common.js | 12 +- src/component/output/indexed-db/element.js | 6 +- src/component/output/indexed-db/worker.js | 2 - src/theme/blur/index.js | 13 +- src/theme/blur/index.vto | 6 +- 12 files changed, 76 insertions(+), 181 deletions(-) delete mode 100644 _backup/pages/orchestrator/process-tracks/_applet.astro delete mode 100644 _backup/pages/orchestrator/process-tracks/_manifest.json delete mode 100644 _backup/pages/orchestrator/process-tracks/index.astro diff --git a/_backup/pages/orchestrator/process-tracks/_applet.astro b/_backup/pages/orchestrator/process-tracks/_applet.astro deleted file mode 100644 index f46584e94..000000000 --- a/_backup/pages/orchestrator/process-tracks/_applet.astro +++ /dev/null @@ -1,121 +0,0 @@ - diff --git a/_backup/pages/orchestrator/process-tracks/_manifest.json b/_backup/pages/orchestrator/process-tracks/_manifest.json deleted file mode 100644 index dbbbddfda..000000000 --- a/_backup/pages/orchestrator/process-tracks/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/orchestrator/process-tracks", - "title": "Diffuse Orchestrator | Process Tracks", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/orchestrator/process-tracks/index.astro b/_backup/pages/orchestrator/process-tracks/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/orchestrator/process-tracks/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/src/common/index.js b/src/common/index.js index 307e8064c..701405635 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -1,4 +1,4 @@ -import * as Uint8 from "uint8arrays"; +// import * as Uint8 from "uint8arrays"; /** * @import {Track} from "@component/core/types.d.ts" @@ -105,7 +105,8 @@ export function jsonEncode(a) { * @returns {Promise} */ export async function trackArtworkCacheId(track) { - return await crypto.subtle - .digest("SHA-256", new TextEncoder().encode(track.uri)) - .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); + return ""; + // return await crypto.subtle + // .digest("SHA-256", new TextEncoder().encode(track.uri)) + // .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); } diff --git a/src/component/core/types.d.ts b/src/component/core/types.d.ts index 651898dc5..9d7db96bc 100644 --- a/src/component/core/types.d.ts +++ b/src/component/core/types.d.ts @@ -47,8 +47,8 @@ export type OutputManager = { tracks: { collection: SignalReader; reload: () => Promise; + save: (tracks: Track[]) => Promise; state: SignalReader<"loading" | "loaded">; - store: (tracks: Track[]) => Promise; }; }; diff --git a/src/component/input/opensubsonic/common.js b/src/component/input/opensubsonic/common.js index 53777c7cd..cd1c841b6 100644 --- a/src/component/input/opensubsonic/common.js +++ b/src/component/input/opensubsonic/common.js @@ -107,6 +107,12 @@ export async function loadServers() { } /** + * Parse an opensubsonic URI. + * + * ``` + * opensubsonic://username:password@server-host:port/path?tls=f + * ``` + * * @param {string} uriString * @returns {{ path: string | undefined; server: Server; songId: string | undefined } | undefined} */ diff --git a/src/component/orchestrator/process-tracks/element.js b/src/component/orchestrator/process-tracks/element.js index f82c28ed6..d68f5a96f 100644 --- a/src/component/orchestrator/process-tracks/element.js +++ b/src/component/orchestrator/process-tracks/element.js @@ -1,3 +1,5 @@ +import deepDiff from "@fry69/deep-diff"; + import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; @@ -47,7 +49,7 @@ class ProcessTracksOrchestrator extends DiffuseElement { /** * @override */ - connectedCallback() { + async connectedCallback() { super.connectedCallback(); /** @type {OutputElement | null} */ @@ -56,26 +58,22 @@ class ProcessTracksOrchestrator extends DiffuseElement { // Check output element presence if (!output) throw new Error("Missing required `output` element"); - // Process whenever tracks are loaded - this.effect(async () => { - // TODO: Make configurable - await customElements.whenDefined("do-indexed-db"); + // Wait until defined + await customElements.whenDefined(output.localName); + // Process whenever tracks are loaded + this.effect(() => { const state = output.tracks.state(); - console.log(state); if (state !== "loaded") return; - this.process(output.tracks.collection()); + this.process(output); }); } /** - * @param {Track[]} cachedTracks + * @param {OutputElement} output */ - async process(cachedTracks) { - this.#isProcessing.value = true; - console.log("🪵 Processing initiated"); - + async process(output) { /** @type {InputElement | null} */ const input = document.querySelector(this.inputSelector); @@ -91,13 +89,54 @@ class ProcessTracksOrchestrator extends DiffuseElement { throw new Error("Missing required `metadata-processor` element"); } + // Wait until defined + await customElements.whenDefined(input.localName); + await customElements.whenDefined(metadataProcessor.localName); + + // Start + this.#isProcessing.value = true; + console.log("🪵 Processing initiated"); + + const cachedTracks = output.tracks.collection(); + // Contextualize await input.contextualize(cachedTracks); // List const tracks = await input.list(cachedTracks); - console.log(tracks); + // Fetch metadata if needed + // TODO: Parallelisation + const tracksWithMetadata = await tracks.reduce( + /** + * @param {Promise} promise + * @param {Track} track + */ + async (promise, track) => { + const acc = await promise; + + if (track.tags && track.stats) return [...acc, track]; + + const resGet = await input.resolve({ method: "GET", uri: track.uri }); + const resHead = await input.resolve({ method: "HEAD", uri: track.uri }); + + if (!resGet) return [...acc, track]; + + const { stats, tags } = await metadataProcessor.supply({ + urls: { get: resGet.url, head: resHead?.url || resGet.url }, + }); + + return [...acc, { ...track, stats, tags }]; + }, + Promise.resolve([]), + ); + + // Changed? + const diff = deepDiff.diff(tracksWithMetadata, cachedTracks); + const changed = !!diff; + + // Save if changed + if (changed) await output.tracks.save(tracksWithMetadata); // Fin console.log("🪵 Processing completed"); diff --git a/src/component/output/common.js b/src/component/output/common.js index 7ea2bf310..1d54ca9fc 100644 --- a/src/component/output/common.js +++ b/src/component/output/common.js @@ -1,4 +1,4 @@ -import { signal } from "@common/signal.js"; +import { effect, signal } from "@common/signal.js"; /** * @import {OutputManager, Track} from "@component/core/types.d.ts" @@ -13,12 +13,8 @@ export function outputManager({ init, tracks }) { const ts = signal(/** @type {"loading" | "loaded"} */ ("loading")); async function loadTracks() { - console.log("..."); if (init && (await init()) === false) return; - console.log("start load"); - const a = await tracks.get(); - console.log(a); - t.value = a; + t.value = await tracks.get(); ts.value = "loaded"; } @@ -28,11 +24,11 @@ export function outputManager({ init, tracks }) { tracks: { collection: t.get, reload: loadTracks, - state: ts.get, - store: async (newTracks) => { + save: async (newTracks) => { t.value = newTracks; await tracks.put(newTracks); }, + state: ts.get, }, }; } diff --git a/src/component/output/indexed-db/element.js b/src/component/output/indexed-db/element.js index 2d92d669c..ffa20f612 100644 --- a/src/component/output/indexed-db/element.js +++ b/src/component/output/indexed-db/element.js @@ -25,11 +25,7 @@ class IndexedDBOutput extends DiffuseElement { // Manager const manager = outputManager({ tracks: { - get: () => { - const fn = use("getTracks", worker); - console.log("Call", fn, worker); - return fn(); - }, + get: use("getTracks", worker), put: use("putTracks", worker), }, }); diff --git a/src/component/output/indexed-db/worker.js b/src/component/output/indexed-db/worker.js index 658b0614d..a26257e68 100644 --- a/src/component/output/indexed-db/worker.js +++ b/src/component/output/indexed-db/worker.js @@ -16,8 +16,6 @@ import { define, ostiary } from "@common/worker.js"; * @type {OutputActions['getTracks']} */ export async function getTracks() { - console.log("GET"); - const encoded = await get({ name: "tracks.json" }); if (!encoded) return []; diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js index 731a12024..dd99da1ec 100644 --- a/src/theme/blur/index.js +++ b/src/theme/blur/index.js @@ -1,8 +1,8 @@ import "@component/input/opensubsonic/element.js"; -import "@component/output/indexed-db/element.js"; import "@component/processor/metadata/element.js"; import * as Audio from "@component/engine/audio/element.js"; +import * as Output from "@component/output/indexed-db/element.js"; import * as Queue from "@component/engine/queue/element.js"; import "@component/orchestrator/process-tracks/element.js"; @@ -15,8 +15,11 @@ import { effect } from "@common/signal.js"; */ const audio = component(Audio); +const output = component(Output); const queue = component(Queue); +globalThis.output = output; + // QUEUE effect(() => { @@ -33,11 +36,3 @@ effect(() => { ], }); }); - -queue.pool([ - { - id: "test", - uri: - "https://archive.org/download/deathofsalesmans00mill/01_Side_1_Death_of_a_salesman_-_Introduction_Act_1__Part_1.mp3", - }, -]); diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 91bd8c6aa..7a3b73a69 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,11 +4,11 @@ - - + + - + Date: Fri, 24 Oct 2025 22:28:13 +0200 Subject: [PATCH 048/244] refactor: orchestrators --- src/common/element.js | 20 +++++ .../orchestrator/process-tracks/element.js | 85 ++++++------------- 2 files changed, 48 insertions(+), 57 deletions(-) diff --git a/src/common/element.js b/src/common/element.js index 1db2e8588..b1ed6ee44 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -295,3 +295,23 @@ export function component(elementModule, id) { } return /** @type {InstanceType} */ (el); } + +/** + * @template {HTMLElement} T + * @param {DiffuseElement} parent + * @param {string} attribute + * @returns {T} + */ +export function query(parent, attribute) { + const selector = parent.getAttribute(attribute); + + if (!selector) { + throw new Error(`Missing required '${attribute}' attribute`); + } + + /** @type {T | null} */ + const element = document.querySelector(selector); + if (!element) throw new Error(`Missing required '${selector}' element`); + + return element; +} diff --git a/src/component/orchestrator/process-tracks/element.js b/src/component/orchestrator/process-tracks/element.js index d68f5a96f..28ff2e073 100644 --- a/src/component/orchestrator/process-tracks/element.js +++ b/src/component/orchestrator/process-tracks/element.js @@ -1,6 +1,6 @@ import deepDiff from "@fry69/deep-diff"; -import { DiffuseElement } from "@common/element.js"; +import { DiffuseElement, query } from "@common/element.js"; import { signal } from "@common/signal.js"; /** @@ -15,25 +15,14 @@ class ProcessTracksOrchestrator extends DiffuseElement { constructor() { super(); - this.inputSelector = this.getAttribute("input-selector"); - this.outputSelector = this.getAttribute("output-selector"); - this.metadataProcessorSelector = this.getAttribute( - "metadata-processor-selector", - ); - - if (!this.inputSelector) { - throw new Error("Missing required `input-selector` attribute"); - } + /** @type {InputElement} */ + this.input = query(this, "input-selector"); - if (!this.outputSelector) { - throw new Error("Missing required `output-selector` attribute"); - } + /** @type {OutputElement} */ + this.output = query(this, "output-selector"); - if (!this.metadataProcessorSelector) { - throw new Error( - "Missing required `metadata-processor-selector` attribute", - ); - } + /** @type {import("@component/processor/metadata/element.js").CLASS} */ + this.metadataProcessor = query(this, "metadata-processor-selector"); } // SIGNALS @@ -52,61 +41,37 @@ class ProcessTracksOrchestrator extends DiffuseElement { async connectedCallback() { super.connectedCallback(); - /** @type {OutputElement | null} */ - const output = document.querySelector(this.outputSelector); - - // Check output element presence - if (!output) throw new Error("Missing required `output` element"); - // Wait until defined - await customElements.whenDefined(output.localName); + await customElements.whenDefined(this.output.localName); - // Process whenever tracks are loaded + // Process whenever tracks are initially loaded this.effect(() => { - const state = output.tracks.state(); + const state = this.output.tracks.state(); if (state !== "loaded") return; - this.process(output); + this.process(); }); } - /** - * @param {OutputElement} output - */ - async process(output) { - /** @type {InputElement | null} */ - const input = document.querySelector(this.inputSelector); - - // TODO - /** @type {any} */ - const metadataProcessor = document.querySelector( - this.metadataProcessorSelector, - ); - - // Check element presence - if (!input) throw new Error("Missing required `input` element"); - if (!metadataProcessor) { - throw new Error("Missing required `metadata-processor` element"); - } + // ACTIONS - // Wait until defined - await customElements.whenDefined(input.localName); - await customElements.whenDefined(metadataProcessor.localName); + async process() { + await customElements.whenDefined(this.input.localName); + await customElements.whenDefined(this.metadataProcessor.localName); // Start this.#isProcessing.value = true; console.log("🪵 Processing initiated"); - const cachedTracks = output.tracks.collection(); + const cachedTracks = this.output.tracks.collection(); // Contextualize - await input.contextualize(cachedTracks); + await this.input.contextualize(cachedTracks); // List - const tracks = await input.list(cachedTracks); + const tracks = await this.input.list(cachedTracks); // Fetch metadata if needed - // TODO: Parallelisation const tracksWithMetadata = await tracks.reduce( /** * @param {Promise} promise @@ -117,12 +82,18 @@ class ProcessTracksOrchestrator extends DiffuseElement { if (track.tags && track.stats) return [...acc, track]; - const resGet = await input.resolve({ method: "GET", uri: track.uri }); - const resHead = await input.resolve({ method: "HEAD", uri: track.uri }); + const resGet = await this.input.resolve({ + method: "GET", + uri: track.uri, + }); + const resHead = await this.input.resolve({ + method: "HEAD", + uri: track.uri, + }); if (!resGet) return [...acc, track]; - const { stats, tags } = await metadataProcessor.supply({ + const { stats, tags } = await this.metadataProcessor.supply({ urls: { get: resGet.url, head: resHead?.url || resGet.url }, }); @@ -136,7 +107,7 @@ class ProcessTracksOrchestrator extends DiffuseElement { const changed = !!diff; // Save if changed - if (changed) await output.tracks.save(tracksWithMetadata); + if (changed) await this.output.tracks.save(tracksWithMetadata); // Fin console.log("🪵 Processing completed"); From ef04a2c6bb208c241e79bdf7f7041bb6c66ed703 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 22:45:47 +0200 Subject: [PATCH 049/244] feat: queue-tracks orchestrator --- .../orchestrator/process-tracks/element.js | 5 ++ .../orchestrator/queue-tracks/element.js | 78 +++++++++++++++++++ src/theme/blur/index.vto | 15 +++- 3 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 src/component/orchestrator/queue-tracks/element.js diff --git a/src/component/orchestrator/process-tracks/element.js b/src/component/orchestrator/process-tracks/element.js index 28ff2e073..df199b03c 100644 --- a/src/component/orchestrator/process-tracks/element.js +++ b/src/component/orchestrator/process-tracks/element.js @@ -11,6 +11,11 @@ import { signal } from "@common/signal.js"; // ELEMENT //////////////////////////////////////////// +/** + * Processes inputs into tracks whenever + * the already existing tracks are loaded + * from the assigned output element. + */ class ProcessTracksOrchestrator extends DiffuseElement { constructor() { super(); diff --git a/src/component/orchestrator/queue-tracks/element.js b/src/component/orchestrator/queue-tracks/element.js new file mode 100644 index 000000000..d8b715fc7 --- /dev/null +++ b/src/component/orchestrator/queue-tracks/element.js @@ -0,0 +1,78 @@ +import { DiffuseElement, query } from "@common/element.js"; + +/** + * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * Fill the queue automatically with tracks + * whenever tracks have been loaded, + * or the tracks collection changes. + */ +class QueueTracksOrchestrator extends DiffuseElement { + constructor() { + super(); + + /** @type {InputElement} */ + this.input = query(this, "input-selector"); + + /** @type {OutputElement} */ + this.output = query(this, "output-selector"); + + /** @type {import("@component/engine/queue/element.js").CLASS} */ + this.queue = query(this, "queue-engine-selector"); + } + + // LIFECYCLE + + /** + * @override + */ + async connectedCallback() { + super.connectedCallback(); + + // Wait until defined + await customElements.whenDefined(this.output.localName); + + // ... + this.effect(() => { + const tracks = this.output.tracks.collection(); + this.poolAvailable(tracks); + }); + } + + // 🌊 + + /** + * @param {Track[]} cachedTracks + */ + async poolAvailable(cachedTracks) { + const groups = await this.input.groupConsult(cachedTracks); + + /** @type {Track[]} */ + let availableTracks = []; + + Object.values(groups).forEach((value) => { + if (value.available === false) return; + availableTracks = availableTracks.concat(value.tracks); + }, []); + + // Set pool + await this.queue.pool(availableTracks); + } +} + +export default QueueTracksOrchestrator; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = QueueTracksOrchestrator; +export const NAME = "do-queue-tracks"; + +customElements.define(NAME, QueueTracksOrchestrator); diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 7a3b73a69..d83493cbf 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -4,22 +4,33 @@ + +
    +
    + + + + -
    -
    + + From 4ed07dde8845d6042009bb7dee98cbc5d28dfe8a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 23:37:08 +0200 Subject: [PATCH 050/244] feat: queue-audio orchestrator --- .../orchestrator/queue-audio/_applet.astro | 97 ------------------- .../orchestrator/queue-audio/_manifest.json | 6 -- .../orchestrator/queue-audio/index.astro | 9 -- .../orchestrator/queue-tracks/_applet.astro | 74 -------------- .../orchestrator/queue-tracks/_manifest.json | 6 -- .../orchestrator/queue-tracks/index.astro | 9 -- src/common/element.js | 2 +- src/common/signal.js | 7 +- src/component/engine/audio/element.js | 3 + .../orchestrator/queue-audio/element.js | 97 +++++++++++++++++++ .../orchestrator/queue-tracks/element.js | 4 +- src/theme/blur/index.js | 24 ++--- src/theme/blur/index.vto | 8 +- 13 files changed, 118 insertions(+), 228 deletions(-) delete mode 100644 _backup/pages/orchestrator/queue-audio/_applet.astro delete mode 100644 _backup/pages/orchestrator/queue-audio/_manifest.json delete mode 100644 _backup/pages/orchestrator/queue-audio/index.astro delete mode 100644 _backup/pages/orchestrator/queue-tracks/_applet.astro delete mode 100644 _backup/pages/orchestrator/queue-tracks/_manifest.json delete mode 100644 _backup/pages/orchestrator/queue-tracks/index.astro create mode 100644 src/component/orchestrator/queue-audio/element.js diff --git a/_backup/pages/orchestrator/queue-audio/_applet.astro b/_backup/pages/orchestrator/queue-audio/_applet.astro deleted file mode 100644 index 17a1dbf42..000000000 --- a/_backup/pages/orchestrator/queue-audio/_applet.astro +++ /dev/null @@ -1,97 +0,0 @@ - diff --git a/_backup/pages/orchestrator/queue-audio/_manifest.json b/_backup/pages/orchestrator/queue-audio/_manifest.json deleted file mode 100644 index abe028f0b..000000000 --- a/_backup/pages/orchestrator/queue-audio/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/orchestrator/queue-audio", - "title": "Diffuse Orchestrator | Queue Audio", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/orchestrator/queue-audio/index.astro b/_backup/pages/orchestrator/queue-audio/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/orchestrator/queue-audio/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/orchestrator/queue-tracks/_applet.astro b/_backup/pages/orchestrator/queue-tracks/_applet.astro deleted file mode 100644 index 8eef1d669..000000000 --- a/_backup/pages/orchestrator/queue-tracks/_applet.astro +++ /dev/null @@ -1,74 +0,0 @@ - diff --git a/_backup/pages/orchestrator/queue-tracks/_manifest.json b/_backup/pages/orchestrator/queue-tracks/_manifest.json deleted file mode 100644 index 5e44c9177..000000000 --- a/_backup/pages/orchestrator/queue-tracks/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/orchestrator/queue-tracks", - "title": "Diffuse Orchestrator | Queue Tracks", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/orchestrator/queue-tracks/index.astro b/_backup/pages/orchestrator/queue-tracks/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/orchestrator/queue-tracks/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/src/common/element.js b/src/common/element.js index b1ed6ee44..cdd76aee5 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -123,7 +123,7 @@ export class BroadcastableDiffuseElement extends DiffuseElement { this.broadcast = this.broadcast.bind(this); /** @type {Signal>} */ - this.#broadcastingStatus = signal(this.#status.promise, { unbiased: true }); + this.#broadcastingStatus = signal(this.#status.promise, { eager: true }); this.broadcastingStatus = this.#broadcastingStatus.get; } diff --git a/src/common/signal.js b/src/common/signal.js index e0eef924e..c0991ec49 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -10,15 +10,12 @@ export * from "alien-signals"; /** * @template T * @param {T} initialValue - * @param {{ unbiased?: boolean }} [options] + * @param {{ eager?: boolean }} [options] * @returns {Signal} */ export function signal(initialValue, options) { const s = alienSignal(initialValue); - const isPrimitive = initialValue !== null && - initialValue !== undefined && - Object(initialValue) !== initialValue; - if (isPrimitive || options?.unbiased === true) { + if (options?.eager === true) { return _signal({ get: () => s(), set: (v) => s(v), diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index c9f18f623..7e33f8d75 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -49,10 +49,12 @@ class AudioEngine extends BroadcastableDiffuseElement { #items = signal(/** @type {Audio[]} */ ([])); #volume = signal(0.5); + $hasEnded = signal(false); $isPlaying = signal(false); // STATE + hasEnded = this.$hasEnded.get; isPlaying = this.$isPlaying.get; items = this.#items.get; volume = this.#volume.get; @@ -332,6 +334,7 @@ class AudioEngineItem extends HTMLElement { audio.currentTime = 0; engineItem(audio)?.state({ hasEnded: true }); + engineItem(audio)?.engine?.$hasEnded.set(true); } /** diff --git a/src/component/orchestrator/queue-audio/element.js b/src/component/orchestrator/queue-audio/element.js new file mode 100644 index 000000000..65ad8de3b --- /dev/null +++ b/src/component/orchestrator/queue-audio/element.js @@ -0,0 +1,97 @@ +import { DiffuseElement, query } from "@common/element.js"; +import { untracked } from "@common/signal.js"; + +/** + * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * When the active queue item changes, + * coordinate the audio engine accordingly. + * + * Vice versa, when the audio ends, + * shift the queue if needed. + */ +class QueueAudioOrchestrator extends DiffuseElement { + constructor() { + super(); + + /** @type {InputElement} */ + this.input = query(this, "input-selector"); + + /** @type {import("@component/engine/audio/element.js").CLASS} */ + this.audio = query(this, "audio-engine-selector"); + + /** @type {import("@component/engine/queue/element.js").CLASS} */ + this.queue = query(this, "queue-engine-selector"); + } + + // LIFECYCLE + + /** + * @override + */ + async connectedCallback() { + super.connectedCallback(); + + // Wait until defined + await customElements.whenDefined(this.audio.localName); + await customElements.whenDefined(this.input.localName); + await customElements.whenDefined(this.queue.localName); + + // Effects + this.effect(() => this.monitorActiveQueueItem()); + this.effect(() => this.monitorAudioEnd()); + } + + // 🛠️ + + async monitorActiveQueueItem() { + const activeTrack = this.queue.now(); + const isPlaying = untracked(this.audio.isPlaying); + + // Resolve URIs + const url = activeTrack + ? await this.input.resolve({ method: "GET", uri: activeTrack.uri }).then( + (a) => a?.url, + ) + : undefined; + + // Check if we still need to render + if (this.queue.now?.()?.id !== activeTrack?.id) return; + + // Play new active queue item + // TODO: Take URL expiration timestamp into account + // TODO: Preload next queue item + this.audio.supply({ + audio: activeTrack && url + ? [{ + id: activeTrack.id, + isPreload: false, + url, + }] + // TODO: Keep preloads + : [], + play: activeTrack && isPlaying ? { audioId: activeTrack.id } : undefined, + }); + } + + async monitorAudioEnd() { + if (this.audio.hasEnded()) await this.queue.shift(); + } +} + +export default QueueAudioOrchestrator; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = QueueAudioOrchestrator; +export const NAME = "do-queue-audio"; + +customElements.define(NAME, QueueAudioOrchestrator); diff --git a/src/component/orchestrator/queue-tracks/element.js b/src/component/orchestrator/queue-tracks/element.js index d8b715fc7..f847b2416 100644 --- a/src/component/orchestrator/queue-tracks/element.js +++ b/src/component/orchestrator/queue-tracks/element.js @@ -35,10 +35,10 @@ class QueueTracksOrchestrator extends DiffuseElement { async connectedCallback() { super.connectedCallback(); - // Wait until defined + // When defined await customElements.whenDefined(this.output.localName); - // ... + // Watch tracks collection this.effect(() => { const tracks = this.output.tracks.collection(); this.poolAvailable(tracks); diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js index dd99da1ec..d8272f06c 100644 --- a/src/theme/blur/index.js +++ b/src/theme/blur/index.js @@ -1,12 +1,13 @@ +import "@component/engine/audio/element.js"; import "@component/input/opensubsonic/element.js"; +import "@component/orchestrator/process-tracks/element.js"; +import "@component/orchestrator/queue-audio/element.js"; +import "@component/orchestrator/queue-tracks/element.js"; import "@component/processor/metadata/element.js"; -import * as Audio from "@component/engine/audio/element.js"; import * as Output from "@component/output/indexed-db/element.js"; import * as Queue from "@component/engine/queue/element.js"; -import "@component/orchestrator/process-tracks/element.js"; - import { component } from "@common/element.js"; import { effect } from "@common/signal.js"; @@ -14,25 +15,12 @@ import { effect } from "@common/signal.js"; * @import {Item} from "@component/engine/queue/types.d.ts" */ -const audio = component(Audio); const output = component(Output); const queue = component(Queue); globalThis.output = output; - -// QUEUE +globalThis.queue = queue; effect(() => { - const now = queue.now(); - if (now === null) return; - - audio.supply({ - audio: [ - { - id: now.id, - isPreload: false, - url: now.uri, - }, - ], - }); + console.log("Active queue item:", queue.now()); }); diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index d83493cbf..5a6e44b18 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -24,10 +24,16 @@ output-selector="do-indexed-db" > + + From f391e248b8fe810464c567692210a61b723c1071 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 24 Oct 2025 23:48:26 +0200 Subject: [PATCH 051/244] feat: search-tracks orchestrator --- .../orchestrator/search-tracks/_applet.astro | 68 ---------------- .../orchestrator/search-tracks/_manifest.json | 6 -- .../orchestrator/search-tracks/index.astro | 9 --- .../orchestrator/search-tracks/element.js | 78 +++++++++++++++++++ src/component/processor/search/element.js | 39 ++++++++++ 5 files changed, 117 insertions(+), 83 deletions(-) delete mode 100644 _backup/pages/orchestrator/search-tracks/_applet.astro delete mode 100644 _backup/pages/orchestrator/search-tracks/_manifest.json delete mode 100644 _backup/pages/orchestrator/search-tracks/index.astro create mode 100644 src/component/orchestrator/search-tracks/element.js create mode 100644 src/component/processor/search/element.js diff --git a/_backup/pages/orchestrator/search-tracks/_applet.astro b/_backup/pages/orchestrator/search-tracks/_applet.astro deleted file mode 100644 index 998d88fd6..000000000 --- a/_backup/pages/orchestrator/search-tracks/_applet.astro +++ /dev/null @@ -1,68 +0,0 @@ - diff --git a/_backup/pages/orchestrator/search-tracks/_manifest.json b/_backup/pages/orchestrator/search-tracks/_manifest.json deleted file mode 100644 index 5e44c9177..000000000 --- a/_backup/pages/orchestrator/search-tracks/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/orchestrator/queue-tracks", - "title": "Diffuse Orchestrator | Queue Tracks", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/orchestrator/search-tracks/index.astro b/_backup/pages/orchestrator/search-tracks/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/orchestrator/search-tracks/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/src/component/orchestrator/search-tracks/element.js b/src/component/orchestrator/search-tracks/element.js new file mode 100644 index 000000000..654b99366 --- /dev/null +++ b/src/component/orchestrator/search-tracks/element.js @@ -0,0 +1,78 @@ +import { DiffuseElement, query } from "@common/element.js"; + +/** + * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * Fill the search supply automatically with + * tracks whenever they have been loaded, + * or the tracks collection changes. + */ +class SearchTracksOrchestrator extends DiffuseElement { + constructor() { + super(); + + /** @type {InputElement} */ + this.input = query(this, "input-selector"); + + /** @type {OutputElement} */ + this.output = query(this, "output-selector"); + + /** @type {import("@component/processor/search/element.js").CLASS} */ + this.search = query(this, "search-processor-selector"); + } + + // LIFECYCLE + + /** + * @override + */ + async connectedCallback() { + super.connectedCallback(); + + // When defined + await customElements.whenDefined(this.output.localName); + + // Watch tracks collection + this.effect(() => { + const tracks = this.output.tracks.collection(); + this.supplyAvailable(tracks); + }); + } + + // 🚛 + + /** + * @param {Track[]} cachedTracks + */ + async supplyAvailable(cachedTracks) { + const groups = await this.input.groupConsult(cachedTracks); + + /** @type {Track[]} */ + let availableTracks = []; + + Object.values(groups).forEach((value) => { + if (value.available === false) return; + availableTracks = availableTracks.concat(value.tracks); + }, []); + + // Set pool + await this.search.supply(availableTracks); + } +} + +export default SearchTracksOrchestrator; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = SearchTracksOrchestrator; +export const NAME = "do-search-tracks"; + +customElements.define(NAME, SearchTracksOrchestrator); diff --git a/src/component/processor/search/element.js b/src/component/processor/search/element.js new file mode 100644 index 000000000..f873fe281 --- /dev/null +++ b/src/component/processor/search/element.js @@ -0,0 +1,39 @@ +import { DiffuseElement } from "@common/element.js"; +import { use } from "@common/worker.js"; + +/** + * @import {Actions} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {Actions} + */ +class SearchProcessor extends DiffuseElement { + constructor() { + super(); + + // Setup worker + const name = `diffuse/processor/search/${this.group}`; + const url = "/component/processor/search/worker.js"; + const worker = new Worker(url, { name, type: "module" }); + + // Worker proxy + this.search = use("search", worker); + this.supply = use("supply", worker); + } +} + +export default SearchProcessor; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = SearchProcessor; +export const NAME = "dp-search"; + +customElements.define(NAME, SearchProcessor); From 855c36af60532e9a9062aef1dc258318d4ae37b8 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 26 Oct 2025 16:46:29 +0100 Subject: [PATCH 052/244] feat: webamp --- _backup/pages/theme/webamp/index.astro | 30 - _backup/scripts/theme/webamp/index.ts | 116 --- _config.ts | 19 +- deno.jsonc | 5 + deno.lock | 693 ++++++++++++++++++ src/common/signal.js | 19 +- src/common/worker.js | 100 ++- src/component/engine/queue/element.js | 4 +- src/component/engine/queue/worker.js | 27 +- .../orchestrator/queue-tracks/element.js | 3 +- src/styles/theme/webamp/index.css | 4 +- src/theme/webamp/index.js | 149 ++++ src/theme/webamp/index.vto | 67 ++ 13 files changed, 1054 insertions(+), 182 deletions(-) delete mode 100644 _backup/pages/theme/webamp/index.astro delete mode 100644 _backup/scripts/theme/webamp/index.ts create mode 100644 src/theme/webamp/index.js create mode 100644 src/theme/webamp/index.vto diff --git a/_backup/pages/theme/webamp/index.astro b/_backup/pages/theme/webamp/index.astro deleted file mode 100644 index 45e58470a..000000000 --- a/_backup/pages/theme/webamp/index.astro +++ /dev/null @@ -1,30 +0,0 @@ ---- -import "@styles/theme/webamp/index.css"; ---- - - - - - - - Diffuse - - -
    - -
    - - - diff --git a/_backup/scripts/theme/webamp/index.ts b/_backup/scripts/theme/webamp/index.ts deleted file mode 100644 index b37eaf66e..000000000 --- a/_backup/scripts/theme/webamp/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -import type { URLTrack } from "webamp"; -import Webamp from "webamp"; - -import type { GroupConsult, ManagedOutput, ResolvedUri, Track } from "@applets/core/types.d.ts"; -import { applet, inputUrl, wait } from "@scripts/applet/common"; - -//////////////////////////////////////////// -// 🗂️ Applets -//////////////////////////////////////////// -const configurator = { - input: applet("/configurator/input"), - output: applet("/configurator/output"), -}; - -const orchestrator = { - processTracks: applet("/orchestrator/process-tracks"), -}; - -//////////////////////////////////////////// -// ⚡ -//////////////////////////////////////////// -const amp = new Webamp({ - enableMediaSession: true, - initialTracks: [], -}); - -// Override -const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); - -async function loadOverride(uri: string, autoPlay: boolean) { - const resp = await inputUrl(await configurator.input, uri); - if (!resp) throw new Error("Failed to resolve URI"); - return await loadFromUrl(resp.url, autoPlay); -} - -amp.media.loadFromUrl = loadOverride.bind(amp.media); - -// Render -const ampNode = document.createElement("div"); -ampNode.style = "height: 100vh; left: 0; position: absolute; top: 0; width: 100%; z-index: -1000;"; -document.body.appendChild(ampNode); -amp.renderWhenReady(ampNode); - -// Wait for tracks to load -configurator.output - .then((output) => { - output.ondata = loadAndInsert; - return wait(output, (d) => d?.tracks.state === "loaded"); - }) - .then(async () => { - await loadAndInsert(); - }); - -// Load & insert -let inserting = false; -let tracksCacheId: string | undefined = undefined; - -async function loadAndInsert() { - const output = await configurator.output; - - if (output.data.tracks.state !== "loaded") return; - if (output.data.tracks.cacheId === tracksCacheId) return; - if (inserting) return; - - inserting = true; - tracksCacheId = output.data.tracks.cacheId; - const tracks = await loadTracks(); - - // TODO: This kinda messes up the UI, - // but at least the active audio doesn't stop playing. - amp.store.dispatch({ type: "REMOVE_ALL_TRACKS" }); - - // TODO: Webamp blows up if you add too much tracks - amp.appendTracks(tracks.slice(0, 1000)); - - const status = amp.getMediaStatus(); - if (status !== "PLAYING") amp.nextTrack(); - - inserting = false; -} - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// -async function loadTracks(): Promise { - const input = await configurator.input; - const output = await configurator.output; - - const groups = await input.sendAction( - "groupConsult", - output.data.tracks.collection, - { timeoutDuration: 60000 * 5, worker: true }, - ); - - // Available tracks - let tracks: Track[] = []; - - Object.values(groups).forEach((value) => { - if (value.available === false) return; - tracks = tracks.concat(value.tracks); - }, []); - - return tracks.map((track) => { - const urlTrack: URLTrack = { - url: track.uri, - metaData: { - title: track.tags?.title || "", - artist: track.tags?.artist || "", - album: track.tags?.album, - }, - duration: track.stats?.duration, - }; - - return urlTrack; - }); -} diff --git a/_config.ts b/_config.ts index 505f56af9..5e26d9bdc 100644 --- a/_config.ts +++ b/_config.ts @@ -59,6 +59,19 @@ site.script("copy-type-defs", () => { } }); -// site.addEventListener("afterBuild", () => { -// site.run("copy-type-defs"); -// }); +site.script("copy-win98-fonts", () => { + Deno.copyFileSync( + "./node_modules/98.css/fonts/converted/ms_sans_serif.woff2", + "./_site/fonts/ms_sans_serif.woff2", + ); + + Deno.copyFileSync( + "./node_modules/98.css/fonts/converted/ms_sans_serif_bold.woff2", + "./_site/fonts/ms_sans_serif_bold.woff2", + ); +}); + +site.addEventListener("afterBuild", () => { + // site.run("copy-type-defs"); + site.run("copy-win98-fonts"); +}); diff --git a/deno.jsonc b/deno.jsonc index 3c92167b1..7aa0b82b0 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -3,18 +3,23 @@ "version": "4.0.0", "vendor": true, "imports": { + "98.css": "npm:98.css@^0.1.21", "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", + "@mary/ds-queue": "jsr:@mary/ds-queue@^0.1.3", "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "@orama/orama": "jsr:@orama/orama@^2.0.6", + "@vicary/debounce-microtask": "jsr:@vicary/debounce-microtask@^0.1.8", "alien-signals": "npm:alien-signals@^3.0.0", "idb-keyval": "npm:idb-keyval@^6.2.2", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", "query-string": "npm:query-string@^9.3.1", "subsonic-api": "npm:subsonic-api@^3.2.0", + "throttle-debounce": "npm:throttle-debounce@^5.0.2", "uint8arrays": "npm:uint8arrays@^5.1.0", "uri-js": "npm:uri-js@^4.4.1", + "webamp": "npm:webamp@^2.2.0", "xxh32": "npm:xxh32@^2.0.5", // music-metadata diff --git a/deno.lock b/deno.lock index 1ef8e5338..86eaf5134 100644 --- a/deno.lock +++ b/deno.lock @@ -3,6 +3,7 @@ "specifiers": { "jsr:@deno/loader@0.3.6": "0.3.6", "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", + "jsr:@mary/ds-queue@~0.1.3": "0.1.3", "jsr:@mys/m-rpc@~0.12.2": "0.12.2", "jsr:@mys/worker-fn@^3.2.1": "3.2.1", "jsr:@okikio/transferables@^1.0.2": "1.0.2", @@ -34,6 +35,8 @@ "jsr:@std/toml@^1.0.3": "1.0.10", "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", + "jsr:@vicary/debounce-microtask@~0.1.8": "0.1.8", + "npm:98.css@~0.1.21": "0.1.21", "npm:alien-signals@3": "3.0.3", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:idb-keyval@^6.2.2": "6.2.2", @@ -46,8 +49,10 @@ "npm:postcss@8.5.6": "8.5.6", "npm:query-string@^9.3.1": "9.3.1", "npm:subsonic-api@^3.2.0": "3.2.0", + "npm:throttle-debounce@^5.0.2": "5.0.2", "npm:uint8arrays@^5.1.0": "5.1.0", "npm:uri-js@^4.4.1": "4.4.1", + "npm:webamp@^2.2.0": "2.2.0_redux@5.0.1_react@19.2.0_react-dom@19.2.0__react@19.2.0", "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { @@ -57,6 +62,9 @@ "@fry69/deep-diff@0.1.10": { "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" }, + "@mary/ds-queue@0.1.3": { + "integrity": "a743caa397b924cb08b0bbdffc526eb1ea2d3fc9e675da6edc137c437fc93c76" + }, "@mys/m-rpc@0.12.2": { "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", "dependencies": [ @@ -153,15 +161,127 @@ }, "@std/yaml@1.0.9": { "integrity": "6bad3dc766dd85b4b37eabcba81b6aa4eac7a392792ae29abcfb0f90602d55bb" + }, + "@vicary/debounce-microtask@0.1.8": { + "integrity": "fe180e0c599903ccf7a93e719ea986c48affc1ff78951a1bc0ccb874aa30fd0e" } }, "npm": { + "98.css@0.1.21": { + "integrity": "sha512-ddk5qtUWyapM0Bzd5jwGExoE5fdSEGrP+F5VbYjyZLf2c9UVmn6w2NPTvCsoD4BWdGsjdLjlkQGhWwWTJcYQJQ==" + }, + "@assemblyscript/loader@0.17.14": { + "integrity": "sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA==" + }, + "@babel/runtime@7.28.4": { + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==" + }, + "@borewit/text-codec@0.1.1": { + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==" + }, + "@borewit/text-codec@0.2.0": { + "integrity": "sha512-X999CKBxGwX8wW+4gFibsbiNdwqmdQEXmUejIWaIqdrHBgS5ARIOOeyiQbHjP9G58xVEPcuvP6VwwH3A0OFTOA==" + }, + "@redux-devtools/extension@3.3.0_redux@5.0.1": { + "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", + "dependencies": [ + "@babel/runtime", + "immutable", + "redux" + ] + }, + "@sentry/browser@5.9.1": { + "integrity": "sha512-7AOabwp9yAH9h6Xe6TfDwlLxHbUSWs+SPWHI7bPlht2yDSAqkXYGSzRr5X0XQJX9oBQdx2cEPMqHyJrbNaP/og==", + "dependencies": [ + "@sentry/core", + "@sentry/types", + "@sentry/utils", + "tslib" + ] + }, + "@sentry/core@5.8.0": { + "integrity": "sha512-aAh2KLidIXJVGrxmHSVq2eVKbu7tZiYn5ylW6yzJXFetS5z4MA+JYaSBaG2inVYDEEqqMIkb17TyWxxziUDieg==", + "dependencies": [ + "@sentry/hub", + "@sentry/minimal", + "@sentry/types", + "@sentry/utils", + "tslib" + ] + }, + "@sentry/hub@5.8.0": { + "integrity": "sha512-VdApn1ZCNwH1wwQwoO6pu53PM/qgHG+DQege0hbByluImpLBhAj9w50nXnF/8KzV4UoMIVbzCb6jXzMRmqqp9A==", + "dependencies": [ + "@sentry/types", + "@sentry/utils", + "tslib" + ] + }, + "@sentry/minimal@5.8.0": { + "integrity": "sha512-MIlFOgd+JvAUrBBmq7vr9ovRH1HvckhnwzHdoUPpKRBN+rQgTyZy1o6+kA2fASCbrRqFCP+Zk7EHMACKg8DpIw==", + "dependencies": [ + "@sentry/hub", + "@sentry/types", + "tslib" + ] + }, + "@sentry/types@5.7.1": { + "integrity": "sha512-tbUnTYlSliXvnou5D4C8Zr+7/wJrHLbpYX1YkLXuIJRU0NSi81bHMroAuHWILcQKWhVjaV/HZzr7Y/hhWtbXVQ==" + }, + "@sentry/utils@5.8.0": { + "integrity": "sha512-KDxUvBSYi0/dHMdunbxAxD3389pcQioLtcO6CI6zt/nJXeVFolix66cRraeQvqupdLhvOk/el649W4fCPayTHw==", + "dependencies": [ + "@sentry/types", + "tslib" + ] + }, + "@tokenizer/inflate@0.2.7": { + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "dependencies": [ + "debug", + "fflate", + "token-types@6.1.1" + ] + }, + "@tokenizer/token@0.3.0": { + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@types/hoist-non-react-statics@3.3.7_@types+react@19.2.2": { + "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==", + "dependencies": [ + "@types/react", + "hoist-non-react-statics" + ] + }, + "@types/react@19.2.2": { + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "dependencies": [ + "csstype" + ] + }, + "@types/use-sync-external-store@0.0.3": { + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "alien-signals@3.0.3": { "integrity": "sha512-2JXjom6R7ZwrISpUphLhf4htUq1aKRCennTJ6u9kFfr3sLmC9+I4CxxVi+McoFnIg+p1HnVrfLT/iCt4Dlz//Q==" }, + "ani-cursor@0.0.5": { + "integrity": "sha512-gGxst72lG9TOwEfbVpX9vHhzUGw+4Ee2XB6AfYq5JP+bxBtpAjgnTBepCVxYF5t1TPrWHN23nWqLTflJOA3/ag==", + "dependencies": [ + "byte-data", + "riff-file" + ] + }, "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "assert@1.5.1": { + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dependencies": [ + "object.assign", + "util" + ] + }, "autoprefixer@10.4.21_postcss@8.5.6": { "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dependencies": [ @@ -175,6 +295,16 @@ ], "bin": true }, + "babel-runtime@6.26.0": { + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dependencies": [ + "core-js", + "regenerator-runtime" + ] + }, + "base64-js@1.5.1": { + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "baseline-browser-mapping@2.8.19": { "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", "bin": true @@ -190,45 +320,286 @@ ], "bin": true }, + "buffer@5.7.1": { + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dependencies": [ + "base64-js", + "ieee754" + ] + }, + "butterchurn-presets@3.0.0-beta.4": { + "integrity": "sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ==", + "dependencies": [ + "@babel/runtime" + ] + }, + "butterchurn@3.0.0-beta.5": { + "integrity": "sha512-BStK4OAbBb9Pvt8PuQlS4WVmYBwU1KuDMRHF1V89QjoIFauAqq7tpV4EpYXj7K563r5daLrMX+2y5DBhZZ9Xig==", + "dependencies": [ + "@assemblyscript/loader", + "ecma-proposal-math-extensions", + "eel-wasm" + ] + }, + "byte-data@18.1.1": { + "integrity": "sha512-Kv/B0r7adgnCcrs/y703sac2XFLdHW5kPfis1j8+Ij/hmEcWhBKf+1pNTv+vsNqXb207Uiyri8bpnogNxR/4Lg==", + "dependencies": [ + "endianness", + "ieee754-buffer", + "utf8-buffer" + ] + }, + "call-bind-apply-helpers@1.0.2": { + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": [ + "es-errors", + "function-bind" + ] + }, + "call-bind@1.0.8": { + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", + "get-intrinsic", + "set-function-length" + ] + }, + "call-bound@1.0.4": { + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": [ + "call-bind-apply-helpers", + "get-intrinsic" + ] + }, "caniuse-lite@1.0.30001751": { "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==" }, + "chainsaw@0.0.9": { + "integrity": "sha512-nG8PYH+/4xB+8zkV4G844EtfvZ5tTiLFoX3dZ4nhF4t3OCKIb9UvaFyNmeZO2zOSmRWzBoTD+napN6hiL+EgcA==", + "dependencies": [ + "traverse" + ] + }, + "classnames@2.5.1": { + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "content-type@1.0.5": { + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "core-js@2.6.12": { + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": true, + "scripts": true + }, + "core-util-is@1.0.3": { + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "csstype@3.1.3": { + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "debug@4.4.3": { + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": [ + "ms" + ] + }, "decode-uri-component@0.4.1": { "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==" }, + "define-data-property@1.1.4": { + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": [ + "es-define-property", + "es-errors", + "gopd" + ] + }, + "define-properties@1.2.1": { + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": [ + "define-data-property", + "has-property-descriptors", + "object-keys" + ] + }, + "dunder-proto@1.0.1": { + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": [ + "call-bind-apply-helpers", + "es-errors", + "gopd" + ] + }, + "ecma-proposal-math-extensions@0.0.2": { + "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==" + }, + "eel-wasm@0.0.16": { + "integrity": "sha512-1tkId7I7E1Vs4fXTRsH83Sjn2S/AbzrVQKLBRGys6NLc3eVH4NBffJsdEeLHOWWUgQpVXBEP3CV/srUZNIuBnw==" + }, "electron-to-chromium@1.5.237": { "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==" }, + "endianness@8.0.2": { + "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==" + }, "entities@4.5.0": { "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, + "es-define-property@1.0.1": { + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors@1.3.0": { + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms@1.1.1": { + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": [ + "es-errors" + ] + }, "escalade@3.2.0": { "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, + "fflate@0.8.2": { + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, + "file-type@11.1.0": { + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==" + }, + "file-type@21.0.0": { + "integrity": "sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==", + "dependencies": [ + "@tokenizer/inflate", + "strtok3@10.3.4", + "token-types@6.1.1", + "uint8array-extras" + ] + }, "filter-obj@5.1.0": { "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==" }, "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, + "fscreen@1.2.0": { + "integrity": "sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg==" + }, "function-bind@1.1.2": { "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, + "get-intrinsic@1.3.0": { + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", + "es-errors", + "es-object-atoms", + "function-bind", + "get-proto", + "gopd", + "has-symbols", + "hasown", + "math-intrinsics" + ] + }, + "get-proto@1.0.1": { + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": [ + "dunder-proto", + "es-object-atoms" + ] + }, + "glsl-optimizer-js@0.0.2": { + "integrity": "sha512-SMkVILyc1LeBEBgiHOe+4Bh8MEqxLNyAns0NfgmxJTxZZdj7oCoZt+n846rbdB8OLGsg16f5C9nmhi9XEuM8SQ==" + }, + "gopd@1.2.0": { + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "has-property-descriptors@1.0.2": { + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": [ + "es-define-property" + ] + }, + "has-symbols@1.1.0": { + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "hashish@0.0.4": { + "integrity": "sha512-xyD4XgslstNAs72ENaoFvgMwtv8xhiDtC2AtzCG+8yF7W/Knxxm9BX+e2s25mm+HxMKh0rBmXVOEGF3zNImXvA==", + "dependencies": [ + "traverse" + ] + }, "hasown@2.0.2": { "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": [ "function-bind" ] }, + "hoist-non-react-statics@3.3.2": { + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": [ + "react-is@16.13.1" + ] + }, "idb-keyval@6.2.2": { "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==" }, + "ieee754-buffer@2.0.0": { + "integrity": "sha512-AXUAT0nMEi7h1Is8HXGXof3eejl/GabZFKSj8Ym6kVRUSwrAb52EkAXywiCQYSHGQMRn7lvfY7vhPMjVc+Kybg==" + }, + "ieee754@1.2.1": { + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "immediate@3.0.6": { + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "immutable@4.3.7": { + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" + }, + "inherits@2.0.3": { + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "invariant@2.2.4": { + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": [ + "loose-envify" + ] + }, "is-core-module@2.16.1": { "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dependencies": [ "hasown" ] }, + "is-typedarray@1.0.0": { + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "isarray@1.0.0": { + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "js-tokens@4.0.0": { + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jszip@3.10.1": { + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": [ + "lie", + "pako", + "readable-stream@2.3.8", + "setimmediate" + ] + }, + "lie@3.3.0": { + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": [ + "immediate" + ] + }, "lightningcss-wasm@1.30.1": { "integrity": "sha512-KJTnKEn0REV6DoJzxG0m5EKVEFA1CVE1isDYpXjsuqWXwLKFPJtA9Z9BSzPZJwAZFN2KaUzy+IWGP59p5bm2sA==" }, @@ -238,6 +609,16 @@ "uc.micro" ] }, + "lodash@4.17.21": { + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "loose-envify@1.4.0": { + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": [ + "js-tokens" + ], + "bin": true + }, "markdown-it-attrs@4.3.1_markdown-it@14.1.0": { "integrity": "sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==", "dependencies": [ @@ -259,15 +640,83 @@ ], "bin": true }, + "math-intrinsics@1.1.0": { + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "mdurl@2.0.0": { "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" }, + "media-typer@0.3.0": { + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "media-typer@1.1.0": { + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" + }, + "milkdrop-eel-parser@0.0.4": { + "integrity": "sha512-4PsOdTMDB7GM3UFzqXQQXf8MBeoolOhsBLMlhug+IIMZ+yNkvqLbdqDbrueGZc8P8tLRJP8pbAxna1yjFr06HQ==" + }, + "milkdrop-preset-converter-aws@0.1.6": { + "integrity": "sha512-nr89LRZYgdrDn17vGQCvUK/LM9d90mywElL7zlzXBTgkxWAs/Kamn1Yl9676ugt4L4BAGo6PTEipIqeYXFSM7g==", + "dependencies": [ + "babel-runtime", + "glsl-optimizer-js", + "milkdrop-eel-parser", + "milkdrop-preset-utils" + ] + }, + "milkdrop-preset-utils@0.1.0": { + "integrity": "sha512-yK5y03SN8INC+ssLLYGGsaAHgNxXEUK6PQVV44rg9OAA27F2aPM0tA5uGsDdASH9sgPaAaRVMV5NoEvEkh66Sw==", + "dependencies": [ + "babel-runtime", + "lodash" + ] + }, "morphdom@2.7.7": { "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==" }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "multiformats@13.4.1": { "integrity": "sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==" }, + "music-metadata-browser@0.6.6": { + "integrity": "sha512-14KFz4HR6rM6RATcLtJoBDRbehU/dKdVzElCdeI8CjP7Un2HtSf0WiT7f7Lz+XNkcBMZUjthmC6Wy4+NNayCRw==", + "dependencies": [ + "assert", + "buffer", + "debug", + "music-metadata@3.8.0", + "readable-stream@3.6.2", + "remove", + "typedarray-to-buffer" + ], + "deprecated": true + }, + "music-metadata@11.9.0": { + "integrity": "sha512-J7VqD8FY6KRcm75Fzj86FPsckiD/EdvO5OS3P+JiMf/2krP3TcAseZYfkic6eFeJ0iBhhzcdxgfu8hLW95aXXw==", + "dependencies": [ + "@borewit/text-codec@0.2.0", + "@tokenizer/token", + "content-type", + "debug", + "file-type@21.0.0", + "media-typer@1.1.0", + "strtok3@10.3.4", + "token-types@6.1.1", + "uint8array-extras" + ] + }, + "music-metadata@3.8.0": { + "integrity": "sha512-aIADbp3uCS+ANr4nnFEHzTzMy81OT7PR7WBMW73SJ28Y7P94nnEugmTOj1ICP2JmxBBDlo+MeYVgiPnxVN69tg==", + "dependencies": [ + "debug", + "file-type@11.1.0", + "media-typer@0.3.0", + "strtok3@2.3.0", + "token-types@1.3.2" + ] + }, "nanoid@3.3.11": { "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "bin": true @@ -278,6 +727,23 @@ "normalize-range@0.1.2": { "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, + "object-keys@1.1.1": { + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign@4.1.7": { + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dependencies": [ + "call-bind", + "call-bound", + "define-properties", + "es-object-atoms", + "has-symbols", + "object-keys" + ] + }, + "pako@1.0.11": { + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "path-parse@1.0.7": { "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, @@ -307,6 +773,9 @@ "source-map-js" ] }, + "process-nextick-args@2.0.1": { + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "punycode.js@2.3.1": { "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" }, @@ -321,12 +790,90 @@ "split-on-first" ] }, + "react-dom@19.2.0_react@19.2.0": { + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "dependencies": [ + "react", + "scheduler" + ] + }, + "react-is@16.13.1": { + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-is@18.3.1": { + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "react-redux@8.1.3_react@19.2.0_react-dom@19.2.0__react@19.2.0_redux@5.0.1": { + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "dependencies": [ + "@babel/runtime", + "@types/hoist-non-react-statics", + "@types/use-sync-external-store", + "hoist-non-react-statics", + "react", + "react-dom", + "react-is@18.3.1", + "redux", + "use-sync-external-store" + ], + "optionalPeers": [ + "react-dom", + "redux" + ] + }, + "react@19.2.0": { + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==" + }, "read-cache@1.0.0": { "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dependencies": [ "pify" ] }, + "readable-stream@2.3.8": { + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": [ + "core-util-is", + "inherits@2.0.4", + "isarray", + "process-nextick-args", + "safe-buffer", + "string_decoder", + "util-deprecate" + ] + }, + "readable-stream@3.6.2": { + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": [ + "inherits@2.0.4", + "string_decoder", + "util-deprecate" + ] + }, + "redux-sentry-middleware@0.1.8": { + "integrity": "sha512-xubpYH9RgE31tZUESeRW5agwQa19Yd6Gy+4iO09raW/2TITPO5fhJdXpVwJfpGMbIYhEmHFqE2wD5Lnz7YtAeA==" + }, + "redux-thunk@2.4.2_redux@5.0.1": { + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "dependencies": [ + "redux" + ] + }, + "redux@5.0.1": { + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + }, + "regenerator-runtime@0.11.1": { + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "remove@0.1.5": { + "integrity": "sha512-AJMA9oWvJzdTjwIGwSQZsjGQiRx73YTmiOWmfCp1fpLa/D4n7jKcpoA+CZiVLJqKcEKUuh1Suq80c5wF+L/qVQ==", + "dependencies": [ + "seq" + ] + }, + "reselect@3.0.1": { + "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==" + }, "resolve@1.22.11": { "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dependencies": [ @@ -336,21 +883,113 @@ ], "bin": true }, + "riff-file@1.0.3": { + "integrity": "sha512-Vv8wwGr0BCks7VMI3Lv0houZee4DaHFjjTT0LMhMJKio2YmLncLeIVpK63ydSverngNk8XQPU3fbeP3bWgSIig==", + "dependencies": [ + "byte-data" + ] + }, + "safe-buffer@5.1.2": { + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "scheduler@0.27.0": { + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==" + }, + "seq@0.3.5": { + "integrity": "sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g==", + "dependencies": [ + "chainsaw", + "hashish" + ] + }, + "set-function-length@1.2.2": { + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": [ + "define-data-property", + "es-errors", + "function-bind", + "get-intrinsic", + "gopd", + "has-property-descriptors" + ] + }, + "setimmediate@1.0.5": { + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "source-map-js@1.2.1": { "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "split-on-first@3.0.0": { "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==" }, + "string_decoder@1.1.1": { + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": [ + "safe-buffer" + ] + }, + "strtok3@10.3.4": { + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "dependencies": [ + "@tokenizer/token" + ] + }, + "strtok3@2.3.0": { + "integrity": "sha512-AA67/1atBh7X0fUTDevjW89by2ZkY9RZAnkwusx5Yc1COYf0ruUbpYOOIs03SnRA1CF9K3+BtRXKOEtKhAXVaQ==", + "dependencies": [ + "debug", + "then-read-stream", + "token-types@1.3.2" + ] + }, "subsonic-api@3.2.0": { "integrity": "sha512-BADBQ2hONdLb3agCiSDzNzTIFLWJAuxJTUJvC2zDFvXUVfnK3yy7r8xFu3NkrQl8p5UVI7q8Qfm62N1lFxWbww==" }, "supports-preserve-symlinks-flag@1.0.0": { "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "then-read-stream@1.5.1": { + "integrity": "sha512-I+iiemYWhp1ysJQEioqpEICgvHlqHS5WrQGZkboFLs7Jm350Kvq4cN3qRCzHpETUuq5+NsdrdWEg6M0NFxtwtQ==", + "deprecated": true + }, + "throttle-debounce@5.0.2": { + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==" + }, + "tinyqueue@1.2.3": { + "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" + }, + "token-types@1.3.2": { + "integrity": "sha512-LemYprKRfZPUiwVEMIL8fIP/cvZBpMds1PklsyoQyLZdKk7SQlldNGzw4TTrg2MnWLGSkMM6gUa1EW0h1d72fg==", + "dependencies": [ + "ieee754" + ] + }, + "token-types@6.1.1": { + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", + "dependencies": [ + "@borewit/text-codec@0.1.1", + "@tokenizer/token", + "ieee754" + ] + }, + "traverse@0.3.9": { + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" + }, + "tslib@1.14.1": { + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "typedarray-to-buffer@3.1.5": { + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": [ + "is-typedarray" + ] + }, "uc.micro@2.1.0": { "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, + "uint8array-extras@1.5.0": { + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==" + }, "uint8arrays@5.1.0": { "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", "dependencies": [ @@ -372,6 +1011,55 @@ "punycode" ] }, + "use-sync-external-store@1.6.0_react@19.2.0": { + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "dependencies": [ + "react" + ] + }, + "utf8-buffer@1.0.0": { + "integrity": "sha512-ueuhzvWnp5JU5CiGSY4WdKbiN/PO2AZ/lpeLiz2l38qwdLy/cW40XobgyuIWucNyum0B33bVB0owjFCeGBSLqg==" + }, + "util-deprecate@1.0.2": { + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "util@0.10.4": { + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": [ + "inherits@2.0.3" + ] + }, + "webamp@2.2.0_redux@5.0.1_react@19.2.0_react-dom@19.2.0__react@19.2.0": { + "integrity": "sha512-XzKr65Z4d+4rxA1J//aPkZRqvPS0aqAxpryNKaWt/EDQ4uCJadxjr966QElagH+iZxWMCDekW5dV/dTx5b+WPQ==", + "dependencies": [ + "@redux-devtools/extension", + "@sentry/browser", + "ani-cursor", + "butterchurn", + "butterchurn-presets", + "classnames", + "fscreen", + "invariant", + "jszip", + "lodash", + "milkdrop-preset-converter-aws", + "music-metadata@11.9.0", + "music-metadata-browser", + "react", + "react-dom", + "react-redux", + "redux", + "redux-sentry-middleware", + "redux-thunk", + "reselect", + "strtok3@10.3.4", + "tinyqueue", + "winamp-eqf" + ] + }, + "winamp-eqf@1.0.0": { + "integrity": "sha512-yUIb4+lTYBKP4L6nPXdDj1CQBXlJ+/PrNAkT1VbTAgeFjX8lPxAthsUE5NxQP4s8SO4YMJemsrErZ49Bh+/Veg==" + }, "xxh32@2.0.5": { "integrity": "sha512-glQIaPvLHV4xG2Sn0E4mZWY25JT34+XcG4e2c8OMIH2SXxVrm6MmJ8miCsqGBLtf+rn2YcaeS11vq/66vkXGUQ==" } @@ -693,19 +1381,24 @@ "workspace": { "dependencies": [ "jsr:@fry69/deep-diff@~0.1.10", + "jsr:@mary/ds-queue@~0.1.3", "jsr:@mys/m-rpc@~0.12.2", "jsr:@mys/worker-fn@^3.2.1", "jsr:@okikio/transferables@^1.0.2", "jsr:@orama/orama@^2.0.6", "jsr:@std/fs@^1.0.19", "jsr:@std/path@^1.1.2", + "jsr:@vicary/debounce-microtask@~0.1.8", + "npm:98.css@~0.1.21", "npm:alien-signals@3", "npm:idb-keyval@^6.2.2", "npm:morphdom@^2.7.7", "npm:query-string@^9.3.1", "npm:subsonic-api@^3.2.0", + "npm:throttle-debounce@^5.0.2", "npm:uint8arrays@^5.1.0", "npm:uri-js@^4.4.1", + "npm:webamp@^2.2.0", "npm:xxh32@^2.0.5" ] } diff --git a/src/common/signal.js b/src/common/signal.js index c0991ec49..46704a272 100644 --- a/src/common/signal.js +++ b/src/common/signal.js @@ -1,5 +1,10 @@ import deepDiff from "@fry69/deep-diff"; -import { setActiveSub, signal as alienSignal } from "alien-signals"; +import { + endBatch, + setActiveSub, + signal as alienSignal, + startBatch, +} from "alien-signals"; export * from "alien-signals"; @@ -7,6 +12,18 @@ export * from "alien-signals"; * @import {Signal, SignalReader, SignalWriter} from "./signal.d.ts" */ +/** + * @param {function(): void} fn + */ +export const batch = (fn) => { + startBatch(); + try { + fn(); + } finally { + endBatch(); + } +}; + /** * @template T * @param {T} initialValue diff --git a/src/common/worker.js b/src/common/worker.js index 1c0f84ad7..ed995b33c 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -1,7 +1,9 @@ +import Queue from "@mary/ds-queue"; import { defineWorkerFn, useWorkerFn } from "@mys/worker-fn"; import { getTransferables } from "@okikio/transferables"; - +import { debounceMicrotask } from "@vicary/debounce-microtask"; import { xxh32 } from "xxh32"; +import { batch } from "./signal.js"; /** * @import {MRpcCallOptions, WorkerGlobalScope} from "@mys/m-rpc"; @@ -57,10 +59,10 @@ export function ostiary( export function announce( name, args, - context = /** @type {WorkerGlobalScope} */ (globalThis), + context, ) { - const transferables = getTransferables(args); - context.postMessage(constructMsg(name, args), { transfer: transferables }); + outgoing.enqueue(announcement(name, args)); + flushOutgoingAnnouncements(context); } /** @@ -74,18 +76,12 @@ export function listen( fn, context = /** @type {WorkerGlobalScope} */ (globalThis), ) { - context.addEventListener( - "message", - /** @param {any} event */ (event) => { - const announcement = /** @type {Announcement} */ (event.data); - const { ns, type } = announcement; - - if (announcement.name !== name) return; - if (ns !== ANNOUNCEMENT || type !== ANNOUNCEMENT) return; + if (!context.incoming) { + context.addEventListener("message", incomingAnnouncementsHandler(context)); + context.incoming = {}; + } - fn(announcement.args); - }, - ); + context.incoming[name] = debounceMicrotask(fn, { updateArguments: true }); } //////////////////////////////////////////// @@ -136,7 +132,7 @@ const ANNOUNCEMENT = "announcement"; * @param {T} args * @returns {Announcement} */ -function constructMsg(name, args) { +function announcement(name, args) { return { ns: ANNOUNCEMENT, name, @@ -146,3 +142,75 @@ function constructMsg(name, args) { args, }; } + +/** + * Process incoming announcements. + */ +const flushIncomingAnnouncements = debounceMicrotask( + /** + * @param {MessagePort | Worker | WorkerGlobalScope} [context] Uses `globalThis` by default. + */ + (context = /** @type {WorkerGlobalScope} */ (globalThis)) => { + /** @type {Announcement[]} */ + const arr = []; + + for (const a of incoming.drain()) { + arr.push(a); + } + + batch(() => { + arr.forEach((announcement) => { + context.incoming[announcement.name]?.(announcement.args); + }); + }); + }, +); + +/** + * Process outgoing announcements. + */ +const flushOutgoingAnnouncements = debounceMicrotask( + /** + * @param {MessagePort | Worker | WorkerGlobalScope} [context] Uses `globalThis` by default. + */ + (context = /** @type {WorkerGlobalScope} */ (globalThis)) => { + /** @type {Announcement[]} */ + const arr = []; + + for (const a of outgoing.drain()) { + arr.push(a); + } + + const transferables = getTransferables(arr); + context.postMessage(arr, { transfer: transferables }); + }, +); + +/** + * @type {Queue>} + */ +const incoming = new Queue(); + +/** + * @param {MessagePort | Worker | WorkerGlobalScope} context + */ +function incomingAnnouncementsHandler(context) { + /** @param {any} event */ + return (event) => { + const arr = /** @type {Announcement[]} */ (event.data); + + if (Array.isArray(arr)) { + arr.forEach((announcement) => { + const { ns, type } = announcement; + if (ns !== ANNOUNCEMENT || type !== ANNOUNCEMENT) return; + incoming.enqueue(announcement); + flushIncomingAnnouncements(context); + }); + } + }; +} + +/** + * @type {Queue>} + */ +const outgoing = new Queue(); diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index f1e085e5c..253232fa2 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -3,7 +3,7 @@ import { signal } from "@common/signal.js"; import { listen, use } from "@common/worker.js"; /** - * @import {Actions, ActionsProxied, Item} from "./types.d.ts" + * @import {ActionsProxied, Item} from "./types.d.ts" */ //////////////////////////////////////////// @@ -11,7 +11,7 @@ import { listen, use } from "@common/worker.js"; //////////////////////////////////////////// /** - * @implements {Actions} + * @implements {ActionsProxied} */ class QueueEngine extends DiffuseElement { constructor() { diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 36a2ec166..e42ff7d0d 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -1,5 +1,5 @@ import { announce, define, ostiary } from "@common/worker.js"; -import { effect, signal } from "@common/signal.js"; +import { batch, effect, signal } from "@common/signal.js"; import { arrayShuffle } from "@common/index.js"; /** @@ -40,23 +40,16 @@ export function pool(tracks) { // // What about past queue items? - $future.value = fill([]); - // Automatically insert track if there isn't any - if (!$now.value) return shift(); + if (!$now.value) _shift(fill([])); + else $future.value = fill([]); } /** * @type {Actions['shift']} */ export function shift() { - const n = $now.value; - const f = $future.value; - - $now.value = f[0] ?? null; - - if (n) $past.value = [...$past.value, n]; - $future.value = fill(f.slice(1)); + return _shift(); } /** @@ -132,3 +125,15 @@ function fill(future) { return [...future, ...poolSelection]; } + +/** + * @param {Item[]} [future] + */ +export function _shift(future) { + const n = $now.value; + const f = future ?? $future.value; + + if (n) $past.value = [...$past.value, n]; + $future.value = fill(f.slice(1)); + $now.value = f[0] ?? null; +} diff --git a/src/component/orchestrator/queue-tracks/element.js b/src/component/orchestrator/queue-tracks/element.js index f847b2416..54766579f 100644 --- a/src/component/orchestrator/queue-tracks/element.js +++ b/src/component/orchestrator/queue-tracks/element.js @@ -1,4 +1,5 @@ import { DiffuseElement, query } from "@common/element.js"; +import { untracked } from "@common/signal.js"; /** * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" @@ -41,7 +42,7 @@ class QueueTracksOrchestrator extends DiffuseElement { // Watch tracks collection this.effect(() => { const tracks = this.output.tracks.collection(); - this.poolAvailable(tracks); + untracked(() => this.poolAvailable(tracks)); }); } diff --git a/src/styles/theme/webamp/index.css b/src/styles/theme/webamp/index.css index 2f36b4d42..8b620638d 100644 --- a/src/styles/theme/webamp/index.css +++ b/src/styles/theme/webamp/index.css @@ -1,13 +1,13 @@ @font-face { font-family: "Pixelated MS Sans Serif"; - src: url("/node_modules/98.css/fonts/converted/ms_sans_serif.woff2") format("woff2"); + src: url("/fonts/ms_sans_serif.woff2") format("woff2"); font-weight: normal; font-style: normal; } @font-face { font-family: "Pixelated MS Sans Serif"; - src: url("/node_modules/98.css/fonts/converted/ms_sans_serif_bold.woff2") format("woff2"); + src: url("/fonts/ms_sans_serif_bold.woff2") format("woff2"); font-weight: 700; font-style: normal; } diff --git a/src/theme/webamp/index.js b/src/theme/webamp/index.js new file mode 100644 index 000000000..c8664ccb7 --- /dev/null +++ b/src/theme/webamp/index.js @@ -0,0 +1,149 @@ +import Webamp from "webamp/lazy"; +import { throttle } from "throttle-debounce"; + +// import "@component/orchestrator/process-tracks/element.js"; +import "@component/orchestrator/queue-tracks/element.js"; +import "@component/output/indexed-db/element.js"; +import "@component/processor/metadata/element.js"; + +import * as Input from "@component/input/opensubsonic/element.js"; +import * as Queue from "@component/engine/queue/element.js"; + +import { component } from "@common/element.js"; +import { effect, signal, untracked } from "@common/signal.js"; +import deepDiff from "@fry69/deep-diff"; +import { debounceMicrotask } from "@vicary/debounce-microtask"; + +/** + * @import {Diff} from "@fry69/deep-diff" + * @import {URLTrack} from "webamp" + * + * @import {Track} from "@component/core/types.d.ts" + * @import {Item} from "@component/engine/queue/types.d.ts" + */ + +const input = component(Input); +const queue = component(Queue); + +globalThis.queue = queue; + +//////////////////////////////////////////// +// ⚡ +//////////////////////////////////////////// + +/** @type {import("webamp/lazy").default} */ +const amp = new /** @type {any} */ (Webamp)({ + enableMediaSession: true, + initialTracks: [], + + /** */ + handleLoadListEvent: async () => { + // TODO + return [ + /* Array of Tracks */ + ]; + }, + + /** + * @param {any} tracks + */ + handleSaveListEvent: (tracks) => { + // TODO + }, +}); + +// Override +const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); + +/** + * @param {string} uri + * @param {boolean} autoPlay + */ +async function loadOverride(uri, autoPlay) { + const resp = await input.resolve({ method: "GET", uri }); + if (!resp) throw new Error("Failed to resolve URI"); + return await loadFromUrl(resp.url, autoPlay); +} + +amp.media.loadFromUrl = loadOverride.bind(amp.media); + +// Render +const ampNode = document.createElement("div"); +ampNode.style = + "height: 100vh; left: 0; position: absolute; top: 0; width: 100%; z-index: -1000;"; +document.body.appendChild(ampNode); +amp.renderWhenReady(ampNode); + +//////////////////////////////////////////// +// 🌊 +//////////////////////////////////////////// + +const $currTrack = signal(/** @type {null | number} */ (null)); +const $playlist = signal(/** @type {Item[]} */ ([])); + +/** + * Observe changes in Webamp's internal store. + */ +amp.store.subscribe(() => { + const state = amp.store.getState(); + $currTrack.value = state.playlist.currentTrack; +}); + +/** + * Whenever the queue changes update the playlist. + */ +effect(() => { + const now = queue.now(); + const past = queue.past(); + const future = queue.future(); + + const playlist = [ + ...past, + ...(now ? [now] : []), + ...future, + ]; + + const diff = deepDiff.diff($playlist.value, playlist, () => true); + + diff?.forEach((d) => { + // TODO: Handle case where an item is inserted into queue at a position that's not the end. + // console.log(d); + + if (d.kind !== "A") return; + if (d.item.kind === "N") { + const item = /** @type {Item} */ (/** @type {unknown} */ (d.item.rhs)); + if (!item) return; + + /** @type {URLTrack} */ + const urlTrack = { + url: item.uri, + metaData: { + title: item.tags?.title || "", + artist: item.tags?.artist || "", + album: item.tags?.album, + }, + duration: item.stats?.duration, + }; + + amp.appendTracks([urlTrack]); + } + }); + + if (!diff) return; + + $playlist.value = playlist; + + if (untracked($currTrack.get) === null) { + amp.setCurrentTrack(past.length); + } +}); + +/** + * Whenever Webamp's queue changes, + * reflect the change in our queue too. + */ +effect(() => { + if (($currTrack.value ?? 0) > untracked(queue.past).length) { + queue.shift(); + } +}); diff --git a/src/theme/webamp/index.vto b/src/theme/webamp/index.vto new file mode 100644 index 000000000..b5e75be9b --- /dev/null +++ b/src/theme/webamp/index.vto @@ -0,0 +1,67 @@ + + + + + + Diffuse + + + + + +
    +
    + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + From 86e695015c66785ff4cc0ab3ca0329a9ab573a63 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 26 Oct 2025 16:48:24 +0100 Subject: [PATCH 053/244] =?UTF-8?q?chore:=20=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/theme/webamp/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/theme/webamp/index.js b/src/theme/webamp/index.js index c8664ccb7..f5fa9c621 100644 --- a/src/theme/webamp/index.js +++ b/src/theme/webamp/index.js @@ -1,7 +1,7 @@ import Webamp from "webamp/lazy"; -import { throttle } from "throttle-debounce"; +import deepDiff from "@fry69/deep-diff"; -// import "@component/orchestrator/process-tracks/element.js"; +import "@component/orchestrator/process-tracks/element.js"; import "@component/orchestrator/queue-tracks/element.js"; import "@component/output/indexed-db/element.js"; import "@component/processor/metadata/element.js"; @@ -11,8 +11,6 @@ import * as Queue from "@component/engine/queue/element.js"; import { component } from "@common/element.js"; import { effect, signal, untracked } from "@common/signal.js"; -import deepDiff from "@fry69/deep-diff"; -import { debounceMicrotask } from "@vicary/debounce-microtask"; /** * @import {Diff} from "@fry69/deep-diff" From 6d32d2f60d0d267b1c6656a2751842624bcb5cc2 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 26 Oct 2025 16:48:43 +0100 Subject: [PATCH 054/244] =?UTF-8?q?chore:=20=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/theme/webamp/index.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/theme/webamp/index.js b/src/theme/webamp/index.js index f5fa9c621..11c7c366a 100644 --- a/src/theme/webamp/index.js +++ b/src/theme/webamp/index.js @@ -13,10 +13,8 @@ import { component } from "@common/element.js"; import { effect, signal, untracked } from "@common/signal.js"; /** - * @import {Diff} from "@fry69/deep-diff" * @import {URLTrack} from "webamp" * - * @import {Track} from "@component/core/types.d.ts" * @import {Item} from "@component/engine/queue/types.d.ts" */ From 943c5c129082fd1d9ed59810fc89f6cf77316f82 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 26 Oct 2025 17:05:41 +0100 Subject: [PATCH 055/244] feat: allow search processor to be shared --- src/component/engine/audio/element.js | 5 +---- src/component/engine/queue/element.js | 5 +---- src/component/processor/search/element.js | 16 +++++++++++++--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/component/engine/audio/element.js b/src/component/engine/audio/element.js index 7e33f8d75..9ca98ef58 100644 --- a/src/component/engine/audio/element.js +++ b/src/component/engine/audio/element.js @@ -23,11 +23,8 @@ class AudioEngine extends BroadcastableDiffuseElement { constructor() { super(); - // Is shared? - const isShared = this.hasAttribute("group"); - // Setup leader election if shared - if (isShared) { + if (this.hasAttribute("group")) { const fn = this.broadcast(`diffuse/engine/audio/${this.group}`); this.pause = fn("pause", this.pause).leaderOnly; diff --git a/src/component/engine/queue/element.js b/src/component/engine/queue/element.js index 253232fa2..63642dd1f 100644 --- a/src/component/engine/queue/element.js +++ b/src/component/engine/queue/element.js @@ -17,16 +17,13 @@ class QueueEngine extends DiffuseElement { constructor() { super(); - // Is shared? - const isShared = this.hasAttribute("group"); - // Setup worker const name = `diffuse/engine/queue/${this.group}`; const url = "/component/engine/queue/worker.js"; let port; - if (isShared) { + if (this.hasAttribute("group")) { const worker = new SharedWorker(url, { name, type: "module" }); port = worker.port; port.start(); diff --git a/src/component/processor/search/element.js b/src/component/processor/search/element.js index f873fe281..c3e9116a4 100644 --- a/src/component/processor/search/element.js +++ b/src/component/processor/search/element.js @@ -19,11 +19,21 @@ class SearchProcessor extends DiffuseElement { // Setup worker const name = `diffuse/processor/search/${this.group}`; const url = "/component/processor/search/worker.js"; - const worker = new Worker(url, { name, type: "module" }); + + let port; + + if (this.hasAttribute("group")) { + const worker = new SharedWorker(url, { name, type: "module" }); + port = worker.port; + port.start(); + } else { + const worker = new Worker(url, { name, type: "module" }); + port = worker; + } // Worker proxy - this.search = use("search", worker); - this.supply = use("supply", worker); + this.search = use("search", port); + this.supply = use("supply", port); } } From d4d463c44613ce95d4e4ccc937f06668fa867778 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 27 Oct 2025 19:26:37 +0100 Subject: [PATCH 056/244] feat: windows 98! --- _config.ts | 36 ++++--- .../constituent/blur/browser-list/element.js | 5 +- src/{styles/page => }/index.css | 4 +- src/index.vto | 2 +- src/styles/icons/iconoir.css | 1 - src/styles/icons/phosphor.css | 1 - src/{styles => }/theme/blur/index.css | 4 +- src/theme/blur/index.vto | 2 +- src/{styles => }/theme/blur/variables.css | 0 src/theme/webamp/README.md | 1 + src/theme/webamp/browser/element.js | 1 + src/{styles => }/theme/webamp/index.css | 15 ++- src/theme/webamp/index.js | 10 +- src/theme/webamp/index.vto | 28 ++++-- src/theme/webamp/window-manager/element.js | 98 ++++++++++++++++++ src/theme/webamp/window/element.js | 99 +++++++++++++++++++ 16 files changed, 267 insertions(+), 40 deletions(-) rename src/{styles/page => }/index.css (93%) delete mode 100644 src/styles/icons/iconoir.css delete mode 100644 src/styles/icons/phosphor.css rename src/{styles => }/theme/blur/index.css (92%) rename src/{styles => }/theme/blur/variables.css (100%) create mode 100644 src/theme/webamp/README.md create mode 100644 src/theme/webamp/browser/element.js rename src/{styles => }/theme/webamp/index.css (84%) create mode 100644 src/theme/webamp/window-manager/element.js create mode 100644 src/theme/webamp/window/element.js diff --git a/_config.ts b/_config.ts index 5e26d9bdc..eeee344f6 100644 --- a/_config.ts +++ b/_config.ts @@ -30,21 +30,38 @@ site.add([".js"]); // CSS -site.use(postcss({ includes: false })); +site.use(postcss()); site.add([".css"]); +site.remoteFile( + "styles/vendor/98.css", + import.meta.resolve("./node_modules/98.css/dist/98.css"), +); + // BINARY ASSETS site.add("/favicons"); site.add("/fonts"); site.add("/images"); +site.remoteFile( + "fonts/ms_sans_serif.woff2", + import.meta.resolve( + "./node_modules/98.css/fonts/converted/ms_sans_serif.woff2", + ), +); + +site.remoteFile( + "fonts/ms_sans_serif_bold.woff2", + import.meta.resolve( + "./node_modules/98.css/fonts/converted/ms_sans_serif_bold.woff2", + ), +); + // MISC site.use(sourceMaps()); -// SCRIPTS - site.script("copy-type-defs", () => { for ( const f of walkSync( @@ -59,19 +76,6 @@ site.script("copy-type-defs", () => { } }); -site.script("copy-win98-fonts", () => { - Deno.copyFileSync( - "./node_modules/98.css/fonts/converted/ms_sans_serif.woff2", - "./_site/fonts/ms_sans_serif.woff2", - ); - - Deno.copyFileSync( - "./node_modules/98.css/fonts/converted/ms_sans_serif_bold.woff2", - "./_site/fonts/ms_sans_serif_bold.woff2", - ); -}); - site.addEventListener("afterBuild", () => { // site.run("copy-type-defs"); - site.run("copy-win98-fonts"); }); diff --git a/src/component/constituent/blur/browser-list/element.js b/src/component/constituent/blur/browser-list/element.js index 924148f7d..5f283822e 100644 --- a/src/component/constituent/blur/browser-list/element.js +++ b/src/component/constituent/blur/browser-list/element.js @@ -58,4 +58,7 @@ export default BrowserList; // REGISTER //////////////////////////////////////////// -customElements.define("dcb-browser-list", BrowserList); +export const CLASS = BrowserList; +export const NAME = "dcb-browser-list"; + +customElements.define(NAME, BrowserList); diff --git a/src/styles/page/index.css b/src/index.css similarity index 93% rename from src/styles/page/index.css rename to src/index.css index 19b05a7bc..02c5ab555 100644 --- a/src/styles/page/index.css +++ b/src/index.css @@ -1,5 +1,5 @@ -@import "../diffuse/colors.css"; -@import "../diffuse/fonts.css"; +@import "./styles/diffuse/colors.css"; +@import "./styles/diffuse/fonts.css"; body { background-color: var(--bg-color); diff --git a/src/index.vto b/src/index.vto index e2360e12c..81f97907e 100644 --- a/src/index.vto +++ b/src/index.vto @@ -12,7 +12,7 @@ engines: title: "Queue" --- - +

    diff --git a/src/styles/icons/iconoir.css b/src/styles/icons/iconoir.css deleted file mode 100644 index 1c68c5bd5..000000000 --- a/src/styles/icons/iconoir.css +++ /dev/null @@ -1 +0,0 @@ -@import "iconoir/css/iconoir.css"; diff --git a/src/styles/icons/phosphor.css b/src/styles/icons/phosphor.css deleted file mode 100644 index 5661750d2..000000000 --- a/src/styles/icons/phosphor.css +++ /dev/null @@ -1 +0,0 @@ -@import "@phosphor-icons/fill/style.css"; diff --git a/src/styles/theme/blur/index.css b/src/theme/blur/index.css similarity index 92% rename from src/styles/theme/blur/index.css rename to src/theme/blur/index.css index 4c4b3117f..2ff243c1e 100644 --- a/src/styles/theme/blur/index.css +++ b/src/theme/blur/index.css @@ -1,6 +1,6 @@ @import "./variables.css"; -@import "../../diffuse/colors.css"; -@import "../../diffuse/fonts.css"; +@import "../../styles/diffuse/colors.css"; +@import "../../styles/diffuse/fonts.css"; /*********************************** * Base diff --git a/src/theme/blur/index.vto b/src/theme/blur/index.vto index 5a6e44b18..d29fc4646 100644 --- a/src/theme/blur/index.vto +++ b/src/theme/blur/index.vto @@ -1,7 +1,7 @@ - + diff --git a/src/styles/theme/blur/variables.css b/src/theme/blur/variables.css similarity index 100% rename from src/styles/theme/blur/variables.css rename to src/theme/blur/variables.css diff --git a/src/theme/webamp/README.md b/src/theme/webamp/README.md new file mode 100644 index 000000000..991459108 --- /dev/null +++ b/src/theme/webamp/README.md @@ -0,0 +1 @@ +Components must have [98.css](https://jdan.github.io/98.css/) loaded. diff --git a/src/theme/webamp/browser/element.js b/src/theme/webamp/browser/element.js new file mode 100644 index 000000000..35adb5fd2 --- /dev/null +++ b/src/theme/webamp/browser/element.js @@ -0,0 +1 @@ +import { DiffuseElement } from "@common/element.js"; diff --git a/src/styles/theme/webamp/index.css b/src/theme/webamp/index.css similarity index 84% rename from src/styles/theme/webamp/index.css rename to src/theme/webamp/index.css index 8b620638d..bf6fae015 100644 --- a/src/styles/theme/webamp/index.css +++ b/src/theme/webamp/index.css @@ -1,3 +1,7 @@ +/*********************************** + * Fonts + ***********************************/ + @font-face { font-family: "Pixelated MS Sans Serif"; src: url("/fonts/ms_sans_serif.woff2") format("woff2"); @@ -12,6 +16,10 @@ font-style: normal; } +/*********************************** + * 🪟 + ***********************************/ + body { background: #3a6ea5; color: white; @@ -20,11 +28,8 @@ body { margin: 12px; } -main { -} - -iframe { - display: none; +#webamp { + isolation: isolate; } /*********************************** diff --git a/src/theme/webamp/index.js b/src/theme/webamp/index.js index 11c7c366a..8a6c1fd0e 100644 --- a/src/theme/webamp/index.js +++ b/src/theme/webamp/index.js @@ -1,7 +1,7 @@ import Webamp from "webamp/lazy"; import deepDiff from "@fry69/deep-diff"; -import "@component/orchestrator/process-tracks/element.js"; +// import "@component/orchestrator/process-tracks/element.js"; import "@component/orchestrator/queue-tracks/element.js"; import "@component/output/indexed-db/element.js"; import "@component/processor/metadata/element.js"; @@ -12,6 +12,9 @@ import * as Queue from "@component/engine/queue/element.js"; import { component } from "@common/element.js"; import { effect, signal, untracked } from "@common/signal.js"; +import "./window/element.js"; +import "./window-manager/element.js"; + /** * @import {URLTrack} from "webamp" * @@ -48,7 +51,7 @@ const amp = new /** @type {any} */ (Webamp)({ }, }); -// Override +// Override track loader const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); /** @@ -63,6 +66,9 @@ async function loadOverride(uri, autoPlay) { amp.media.loadFromUrl = loadOverride.bind(amp.media); +// TODO: Handle minimize +amp.onMinimize(() => {}); + // Render const ampNode = document.createElement("div"); ampNode.style = diff --git a/src/theme/webamp/index.vto b/src/theme/webamp/index.vto index b5e75be9b..989ca24ca 100644 --- a/src/theme/webamp/index.vto +++ b/src/theme/webamp/index.vto @@ -5,7 +5,7 @@ Diffuse - +
    -
    +
    - + - + -
    + +
    + + + Window +

    👀

    +
    + + Window +

    👀

    +
    +
    +
    - + diff --git a/src/theme/webamp/window-manager/element.js b/src/theme/webamp/window-manager/element.js new file mode 100644 index 000000000..4a0c284a7 --- /dev/null +++ b/src/theme/webamp/window-manager/element.js @@ -0,0 +1,98 @@ +import { DiffuseElement } from "@common/element.js"; +import { signal } from "@common/signal.js"; + +/** + * @import {RenderArg} from "@common/element.d.ts" + * @import WindowElement from "../window/element.js"; + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class WindowManager extends DiffuseElement { + constructor() { + super(); + this.attachShadow({ mode: "open" }); + } + + // SIGNALS + + $activeWindow = signal(/** @type {string | null} */ (null)); + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + this.addEventListener("click", this.setActiveWindow); + + this.effect(() => { + const activeId = this.$activeWindow.value; + this.setWindowStatuses(activeId); + }); + } + + /** + * @override + */ + disconnectedCallback() { + super.disconnectedCallback(); + this.removeEventListener("click", this.setActiveWindow); + } + + /** + * @param {string | null} activeId + */ + async setWindowStatuses(activeId) { + await customElements.whenDefined("dtw-window"); + + this.querySelectorAll("dtw-window").forEach( + (window) => { + const win = /** @type {WindowElement} */ (window); + + if (activeId && window.id === activeId) { + win.activate(); + } else { + win.deactivate(); + } + }, + ); + } + + /** + * @param {Event} event + */ + setActiveWindow(event) { + if (event.target instanceof HTMLElement) { + const window = event.target?.closest("dtw-window"); + if (!window) return; + if (window.id) this.$activeWindow.value = window.id; + } + } + + // RENDER + + /** + * @param {RenderArg} _ + */ + render({ html }) { + return html` + + `; + } +} + +export default WindowManager; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = WindowManager; +export const NAME = "dtw-window-manager"; + +customElements.define(NAME, WindowManager); diff --git a/src/theme/webamp/window/element.js b/src/theme/webamp/window/element.js new file mode 100644 index 000000000..b1b864f41 --- /dev/null +++ b/src/theme/webamp/window/element.js @@ -0,0 +1,99 @@ +import { DiffuseElement } from "@common/element.js"; + +/** + * @import {RenderArg} from "@common/element.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class WindowElement extends DiffuseElement { + constructor() { + super(); + + this.id = this.id?.length ? this.id : crypto.randomUUID(); + this.attachShadow({ mode: "open" }); + } + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + const x = Math.floor( + Math.random() * (document.body.clientWidth - 300), + ); + + this.style.position = "relative"; + this.style.left = `${x}px`; + } + + /** + * @override + */ + disconnectedCallback() { + super.disconnectedCallback(); + } + + // ACTIONS + + activate() { + this.shadowRoot?.querySelector(".title-bar")?.classList.remove("inactive"); + } + + deactivate() { + this.shadowRoot?.querySelector(".title-bar")?.classList.add("inactive"); + } + + // RENDER + + /** + * @param {RenderArg} _ + */ + render({ html }) { + return html` + + + + + +
    +
    +
    + +
    +
    + + + +
    +
    +
    + +
    +
    +
    + `; + } +} + +export default WindowElement; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = WindowElement; +export const NAME = "dtw-window"; + +customElements.define(NAME, WindowElement); From 87e6493aee14bd257d7a65d26430737f7e9ef530 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 28 Oct 2025 15:58:25 +0100 Subject: [PATCH 057/244] feat: proper window management in webamp theme --- deno.jsonc | 5 +- deno.lock | 11 +++ src/common/element.js | 38 ++------- src/theme/webamp/index.css | 68 ++++++++++++++++ src/theme/webamp/index.js | 57 ++++--------- src/theme/webamp/index.vto | 1 + src/theme/webamp/webamp.js | 62 ++++++++++++++ src/theme/webamp/window-manager/element.js | 95 ++++++++++++++++++++-- src/theme/webamp/window/element.js | 57 +++++++++++-- 9 files changed, 305 insertions(+), 89 deletions(-) create mode 100644 src/theme/webamp/webamp.js diff --git a/deno.jsonc b/deno.jsonc index 7aa0b82b0..6e917063a 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -13,13 +13,13 @@ "@vicary/debounce-microtask": "jsr:@vicary/debounce-microtask@^0.1.8", "alien-signals": "npm:alien-signals@^3.0.0", "idb-keyval": "npm:idb-keyval@^6.2.2", + "lit-html": "npm:lit-html@^3.3.1", "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", "query-string": "npm:query-string@^9.3.1", "subsonic-api": "npm:subsonic-api@^3.2.0", "throttle-debounce": "npm:throttle-debounce@^5.0.2", "uint8arrays": "npm:uint8arrays@^5.1.0", "uri-js": "npm:uri-js@^4.4.1", - "webamp": "npm:webamp@^2.2.0", "xxh32": "npm:xxh32@^2.0.5", // music-metadata @@ -28,6 +28,9 @@ "@tokenizer/range": "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js", "music-metadata": "https://esm.sh/music-metadata@11.9.0/lib/core.js", + // Webamp + "webamp": "npm:webamp@^2.2.0", + // Paths "@common/": "./src/common/", "@component/": "./src/component/", diff --git a/deno.lock b/deno.lock index 86eaf5134..09fa46988 100644 --- a/deno.lock +++ b/deno.lock @@ -41,6 +41,7 @@ "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", "npm:idb-keyval@^6.2.2": "6.2.2", "npm:lightningcss-wasm@1.30.1": "1.30.1", + "npm:lit-html@^3.3.1": "3.3.1", "npm:markdown-it-attrs@4.3.1": "4.3.1_markdown-it@14.1.0", "npm:markdown-it-deflist@3.0.0": "3.0.0", "npm:markdown-it@14.1.0": "14.1.0", @@ -259,6 +260,9 @@ "csstype" ] }, + "@types/trusted-types@2.0.7": { + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, "@types/use-sync-external-store@0.0.3": { "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, @@ -609,6 +613,12 @@ "uc.micro" ] }, + "lit-html@3.3.1": { + "integrity": "sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==", + "dependencies": [ + "@types/trusted-types" + ] + }, "lodash@4.17.21": { "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, @@ -1392,6 +1402,7 @@ "npm:98.css@~0.1.21", "npm:alien-signals@3", "npm:idb-keyval@^6.2.2", + "npm:lit-html@^3.3.1", "npm:morphdom@^2.7.7", "npm:query-string@^9.3.1", "npm:subsonic-api@^3.2.0", diff --git a/src/common/element.js b/src/common/element.js index cdd76aee5..8c46d7919 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,11 +1,11 @@ -import morphdom from "morphdom"; +import { html, render } from "lit-html"; import { effect, signal } from "@common/signal.js"; import { define, use } from "@common/worker.js"; /** * @import {BroadcastingStatus, FnParams, FnReturn, HtmlTagFunction, MorphOptions} from "./element.d.ts" - * @import {Signal, SignalReader} from "./signal.d.ts" + * @import {Signal} from "./signal.d.ts" */ /** @@ -21,9 +21,7 @@ export class DiffuseElement extends HTMLElement { constructor() { super(); - this.group = this.getAttribute("group") || crypto.randomUUID(); - this.morphedRender = this.morphedRender.bind(this); } /** @@ -32,7 +30,7 @@ export class DiffuseElement extends HTMLElement { * @param {string} newValue */ attributeChangedCallback(_name, oldValue, newValue) { - if (oldValue !== newValue) this.morphedRender(); + if (oldValue !== newValue) this.#render(); } /** @@ -45,44 +43,22 @@ export class DiffuseElement extends HTMLElement { this.#disposables.push(effect(fn)); } - /** - * @type {HtmlTagFunction} - */ - html(strings, ...values) { - return String.raw({ raw: strings }, ...values); - } - /** * Avoid replacing the whole subtree, * morph the existing DOM into the new given tree. */ - morphedRender() { + #render() { if (!("render" in this && typeof this.render === "function")) return; const tmp = this.render({ - html: this.html, + html: html, state: "state" in this ? this.state : undefined, }); - const updated = document.createElement("div"); - updated.innerHTML = tmp.trim(); const root = this.shadowRoot ? this.shadowRoot : this; - - morphdom( - root, - updated, - { - ...this.morphOptions, - childrenOnly: true, - }, - ); + render(tmp, root); } - // MORPH STUFF - - /** @type {MorphOptions} */ - morphOptions = {}; - // LIFECYCLE connectedCallback() { @@ -90,7 +66,7 @@ export class DiffuseElement extends HTMLElement { this.effect(() => { if (!("render" in this && typeof this.render === "function")) return; - this.morphedRender(); + this.#render(); }); } diff --git a/src/theme/webamp/index.css b/src/theme/webamp/index.css index bf6fae015..ff4031b84 100644 --- a/src/theme/webamp/index.css +++ b/src/theme/webamp/index.css @@ -26,12 +26,18 @@ body { font-family: "Pixelated MS Sans Serif", sans-serif; font-size: 12px; margin: 12px; + overflow: hidden; } #webamp { isolation: isolate; } +main > section { + inset: 0; + position: absolute; +} + /*********************************** * Desktop ***********************************/ @@ -39,6 +45,7 @@ body { display: flex; flex-wrap: wrap; gap: 12px; + inset: 12px; } .desktop__item { @@ -73,3 +80,64 @@ body { } } } + +/*********************************** + * Windows + ***********************************/ + +.windows dtw-window { + left: 12px; + position: absolute; + top: 12px; + z-index: 999; + + /* Waiting on https://developer.mozilla.org/en-US/docs/Web/CSS/sibling-index#browser_compatibility */ + &:nth-child(1) { + left: 24px; + top: 24px; + } + + &:nth-child(2) { + left: 36px; + top: 36px; + } + + &:nth-child(3) { + left: 48px; + top: 48px; + } + + &:nth-child(4) { + left: 60px; + top: 60px; + } + + &:nth-child(5) { + left: 72px; + top: 72px; + } + + &:nth-child(6) { + left: 84px; + top: 84px; + } + + &:nth-child(7) { + left: 96px; + top: 96px; + } + + &:nth-child(8) { + left: 108px; + top: 108px; + } + + &:nth-child(9) { + left: 120px; + top: 120px; + } +} + +.windows section { + z-index: 999; +} diff --git a/src/theme/webamp/index.js b/src/theme/webamp/index.js index 8a6c1fd0e..a388d3622 100644 --- a/src/theme/webamp/index.js +++ b/src/theme/webamp/index.js @@ -1,4 +1,3 @@ -import Webamp from "webamp/lazy"; import deepDiff from "@fry69/deep-diff"; // import "@component/orchestrator/process-tracks/element.js"; @@ -14,6 +13,7 @@ import { effect, signal, untracked } from "@common/signal.js"; import "./window/element.js"; import "./window-manager/element.js"; +import WebampElement from "./webamp.js"; /** * @import {URLTrack} from "webamp" @@ -27,29 +27,25 @@ const queue = component(Queue); globalThis.queue = queue; //////////////////////////////////////////// -// ⚡ +// 📡 //////////////////////////////////////////// -/** @type {import("webamp/lazy").default} */ -const amp = new /** @type {any} */ (Webamp)({ - enableMediaSession: true, - initialTracks: [], - - /** */ - handleLoadListEvent: async () => { - // TODO - return [ - /* Array of Tracks */ - ]; - }, - - /** - * @param {any} tracks - */ - handleSaveListEvent: (tracks) => { - // TODO - }, -}); +const $currTrack = signal(/** @type {null | number} */ (null)); +const $playlist = signal(/** @type {Item[]} */ ([])); + +//////////////////////////////////////////// +// ⚡️ +//////////////////////////////////////////// + +const ampElement = document.querySelector("dtw-webamp"); +if (ampElement instanceof WebampElement === false) { + throw new Error("Missing webamp element"); +} + +const amp = ampElement.amp; + +// TODO: Handle minimize +amp.onMinimize(() => {}); // Override track loader const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); @@ -66,23 +62,6 @@ async function loadOverride(uri, autoPlay) { amp.media.loadFromUrl = loadOverride.bind(amp.media); -// TODO: Handle minimize -amp.onMinimize(() => {}); - -// Render -const ampNode = document.createElement("div"); -ampNode.style = - "height: 100vh; left: 0; position: absolute; top: 0; width: 100%; z-index: -1000;"; -document.body.appendChild(ampNode); -amp.renderWhenReady(ampNode); - -//////////////////////////////////////////// -// 🌊 -//////////////////////////////////////////// - -const $currTrack = signal(/** @type {null | number} */ (null)); -const $playlist = signal(/** @type {Item[]} */ ([])); - /** * Observe changes in Webamp's internal store. */ diff --git a/src/theme/webamp/index.vto b/src/theme/webamp/index.vto index 989ca24ca..007f2f573 100644 --- a/src/theme/webamp/index.vto +++ b/src/theme/webamp/index.vto @@ -42,6 +42,7 @@ +
    +
    + + + + Manage audio inputs +

    👀

    +
    + + + Manage user data +

    👀

    +
    + + + Browse collection + + +
    +
    + + + + + + - - - + + + - - - + + + - -
    -
    - - - Window -

    👀

    -
    - - Window -

    👀

    -
    -
    + + + +
    diff --git a/src/theme/webamp/window-manager/element.js b/src/theme/webamp/window-manager/element.js index 92e64af14..3063718ce 100644 --- a/src/theme/webamp/window-manager/element.js +++ b/src/theme/webamp/window-manager/element.js @@ -132,14 +132,12 @@ class WindowManager extends DiffuseElement { const stopMove = () => { this.removeEventListener("mousemove", moveFn); - this.removeEventListener("dtw-window-end-move", stopMove); document.removeEventListener("mouseup", stopMove); document.removeEventListener("mouseleave", stopMove); }; this.addEventListener("mousemove", moveFn); - this.addEventListener("dtw-window-end-move", stopMove); document.addEventListener("mouseup", stopMove); document.addEventListener("mouseleave", stopMove); diff --git a/src/theme/webamp/window/element.js b/src/theme/webamp/window/element.js index c1c4acadc..f394817d8 100644 --- a/src/theme/webamp/window/element.js +++ b/src/theme/webamp/window/element.js @@ -9,6 +9,8 @@ import { DiffuseElement } from "@common/element.js"; //////////////////////////////////////////// class WindowElement extends DiffuseElement { + static observedAttributes = ["open"]; + constructor() { super(); @@ -16,22 +18,6 @@ class WindowElement extends DiffuseElement { this.attachShadow({ mode: "open" }); } - // LIFECYCLE - - /** - * @override - */ - connectedCallback() { - super.connectedCallback(); - } - - /** - * @override - */ - disconnectedCallback() { - super.disconnectedCallback(); - } - // ACTIONS activate() { @@ -58,25 +44,41 @@ class WindowElement extends DiffuseElement { padding: 0; } + .window { + min-width: 240px; + } + .title-bar { + justify-content: unset; user-select: none; } + + .title-bar-icon { + margin-right: 4px; + } + + .title-bar-text { + flex: 1; + } - -
    + +
    +
    + +
    - +
    @@ -106,24 +108,6 @@ class WindowElement extends DiffuseElement { this.dispatchEvent(event); } - - /** - * @param {MouseEvent} mouse - */ - titleBarMouseUp(mouse) { - const event = new CustomEvent("dtw-window-end-move", { - bubbles: true, - composed: true, - detail: { - x: mouse.x, - xElement: mouse.layerX, - y: mouse.y, - yElement: mouse.layerY, - }, - }); - - this.dispatchEvent(event); - } } export default WindowElement; From d4887b4afcbf5d8acd54568bf6ee5085d4ba4a86 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 29 Oct 2025 20:46:17 +0100 Subject: [PATCH 059/244] feat: play from browser --- src/component/engine/queue/worker.js | 2 +- src/theme/webamp/browser/element.js | 18 ++++++---- src/theme/webamp/index.js | 25 ++++++------- src/theme/webamp/index.vto | 1 + src/theme/webamp/webamp.js | 53 ++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 19 deletions(-) diff --git a/src/component/engine/queue/worker.js b/src/component/engine/queue/worker.js index 180494082..f7b47fe3c 100644 --- a/src/component/engine/queue/worker.js +++ b/src/component/engine/queue/worker.js @@ -138,7 +138,7 @@ export function _shift(future) { const n = $now.value; const f = future ?? $future.value; + $now.value = f[0] ?? null; if (n) $past.value = [...$past.value, n]; $future.value = fill(f.slice(1)); - $now.value = f[0] ?? null; } diff --git a/src/theme/webamp/browser/element.js b/src/theme/webamp/browser/element.js index 077d55398..f4c030ec0 100644 --- a/src/theme/webamp/browser/element.js +++ b/src/theme/webamp/browser/element.js @@ -20,6 +20,9 @@ class Browser extends DiffuseElement { /** @type {import("@component/engine/queue/element.js").CLASS} */ this.queue = query(this, "queue-selector"); + + /** @type {import("../webamp.js").CLASS} */ + this.amp = query(this, "webamp-selector"); } // LIFECYCLE @@ -65,12 +68,15 @@ class Browser extends DiffuseElement { */ playTrack(track) { console.log("Play track", track); - this.queue.add({ - inFront: true, - items: [ - { ...track, manualEntry: true }, - ], - }); + // this.queue.add({ + // inFront: true, + // items: [ + // { ...track, manualEntry: true }, + // ], + // }); + + this.amp.addTrack(track); + this.amp.amp.setCurrentTrack(this.amp.amp.getPlaylistTracks().length - 1); } // RENDER diff --git a/src/theme/webamp/index.js b/src/theme/webamp/index.js index ed257d8cc..839674c82 100644 --- a/src/theme/webamp/index.js +++ b/src/theme/webamp/index.js @@ -68,8 +68,12 @@ amp.media.loadFromUrl = loadOverride.bind(amp.media); */ amp.store.subscribe(() => { const state = amp.store.getState(); - if (state.playlist.currentTrack !== null) { - $currTrack.value = state.playlist.currentTrack; + + if ( + state.playlist.currentTrack !== null && + state.playlist.currentTrack - currBase > 0 + ) { + $currTrack.value = state.playlist.currentTrack - currBase; } }); @@ -77,7 +81,7 @@ amp.store.subscribe(() => { * Whenever the queue changes update the playlist. */ effect(() => { - const now = queue.now(); + const now = untracked(queue.now); const past = untracked(queue.past); const future = queue.future(); @@ -92,10 +96,9 @@ effect(() => { JSON.stringify(untracked($playlist.get).map((i) => i.id)), ); - console.log(hashNew, hashOld); if (hashNew === hashOld) return; - const webampTracks = playlist.map((item) => { + const webampTracks = playlist.map((item, idx) => { /** @type {URLTrack} */ const urlTrack = { url: item.uri, @@ -107,16 +110,14 @@ effect(() => { duration: item.stats?.duration, }; + if (item.stats?.duration == undefined) { + throw new Error("TODO: Fetch duration"); + } return urlTrack; }); - currBase = untracked($playlist.get).length; - - amp.setTracksToPlay([]); - amp.appendTracks(webampTracks); - - console.log("SET CURR", currBase + past.length); - amp.setCurrentTrack(currBase + past.length); + // currBase = currBase + amp.getPlaylistTracks().length; + // amp.setCurrentTrack(currBase + (untracked($currTrack.get) ?? 0)); $playlist.value = playlist; }); diff --git a/src/theme/webamp/index.vto b/src/theme/webamp/index.vto index 926cb5053..c31ea4cdb 100644 --- a/src/theme/webamp/index.vto +++ b/src/theme/webamp/index.vto @@ -33,6 +33,7 @@ input-selector="di-opensubsonic" output-selector="do-indexed-db" queue-selector="de-queue" + webamp-selector="dtw-webamp" > diff --git a/src/theme/webamp/webamp.js b/src/theme/webamp/webamp.js index c77be16a3..2d92f5ff7 100644 --- a/src/theme/webamp/webamp.js +++ b/src/theme/webamp/webamp.js @@ -1,5 +1,8 @@ import Webamp from "webamp/lazy"; +/** + * @import {Track} from "@component/core/types.d.ts" + */ class WebampElement extends HTMLElement { constructor() { super(); @@ -29,6 +32,8 @@ class WebampElement extends HTMLElement { }); } + // LIFECYCLE + connectedCallback() { this.attachShadow({ mode: "open" }); @@ -36,6 +41,54 @@ class WebampElement extends HTMLElement { this.renderWebamp(); } + // ACTIONS + + /** + * @param {Track} track + * @param {number} [idx] + */ + addTrack(track, idx) { + idx = idx ?? (this.amp.getPlaylistTracks().length); + + this.amp.store.dispatch( + /** + * @param {any} dispatch + */ + (dispatch) => { + dispatch({ + type: "ADD_TRACK_FROM_URL", + url: track.uri, + duration: track.stats?.duration, + defaultName: undefined, + id: idx, + atIndex: idx, + }); + + dispatch({ + type: "SET_MEDIA_DURATION", + duration: track.stats?.duration, + id: idx, + }); + + dispatch({ + type: "SET_MEDIA_TAGS", + artist: track.tags?.artist, + title: track.tags?.title, + album: track.tags?.album, + // For now, we lie about these next three things. + // TODO: Ideally we would leave these as null and force a media data + // fetch when the user starts playing. + sampleRate: 44000, + bitrate: 192000, + numberOfChannels: 2, + id: idx, + }); + }, + ); + } + + // RENDER + async renderWebamp() { // Ideally this would render in the shadow root, // but sadly it does not. From d928a271db2a1f9e717698a48bc796b80a8dee97 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 31 Oct 2025 16:03:10 +0100 Subject: [PATCH 060/244] chore: update index page --- .../constituent/blur/browser-list/element.js | 64 ----------- .../constituent/blur/browser-list/types.d.ts | 4 - src/index.vto | 106 +++++++++++++----- 3 files changed, 76 insertions(+), 98 deletions(-) delete mode 100644 src/component/constituent/blur/browser-list/element.js delete mode 100644 src/component/constituent/blur/browser-list/types.d.ts diff --git a/src/component/constituent/blur/browser-list/element.js b/src/component/constituent/blur/browser-list/element.js deleted file mode 100644 index 5f283822e..000000000 --- a/src/component/constituent/blur/browser-list/element.js +++ /dev/null @@ -1,64 +0,0 @@ -import { DiffuseElement } from "@common/element.js"; -import { signal } from "@common/signal.js"; - -/** - * @import {RenderArg} from "@common/element.d.ts" - * @import {State} from "./types.d.ts" - * @import {Track} from "@component/core/types.d.ts" - */ - -//////////////////////////////////////////// -// ELEMENT -//////////////////////////////////////////// - -class BrowserList extends DiffuseElement { - tracks = signal(/** @type {Track[]} */ ([])); - - // STATE - - get state() { - return { - tracks: this.tracks.get, - }; - } - - // RENDER - - /** - * @param {RenderArg} _ - */ - render({ html, state }) { - console.log("Rendering", state.tracks()); - - const list = state.tracks().map( - /** - * @param {Track} t - * @param {number} idx - */ - (t, idx) => - html` -
    ${t}
    - `, - ).join(""); - - return html` - -
    ${list}
    - `; - } -} - -export default BrowserList; - -//////////////////////////////////////////// -// REGISTER -//////////////////////////////////////////// - -export const CLASS = BrowserList; -export const NAME = "dcb-browser-list"; - -customElements.define(NAME, BrowserList); diff --git a/src/component/constituent/blur/browser-list/types.d.ts b/src/component/constituent/blur/browser-list/types.d.ts deleted file mode 100644 index be9d63aaf..000000000 --- a/src/component/constituent/blur/browser-list/types.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { SignalReader } from "@common/signal.d.ts"; -import type { Track } from "@component/core/types.d.ts"; - -export type State = { tracks: SignalReader }; diff --git a/src/index.vto b/src/index.vto index 81f97907e..3fce7ff23 100644 --- a/src/index.vto +++ b/src/index.vto @@ -4,6 +4,8 @@ layout: layouts/diffuse.vto themes: - url: "theme/blur/" title: "Blur" + - url: "theme/webamp/" + title: "Webamp" engines: - url: "engine/audio/" @@ -11,6 +13,32 @@ engines: - url: "engine/queue/" title: "Queue" +input: + - url: "input/opensubsonic/" + title: "Opensubsonic" + - url: "input/s3/" + title: "S3 (TODO)" + +orchestrators: + - url: "orchestrator/process-tracks/" + title: "Process inputs into tracks" + - url: "orchestrator/queue-audio/" + title: "Queue ⭤ Audio" + - url: "orchestrator/queue-tracks/" + title: "Queue ⭤ Tracks" + +output: + - url: "output/indexed-db/" + title: "IndexedDB" + +processors: + - url: "processor/artwork/" + title: "Artwork" + - url: "processor/metadata/" + title: "Metadata" + - url: "processor/search/" + title: "Search" + --- @@ -68,43 +96,61 @@ engines:

    + {{ await comp.element({ + title: "Configurators", + items: configurators, + content: ` + Elements that serve as an intermediate in order to make a particular kind of element configurable. In other words, these allow for an applet to be swapped out with another that takes the same, or a subset of the actions and data output. + ` + }) }} + {{ await comp.element({ title: "Engines", items: engines, content: ` - Elements with each a singular purpose and don't have any UI. There are specialised UI and - orchestrator elements that control these. + Elements with each a singular purpose and don't have any UI. There are specialised UI and orchestrator elements that control these. + ` + }) }} + + {{ await comp.element({ + title: "Input", + items: input, + content: ` + Inputs are sources of audio tracks. Each track is an entry in the list of possible items to play. These can be files or streams, static or dynamic. + ` + }) }} + + {{ await comp.element({ + title: "Orchestrators", + items: orchestrators, + content: ` + These too are element compositions. However, unlike themes, these are purely logical. Mostly exist in order to construct sensible defaults to use across themes and other compositions. + ` + }) }} + + {{ await comp.element({ + title: "Output", + items: output, + content: ` + Output is application-derived data such as playlists. These elements can receive such data and keep it around. ` }) }} - + {{ await comp.element({ + title: "Processors", + items: processors, + content: ` + These elements work with the tracks generated by the input applets to add more data to them, or process them in some other way. + ` + }) }} + + {{ await comp.element({ + title: "Supplements", + items: supplements, + content: ` + Additional elements, such as scrobblers. + ` + }) }}
    From 265c4a3550703e3c6aea134ce41f0c3273beb4d1 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 31 Oct 2025 16:48:16 +0100 Subject: [PATCH 061/244] feat: s3 input --- .../constituent/blur/browser/_applet.astro | 178 ------------------ .../constituent/blur/browser/_manifest.json | 6 - .../constituent/blur/browser/index.astro | 9 - _backup/pages/demo/s3-tracks/index.astro | 59 ------ _backup/scripts/input/s3/ui.ts | 118 ------------ _backup/scripts/input/s3/worker.ts | 131 ------------- deno.jsonc | 1 + deno.lock | 5 + .../component/input/s3/common.js | 88 ++++++--- .../component/input/s3/constants.js | 8 +- .../component}/input/s3/types.d.ts | 0 src/component/input/s3/worker.js | 176 +++++++++++++++++ src/index.vto | 22 +-- 13 files changed, 261 insertions(+), 540 deletions(-) delete mode 100644 _backup/pages/constituent/blur/browser/_applet.astro delete mode 100644 _backup/pages/constituent/blur/browser/_manifest.json delete mode 100644 _backup/pages/constituent/blur/browser/index.astro delete mode 100644 _backup/pages/demo/s3-tracks/index.astro delete mode 100644 _backup/scripts/input/s3/ui.ts delete mode 100644 _backup/scripts/input/s3/worker.ts rename _backup/scripts/input/s3/common.ts => src/component/input/s3/common.js (57%) rename _backup/scripts/input/s3/constants.ts => src/component/input/s3/constants.js (62%) rename {_backup/scripts => src/component}/input/s3/types.d.ts (100%) create mode 100644 src/component/input/s3/worker.js diff --git a/_backup/pages/constituent/blur/browser/_applet.astro b/_backup/pages/constituent/blur/browser/_applet.astro deleted file mode 100644 index f74f09d3b..000000000 --- a/_backup/pages/constituent/blur/browser/_applet.astro +++ /dev/null @@ -1,178 +0,0 @@ ---- -import "@styles/reset.css"; -import "@styles/variables.css"; -import "@styles/fonts.css"; -import "@styles/animations.css"; -import "@styles/icons/phosphor.css"; - -import "@styles/diffuse/colors.css"; -import "@styles/diffuse/fonts.css"; ---- - -
    - - -
    - - - - - - - - diff --git a/_backup/pages/constituent/blur/browser/_manifest.json b/_backup/pages/constituent/blur/browser/_manifest.json deleted file mode 100644 index 2b0ede470..000000000 --- a/_backup/pages/constituent/blur/browser/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/constituent/blur/browser", - "title": "Diffuse Blur Theme | Browser", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/constituent/blur/browser/index.astro b/_backup/pages/constituent/blur/browser/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/constituent/blur/browser/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/demo/s3-tracks/index.astro b/_backup/pages/demo/s3-tracks/index.astro deleted file mode 100644 index af7f863d4..000000000 --- a/_backup/pages/demo/s3-tracks/index.astro +++ /dev/null @@ -1,59 +0,0 @@ ---- -import Page from "../../../layouts/page.astro"; -import "@styles/pico.scss"; ---- - - -
    -

    Add sample S3 bucket to inputs

    - -

    - Clicking the button below will add some sample music, which you can then play using the - various themes, abstractions and constituents. - -
    -
    - - -

    -
    - - - - -
    diff --git a/_backup/scripts/input/s3/ui.ts b/_backup/scripts/input/s3/ui.ts deleted file mode 100644 index 70ba4113c..000000000 --- a/_backup/scripts/input/s3/ui.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { computed, effect, type Signal, signal } from "@scripts/spellcaster"; -import { type Props, repeat, tags, text } from "@scripts/spellcaster/hyperscript.js"; - -import type { Bucket } from "./types"; -import { bucketId, loadBuckets, saveBuckets } from "./common"; - -//////////////////////////////////////////// -// UI -//////////////////////////////////////////// -export const buckets = signal>(await loadBuckets()); -export const form = signal<{ - access_key?: string; - bucket_name?: string; - host?: string; - path?: string; - region?: string; - secret_key?: string; -}>({}); - -export const bucketsMap = computed(() => { - return new Map(Object.entries(buckets())); -}); - -effect(() => { - saveBuckets(buckets()); -}); - -//////////////////////////////////////////// -// UI ~ BUCKETS -//////////////////////////////////////////// -const Bucket = (bucket: Signal) => { - const onclick = () => { - const b = bucket(); - const id = bucketId(b); - - const col = { ...buckets() }; - delete col[id]; - - buckets(col); - }; - - return tags.li({ onclick, style: "cursor: pointer" }, text(bucket().host)); -}; - -const BucketList = computed(() => { - if (bucketsMap().size === 0) { - return tags.p({ id: "buckets" }, [tags.small({}, text("Nothing added so far."))]); - } - - return tags.ul({ id: "buckets" }, repeat(bucketsMap, Bucket)); -}); - -effect(() => { - document.querySelector("#buckets")?.replaceWith(BucketList()); -}); - -//////////////////////////////////////////// -// UI ~ FORM -//////////////////////////////////////////// -function addBucket(event: Event) { - event.preventDefault(); - - const f = form(); - - const bucket: Bucket = { - accessKey: f.access_key || "", - bucketName: f.bucket_name || "", - host: f.host || "s3.amazonaws.com", - path: f.path || "/", - region: f.region || "us-east-1", - secretKey: f.secret_key || "", - }; - - buckets({ - ...buckets(), - [bucketId(bucket)]: bucket, - }); -} - -function Form() { - return tags.form({ onsubmit: addBucket }, [ - tags.fieldset({ className: "grid" }, [ - Input("access_key", "Access key", "r31w7m9c", { required: true }), - Input("secret_key", "Secret key", "v02g2l29", { required: true }), - ]), - tags.fieldset({ className: "grid" }, [ - Input("bucket_name", "Bucket name", "bucket", { required: true }), - Input("region", "Region", "us-east-1", { required: true }), - ]), - tags.fieldset({ className: "grid" }, [ - Input("host", "Host", "s3.amazonaws.com", { required: true }), - Input("path", "Path", "/"), - ]), - tags.fieldset({ className: "grid" }, [tags.input({ type: "submit", value: "Connect" }, [])]), - ]); -} - -function Input(name: string, label: string, placeholder: string, opts: Props = {}) { - return tags.label({}, [ - tags.span({}, [ - tags.span({}, text(label)), - tags.small({}, text("required" in opts ? "" : " (optional)")), - ]), - tags.input({ - ...opts, - name, - placeholder, - oninput: (event: InputEvent) => formInput(name, (event.target as HTMLInputElement).value), - }), - ]); -} - -function formInput(name: string, value: string) { - form({ ...form(), [name]: value }); -} - -// 🚀 -document.querySelector("#form")?.replaceWith(Form()); diff --git a/_backup/scripts/input/s3/worker.ts b/_backup/scripts/input/s3/worker.ts deleted file mode 100644 index 6b2fd7e7e..000000000 --- a/_backup/scripts/input/s3/worker.ts +++ /dev/null @@ -1,131 +0,0 @@ -import type { Consult, ConsultGrouping, GroupConsult, Track } from "@applets/core/types.d.ts"; -import { isAudioFile } from "@scripts/input/common"; -import { - bucketId, - bucketsFromTracks, - buildURI, - consultBucket, - createClient, - groupTracksByBucket, - loadBuckets, - parseURI, -} from "./common"; -import { provide, transfer } from "@scripts/common"; -import { SCHEME } from "./constants"; - -//////////////////////////////////////////// -// TASKS -//////////////////////////////////////////// -const actions = { - consult, - contextualize, - groupConsult, - list, - resolve, -}; - -const { tasks } = provide({ actions, tasks: actions }); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -// Tasks - -async function consult(fileUriOrScheme: string): Promise { - if (!fileUriOrScheme.includes(":")) return { supported: true, consult: "undetermined" }; - - const parsed = parseURI(fileUriOrScheme); - if (!parsed) return { supported: true, consult: "undetermined" }; - - const consult = await consultBucket(parsed.bucket); - return { supported: true, consult }; -} - -async function contextualize(tracks: Track[]) { - return bucketsFromTracks(tracks); -} - -async function groupConsult(tracks: Track[]): Promise { - const groups = groupTracksByBucket(tracks); - - const promises = Object.entries(groups).map(async ([bucketId, { bucket, tracks }]) => { - const available = await consultBucket(bucket); - const grouping: ConsultGrouping = available - ? { available, tracks } - : { available, reason: "Bucket unavailable", tracks }; - - return { - key: `${SCHEME}:${bucketId}`, - grouping, - }; - }); - - const entries = (await Promise.all(promises)).map((entry) => [entry.key, entry.grouping]); - const obj = Object.fromEntries(entries); - - return transfer(obj); -} - -async function list(cachedTracks: Track[] = []) { - const cache: Record> = {}; - - cachedTracks.forEach((t: Track) => { - const parsed = parseURI(t.uri); - if (!parsed) return; - - const bid = bucketId(parsed?.bucket); - - if (cache[bid]) { - cache[bid][parsed.path] = t; - } else { - cache[bid] = { [parsed.path]: t }; - } - }); - - const buckets = await loadBuckets(); - const promises = Object.values(buckets).map(async (bucket) => { - const client = createClient(bucket); - const bid = bucketId(bucket); - - const list = await Array.fromAsync( - client.listObjects({ - prefix: bucket.path.replace(/^\//, ""), - }), - ); - - return list - .filter((l) => isAudioFile(l.key)) - .map((l) => { - const cachedTrack = cache[bid]?.[l.key]; - - const id = cachedTrack?.id || crypto.randomUUID(); - const stats = cachedTrack?.stats; - const tags = cachedTrack?.tags; - - const track: Track = { - id, - stats, - tags, - uri: buildURI(bucket, l.key), - }; - - return track; - }); - }); - - const tracks = (await Promise.all(promises)).flat(1); - return transfer(tracks); -} - -async function resolve({ method, uri }: { method: string; uri: string }) { - const parsed = parseURI(uri); - if (!parsed) return undefined; - - const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days - const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; - - const client = createClient(parsed.bucket); - const url = await client.getPresignedUrl(method.toUpperCase() as any, parsed.path); - - return { expiresAt: expiresAtSeconds, url }; -} diff --git a/deno.jsonc b/deno.jsonc index 6e917063a..5dbba3aa0 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,6 +4,7 @@ "vendor": true, "imports": { "98.css": "npm:98.css@^0.1.21", + "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", "@mary/ds-queue": "jsr:@mary/ds-queue@^0.1.3", "@mys/m-rpc": "jsr:@mys/m-rpc@^0.12.2", diff --git a/deno.lock b/deno.lock index 09fa46988..1200a33bf 100644 --- a/deno.lock +++ b/deno.lock @@ -1,6 +1,7 @@ { "version": "5", "specifiers": { + "jsr:@bradenmacdonald/s3-lite-client@~0.9.4": "0.9.4", "jsr:@deno/loader@0.3.6": "0.3.6", "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", "jsr:@mary/ds-queue@~0.1.3": "0.1.3", @@ -57,6 +58,9 @@ "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { + "@bradenmacdonald/s3-lite-client@0.9.4": { + "integrity": "f52e31c7efdaeb1ccdf65a1db995b5920d635717c96d45dcf9450c3cc47ecaaf" + }, "@deno/loader@0.3.6": { "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" }, @@ -1390,6 +1394,7 @@ }, "workspace": { "dependencies": [ + "jsr:@bradenmacdonald/s3-lite-client@~0.9.4", "jsr:@fry69/deep-diff@~0.1.10", "jsr:@mary/ds-queue@~0.1.3", "jsr:@mys/m-rpc@~0.12.2", diff --git a/_backup/scripts/input/s3/common.ts b/src/component/input/s3/common.js similarity index 57% rename from _backup/scripts/input/s3/common.ts rename to src/component/input/s3/common.js index 9528d27a7..ba1e5330f 100644 --- a/_backup/scripts/input/s3/common.ts +++ b/src/component/input/s3/common.js @@ -3,17 +3,25 @@ import * as IDB from "idb-keyval"; import * as URI from "uri-js"; import QS from "query-string"; -import type { Track } from "@applets/core/types.d.ts"; -import { ENCODINGS, IDB_BUCKETS, SCHEME } from "./constants"; -import type { Bucket } from "./types"; +import { ENCODINGS, IDB_BUCKETS, SCHEME } from "./constants.js"; + +/** + * @import { Track } from "@component/core/types.d.ts"; + * @import { Bucket } from "./types.d.ts"; + */ //////////////////////////////////////////// // 🛠️ //////////////////////////////////////////// -export function bucketsFromTracks(tracks: Track[]) { - const acc: Record = {}; - tracks.forEach((track: Track) => { +/** + * @param {Track[]} tracks + */ +export function bucketsFromTracks(tracks) { + /** @type {Record} */ + const acc = {}; + + tracks.forEach((track) => { const parsed = parseURI(track.uri); if (!parsed) return; @@ -26,11 +34,18 @@ export function bucketsFromTracks(tracks: Track[]) { return acc; } -export function bucketId(bucket: Bucket) { +/** + * @param {Bucket} bucket + */ +export function bucketId(bucket) { return `${bucket.accessKey}:${bucket.secretKey}@${bucket.host}`; } -export function buildURI(bucket: Bucket, path: string) { +/** + * @param {Bucket} bucket + * @param {string} path + */ +export function buildURI(bucket, path) { return URI.serialize({ scheme: SCHEME, userinfo: `${bucket.accessKey}:${bucket.secretKey}`, @@ -44,15 +59,23 @@ export function buildURI(bucket: Bucket, path: string) { }); } -export async function consultBucket(bucket: Bucket) { +/** + * @param {Bucket} bucket + */ +export async function consultBucket(bucket) { const client = createClient(bucket); return await client.bucketExists(bucket.bucketName); } -export function createClient(bucket: Bucket) { +/** + * @param {Bucket} bucket + */ +export function createClient(bucket) { return new S3Client({ bucket: bucket.bucketName, - endPoint: `http${bucket.host.startsWith("localhost") ? "" : "s"}://${bucket.host}`, + endPoint: `http${ + bucket.host.startsWith("localhost") ? "" : "s" + }://${bucket.host}`, region: bucket.region, pathStyle: false, accessKey: bucket.accessKey, @@ -60,17 +83,24 @@ export function createClient(bucket: Bucket) { }); } -export function encodeAwsUriComponent(a: string) { +/** + * @param {string} a + */ +export function encodeAwsUriComponent(a) { return encodeURIComponent(a).replace( /(\+|!|"|#|\$|&|'|\(|\)|\*|\+|,|:|;|=|\?|@)/gim, - (match) => (ENCODINGS as any)[match] ?? match, + (match) => /** @type {any} */ (ENCODINGS)[match] ?? match, ); } -export function groupTracksByBucket(tracks: Track[]) { - const acc: Record = {}; +/** + * @param {Track[]} tracks + */ +export function groupTracksByBucket(tracks) { + /** @type {Record} */ + const acc = {}; - tracks.forEach((track: Track) => { + tracks.forEach((track) => { const parsed = parseURI(track.uri); if (!parsed) return acc; @@ -86,12 +116,19 @@ export function groupTracksByBucket(tracks: Track[]) { return acc; } -export async function loadBuckets(): Promise> { +/** + * @returns {Promise>} + */ +export async function loadBuckets() { const i = await IDB.get(IDB_BUCKETS); return i ? i : {}; } -export function parseURI(uriString: string): { bucket: Bucket; path: string } | undefined { +/** + * @param {string} uriString + * @returns {{ bucket: Bucket; path: string } | undefined} + */ +export function parseURI(uriString) { const uri = URI.parse(uriString); if (uri.scheme !== SCHEME) return undefined; if (!uri.host) return undefined; @@ -110,14 +147,19 @@ export function parseURI(uriString: string): { bucket: Bucket; path: string } | secretKey, }; - const path = (bucket.path.replace(/\/$/, "") + URI.unescapeComponent(uri.path || "")).replace( - /^\//, - "", - ); + const path = + (bucket.path.replace(/\/$/, "") + URI.unescapeComponent(uri.path || "")) + .replace( + /^\//, + "", + ); return { bucket, path }; } -export async function saveBuckets(items: Record) { +/** + * @param {Record} items + */ +export async function saveBuckets(items) { await IDB.set(IDB_BUCKETS, items); } diff --git a/_backup/scripts/input/s3/constants.ts b/src/component/input/s3/constants.js similarity index 62% rename from _backup/scripts/input/s3/constants.ts rename to src/component/input/s3/constants.js index 0cd0527aa..99575ec11 100644 --- a/_backup/scripts/input/s3/constants.ts +++ b/src/component/input/s3/constants.js @@ -1,13 +1,11 @@ -import manifest from "../../../pages/input/s3/_manifest.json"; - -export const IDB_PREFIX = "@applets/input/s3"; +export const IDB_PREFIX = "@component/input/s3"; export const IDB_BUCKETS = `${IDB_PREFIX}/buckets`; -export const SCHEME = manifest.input_properties.scheme; +export const SCHEME = "s3"; export const ENCODINGS = { "\+": "%2B", "\!": "%21", - '\"': "%22", + '"': "%22", "\#": "%23", "\$": "%24", "\&": "%26", diff --git a/_backup/scripts/input/s3/types.d.ts b/src/component/input/s3/types.d.ts similarity index 100% rename from _backup/scripts/input/s3/types.d.ts rename to src/component/input/s3/types.d.ts diff --git a/src/component/input/s3/worker.js b/src/component/input/s3/worker.js new file mode 100644 index 000000000..a5e49f48b --- /dev/null +++ b/src/component/input/s3/worker.js @@ -0,0 +1,176 @@ +import { isAudioFile } from "@component/input/common.js"; +import { + bucketId, + bucketsFromTracks, + buildURI, + consultBucket, + createClient, + groupTracksByBucket, + loadBuckets, + parseURI, +} from "./common.js"; +import { SCHEME } from "./constants.js"; + +/** + * @import { InputActions as Actions, Track } from "@component/core/types.d.ts"; + * @import { Bucket } from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +/** + * @type {Actions['consult']} + */ +export async function consult(fileUriOrScheme) { + if (!fileUriOrScheme.includes(":")) { + return { supported: true, consult: "undetermined" }; + } + + const parsed = parseURI(fileUriOrScheme); + if (!parsed) return { supported: true, consult: "undetermined" }; + + const consult = await consultBucket(parsed.bucket); + return { supported: true, consult }; +} + +/** + * @type {Actions['contextualize']} + */ +export async function contextualize(tracks) { + bucketsFromTracks(tracks); +} + +/** + * @type {Actions['groupConsult']} + */ +export async function groupConsult(tracks) { + const groups = groupTracksByBucket(tracks); + + const promises = Object.entries(groups).map( + async ([bucketId, { bucket, tracks }]) => { + const available = await consultBucket(bucket); + const grouping = available + ? { available, tracks } + : { available, reason: "Bucket unavailable", tracks }; + + return { + key: `${SCHEME}:${bucketId}`, + grouping, + }; + }, + ); + + const entries = (await Promise.all(promises)).map(( + entry, + ) => [entry.key, entry.grouping]); + return Object.fromEntries(entries); +} + +/** + * @type {Actions['list']} + */ +export async function list(cachedTracks = []) { + /** @type {Record>} */ + const cache = {}; + + cachedTracks.forEach((t) => { + const parsed = parseURI(t.uri); + if (!parsed) return; + + const bid = bucketId(parsed?.bucket); + + if (cache[bid]) { + cache[bid][parsed.path] = t; + } else { + cache[bid] = { [parsed.path]: t }; + } + }); + + const buckets = await loadBuckets(); + const promises = Object.values(buckets).map(async (bucket) => { + const client = createClient(bucket); + const bid = bucketId(bucket); + + const list = await Array.fromAsync( + client.listObjects({ + prefix: bucket.path.replace(/^\//, ""), + }), + ); + + return list + .filter((l) => isAudioFile(l.key)) + .map((l) => { + const cachedTrack = cache[bid]?.[l.key]; + + const id = cachedTrack?.id || crypto.randomUUID(); + const stats = cachedTrack?.stats; + const tags = cachedTrack?.tags; + + /** @type {Track} */ + const track = { + id, + stats, + tags, + uri: buildURI(bucket, l.key), + }; + + return track; + }); + }); + + const tracks = (await Promise.all(promises)).flat(1); + return tracks; +} + +/** + * @type {Actions['resolve']} + */ +export async function resolve( + { method, uri }, +) { + const parsed = parseURI(uri); + if (!parsed) return undefined; + + const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days + const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; + + const client = createClient(parsed.bucket); + const url = await client.getPresignedUrl( + /** @type {any} */ (method.toUpperCase()), + parsed.path, + ); + + return { expiresAt: expiresAtSeconds, url }; +} + +// ADDITIONAL ACTIONS + +export function demo() { + // Credentials are read-only, no worries. + + /** @type {Bucket} */ + const bucket = { + accessKey: atob("QUtJQTZPUTNFVk1BWFZDRFFINkI="), + bucketName: "ongaku-ryoho-demo", + host: "s3.amazonaws.com", + path: "/", + region: "us-east-1", + secretKey: atob("Z0hPQkdHRzU1aXc0a0RDbjdjWlRJYTVTUDRZWnpERkRzQnFCYWI4Mg=="), + }; + + const uri = buildURI(bucket, ""); + + /** @type {Track} */ + const track = { + id: crypto.randomUUID(), + kind: "placeholder", + uri, + }; + + return { + bucket, + track, + }; +} diff --git a/src/index.vto b/src/index.vto index 3fce7ff23..8a66589fe 100644 --- a/src/index.vto +++ b/src/index.vto @@ -8,35 +8,35 @@ themes: title: "Webamp" engines: - - url: "engine/audio/" + - url: "component/engine/audio/element.js" title: "Audio" - - url: "engine/queue/" + - url: "component/engine/queue/element.js" title: "Queue" input: - - url: "input/opensubsonic/" + - url: "component/input/opensubsonic/element.js" title: "Opensubsonic" - - url: "input/s3/" + - url: "component/input/s3/element.js" title: "S3 (TODO)" orchestrators: - - url: "orchestrator/process-tracks/" + - url: "component/orchestrator/process-tracks/element.js" title: "Process inputs into tracks" - - url: "orchestrator/queue-audio/" + - url: "component/orchestrator/queue-audio/element.js" title: "Queue ⭤ Audio" - - url: "orchestrator/queue-tracks/" + - url: "component/orchestrator/queue-tracks/element.js" title: "Queue ⭤ Tracks" output: - - url: "output/indexed-db/" + - url: "component/output/indexed-db/element.js" title: "IndexedDB" processors: - - url: "processor/artwork/" + - url: "component/processor/artwork/element.js" title: "Artwork" - - url: "processor/metadata/" + - url: "component/processor/metadata/element.js" title: "Metadata" - - url: "processor/search/" + - url: "component/processor/search/element.js" title: "Search" --- From 8b24bd4c5e2c713b0f0d0b06c44bf1e412e73a2a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 31 Oct 2025 22:59:35 +0100 Subject: [PATCH 062/244] feat: input configurator worker --- .../pages/configurator/input/_applet.astro | 92 ------- .../pages/configurator/input/_manifest.json | 49 ---- _backup/pages/configurator/input/index.astro | 9 - .../pages/configurator/output/_applet.astro | 86 ------ .../pages/configurator/output/_manifest.json | 18 -- _backup/pages/configurator/output/index.astro | 9 - _backup/scripts/configurator/input/worker.ts | 140 ---------- .../configurator/output/connections.ts | 25 -- .../scripts/configurator/output/constants.ts | 11 - .../scripts/configurator/output/context.ts | 4 - _backup/scripts/configurator/output/events.ts | 6 - .../scripts/configurator/output/signals.ts | 45 --- .../scripts/configurator/output/types.d.ts | 5 - _backup/scripts/configurator/output/ui.ts | 258 ------------------ src/component/configurator/common.js | 12 + src/component/configurator/input/worker.js | 156 +++++++++++ 16 files changed, 168 insertions(+), 757 deletions(-) delete mode 100644 _backup/pages/configurator/input/_applet.astro delete mode 100644 _backup/pages/configurator/input/_manifest.json delete mode 100644 _backup/pages/configurator/input/index.astro delete mode 100644 _backup/pages/configurator/output/_applet.astro delete mode 100644 _backup/pages/configurator/output/_manifest.json delete mode 100644 _backup/pages/configurator/output/index.astro delete mode 100644 _backup/scripts/configurator/input/worker.ts delete mode 100644 _backup/scripts/configurator/output/connections.ts delete mode 100644 _backup/scripts/configurator/output/constants.ts delete mode 100644 _backup/scripts/configurator/output/context.ts delete mode 100644 _backup/scripts/configurator/output/events.ts delete mode 100644 _backup/scripts/configurator/output/signals.ts delete mode 100644 _backup/scripts/configurator/output/types.d.ts delete mode 100644 _backup/scripts/configurator/output/ui.ts create mode 100644 src/component/configurator/common.js create mode 100644 src/component/configurator/input/worker.js diff --git a/_backup/pages/configurator/input/_applet.astro b/_backup/pages/configurator/input/_applet.astro deleted file mode 100644 index b73e235ba..000000000 --- a/_backup/pages/configurator/input/_applet.astro +++ /dev/null @@ -1,92 +0,0 @@ -
    -

    Input configuration

    -

    - Here you can add your audio from various places. -
    Add audio from: -

    - -
    - - - - diff --git a/_backup/pages/configurator/input/_manifest.json b/_backup/pages/configurator/input/_manifest.json deleted file mode 100644 index 1353834a1..000000000 --- a/_backup/pages/configurator/input/_manifest.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "diffuse/configurator/input", - "title": "Diffuse Configurator | Input", - "entrypoint": "index.html", - "actions": { - "consult": { - "title": "Consult", - "params_schema": { - "type": "string", - "description": "The uri to check the availability of." - } - }, - "contextualize": { - "title": "Contextualize", - "description": "Provide context to all inputs.", - "params_schema": { - "type": "array", - "description": "Array of tracks", - "items": { "type": "object" } - } - }, - "list": { - "title": "List", - "description": "List tracks from all inputs.", - "params_schema": { - "type": "array", - "description": "A list of (cached) tracks", - "items": { - "type": "object" - } - } - }, - "resolve": { - "title": "Resolve", - "description": "Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.", - "params_schema": { - "type": "object", - "properties": { - "method": { - "type": "string", - "description": "The HTTP method that is going to be used on the resolved URI." - }, - "uri": { "type": "string", "description": "The URI to resolve." } - }, - "required": ["method", "uri"] - } - } - } -} diff --git a/_backup/pages/configurator/input/index.astro b/_backup/pages/configurator/input/index.astro deleted file mode 100644 index f6d027092..000000000 --- a/_backup/pages/configurator/input/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet-pico-ui.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/configurator/output/_applet.astro b/_backup/pages/configurator/output/_applet.astro deleted file mode 100644 index 1e0d23476..000000000 --- a/_backup/pages/configurator/output/_applet.astro +++ /dev/null @@ -1,86 +0,0 @@ -
    -

    Storage configuration

    -

    - Here you can select where you want to keep your user data. -
    - By default this will be your browser. -
    - Click or tap on one to activate it. -

    -
    -

    - - - Just a moment, loading storage options. - -

    -
    - -

    - - - - - Data is currently not synced across different storages! - - - -

    - -

    Export & Import

    -

    - Download a snapshot of your - data. -

    -
    - - - - diff --git a/_backup/pages/configurator/output/_manifest.json b/_backup/pages/configurator/output/_manifest.json deleted file mode 100644 index 7c59c47e4..000000000 --- a/_backup/pages/configurator/output/_manifest.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "diffuse/configurator/output", - "title": "Diffuse Configurator | Output", - "entrypoint": "index.html", - "actions": { - "tracks": { - "title": "Tracks", - "description": "Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.", - "params_schema": { - "type": "array", - "description": "List of tracks", - "items": { - "type": "object" - } - } - } - } -} diff --git a/_backup/pages/configurator/output/index.astro b/_backup/pages/configurator/output/index.astro deleted file mode 100644 index f6d027092..000000000 --- a/_backup/pages/configurator/output/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet-pico-ui.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/scripts/configurator/input/worker.ts b/_backup/scripts/configurator/input/worker.ts deleted file mode 100644 index b3218e051..000000000 --- a/_backup/scripts/configurator/input/worker.ts +++ /dev/null @@ -1,140 +0,0 @@ -import * as URI from "uri-js"; - -import type { - Consult, - ConsultGrouping, - GroupConsult, - InputWorkerTasks, - Track, -} from "@applets/core/types"; -import { groupTracksPerScheme, initialConnections, provide } from "@scripts/common"; - -//////////////////////////////////////////// -// SETUP -//////////////////////////////////////////// -const actions = { - consult, - contextualize, - groupConsult, - list, - resolve, -}; - -const { connections, tasks } = provide({ - actions, - connections: initialConnections(["file+local", "opensubsonic", "s3"]), - tasks: actions, -}); - -export type Actions = typeof actions; -export type Tasks = typeof tasks; - -function isSupportedScheme(scheme: string) { - return !!connections[scheme]; -} - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// - -async function consult(fileUriOrScheme: string): Promise { - const scheme = fileUriOrScheme.includes(":") - ? URI.parse(fileUriOrScheme).scheme || fileUriOrScheme - : fileUriOrScheme; - - if (!isSupportedScheme(scheme)) { - return { supported: false, reason: "Unsupported scheme" }; - } - - const conn = await connections[scheme].promise; - return conn.consult(fileUriOrScheme); -} - -async function contextualize(tracks: Track[]) { - const groups = groupTracks(tracks); - const promises = Object.entries(groups).map(async ([scheme, tracksGroup]: [string, Track[]]) => { - if (!isSupportedScheme(scheme) || tracksGroup.length === 0) return; - const conn = await connections[scheme].promise; - await conn.contextualize(tracksGroup); - }); - - await Promise.all(promises); -} - -async function groupConsult(tracks: Track[]) { - const groups = groupTracksPerScheme(tracks); - - const consultations: GroupConsult[] = await Promise.all( - Object.keys(groups).map(async (scheme) => { - if (!isSupportedScheme(scheme)) { - return { - [scheme]: { - available: false, - reason: "Unsupported scheme", - tracks: groups[scheme] || [], - }, - }; - } - - const conn = await connections[scheme].promise; - const result = await conn.groupConsult(groups[scheme] || {}); - - return result; - }), - ); - - return consultations.reduce((acc: GroupConsult, c: GroupConsult) => { - return { ...acc, ...c }; - }, {}); -} - -async function list(cachedTracks: Track[] = []) { - const groups = await groupConsult(cachedTracks); - - Object.keys(connections).forEach((scheme) => { - if (!groups[scheme]) groups[scheme] = { available: true, tracks: [] }; - }); - - const promises = Object.entries(groups).map( - async ([scheme, { available, tracks }]: [string, ConsultGrouping]) => { - if (!available) return tracks; - if (!isSupportedScheme(scheme)) return tracks; - const conn = await connections[scheme].promise; - return conn.list(tracks); - }, - ); - - const nested = await Promise.all(promises); - const tracks = nested.flat(1); - - return tracks; -} - -async function resolve(args: { method: string; uri: string }) { - const scheme = args.uri.split(":", 1)[0]; - if (!isSupportedScheme(scheme)) return undefined; - - try { - const conn = await connections[scheme].promise; - return await conn.resolve(args); - } catch (err) { - console.error(`[configuration/input] Resolve error for scheme '${scheme}'.`, err); - } -} - -//////////////////////////////////////////// -// 🛠️ -//////////////////////////////////////////// - -function groupTracks(tracks: Track[]) { - const grouped = groupTracksPerScheme( - tracks, - Object.fromEntries( - Object.entries(connections).map(([k, _v]) => { - return [k, []]; - }), - ), - ); - - return grouped; -} diff --git a/_backup/scripts/configurator/output/connections.ts b/_backup/scripts/configurator/output/connections.ts deleted file mode 100644 index 1188bb11f..000000000 --- a/_backup/scripts/configurator/output/connections.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Applet } from "@web-applets/sdk"; - -import type { ManagedOutput } from "@applets/core/types"; -import type { Method } from "./types"; -import { CONNECTIONS, CUSTOM_KEY } from "./constants"; -import { applet } from "@scripts/applet/common"; - -const connections: Record> = {}; - -export async function connection(method: Method) { - if (connections[method]) return connections[method]; - - let href; - - if (method === "custom") { - href = localStorage.getItem(CUSTOM_KEY); - if (!href) throw new Error("Missing custom applet URL"); - } else { - href = CONNECTIONS[method]; - if (!href) throw new Error("No href defined for this connection method."); - } - - connections[method] = await applet(href); - return connections[method]; -} diff --git a/_backup/scripts/configurator/output/constants.ts b/_backup/scripts/configurator/output/constants.ts deleted file mode 100644 index b6a50b938..000000000 --- a/_backup/scripts/configurator/output/constants.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const METHODS = ["browser", "custom", "device"] as const; - -export const CONNECTIONS = { - browser: "/output/indexed-db/", - custom: undefined, - device: "/output/native-fs/", -}; - -export const DEFAULT_METHOD: (typeof METHODS)[number] = "browser"; -export const LOCALSTORAGE_KEY = "applets/configurator/output/active-output"; -export const CUSTOM_KEY = "applets/configurator/output/custom-applet"; diff --git a/_backup/scripts/configurator/output/context.ts b/_backup/scripts/configurator/output/context.ts deleted file mode 100644 index af056273f..000000000 --- a/_backup/scripts/configurator/output/context.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ManagedOutput } from "@applets/core/types"; -import { register } from "@scripts/applet/common"; - -export const context = register(); diff --git a/_backup/scripts/configurator/output/events.ts b/_backup/scripts/configurator/output/events.ts deleted file mode 100644 index 6a0b86dc1..000000000 --- a/_backup/scripts/configurator/output/events.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { AppletEvent } from "@web-applets/sdk"; -import { context } from "./context"; - -export function setContextData(event: AppletEvent) { - context.data = event.data; -} diff --git a/_backup/scripts/configurator/output/signals.ts b/_backup/scripts/configurator/output/signals.ts deleted file mode 100644 index 5e8525a48..000000000 --- a/_backup/scripts/configurator/output/signals.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { effect, signal } from "@scripts/spellcaster"; - -import type { Method } from "./types"; -import { DEFAULT_METHOD, LOCALSTORAGE_KEY, METHODS } from "./constants"; - -export const stored = localStorage.getItem(LOCALSTORAGE_KEY); -export const active = signal( - stored && METHODS.includes(stored as Method) ? (stored as Method) : DEFAULT_METHOD, -); - -// 🚀 - -// storage().then((s) => { -// const stored = s.getItem(LOCALSTORAGE_KEY); -// active(stored && METHODS.includes(stored as Method) ? (stored as Method) : DEFAULT_METHOD); -// }); - -// EFFECT - -effect(() => { - const method = active(); - storage().then((s) => s.setItem(LOCALSTORAGE_KEY, method)); -}); - -async function storage() { - // const hasStorageAccess = - // (await document.hasStorageAccess()) || - // ( - // await navigator.permissions.query({ - // name: "storage-access", - // }) - // ).state === "granted"; - - // if (hasStorageAccess) { - // // @ts-ignore - // const handle: any = await document.requestStorageAccess({ - // localStorage: true, - // }); - - // return handle ? handle.localStorage : localStorage; - // } else { - // return localStorage; - // } - return localStorage; -} diff --git a/_backup/scripts/configurator/output/types.d.ts b/_backup/scripts/configurator/output/types.d.ts deleted file mode 100644 index f89ab0e6f..000000000 --- a/_backup/scripts/configurator/output/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { METHODS } from "./constants"; - -export type Method = (typeof METHODS)[number]; -export type List = Map>; -export type ListItem = { activated: boolean; icon: string; method: M; title: string }; diff --git a/_backup/scripts/configurator/output/ui.ts b/_backup/scripts/configurator/output/ui.ts deleted file mode 100644 index a63950444..000000000 --- a/_backup/scripts/configurator/output/ui.ts +++ /dev/null @@ -1,258 +0,0 @@ -import { type Signal, computed, effect, signal } from "@scripts/spellcaster"; -import { h, repeat, text } from "@scripts/spellcaster/hyperscript.js"; - -import { applet, reactive } from "@scripts/applet/common"; -import { CUSTOM_KEY } from "./constants"; -import { active } from "./signals"; -import { connection } from "./connections"; -import { context } from "./context"; -import type { List, ListItem, Method } from "./types"; -import { setContextData } from "./events"; - -//////////////////////////////////////////// -// EFFECTS -//////////////////////////////////////////// -reactive( - context.scope, - (data) => data.tracks.cacheId, - () => { - // Export data URI - const dl = document.querySelector("#download"); - if (dl) { - const json = JSON.stringify(context.data.tracks.collection, null, 2); - const href = URL.createObjectURL(new Blob([json], { type: "application/json" })); - dl.setAttribute("href", href); - } - }, -); - -// Mount + Unmount -async function mountStorageMethod(method: Method) { - switch (method) { - case "custom": - modalIsOpen(true); - break; - default: - const conn = await connection(method); - try { - await conn.sendAction("mount", undefined, { timeoutDuration: 60000 }); - active(method); - } catch (err) { - const msg: string = - err && typeof err === "object" && "message" in err ? `${err.message}` : `${err}`; - if (msg.startsWith("[user] ")) alert(msg.slice(7)); - } - break; - } -} - -async function unmountStorageMethod(method: Method) { - const conn = await connection(method); - conn.removeEventListener("data", setContextData); - await conn.sendAction("unmount", undefined, { timeoutDuration: 60000 }); -} - -//////////////////////////////////////////// -// LIST -//////////////////////////////////////////// -const list = computed(() => { - const a = active(); - - return new Map([ - [ - `browser-${a === "browser"}`, - { - title: "Browser storage", - icon: "iconoir-app-window", - method: "browser", - activated: a === "browser", - }, - ], - [ - `device-${a === "device"}`, - { - title: "Device storage", - icon: "iconoir-laptop", - method: "device", - activated: a === "device", - }, - ], - [ - `custom-${a === "custom"}`, - { - title: "Custom applet", - icon: "iconoir-globe", - method: "custom", - activated: a === "custom", - }, - ], - ]); -}); - -const Item = (signal: Signal>) => { - const item = signal(); - - const colorClass = item.activated ? "pico-color-jade-500" : "pico-color-grey-500"; - const icon = item.activated ? "iconoir-check-circle-solid" : "iconoir-check-circle"; - - return h( - "p", - { - onclick: clickHandler(item.method), - style: "cursor: pointer", - }, - [ - h("span", { className: "with-icon" }, [ - h("i", { className: item.icon }), - h("strong", {}, text(item.title)), - ]), - h("br"), - h("span", { className: `with-icon ${colorClass}` }, [ - h("i", { className: icon }), - h("span", {}, text(item.activated ? "Active" : "Select")), - ]), - ], - ); -}; - -function clickHandler(method: Method) { - return async () => { - const currentlyActive = active(); - - // const permission = await navigator.permissions.query({ - // name: "storage-access", - // }); - - // if (permission.state === "prompt") { - // // @ts-ignore - // await document.requestStorageAccess({ - // localStorage: true, - // }); - // } - - if (currentlyActive === method && currentlyActive !== "custom") return; - if (currentlyActive) unmountStorageMethod(currentlyActive); - await mountStorageMethod(method); - }; -} - -const Options = computed(() => { - return h("div", { id: "options" }, repeat(list, Item)); -}); - -// Add to DOM -document.getElementById("options")?.replaceWith(Options()); - -//////////////////////////////////////////// -// CUSTOM APPLET -//////////////////////////////////////////// -type CustomAppletState = "waiting" | "connecting" | { error: string } | "connected"; - -const modalIsOpen = signal(false); -const customState = signal("waiting"); - -const Modal = () => { - const Header = h("header", {}, [ - h("button", { - attrs: { rel: "prev" }, - ariaLabel: "Close", - onclick: close, - }), - h("p", {}, [ - h("strong", {}, [ - h("span", { className: "with-icon" }, [ - h("i", { className: "iconoir-globe" }), - h("span", {}, text("Load a custom applet")), - ]), - ]), - ]), - ]); - - const Content = h("form", { onsubmit: submit }, [ - h("fieldset", { role: "group" }, [ - h("input", { - type: "url", - name: "url", - placeholder: "https://applets.diffuse.sh/storage/output/indexed-db/", - required: true, - value: localStorage.getItem(CUSTOM_KEY) || "", - }), - h("input", { type: "submit", value: "Connect" }), - ]), - h("p", {}, [ - h("small", { className: "with-icon" }, (element) => { - const comp = computed(() => { - const s = customState(); - - if (s === "connecting") { - return [ - h("i", { className: "iconoir-ev-plug-charging" }), - h("span", {}, text("Connecting ...")), - ]; - } else if (typeof s !== "string") { - return [ - h("i", { className: "iconoir-warning-circle" }), - h("span", {}, text(`Error: ${s.error}`)), - ]; - } - - return [h("span", {}, text("Enter the URL to the applet."))]; - }); - - effect(() => { - element.replaceChildren(...comp()); - }); - }), - ]), - ]); - - return h( - "dialog", - computed(() => ({ open: modalIsOpen() })), - [h("article", {}, [Header, Content])], - ); -}; - -// Events -function close() { - modalIsOpen(false); -} - -async function submit(event: SubmitEvent) { - event.preventDefault(); - - const input: HTMLInputElement | null = (event.target as HTMLFormElement).querySelector( - `input[type="url"]`, - ); - - if (!input) return; - - const url = input.value; - customState("connecting"); - - const apl = await applet(url).catch((err) => { - customState({ error: "Failed to connect" }); - throw err; - }); - - let missingAction; - - ["tracks", "mount", "unmount"].forEach((method) => { - if (!apl.manifest.actions?.[method]) missingAction = method; - }); - - if (missingAction) { - customState({ error: `Applet is missing a required action: "${missingAction}"` }); - return; - } - - localStorage.setItem(CUSTOM_KEY, url); - await apl.sendAction("mount", undefined, { timeoutDuration: 60000 }); - - active("custom"); - modalIsOpen(false); - customState("waiting"); -} - -// Add to DOM -document.querySelector("main")?.appendChild(Modal()); diff --git a/src/component/configurator/common.js b/src/component/configurator/common.js new file mode 100644 index 000000000..e2fa98e49 --- /dev/null +++ b/src/component/configurator/common.js @@ -0,0 +1,12 @@ +import QS from "query-string"; + +/** + * @param {Location} loc + * @returns {Record} + */ +export function connectionsFromQuery(loc) { + const qs = QS.parse(loc.search); + console.log(qs); + + return {}; +} diff --git a/src/component/configurator/input/worker.js b/src/component/configurator/input/worker.js new file mode 100644 index 000000000..f43e8af19 --- /dev/null +++ b/src/component/configurator/input/worker.js @@ -0,0 +1,156 @@ +import * as URI from "uri-js"; + +import { groupTracksPerScheme } from "@common/index.js"; +import { connectionsFromQuery } from "../common.js"; +import { use } from "@common/worker.js"; + +/** + * @import { GroupConsult, InputActions as Actions, Track } from "@component/core/types.d.ts"; + */ + +//////////////////////////////////////////// +// ⚡️ +//////////////////////////////////////////// + +const connections = connectionsFromQuery(location); + +/** + * @param {string} scheme + * @param {string} actionName + */ +function proxy(scheme, actionName) { + const worker = connections[scheme]; + const proxyFn = use(actionName, worker); + + return proxyFn; +} + +/** + * @param {string} scheme + */ +function isSupportedScheme(scheme) { + return !!connections[scheme]; +} + +//////////////////////////////////////////// +// ACTIONS +//////////////////////////////////////////// + +/** + * @type {Actions['consult']} + */ +export async function consult(fileUriOrScheme) { + const scheme = fileUriOrScheme.includes(":") + ? URI.parse(fileUriOrScheme).scheme || fileUriOrScheme + : fileUriOrScheme; + + if (!isSupportedScheme(scheme)) { + return { supported: false, reason: "Unsupported scheme" }; + } + + return await proxy(scheme, "consult")(fileUriOrScheme); +} + +/** + * @type {Actions['contextualize']} + */ +export async function contextualize(tracks) { + const groups = groupTracks(tracks); + const promises = Object.entries(groups).map( + async ([scheme, tracksGroup]) => { + if (!isSupportedScheme(scheme) || tracksGroup.length === 0) return; + return await proxy(scheme, "contextualize")(tracksGroup); + }, + ); + + await Promise.all(promises); +} + +/** + * @type {Actions['groupConsult']} + */ +export async function groupConsult(tracks) { + const groups = groupTracksPerScheme(tracks); + + /** @type {GroupConsult[]} */ + const consultations = await Promise.all( + Object.keys(groups).map(async (scheme) => { + if (!isSupportedScheme(scheme)) { + return { + [scheme]: { + available: false, + reason: "Unsupported scheme", + tracks: groups[scheme] || [], + }, + }; + } + + return await proxy(scheme, "groupConsult")(groups[scheme] || {}); + }), + ); + + return consultations.reduce((acc, c) => { + return { ...acc, ...c }; + }, {}); +} + +/** + * @type {Actions['list']} + */ +export async function list(cachedTracks = []) { + const groups = await groupConsult(cachedTracks); + + Object.keys(connections).forEach((scheme) => { + if (!groups[scheme]) groups[scheme] = { available: true, tracks: [] }; + }); + + const promises = Object.entries(groups).map( + async ([scheme, { available, tracks }]) => { + if (!available) return tracks; + if (!isSupportedScheme(scheme)) return tracks; + return await proxy(scheme, "list")(tracks); + }, + ); + + const nested = await Promise.all(promises); + const tracks = nested.flat(1); + + return tracks; +} + +/** + * @type {Actions['resolve']} + */ +export async function resolve(args) { + const scheme = args.uri.split(":", 1)[0]; + if (!isSupportedScheme(scheme)) return undefined; + + try { + return await proxy(scheme, "resolve")(args); + } catch (err) { + console.error( + `[configurator/input] Resolve error for scheme '${scheme}'.`, + err, + ); + } +} + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +/** + * @param {Track[]} tracks + */ +function groupTracks(tracks) { + const grouped = groupTracksPerScheme( + tracks, + Object.fromEntries( + Object.entries(connections).map(([k, _v]) => { + return [k, []]; + }), + ), + ); + + return grouped; +} From de47a004f7dfe4da734b846ac896faa99711533f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 31 Oct 2025 23:02:49 +0100 Subject: [PATCH 063/244] chore: clean up remaining old code --- .../constituent/blur/artwork-controller/_manifest.json | 6 ------ .../constituent/blur/artwork-controller/index.astro | 9 --------- .../theme}/blur/artwork-controller/_applet.astro | 0 3 files changed, 15 deletions(-) delete mode 100644 _backup/pages/constituent/blur/artwork-controller/_manifest.json delete mode 100644 _backup/pages/constituent/blur/artwork-controller/index.astro rename {_backup/pages/constituent => src/theme}/blur/artwork-controller/_applet.astro (100%) diff --git a/_backup/pages/constituent/blur/artwork-controller/_manifest.json b/_backup/pages/constituent/blur/artwork-controller/_manifest.json deleted file mode 100644 index 78202f798..000000000 --- a/_backup/pages/constituent/blur/artwork-controller/_manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "diffuse/constituent/blur/artwork-controller", - "title": "Diffuse Blur Theme | Artwork Controller", - "entrypoint": "index.html", - "actions": {} -} diff --git a/_backup/pages/constituent/blur/artwork-controller/index.astro b/_backup/pages/constituent/blur/artwork-controller/index.astro deleted file mode 100644 index dfb1e1a87..000000000 --- a/_backup/pages/constituent/blur/artwork-controller/index.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Layout from "@layouts/applet.astro"; -import Applet from "./_applet.astro"; -import { title } from "./_manifest.json"; ---- - - - - diff --git a/_backup/pages/constituent/blur/artwork-controller/_applet.astro b/src/theme/blur/artwork-controller/_applet.astro similarity index 100% rename from _backup/pages/constituent/blur/artwork-controller/_applet.astro rename to src/theme/blur/artwork-controller/_applet.astro From fff0ba5254fd8edec3b5449ba1d560fd5333e9fb Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 1 Nov 2025 16:33:04 +0100 Subject: [PATCH 064/244] chore: reorganise --- deno.jsonc | 2 +- src/common/index.js | 2 +- src/component/output/indexed-db/constants.js | 1 - src/component/processor/artwork/constants.js | 2 -- .../configurator/common.js | 0 .../configurator/input/worker.js | 2 +- src/{component => components}/core/types.d.ts | 0 .../engine/audio/element.js | 0 .../engine/audio/types.d.ts | 0 .../engine/queue/element.js | 2 +- .../engine/queue/types.d.ts | 2 +- .../engine/queue/worker.js | 2 +- src/{component => components}/input/common.js | 0 .../input/opensubsonic/common.js | 2 +- .../input/opensubsonic/constants.js | 2 +- .../input/opensubsonic/element.js | 4 +-- .../input/opensubsonic/types.d.ts | 0 .../input/opensubsonic/worker.js | 2 +- .../input/s3/common.js | 2 +- .../input/s3/constants.js | 2 +- .../input/s3/types.d.ts | 0 .../input/s3/worker.js | 4 +-- .../orchestrator/process-tracks/element.js | 4 +-- .../orchestrator/queue-audio/element.js | 6 ++--- .../orchestrator/queue-tracks/element.js | 4 +-- .../orchestrator/search-tracks/element.js | 4 +-- .../output/common.js | 2 +- src/components/output/indexed-db/constants.js | 1 + .../output/indexed-db/element.js | 4 +-- .../output/indexed-db/worker.js | 2 +- src/components/processor/artwork/constants.js | 2 ++ .../processor/artwork/element.js | 0 .../processor/artwork/types.d.ts | 2 +- .../processor/artwork/worker.js | 0 .../processor/metadata/common.js | 2 +- .../processor/metadata/element.js | 2 +- .../processor/metadata/types.d.ts | 2 +- .../processor/metadata/worker.js | 0 .../processor/search/constants.js | 0 .../processor/search/element.js | 2 +- .../processor/search/types.d.ts | 2 +- .../processor/search/worker.js | 2 +- src/index.vto | 26 +++++++++---------- src/mod.ts | 2 +- src/theme/blur/index.js | 26 ------------------- .../blur/artwork-controller/_applet.astro | 0 src/{theme => themes}/blur/index.css | 0 src/themes/blur/index.js | 26 +++++++++++++++++++ src/{theme => themes}/blur/index.vto | 0 src/{theme => themes}/blur/variables.css | 0 src/{theme => themes}/webamp/98-vars.css | 0 .../webamp/browser/element.js | 4 +-- src/{theme => themes}/webamp/index.css | 0 src/{theme => themes}/webamp/index.js | 14 +++++----- src/{theme => themes}/webamp/index.vto | 0 src/{theme => themes}/webamp/webamp.js | 2 +- .../webamp/window-manager/element.js | 0 .../webamp/window/element.js | 0 58 files changed, 88 insertions(+), 88 deletions(-) delete mode 100644 src/component/output/indexed-db/constants.js delete mode 100644 src/component/processor/artwork/constants.js rename src/{component => components}/configurator/common.js (100%) rename src/{component => components}/configurator/input/worker.js (99%) rename src/{component => components}/core/types.d.ts (100%) rename src/{component => components}/engine/audio/element.js (100%) rename src/{component => components}/engine/audio/types.d.ts (100%) rename src/{component => components}/engine/queue/element.js (97%) rename src/{component => components}/engine/queue/types.d.ts (89%) rename src/{component => components}/engine/queue/worker.js (98%) rename src/{component => components}/input/common.js (100%) rename src/{component => components}/input/opensubsonic/common.js (98%) rename src/{component => components}/input/opensubsonic/constants.js (60%) rename src/{component => components}/input/opensubsonic/element.js (89%) rename src/{component => components}/input/opensubsonic/types.d.ts (100%) rename src/{component => components}/input/opensubsonic/worker.js (99%) rename src/{component => components}/input/s3/common.js (98%) rename src/{component => components}/input/s3/constants.js (87%) rename src/{component => components}/input/s3/types.d.ts (100%) rename src/{component => components}/input/s3/worker.js (96%) rename src/{component => components}/orchestrator/process-tracks/element.js (97%) rename src/{component => components}/orchestrator/queue-audio/element.js (93%) rename src/{component => components}/orchestrator/queue-tracks/element.js (95%) rename src/{component => components}/orchestrator/search-tracks/element.js (94%) rename src/{component => components}/output/common.js (91%) create mode 100644 src/components/output/indexed-db/constants.js rename src/{component => components}/output/indexed-db/element.js (92%) rename src/{component => components}/output/indexed-db/worker.js (94%) create mode 100644 src/components/processor/artwork/constants.js rename src/{component => components}/processor/artwork/element.js (100%) rename src/{component => components}/processor/artwork/types.d.ts (88%) rename src/{component => components}/processor/artwork/worker.js (100%) rename src/{component => components}/processor/metadata/common.js (96%) rename src/{component => components}/processor/metadata/element.js (93%) rename src/{component => components}/processor/metadata/types.d.ts (84%) rename src/{component => components}/processor/metadata/worker.js (100%) rename src/{component => components}/processor/search/constants.js (100%) rename src/{component => components}/processor/search/element.js (94%) rename src/{component => components}/processor/search/types.d.ts (65%) rename src/{component => components}/processor/search/worker.js (98%) delete mode 100644 src/theme/blur/index.js rename src/{theme => themes}/blur/artwork-controller/_applet.astro (100%) rename src/{theme => themes}/blur/index.css (100%) create mode 100644 src/themes/blur/index.js rename src/{theme => themes}/blur/index.vto (100%) rename src/{theme => themes}/blur/variables.css (100%) rename src/{theme => themes}/webamp/98-vars.css (100%) rename src/{theme => themes}/webamp/browser/element.js (97%) rename src/{theme => themes}/webamp/index.css (100%) rename src/{theme => themes}/webamp/index.js (90%) rename src/{theme => themes}/webamp/index.vto (100%) rename src/{theme => themes}/webamp/webamp.js (97%) rename src/{theme => themes}/webamp/window-manager/element.js (100%) rename src/{theme => themes}/webamp/window/element.js (100%) diff --git a/deno.jsonc b/deno.jsonc index 5dbba3aa0..a223788e5 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -34,7 +34,7 @@ // Paths "@common/": "./src/common/", - "@component/": "./src/component/", + "@components/": "./src/components/", // Build "@std/fs": "jsr:@std/fs@^1.0.19", diff --git a/src/common/index.js b/src/common/index.js index 701405635..d23054bb0 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -1,7 +1,7 @@ // import * as Uint8 from "uint8arrays"; /** - * @import {Track} from "@component/core/types.d.ts" + * @import {Track} from "@components/core/types.d.ts" */ /** diff --git a/src/component/output/indexed-db/constants.js b/src/component/output/indexed-db/constants.js deleted file mode 100644 index 86ff78332..000000000 --- a/src/component/output/indexed-db/constants.js +++ /dev/null @@ -1 +0,0 @@ -export const IDB_PREFIX = "@component/output/indexed-db"; diff --git a/src/component/processor/artwork/constants.js b/src/component/processor/artwork/constants.js deleted file mode 100644 index 9659af9cf..000000000 --- a/src/component/processor/artwork/constants.js +++ /dev/null @@ -1,2 +0,0 @@ -export const IDB_PREFIX = "@component/processor/artwork"; -export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/cache`; diff --git a/src/component/configurator/common.js b/src/components/configurator/common.js similarity index 100% rename from src/component/configurator/common.js rename to src/components/configurator/common.js diff --git a/src/component/configurator/input/worker.js b/src/components/configurator/input/worker.js similarity index 99% rename from src/component/configurator/input/worker.js rename to src/components/configurator/input/worker.js index f43e8af19..643285ef1 100644 --- a/src/component/configurator/input/worker.js +++ b/src/components/configurator/input/worker.js @@ -5,7 +5,7 @@ import { connectionsFromQuery } from "../common.js"; import { use } from "@common/worker.js"; /** - * @import { GroupConsult, InputActions as Actions, Track } from "@component/core/types.d.ts"; + * @import { GroupConsult, InputActions as Actions, Track } from "@components/core/types.d.ts"; */ //////////////////////////////////////////// diff --git a/src/component/core/types.d.ts b/src/components/core/types.d.ts similarity index 100% rename from src/component/core/types.d.ts rename to src/components/core/types.d.ts diff --git a/src/component/engine/audio/element.js b/src/components/engine/audio/element.js similarity index 100% rename from src/component/engine/audio/element.js rename to src/components/engine/audio/element.js diff --git a/src/component/engine/audio/types.d.ts b/src/components/engine/audio/types.d.ts similarity index 100% rename from src/component/engine/audio/types.d.ts rename to src/components/engine/audio/types.d.ts diff --git a/src/component/engine/queue/element.js b/src/components/engine/queue/element.js similarity index 97% rename from src/component/engine/queue/element.js rename to src/components/engine/queue/element.js index 63642dd1f..17a598ef7 100644 --- a/src/component/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -19,7 +19,7 @@ class QueueEngine extends DiffuseElement { // Setup worker const name = `diffuse/engine/queue/${this.group}`; - const url = "/component/engine/queue/worker.js"; + const url = "/components/engine/queue/worker.js"; let port; diff --git a/src/component/engine/queue/types.d.ts b/src/components/engine/queue/types.d.ts similarity index 89% rename from src/component/engine/queue/types.d.ts rename to src/components/engine/queue/types.d.ts index 1c24d0ca1..e5495c965 100644 --- a/src/component/engine/queue/types.d.ts +++ b/src/components/engine/queue/types.d.ts @@ -1,4 +1,4 @@ -import type { Track, TrackStats, TrackTags } from "@component/core/types.d.ts"; +import type { Track, TrackStats, TrackTags } from "@components/core/types.d.ts"; import type { SignalReader } from "@common/signal.d.ts"; export type Actions = { diff --git a/src/component/engine/queue/worker.js b/src/components/engine/queue/worker.js similarity index 98% rename from src/component/engine/queue/worker.js rename to src/components/engine/queue/worker.js index f7b47fe3c..bebef0744 100644 --- a/src/component/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -4,7 +4,7 @@ import { arrayShuffle } from "@common/index.js"; /** * @import {Actions, Item} from "./types.d.ts" - * @import {Track} from "@component/core/types.d.ts" + * @import {Track} from "@components/core/types.d.ts" */ const QUEUE_SIZE = 25; diff --git a/src/component/input/common.js b/src/components/input/common.js similarity index 100% rename from src/component/input/common.js rename to src/components/input/common.js diff --git a/src/component/input/opensubsonic/common.js b/src/components/input/opensubsonic/common.js similarity index 98% rename from src/component/input/opensubsonic/common.js rename to src/components/input/opensubsonic/common.js index cd1c841b6..11f5e4b7d 100644 --- a/src/component/input/opensubsonic/common.js +++ b/src/components/input/opensubsonic/common.js @@ -8,7 +8,7 @@ import { IDB_SERVERS, SCHEME } from "./constants.js"; /** * @import {Child} from "subsonic-api" * @import {Server} from "./types.d.ts"; - * @import {Track} from "@component/core/types.d.ts"; + * @import {Track} from "@components/core/types.d.ts"; */ /** diff --git a/src/component/input/opensubsonic/constants.js b/src/components/input/opensubsonic/constants.js similarity index 60% rename from src/component/input/opensubsonic/constants.js rename to src/components/input/opensubsonic/constants.js index 98f81b847..981a35df4 100644 --- a/src/component/input/opensubsonic/constants.js +++ b/src/components/input/opensubsonic/constants.js @@ -1,3 +1,3 @@ -export const IDB_PREFIX = "@component/input/opensubsonic"; +export const IDB_PREFIX = "@components/input/opensubsonic"; export const IDB_SERVERS = `${IDB_PREFIX}/servers`; export const SCHEME = "opensubsonic"; diff --git a/src/component/input/opensubsonic/element.js b/src/components/input/opensubsonic/element.js similarity index 89% rename from src/component/input/opensubsonic/element.js rename to src/components/input/opensubsonic/element.js index cb346d67f..6f108f9a4 100644 --- a/src/component/input/opensubsonic/element.js +++ b/src/components/input/opensubsonic/element.js @@ -2,7 +2,7 @@ import { DiffuseElement } from "@common/element.js"; import { use } from "@common/worker.js"; /** - * @import {InputActions} from "@component/core/types.d.ts" + * @import {InputActions} from "@components/core/types.d.ts" */ //////////////////////////////////////////// @@ -18,7 +18,7 @@ class OpensubsonicInput extends DiffuseElement { // Setup worker const name = `diffuse/input/opensubsonic/${this.group}`; - const url = "/component/input/opensubsonic/worker.js"; + const url = "/components/input/opensubsonic/worker.js"; const worker = new Worker(url, { name, type: "module" }); // Worker proxy diff --git a/src/component/input/opensubsonic/types.d.ts b/src/components/input/opensubsonic/types.d.ts similarity index 100% rename from src/component/input/opensubsonic/types.d.ts rename to src/components/input/opensubsonic/types.d.ts diff --git a/src/component/input/opensubsonic/worker.js b/src/components/input/opensubsonic/worker.js similarity index 99% rename from src/component/input/opensubsonic/worker.js rename to src/components/input/opensubsonic/worker.js index 4302cf1e6..02e81c9f3 100644 --- a/src/component/input/opensubsonic/worker.js +++ b/src/components/input/opensubsonic/worker.js @@ -19,7 +19,7 @@ import { /** * @import {Child, SubsonicAPI} from "subsonic-api" - * @import {ConsultGrouping, InputActions as Actions, Track} from "@component/core/types.d.ts"; + * @import {ConsultGrouping, InputActions as Actions, Track} from "@components/core/types.d.ts"; * @import {Server} from "./types.d.ts" */ diff --git a/src/component/input/s3/common.js b/src/components/input/s3/common.js similarity index 98% rename from src/component/input/s3/common.js rename to src/components/input/s3/common.js index ba1e5330f..4ce66a638 100644 --- a/src/component/input/s3/common.js +++ b/src/components/input/s3/common.js @@ -6,7 +6,7 @@ import QS from "query-string"; import { ENCODINGS, IDB_BUCKETS, SCHEME } from "./constants.js"; /** - * @import { Track } from "@component/core/types.d.ts"; + * @import { Track } from "@components/core/types.d.ts"; * @import { Bucket } from "./types.d.ts"; */ diff --git a/src/component/input/s3/constants.js b/src/components/input/s3/constants.js similarity index 87% rename from src/component/input/s3/constants.js rename to src/components/input/s3/constants.js index 99575ec11..3eecda9de 100644 --- a/src/component/input/s3/constants.js +++ b/src/components/input/s3/constants.js @@ -1,4 +1,4 @@ -export const IDB_PREFIX = "@component/input/s3"; +export const IDB_PREFIX = "@components/input/s3"; export const IDB_BUCKETS = `${IDB_PREFIX}/buckets`; export const SCHEME = "s3"; diff --git a/src/component/input/s3/types.d.ts b/src/components/input/s3/types.d.ts similarity index 100% rename from src/component/input/s3/types.d.ts rename to src/components/input/s3/types.d.ts diff --git a/src/component/input/s3/worker.js b/src/components/input/s3/worker.js similarity index 96% rename from src/component/input/s3/worker.js rename to src/components/input/s3/worker.js index a5e49f48b..9ea684d57 100644 --- a/src/component/input/s3/worker.js +++ b/src/components/input/s3/worker.js @@ -1,4 +1,4 @@ -import { isAudioFile } from "@component/input/common.js"; +import { isAudioFile } from "@components/input/common.js"; import { bucketId, bucketsFromTracks, @@ -12,7 +12,7 @@ import { import { SCHEME } from "./constants.js"; /** - * @import { InputActions as Actions, Track } from "@component/core/types.d.ts"; + * @import { InputActions as Actions, Track } from "@components/core/types.d.ts"; * @import { Bucket } from "./types.d.ts" */ diff --git a/src/component/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js similarity index 97% rename from src/component/orchestrator/process-tracks/element.js rename to src/components/orchestrator/process-tracks/element.js index df199b03c..331d0dfdf 100644 --- a/src/component/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -4,7 +4,7 @@ import { DiffuseElement, query } from "@common/element.js"; import { signal } from "@common/signal.js"; /** - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" */ //////////////////////////////////////////// @@ -26,7 +26,7 @@ class ProcessTracksOrchestrator extends DiffuseElement { /** @type {OutputElement} */ this.output = query(this, "output-selector"); - /** @type {import("@component/processor/metadata/element.js").CLASS} */ + /** @type {import("@components/processor/metadata/element.js").CLASS} */ this.metadataProcessor = query(this, "metadata-processor-selector"); } diff --git a/src/component/orchestrator/queue-audio/element.js b/src/components/orchestrator/queue-audio/element.js similarity index 93% rename from src/component/orchestrator/queue-audio/element.js rename to src/components/orchestrator/queue-audio/element.js index 65ad8de3b..cf1d73b71 100644 --- a/src/component/orchestrator/queue-audio/element.js +++ b/src/components/orchestrator/queue-audio/element.js @@ -2,7 +2,7 @@ import { DiffuseElement, query } from "@common/element.js"; import { untracked } from "@common/signal.js"; /** - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" */ //////////////////////////////////////////// @@ -23,10 +23,10 @@ class QueueAudioOrchestrator extends DiffuseElement { /** @type {InputElement} */ this.input = query(this, "input-selector"); - /** @type {import("@component/engine/audio/element.js").CLASS} */ + /** @type {import("@components/engine/audio/element.js").CLASS} */ this.audio = query(this, "audio-engine-selector"); - /** @type {import("@component/engine/queue/element.js").CLASS} */ + /** @type {import("@components/engine/queue/element.js").CLASS} */ this.queue = query(this, "queue-engine-selector"); } diff --git a/src/component/orchestrator/queue-tracks/element.js b/src/components/orchestrator/queue-tracks/element.js similarity index 95% rename from src/component/orchestrator/queue-tracks/element.js rename to src/components/orchestrator/queue-tracks/element.js index 54766579f..b995b3e0b 100644 --- a/src/component/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/queue-tracks/element.js @@ -2,7 +2,7 @@ import { DiffuseElement, query } from "@common/element.js"; import { untracked } from "@common/signal.js"; /** - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" */ //////////////////////////////////////////// @@ -24,7 +24,7 @@ class QueueTracksOrchestrator extends DiffuseElement { /** @type {OutputElement} */ this.output = query(this, "output-selector"); - /** @type {import("@component/engine/queue/element.js").CLASS} */ + /** @type {import("@components/engine/queue/element.js").CLASS} */ this.queue = query(this, "queue-engine-selector"); } diff --git a/src/component/orchestrator/search-tracks/element.js b/src/components/orchestrator/search-tracks/element.js similarity index 94% rename from src/component/orchestrator/search-tracks/element.js rename to src/components/orchestrator/search-tracks/element.js index 654b99366..88ecb0329 100644 --- a/src/component/orchestrator/search-tracks/element.js +++ b/src/components/orchestrator/search-tracks/element.js @@ -1,7 +1,7 @@ import { DiffuseElement, query } from "@common/element.js"; /** - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" */ //////////////////////////////////////////// @@ -23,7 +23,7 @@ class SearchTracksOrchestrator extends DiffuseElement { /** @type {OutputElement} */ this.output = query(this, "output-selector"); - /** @type {import("@component/processor/search/element.js").CLASS} */ + /** @type {import("@components/processor/search/element.js").CLASS} */ this.search = query(this, "search-processor-selector"); } diff --git a/src/component/output/common.js b/src/components/output/common.js similarity index 91% rename from src/component/output/common.js rename to src/components/output/common.js index 1d54ca9fc..954b22a83 100644 --- a/src/component/output/common.js +++ b/src/components/output/common.js @@ -1,7 +1,7 @@ import { effect, signal } from "@common/signal.js"; /** - * @import {OutputManager, Track} from "@component/core/types.d.ts" + * @import {OutputManager, Track} from "@components/core/types.d.ts" */ /** diff --git a/src/components/output/indexed-db/constants.js b/src/components/output/indexed-db/constants.js new file mode 100644 index 000000000..fac76d0c8 --- /dev/null +++ b/src/components/output/indexed-db/constants.js @@ -0,0 +1 @@ +export const IDB_PREFIX = "@components/output/indexed-db"; diff --git a/src/component/output/indexed-db/element.js b/src/components/output/indexed-db/element.js similarity index 92% rename from src/component/output/indexed-db/element.js rename to src/components/output/indexed-db/element.js index ffa20f612..f4048b745 100644 --- a/src/component/output/indexed-db/element.js +++ b/src/components/output/indexed-db/element.js @@ -3,7 +3,7 @@ import { use } from "@common/worker.js"; import { outputManager } from "../common.js"; /** - * @import {OutputActions, OutputManager, Track} from "@component/core/types.d.ts" + * @import {OutputActions, OutputManager, Track} from "@components/core/types.d.ts" */ //////////////////////////////////////////// @@ -19,7 +19,7 @@ class IndexedDBOutput extends DiffuseElement { // Setup worker const name = `diffuse/output/indexed-db/${this.group}`; - const url = "/component/output/indexed-db/worker.js"; + const url = "/components/output/indexed-db/worker.js"; const worker = new Worker(url, { name, type: "module" }); // Manager diff --git a/src/component/output/indexed-db/worker.js b/src/components/output/indexed-db/worker.js similarity index 94% rename from src/component/output/indexed-db/worker.js rename to src/components/output/indexed-db/worker.js index a26257e68..117de1a93 100644 --- a/src/component/output/indexed-db/worker.js +++ b/src/components/output/indexed-db/worker.js @@ -5,7 +5,7 @@ import { IDB_PREFIX } from "./constants.js"; import { define, ostiary } from "@common/worker.js"; /** - * @import {OutputActions, Track} from "@component/core/types.d.ts"; + * @import {OutputActions, Track} from "@components/core/types.d.ts"; */ //////////////////////////////////////////// diff --git a/src/components/processor/artwork/constants.js b/src/components/processor/artwork/constants.js new file mode 100644 index 000000000..1bda0811d --- /dev/null +++ b/src/components/processor/artwork/constants.js @@ -0,0 +1,2 @@ +export const IDB_PREFIX = "@components/processor/artwork"; +export const IDB_ARTWORK_PREFIX = `${IDB_PREFIX}/cache`; diff --git a/src/component/processor/artwork/element.js b/src/components/processor/artwork/element.js similarity index 100% rename from src/component/processor/artwork/element.js rename to src/components/processor/artwork/element.js diff --git a/src/component/processor/artwork/types.d.ts b/src/components/processor/artwork/types.d.ts similarity index 88% rename from src/component/processor/artwork/types.d.ts rename to src/components/processor/artwork/types.d.ts index 230f67176..9f2032031 100644 --- a/src/component/processor/artwork/types.d.ts +++ b/src/components/processor/artwork/types.d.ts @@ -1,4 +1,4 @@ -import type { TrackTags } from "@component/core/types.d.ts"; +import type { TrackTags } from "@components/core/types.d.ts"; export type Actions = { artwork(request: ArtworkRequest): Promise; diff --git a/src/component/processor/artwork/worker.js b/src/components/processor/artwork/worker.js similarity index 100% rename from src/component/processor/artwork/worker.js rename to src/components/processor/artwork/worker.js diff --git a/src/component/processor/metadata/common.js b/src/components/processor/metadata/common.js similarity index 96% rename from src/component/processor/metadata/common.js rename to src/components/processor/metadata/common.js index 34732431f..2df230087 100644 --- a/src/component/processor/metadata/common.js +++ b/src/components/processor/metadata/common.js @@ -4,7 +4,7 @@ import { HttpClient } from "@tokenizer/http"; import { tokenizer as rangeTokenizer } from "@tokenizer/range"; /** - * @import { TrackStats, TrackTags } from "@component/core/types.d.ts"; + * @import { TrackStats, TrackTags } from "@components/core/types.d.ts"; * @import { Extraction, Urls } from "./types.d.ts"; */ diff --git a/src/component/processor/metadata/element.js b/src/components/processor/metadata/element.js similarity index 93% rename from src/component/processor/metadata/element.js rename to src/components/processor/metadata/element.js index 28411ca07..70b29f4fc 100644 --- a/src/component/processor/metadata/element.js +++ b/src/components/processor/metadata/element.js @@ -18,7 +18,7 @@ class MetadataProcessor extends DiffuseElement { // Setup worker const name = `diffuse/processor/metadata/${this.group}`; - const url = "/component/processor/metadata/worker.js"; + const url = "/components/processor/metadata/worker.js"; const worker = new Worker(url, { name, type: "module" }); // Worker proxy diff --git a/src/component/processor/metadata/types.d.ts b/src/components/processor/metadata/types.d.ts similarity index 84% rename from src/component/processor/metadata/types.d.ts rename to src/components/processor/metadata/types.d.ts index 924152ba0..368f60912 100644 --- a/src/component/processor/metadata/types.d.ts +++ b/src/components/processor/metadata/types.d.ts @@ -1,5 +1,5 @@ import type { IPicture } from "music-metadata"; -import type { TrackStats, TrackTags } from "@component/core/types.d.ts"; +import type { TrackStats, TrackTags } from "@components/core/types.d.ts"; export type Actions = { supply: ( diff --git a/src/component/processor/metadata/worker.js b/src/components/processor/metadata/worker.js similarity index 100% rename from src/component/processor/metadata/worker.js rename to src/components/processor/metadata/worker.js diff --git a/src/component/processor/search/constants.js b/src/components/processor/search/constants.js similarity index 100% rename from src/component/processor/search/constants.js rename to src/components/processor/search/constants.js diff --git a/src/component/processor/search/element.js b/src/components/processor/search/element.js similarity index 94% rename from src/component/processor/search/element.js rename to src/components/processor/search/element.js index c3e9116a4..cea544850 100644 --- a/src/component/processor/search/element.js +++ b/src/components/processor/search/element.js @@ -18,7 +18,7 @@ class SearchProcessor extends DiffuseElement { // Setup worker const name = `diffuse/processor/search/${this.group}`; - const url = "/component/processor/search/worker.js"; + const url = "/components/processor/search/worker.js"; let port; diff --git a/src/component/processor/search/types.d.ts b/src/components/processor/search/types.d.ts similarity index 65% rename from src/component/processor/search/types.d.ts rename to src/components/processor/search/types.d.ts index a0f80651e..50bf91064 100644 --- a/src/component/processor/search/types.d.ts +++ b/src/components/processor/search/types.d.ts @@ -1,4 +1,4 @@ -import type { Track } from "@component/core/types.d.ts"; +import type { Track } from "@components/core/types.d.ts"; export type Actions = { search(term: string): Promise; diff --git a/src/component/processor/search/worker.js b/src/components/processor/search/worker.js similarity index 98% rename from src/component/processor/search/worker.js rename to src/components/processor/search/worker.js index d5c94846a..d5582298c 100644 --- a/src/component/processor/search/worker.js +++ b/src/components/processor/search/worker.js @@ -7,7 +7,7 @@ import { define, ostiary } from "@common/worker.js"; import { signal } from "@common/signal.js"; /** - * @import {Track} from "@component/core/types.d.ts" + * @import {Track} from "@components/core/types.d.ts" * @import {Actions} from "./types.d.ts" */ diff --git a/src/index.vto b/src/index.vto index 8a66589fe..c95c49530 100644 --- a/src/index.vto +++ b/src/index.vto @@ -2,41 +2,41 @@ layout: layouts/diffuse.vto themes: - - url: "theme/blur/" + - url: "themes/blur/" title: "Blur" - - url: "theme/webamp/" + - url: "themes/webamp/" title: "Webamp" engines: - - url: "component/engine/audio/element.js" + - url: "components/engine/audio/element.js" title: "Audio" - - url: "component/engine/queue/element.js" + - url: "components/engine/queue/element.js" title: "Queue" input: - - url: "component/input/opensubsonic/element.js" + - url: "components/input/opensubsonic/element.js" title: "Opensubsonic" - - url: "component/input/s3/element.js" + - url: "components/input/s3/element.js" title: "S3 (TODO)" orchestrators: - - url: "component/orchestrator/process-tracks/element.js" + - url: "components/orchestrator/process-tracks/element.js" title: "Process inputs into tracks" - - url: "component/orchestrator/queue-audio/element.js" + - url: "components/orchestrator/queue-audio/element.js" title: "Queue ⭤ Audio" - - url: "component/orchestrator/queue-tracks/element.js" + - url: "components/orchestrator/queue-tracks/element.js" title: "Queue ⭤ Tracks" output: - - url: "component/output/indexed-db/element.js" + - url: "components/output/indexed-db/element.js" title: "IndexedDB" processors: - - url: "component/processor/artwork/element.js" + - url: "components/processor/artwork/element.js" title: "Artwork" - - url: "component/processor/metadata/element.js" + - url: "components/processor/metadata/element.js" title: "Metadata" - - url: "component/processor/search/element.js" + - url: "components/processor/search/element.js" title: "Search" --- diff --git a/src/mod.ts b/src/mod.ts index 2d219de64..2564179b9 100644 --- a/src/mod.ts +++ b/src/mod.ts @@ -1 +1 @@ -export * from "./component/engine/audio/element.js"; +export * from "./components/engine/audio/element.js"; diff --git a/src/theme/blur/index.js b/src/theme/blur/index.js deleted file mode 100644 index d8272f06c..000000000 --- a/src/theme/blur/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import "@component/engine/audio/element.js"; -import "@component/input/opensubsonic/element.js"; -import "@component/orchestrator/process-tracks/element.js"; -import "@component/orchestrator/queue-audio/element.js"; -import "@component/orchestrator/queue-tracks/element.js"; -import "@component/processor/metadata/element.js"; - -import * as Output from "@component/output/indexed-db/element.js"; -import * as Queue from "@component/engine/queue/element.js"; - -import { component } from "@common/element.js"; -import { effect } from "@common/signal.js"; - -/** - * @import {Item} from "@component/engine/queue/types.d.ts" - */ - -const output = component(Output); -const queue = component(Queue); - -globalThis.output = output; -globalThis.queue = queue; - -effect(() => { - console.log("Active queue item:", queue.now()); -}); diff --git a/src/theme/blur/artwork-controller/_applet.astro b/src/themes/blur/artwork-controller/_applet.astro similarity index 100% rename from src/theme/blur/artwork-controller/_applet.astro rename to src/themes/blur/artwork-controller/_applet.astro diff --git a/src/theme/blur/index.css b/src/themes/blur/index.css similarity index 100% rename from src/theme/blur/index.css rename to src/themes/blur/index.css diff --git a/src/themes/blur/index.js b/src/themes/blur/index.js new file mode 100644 index 000000000..40d5afd56 --- /dev/null +++ b/src/themes/blur/index.js @@ -0,0 +1,26 @@ +import "@components/engine/audio/element.js"; +import "@components/input/opensubsonic/element.js"; +import "@components/orchestrator/process-tracks/element.js"; +import "@components/orchestrator/queue-audio/element.js"; +import "@components/orchestrator/queue-tracks/element.js"; +import "@components/processor/metadata/element.js"; + +import * as Output from "@components/output/indexed-db/element.js"; +import * as Queue from "@components/engine/queue/element.js"; + +import { component } from "@common/element.js"; +import { effect } from "@common/signal.js"; + +/** + * @import {Item} from "@components/engine/queue/types.d.ts" + */ + +const output = component(Output); +const queue = component(Queue); + +globalThis.output = output; +globalThis.queue = queue; + +effect(() => { + console.log("Active queue item:", queue.now()); +}); diff --git a/src/theme/blur/index.vto b/src/themes/blur/index.vto similarity index 100% rename from src/theme/blur/index.vto rename to src/themes/blur/index.vto diff --git a/src/theme/blur/variables.css b/src/themes/blur/variables.css similarity index 100% rename from src/theme/blur/variables.css rename to src/themes/blur/variables.css diff --git a/src/theme/webamp/98-vars.css b/src/themes/webamp/98-vars.css similarity index 100% rename from src/theme/webamp/98-vars.css rename to src/themes/webamp/98-vars.css diff --git a/src/theme/webamp/browser/element.js b/src/themes/webamp/browser/element.js similarity index 97% rename from src/theme/webamp/browser/element.js rename to src/themes/webamp/browser/element.js index f4c030ec0..adb903cf4 100644 --- a/src/theme/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -2,7 +2,7 @@ import { DiffuseElement, query } from "@common/element.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {InputElement, OutputElement, Track} from "@component/core/types.d.ts" + * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" */ class Browser extends DiffuseElement { @@ -18,7 +18,7 @@ class Browser extends DiffuseElement { /** @type {OutputElement} */ this.output = query(this, "output-selector"); - /** @type {import("@component/engine/queue/element.js").CLASS} */ + /** @type {import("@components/engine/queue/element.js").CLASS} */ this.queue = query(this, "queue-selector"); /** @type {import("../webamp.js").CLASS} */ diff --git a/src/theme/webamp/index.css b/src/themes/webamp/index.css similarity index 100% rename from src/theme/webamp/index.css rename to src/themes/webamp/index.css diff --git a/src/theme/webamp/index.js b/src/themes/webamp/index.js similarity index 90% rename from src/theme/webamp/index.js rename to src/themes/webamp/index.js index 839674c82..1dfbd4165 100644 --- a/src/theme/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,12 +1,12 @@ import deepDiff from "@fry69/deep-diff"; -// import "@component/orchestrator/process-tracks/element.js"; -import "@component/orchestrator/queue-tracks/element.js"; -import "@component/output/indexed-db/element.js"; -import "@component/processor/metadata/element.js"; +// import "@components/orchestrator/process-tracks/element.js"; +import "@components/orchestrator/queue-tracks/element.js"; +import "@components/output/indexed-db/element.js"; +import "@components/processor/metadata/element.js"; -import * as Input from "@component/input/opensubsonic/element.js"; -import * as Queue from "@component/engine/queue/element.js"; +import * as Input from "@components/input/opensubsonic/element.js"; +import * as Queue from "@components/engine/queue/element.js"; import { component } from "@common/element.js"; import { effect, signal, untracked } from "@common/signal.js"; @@ -20,7 +20,7 @@ import { xxh32 } from "xxh32"; /** * @import {URLTrack} from "webamp" * - * @import {Item} from "@component/engine/queue/types.d.ts" + * @import {Item} from "@components/engine/queue/types.d.ts" */ const input = component(Input); diff --git a/src/theme/webamp/index.vto b/src/themes/webamp/index.vto similarity index 100% rename from src/theme/webamp/index.vto rename to src/themes/webamp/index.vto diff --git a/src/theme/webamp/webamp.js b/src/themes/webamp/webamp.js similarity index 97% rename from src/theme/webamp/webamp.js rename to src/themes/webamp/webamp.js index 2d92f5ff7..71c414829 100644 --- a/src/theme/webamp/webamp.js +++ b/src/themes/webamp/webamp.js @@ -1,7 +1,7 @@ import Webamp from "webamp/lazy"; /** - * @import {Track} from "@component/core/types.d.ts" + * @import {Track} from "@components/core/types.d.ts" */ class WebampElement extends HTMLElement { constructor() { diff --git a/src/theme/webamp/window-manager/element.js b/src/themes/webamp/window-manager/element.js similarity index 100% rename from src/theme/webamp/window-manager/element.js rename to src/themes/webamp/window-manager/element.js diff --git a/src/theme/webamp/window/element.js b/src/themes/webamp/window/element.js similarity index 100% rename from src/theme/webamp/window/element.js rename to src/themes/webamp/window/element.js From 66aa111f9f0039400a26a09e536bcb1847dbe575 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 1 Nov 2025 19:09:36 +0100 Subject: [PATCH 065/244] feat: put more info in track tags + webamp theme improvements --- src/components/core/types.d.ts | 69 +++++++++++++++++- src/components/engine/queue/element.js | 9 ++- src/components/engine/queue/worker.js | 25 ++++++- src/components/input/opensubsonic/worker.js | 67 +++++++++++++++-- .../orchestrator/queue-tracks/element.js | 5 +- .../orchestrator/search-tracks/element.js | 5 +- src/components/processor/metadata/common.js | 57 ++++++++++++++- src/themes/webamp/browser/element.js | 19 ++--- src/themes/webamp/index.js | 73 ++++++++----------- src/themes/webamp/index.vto | 3 +- .../webamp/{webamp.js => webamp/element.js} | 9 +-- 11 files changed, 261 insertions(+), 80 deletions(-) rename src/themes/webamp/{webamp.js => webamp/element.js} (89%) diff --git a/src/components/core/types.d.ts b/src/components/core/types.d.ts index 9d7db96bc..5e6a8eff7 100644 --- a/src/components/core/types.d.ts +++ b/src/components/core/types.d.ts @@ -71,16 +71,83 @@ export interface Track { } export interface TrackStats { + /** Album gain in dB */ + albumGain?: number; + + /** Bits per second */ bitrate?: number; + + /** Bit depth */ + bitsPerSample?: number; + + /** Compression algorithm used */ + codec?: string; + + /** Encoding format used */ + container?: string; + + /** Duration in seconds */ duration?: number; + + /** Is track lossless? */ + lossless?: boolean; + + /** Number of audio channels */ + numberOfChannels?: number; + + /** Samples per second */ + sampleRate?: number; + + /** Track gain in dB */ + trackGain?: number; } export interface TrackTags { album?: string; + albumartist?: string; + albumartists?: string[]; + albumartistsort?: string; + albumsort?: string; + arranger?: string[]; artist?: string; + artists?: string[]; + artistsort?: string; + asin?: string; + averageLevel?: number; + barcode?: string; + bpm?: number; + catalognumbers?: string[]; + compilation?: boolean; + composers?: string[]; + composersort?: string; + conductors?: string[]; + date?: string; disc: { no: number; of?: number }; - genre?: string; + djmixers?: string[]; + engineers?: string[]; + gapless?: boolean; + genres?: string[]; + isrc?: string[]; + labels?: string[]; + lyricists?: string[]; + media?: string; + mixers?: string[]; + moods?: string[]; + originaldate?: string; + originalyear?: number; + peakLevel?: number; + producers?: string[]; + publishers?: string[]; + releasecountry?: string; + releasedate?: string; + releasestatus?: string; + releasetypes?: string[]; + remixers?: string[]; + technicians?: string[]; title: string; + titlesort?: string; track: { no: number; of?: number }; + work?: string; + writers?: string[]; year?: number; } diff --git a/src/components/engine/queue/element.js b/src/components/engine/queue/element.js index 17a598ef7..013ad285d 100644 --- a/src/components/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -1,3 +1,5 @@ +import QS from "query-string"; + import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; import { listen, use } from "@common/worker.js"; @@ -17,9 +19,14 @@ class QueueEngine extends DiffuseElement { constructor() { super(); + // Query + const query = QS.stringify({ + "fill-size": this.getAttribute("fill-size"), + }); + // Setup worker const name = `diffuse/engine/queue/${this.group}`; - const url = "/components/engine/queue/worker.js"; + const url = `/components/engine/queue/worker.js?${query}`; let port; diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index bebef0744..42915fef3 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -1,3 +1,5 @@ +import QS from "query-string"; + import { announce, define, ostiary } from "@common/worker.js"; import { effect, signal } from "@common/signal.js"; import { arrayShuffle } from "@common/index.js"; @@ -7,7 +9,15 @@ import { arrayShuffle } from "@common/index.js"; * @import {Track} from "@components/core/types.d.ts" */ -const QUEUE_SIZE = 25; +const QUERY = QS.parse(location.search); +const qFillSize = QUERY?.["fill-size"]; + +/** @type {number} */ +const FILL_SIZE = qFillSize && qFillSize !== null + ? Array.isArray(qFillSize) && qFillSize[0] !== null + ? parseInt(qFillSize[0], 10) + : parseInt(/** @type {string} */ (qFillSize), 10) + : 25; //////////////////////////////////////////// // STATE @@ -26,6 +36,7 @@ export const $past = signal(/** @type {Item[]} */ ([])); * @type {Actions['add']} */ export function add({ inFront, items }) { + // TODO: An entry is always manual and should be added in the correct place $future.value = inFront ? [...items, ...$future.value] : [...$future.value, ...items]; @@ -100,7 +111,15 @@ ostiary((port) => { * @returns {Item[]} */ function fill(future) { - if (future.length >= QUEUE_SIZE) return future; + let fillFutureCount = 0; + let manualFutureCount = 0; + + future.forEach((item) => { + if (item.manualEntry) manualFutureCount++; + else fillFutureCount++; + }); + + if (fillFutureCount >= FILL_SIZE) return future; /** @type {Item[]} */ const pool = []; @@ -125,7 +144,7 @@ function fill(future) { const poolSelection = arrayShuffle(reducedPool).slice( 0, - QUEUE_SIZE - future.length, + FILL_SIZE - fillFutureCount, ); return [...future, ...poolSelection]; diff --git a/src/components/input/opensubsonic/worker.js b/src/components/input/opensubsonic/worker.js index 02e81c9f3..933a0f2fa 100644 --- a/src/components/input/opensubsonic/worker.js +++ b/src/components/input/opensubsonic/worker.js @@ -153,16 +153,71 @@ export async function list(cachedTracks = []) { uri: buildURI(server, { songId: song.id, path }), stats: { - bitrate: song.bitRate, + albumGain: undefined, + bitrate: song.bitRate ? song.bitRate * 1000 : undefined, + bitsPerSample: undefined, + codec: undefined, + container: undefined, duration: song.duration, + lossless: undefined, + numberOfChannels: undefined, + sampleRate: undefined, + trackGain: undefined, }, tags: { album: song.album, - artist: song.artist, - disc: { no: song.discNumber || 1 }, - genre: song.genre, - title: song.title, - track: { no: song.track || 1 }, + albumartist: song.albumArtists?.[0]?.name, + albumartists: song.albumArtists?.map((a) => a.name), + albumartistsort: song.albumArtists?.[0]?.sortName, + albumsort: undefined, + arranger: undefined, + artist: song.artist ?? song.displayArtist, + artists: undefined, + artistsort: undefined, + asin: undefined, + averageLevel: undefined, + barcode: undefined, + bpm: song.bpm, + catalognumbers: undefined, + compilation: undefined, + composers: song.displayComposer + ? [song.displayComposer] + : undefined, + composersort: undefined, + conductors: undefined, + date: undefined, + disc: { + no: song.discNumber || 1, + }, + djmixers: undefined, + engineers: undefined, + gapless: undefined, + genres: song.genres, + isrc: undefined, + labels: undefined, + lyricists: undefined, + media: undefined, + mixers: undefined, + moods: song.moods, + originaldate: undefined, + originalyear: undefined, + peakLevel: undefined, + producers: undefined, + publishers: undefined, + releasecountry: undefined, + releasedate: undefined, + releasestatus: undefined, + releasetypes: undefined, + remixers: undefined, + technicians: undefined, + title: song.title ?? "Unknown", + titlesort: undefined, + track: { + no: song.track ?? 1, + of: song.size, + }, + work: undefined, + writers: undefined, year: song.year, }, }; diff --git a/src/components/orchestrator/queue-tracks/element.js b/src/components/orchestrator/queue-tracks/element.js index b995b3e0b..977a32ae7 100644 --- a/src/components/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/queue-tracks/element.js @@ -41,7 +41,10 @@ class QueueTracksOrchestrator extends DiffuseElement { // Watch tracks collection this.effect(() => { - const tracks = this.output.tracks.collection(); + const tracks = this.output.tracks.collection().filter((t) => + t.kind !== "placeholder" + ); + untracked(() => this.poolAvailable(tracks)); }); } diff --git a/src/components/orchestrator/search-tracks/element.js b/src/components/orchestrator/search-tracks/element.js index 88ecb0329..856dca8f4 100644 --- a/src/components/orchestrator/search-tracks/element.js +++ b/src/components/orchestrator/search-tracks/element.js @@ -40,7 +40,10 @@ class SearchTracksOrchestrator extends DiffuseElement { // Watch tracks collection this.effect(() => { - const tracks = this.output.tracks.collection(); + const tracks = this.output.tracks.collection().filter((t) => + t.kind !== "placeholder" + ); + this.supplyAvailable(tracks); }); } diff --git a/src/components/processor/metadata/common.js b/src/components/processor/metadata/common.js index 2df230087..bfef8b820 100644 --- a/src/components/processor/metadata/common.js +++ b/src/components/processor/metadata/common.js @@ -55,25 +55,76 @@ export async function musicMetadataTags({ /** @type {TrackStats} */ const stats = { + albumGain: meta.format.albumGain, + bitrate: meta.format.bitrate, + bitsPerSample: meta.format.bitsPerSample, + codec: meta.format.codec, + container: meta.format.container, duration: meta.format.duration, + lossless: meta.format.lossless, + numberOfChannels: meta.format.numberOfChannels, + sampleRate: meta.format.sampleRate, + trackGain: meta.format.trackGain, }; /** @type {TrackTags} */ const tags = { album: meta.common.album, + albumartist: meta.common.albumartist, + albumartists: meta.common.albumartists ?? + (meta.common.albumartist ? [meta.common.albumartist] : []), + albumartistsort: meta.common.albumartistsort, + albumsort: meta.common.albumsort, + arranger: meta.common.arranger, artist: meta.common.artist, + artists: meta.common.artists ?? + (meta.common.artist ? [meta.common.artist] : []), + artistsort: meta.common.artistsort, + asin: meta.common.asin, + averageLevel: meta.common.averageLevel, + barcode: meta.common.barcode, + bpm: meta.common.bpm, + catalognumbers: meta.common.catalognumber, + compilation: meta.common.compilation, + composers: meta.common.composer, + composersort: meta.common.composersort, + conductors: meta.common.conductor, + date: meta.common.date, disc: { no: meta.common.disk.no || 1, of: meta.common.disk.of ?? undefined, }, - genre: Array.isArray(meta.common.genre) - ? meta.common.genre[0] - : meta.common.genre, + djmixers: meta.common.djmixer, + engineers: meta.common.engineer, + gapless: meta.common.gapless, + genres: Array.isArray(meta.common.genre) + ? meta.common.genre + : [meta.common.genre], + isrc: meta.common.isrc, + labels: meta.common.label, + lyricists: meta.common.lyricist, + media: meta.common.media, + mixers: meta.common.mixer, + moods: meta.common.mood, + originaldate: meta.common.originaldate, + originalyear: meta.common.originalyear, + peakLevel: meta.common.peakLevel, + producers: meta.common.producer, + publishers: meta.common.publisher, + releasecountry: meta.common.releasecountry, + releasedate: meta.common.releasedate, + releasestatus: meta.common.releasestatus, + releasetypes: meta.common.releasetype, + remixers: meta.common.remixer, + technicians: meta.common.technician, title: meta.common.title || filename || urls?.head || "Unknown", + titlesort: meta.common.titlesort, track: { no: meta.common.track.no || 1, of: meta.common.track.of ?? undefined, }, + work: meta.common.work, + writers: meta.common.writer, year: meta.common.year, }; diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index adb903cf4..2920f6eb4 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -20,9 +20,6 @@ class Browser extends DiffuseElement { /** @type {import("@components/engine/queue/element.js").CLASS} */ this.queue = query(this, "queue-selector"); - - /** @type {import("../webamp.js").CLASS} */ - this.amp = query(this, "webamp-selector"); } // LIFECYCLE @@ -67,16 +64,12 @@ class Browser extends DiffuseElement { * @param {Track} track */ playTrack(track) { - console.log("Play track", track); - // this.queue.add({ - // inFront: true, - // items: [ - // { ...track, manualEntry: true }, - // ], - // }); - - this.amp.addTrack(track); - this.amp.amp.setCurrentTrack(this.amp.amp.getPlaylistTracks().length - 1); + this.queue.add({ + inFront: true, + items: [ + { ...track, manualEntry: true }, + ], + }); } // RENDER diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 1dfbd4165..6bedb3674 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,5 +1,3 @@ -import deepDiff from "@fry69/deep-diff"; - // import "@components/orchestrator/process-tracks/element.js"; import "@components/orchestrator/queue-tracks/element.js"; import "@components/output/indexed-db/element.js"; @@ -14,14 +12,7 @@ import { effect, signal, untracked } from "@common/signal.js"; import "./browser/element.js"; import "./window/element.js"; import "./window-manager/element.js"; -import WebampElement from "./webamp.js"; -import { xxh32 } from "xxh32"; - -/** - * @import {URLTrack} from "webamp" - * - * @import {Item} from "@components/engine/queue/types.d.ts" - */ +import WebampElement from "./webamp/element.js"; const input = component(Input); const queue = component(Queue); @@ -32,10 +23,12 @@ globalThis.queue = queue; // 📡 //////////////////////////////////////////// -let currBase = 0; +const currBase = 0; const $currTrack = signal(/** @type {null | number} */ (null)); -const $playlist = signal(/** @type {Item[]} */ ([])); +const $playlist = signal(/** @type {Set} */ (new Set()), { + eager: true, +}); //////////////////////////////////////////// // ⚡️ @@ -91,35 +84,31 @@ effect(() => { ...future, ]; - const hashNew = xxh32(JSON.stringify(playlist.map((i) => i.id))); - const hashOld = xxh32( - JSON.stringify(untracked($playlist.get).map((i) => i.id)), - ); - - if (hashNew === hashOld) return; - - const webampTracks = playlist.map((item, idx) => { - /** @type {URLTrack} */ - const urlTrack = { - url: item.uri, - metaData: { - title: item.tags?.title || "", - artist: item.tags?.artist || "", - album: item.tags?.album, - }, - duration: item.stats?.duration, - }; - - if (item.stats?.duration == undefined) { - throw new Error("TODO: Fetch duration"); - } - return urlTrack; + const oldSet = untracked($playlist.get); + const newSet = new Set(playlist.map((i) => i.id)); + + const addedItems = newSet.difference(oldSet); + + // TODO: Can't do removals yet without resetting the webamp instance. + // const removedItems = oldSet.difference(newSet); + + if (addedItems.size === 0) return; + + playlist.forEach((item, idx) => { + if (addedItems.has(item.id) === false) return; + + // TODO + if (item.stats?.duration == undefined) return; + + // TODO: Inserting at a specific index doesn't work + ampElement.addTrack(item); }); - // currBase = currBase + amp.getPlaylistTracks().length; - // amp.setCurrentTrack(currBase + (untracked($currTrack.get) ?? 0)); + if (untracked($currTrack.get) === null) { + amp.setCurrentTrack(past.length); + } - $playlist.value = playlist; + $playlist.value = newSet; }); /** @@ -127,11 +116,9 @@ effect(() => { * reflect the change in our queue too. */ effect(() => { - console.log("CURR", $currTrack.value); - - // if (($currTrack.value ?? 0) > untracked(queue.past).length) { - // queue.shift(); - // } + if (($currTrack.value ?? 0) > untracked(queue.past).length) { + queue.shift(); + } }); //////////////////////////////////////////// diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index c31ea4cdb..a0d50f405 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -33,7 +33,6 @@ input-selector="di-opensubsonic" output-selector="do-indexed-db" queue-selector="de-queue" - webamp-selector="dtw-webamp" > @@ -71,7 +70,7 @@ COMPONENTS --> - + diff --git a/src/themes/webamp/webamp.js b/src/themes/webamp/webamp/element.js similarity index 89% rename from src/themes/webamp/webamp.js rename to src/themes/webamp/webamp/element.js index 71c414829..d368f9014 100644 --- a/src/themes/webamp/webamp.js +++ b/src/themes/webamp/webamp/element.js @@ -75,12 +75,9 @@ class WebampElement extends HTMLElement { artist: track.tags?.artist, title: track.tags?.title, album: track.tags?.album, - // For now, we lie about these next three things. - // TODO: Ideally we would leave these as null and force a media data - // fetch when the user starts playing. - sampleRate: 44000, - bitrate: 192000, - numberOfChannels: 2, + sampleRate: track.stats?.sampleRate ?? 44000, + bitrate: track.stats?.bitrate ?? 192000, + numberOfChannels: 2, // TODO id: idx, }); }, From bd71e3889297842ffa40d2db66dc2d683977a4fa Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 4 Nov 2025 16:58:13 +0100 Subject: [PATCH 066/244] chore: fix deno.lock --- deno.lock | 104 +----------------------------------------------------- 1 file changed, 1 insertion(+), 103 deletions(-) diff --git a/deno.lock b/deno.lock index 1200a33bf..a1582d1d5 100644 --- a/deno.lock +++ b/deno.lock @@ -1,14 +1,7 @@ { "version": "5", "specifiers": { - "jsr:@bradenmacdonald/s3-lite-client@~0.9.4": "0.9.4", "jsr:@deno/loader@0.3.6": "0.3.6", - "jsr:@fry69/deep-diff@~0.1.10": "0.1.10", - "jsr:@mary/ds-queue@~0.1.3": "0.1.3", - "jsr:@mys/m-rpc@~0.12.2": "0.12.2", - "jsr:@mys/worker-fn@^3.2.1": "3.2.1", - "jsr:@okikio/transferables@^1.0.2": "1.0.2", - "jsr:@orama/orama@^2.0.6": "2.0.6", "jsr:@std/cli@1.0.22": "1.0.22", "jsr:@std/cli@^1.0.21": "1.0.22", "jsr:@std/collections@^1.1.3": "1.1.3", @@ -36,7 +29,6 @@ "jsr:@std/toml@^1.0.3": "1.0.10", "jsr:@std/yaml@1.0.9": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", - "jsr:@vicary/debounce-microtask@~0.1.8": "0.1.8", "npm:98.css@~0.1.21": "0.1.21", "npm:alien-signals@3": "3.0.3", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", @@ -58,36 +50,9 @@ "npm:xxh32@^2.0.5": "2.0.5" }, "jsr": { - "@bradenmacdonald/s3-lite-client@0.9.4": { - "integrity": "f52e31c7efdaeb1ccdf65a1db995b5920d635717c96d45dcf9450c3cc47ecaaf" - }, "@deno/loader@0.3.6": { "integrity": "98f08d837c18ece5ba15122264fb29580967407c34e6552e152b8f453a60c2be" }, - "@fry69/deep-diff@0.1.10": { - "integrity": "cdd88fefaef1ac896a038a5f3c0895038d8c725e61bac50489c455156e0275f5" - }, - "@mary/ds-queue@0.1.3": { - "integrity": "a743caa397b924cb08b0bbdffc526eb1ea2d3fc9e675da6edc137c437fc93c76" - }, - "@mys/m-rpc@0.12.2": { - "integrity": "36599d3d4708db9f5c0f7da35a17b7e7da1fafddb69de6cfcdc6afe94cd4f084", - "dependencies": [ - "jsr:@okikio/transferables" - ] - }, - "@mys/worker-fn@3.2.1": { - "integrity": "330960f21041edd20fa9c5f78b136f62e3781e35797ac635534f003545be76cd", - "dependencies": [ - "jsr:@mys/m-rpc" - ] - }, - "@okikio/transferables@1.0.2": { - "integrity": "46a80015a1c4672b0b246e38838b3ea1e2edc6c775a235184a2f8eb49a8314f7" - }, - "@orama/orama@2.0.6": { - "integrity": "0221bbd9a638e42772fc6e082cf057755f83a8cea919c85fa0baa9bb027ab078" - }, "@std/cli@1.0.22": { "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" }, @@ -166,9 +131,6 @@ }, "@std/yaml@1.0.9": { "integrity": "6bad3dc766dd85b4b37eabcba81b6aa4eac7a392792ae29abcfb0f90602d55bb" - }, - "@vicary/debounce-microtask@0.1.8": { - "integrity": "fe180e0c599903ccf7a93e719ea986c48affc1ff78951a1bc0ccb874aa30fd0e" } }, "npm": { @@ -1284,7 +1246,6 @@ "https://deno.land/x/lume@v3.0.11/deps/toml.ts": "32830bda333eaf4f1c3d79e4306ba449c17a85b25f94aae9b327d3790a2d1dea", "https://deno.land/x/lume@v3.0.11/deps/vento.ts": "78db4022ee124fbcfd84caeb6c5a70f2c1e1706ec9f6415d0f1fe2e9aabcba2b", "https://deno.land/x/lume@v3.0.11/deps/yaml.ts": "a639f4fc44ddcfc87f35e38980bbe9fc8101bf8ce34867522e76cc13cb156611", - "https://deno.land/x/lume@v3.0.11/lint.ts": "23cf68a7cc17edfdb16f2e905de3c5d5a1da541638f04fb8f7d5c762288f2c52", "https://deno.land/x/lume@v3.0.11/middlewares/basic_auth.ts": "c18f0da9f88be4581e5e3da99214fd7abdad829ab00dbdd2fb3116f1f876add2", "https://deno.land/x/lume@v3.0.11/middlewares/logger.ts": "c96f1a9f9d5757555b6f141865ce8551ac176f90c8ee3e9ad797b2b400a9a567", "https://deno.land/x/lume@v3.0.11/middlewares/no_cache.ts": "0119e3ae3a596ab12c42df693b93e5b03dd9608e289d862242751a9739438f35", @@ -1306,7 +1267,6 @@ "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", - "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", "https://deno.land/x/vento@v2.1.1/core/js.ts": "83084240150d7e8b83e43ec8fcf78564a8ba8599c3d517976efbb11b208903b2", @@ -1328,69 +1288,7 @@ "https://deno.land/x/vento@v2.1.1/plugins/mod.ts": "017d5bb3e3c80b7f67271cdf8779686f55916070c5d168a143e6a37c35bcd731", "https://deno.land/x/vento@v2.1.1/plugins/set.ts": "cf9dfbf68b52039781fd86ec0b9587a8bcd486fdef9f08989719cfdb7fa233d0", "https://deno.land/x/vento@v2.1.1/plugins/trim.ts": "8d33271327b09ffd8f569ebde85125b1324fa9538a54d6072ac97a9fb5d24264", - "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee", - "https://esm.sh/@borewit/text-codec@0.1.1/es2022/text-codec.mjs": "ea8f41f92f2798340cf2b568602fc1e6f9957e8192265d92d6d06725d0bbfcff", - "https://esm.sh/@borewit/text-codec@0.2.0/es2022/text-codec.mjs": "1fa7af74bcd1b8c1a460836447074360915a752cffe0dbdb8ac472f422a7fbd9", - "https://esm.sh/@borewit/text-codec@^0.1.0?target=es2022": "e3ef0acd0c052b05ad09e59f90283c46e8b5d82d92548ab93b11badd8258d78f", - "https://esm.sh/@borewit/text-codec@^0.2.0?target=es2022": "41f958f8bdbc8407bd83126648cdeca660a1c86662ad3358ecc544f84e8a9f25", - "https://esm.sh/@tokenizer/http@0.9.2/es2022/lib/http-client.mjs": "a3b75a64606cf525497598e45357efbc03a9093f5000b180aca3ab278a9c69f3", - "https://esm.sh/@tokenizer/http@0.9.2/lib/http-client.js": "3ebcb337b382c299e9267b8950aa63764404b50909a4f9dfde183005f532fc6b", - "https://esm.sh/@tokenizer/inflate@0.2.7/es2022/inflate.mjs": "8fa443aca90ad2baa671baab9f31c244a65d3e415f0856f6cb7c01a91885a4c7", - "https://esm.sh/@tokenizer/inflate@^0.2.7?target=es2022": "a0937e70b3279c427154214ee94f847f05ee18590d624ed09e13b166bc4b8802", - "https://esm.sh/@tokenizer/range@0.12.0/es2022/range.mjs": "6e0bf369e99ec1608583522af1e3ea8e4967c202ccf0d853d7c180022693da16", - "https://esm.sh/@tokenizer/range@0.13.0/es2022/range.mjs": "0aab315c6101c786d5af2a3442c7afdf619cc9c678529440d99cc9c93bc616e9", - "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js": "b6884ad1ad20d5ca12bcf051481f1d0f36640df2e4f5d827a8b9d100d56a2514", - "https://esm.sh/@tokenizer/range@^0.12.0?target=es2022": "a5be7fc23c6c1538ccdf83ab1d945c97618dbc5c886c099fae9fa2569f9cd389", - "https://esm.sh/content-type@1.0.5/es2022/content-type.mjs": "6fd962b99a80821956a22379aded6b7ca37cfbf95be5639047437e03211e1b56", - "https://esm.sh/content-type@^1.0.5?target=es2022": "ad3579fa1808af61b587ce37a37756eae3306dfbbdea9d02e31a03e0b2ad70d4", - "https://esm.sh/debug@4.4.3/es2022/debug.mjs": "42103c758115e696a3c7c269457f7827d957907fa8abcdbbaca2cb7060c7bd4f", - "https://esm.sh/debug@^4.3.7?target=es2022": "0a96b7d9989513d07f02f0d5533e0dc7a49c492107702631f6490d754fbc4fe7", - "https://esm.sh/debug@^4.4.0?target=es2022": "0a96b7d9989513d07f02f0d5533e0dc7a49c492107702631f6490d754fbc4fe7", - "https://esm.sh/debug@^4.4.3?target=es2022": "0a96b7d9989513d07f02f0d5533e0dc7a49c492107702631f6490d754fbc4fe7", - "https://esm.sh/fflate@0.8.2/es2022/fflate.mjs": "51759ec52e8522bbcd6dce941956a878c733975dcc159618c683c659270a59d3", - "https://esm.sh/fflate@^0.8.2?target=es2022": "c127de9122b64d0866c6988baf5d7b21d6a1aca3989e8828f9c7f27029081b0c", - "https://esm.sh/file-type@21.0.0/es2022/file-type.mjs": "c66d14ae76887e16cca26b4524bef9baba40585a8c499051ad5a0e12c980fcc2", - "https://esm.sh/file-type@^21.0.0?target=es2022": "d9b06a8b5508acf4b5e3b5a6e886517f62f112bb4b25f49d409218d243aa6979", - "https://esm.sh/ieee754@1.2.1/es2022/ieee754.mjs": "6e87635f6124ae21ea355a521f021a04afc277248bd5097dc85edce4d7017f86", - "https://esm.sh/ieee754@^1.2.1?target=es2022": "503072b5aea2f29a14531251e497979ecea64585897d1561010acd83fdb4ce07", - "https://esm.sh/media-typer@1.1.0/es2022/media-typer.mjs": "3dc6174765452b8271cad4031a308c8015c67bee4de2b0aff5daec36cb1b766e", - "https://esm.sh/media-typer@^1.1.0?target=es2022": "c6132b2b491d8f497c7c2158602814796aaceb5bbcaee6bf086842a0a0e36947", - "https://esm.sh/ms@2.1.3/es2022/ms.mjs": "9039464da1f4ae1c2042742d335c82556c048bbe49449b5d0cd5198193afa147", - "https://esm.sh/ms@^2.1.3?target=es2022": "05ddb185b1d26c888c647f2aaac723379f0933fb608b3a9a994e602c41900019", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/aiff/AiffParser.mjs": "63997d01b96586c6e4e25ebe00d71749d42cbddc928ae871dbefa01ffbf7ece6", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/apev2/APEv2Parser.mjs": "5428c9b05edde4fb3781da175c3fa6909c741eca89da7f632c5771288a555c80", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/asf/AsfParser.mjs": "ad8173bfeae034c96cd21a091db2336ad5f389d2afda2ffb31c1f6af9f3e743a", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/core.mjs": "dddd9f4492a00db509f80f6e03c2aaee068793a0f6f35e975446fee39bdf5565", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/dsdiff/DsdiffParser.mjs": "6d77407d3d97a56224a169e367848bde75f3a7bd48429f077cb76be9bb6b490b", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/dsf/DsfParser.mjs": "2dfd30eae0cadd1cdbb9d0685e6f0d7598aefa58cd49b3d65048bd8caf492ef8", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/flac/FlacParser.mjs": "9ac86d7a4136b44b039262c20601a12162d447dcc8ac78c661df5b2caff4eeaf", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/matroska/MatroskaParser.mjs": "d43c319eab16d7b05f6e8f7fe7171ab3ccd401539dd5558f171a6005dfade0a5", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/mp4/MP4Parser.mjs": "46f7ebd05e2e95b31eef24f01a3292759d503cd07df6ed851b5e70c76334ca6b", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/mpeg/MpegParser.mjs": "b5cb01e7abccb149d02207a8ae44ec5127c6bd7d386b3b0150f4e0603d6988d5", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/musepack/MusepackParser.mjs": "02fb87f6653928ed7a23f44e0e5ae47d598b6d3aa8074f662d0540eecef5d82e", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/ogg/OggParser.mjs": "bacd1c45fd7b606b2a6ef2b8569469e979fb834eedd58e2e051e40c9a0aae9ae", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/wav/WaveParser.mjs": "aaa526c14b601e5953d91bb13c73c4e78291ccb4f8ff85c24a1b7f4624f9c34c", - "https://esm.sh/music-metadata@11.9.0/es2022/lib/wavpack/WavPackParser.mjs": "af8ebb6037058ffb9792e3096a3f67c7eaf7ef2c39518274900b7a99bef552e5", - "https://esm.sh/music-metadata@11.9.0/lib/core.js": "57a0a07bfddf9592e6572f2730f6a71acfb3af8719bc6d794cb3fb974d74d8ac", - "https://esm.sh/node/process.mjs": "2c8eeaf6090c03d21bdcec5eddb33b105208c9ba3ef2c7be98f4d9b2495a624e", - "https://esm.sh/peek-readable@5.4.2/es2022/peek-readable.mjs": "7e784eacb3816872f18606f82cc3f30f2d11e674c5199f84e6cf7d820a3ced23", - "https://esm.sh/peek-readable@^5.3.1?target=es2022": "dbd46373159faf17590ec762a4f14921d7a6a5e6c3a64f334f302d96043077b0", - "https://esm.sh/strtok3@10.3.4/es2022/core.mjs": "3183a30c522666467d6d0b5234113fe216e1ec79f4bd135002545458323d62f4", - "https://esm.sh/strtok3@10.3.4/es2022/lib/stream/AbstractStreamReader.mjs": "675c8d26bd83e2e8907a988ba996e1ca45ae10397579d83ed027c14b13e78134", - "https://esm.sh/strtok3@10.3.4/es2022/lib/stream/Errors.mjs": "1459007f24621eb036ba3be2fa592ce39381874722aab8e0302f8d6345a620d6", - "https://esm.sh/strtok3@10.3.4/es2022/lib/stream/index.mjs": "7b6b3d37331712b157f2f6108081831b574d2b6493049aa8738834c4961ae633", - "https://esm.sh/strtok3@10.3.4/es2022/strtok3.mjs": "7228ab10418d0fcee23ac018de8c4843c796471c691c9e940540a23145d589e6", - "https://esm.sh/strtok3@9.1.1/es2022/strtok3.mjs": "f8cf21145d3d1be1cd7b4dff4a006b1587efb84d7c07953ed47a4f2c80759784", - "https://esm.sh/strtok3@^10.2.0?target=es2022": "40daa79a2c4d6133be6732ad5ad53831401eda38a72129b911562d6d42d34fe2", - "https://esm.sh/strtok3@^10.2.2/core?target=es2022": "9e188cff879adba3fe0cb8eb89d284ccda6b662bfa7b436c81370bda44e63415", - "https://esm.sh/strtok3@^10.3.4?target=es2022": "40daa79a2c4d6133be6732ad5ad53831401eda38a72129b911562d6d42d34fe2", - "https://esm.sh/strtok3@^9.1.1?target=es2022": "0b1ee38504da3418cd1f101f127415f5ba191b85089ae5a25beffa333c608499", - "https://esm.sh/token-types@6.1.1/es2022/token-types.mjs": "2d6a177766ee99c5a482c7bf7c55d38f076beff8e4781d1cb8c295f3cb4da5e9", - "https://esm.sh/token-types@^6.0.0?target=es2022": "15b612895b05b0120117c96dc3df21f4e211a7c0b126b36034f1a4ed803d216d", - "https://esm.sh/token-types@^6.1.1?target=es2022": "15b612895b05b0120117c96dc3df21f4e211a7c0b126b36034f1a4ed803d216d", - "https://esm.sh/uint8array-extras@1.5.0/es2022/uint8array-extras.mjs": "660b5b7967799e1ab7274f0062b66fc33a86c68df583429d8c52fa0b32332ae9", - "https://esm.sh/uint8array-extras@^1.4.0?target=es2022": "24bf344529db04523ab848989bd810f22dce714f11f5e9a619dbe113b899b49f", - "https://esm.sh/uint8array-extras@^1.5.0?target=es2022": "24bf344529db04523ab848989bd810f22dce714f11f5e9a619dbe113b899b49f" + "https://deno.land/x/vento@v2.1.1/plugins/unescape.ts": "1c56f0310c7757880df7684fc6b7bf9efd27fdb6b929b89626802f5a99cb93ee" }, "workspace": { "dependencies": [ From 3fa1a876d2283938ce5966e9b9cd3f316e9b2245 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 4 Nov 2025 21:09:00 +0100 Subject: [PATCH 067/244] chore: try to explain schemas + transformers --- src/index.vto | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/index.vto b/src/index.vto index c95c49530..5ce2184be 100644 --- a/src/index.vto +++ b/src/index.vto @@ -1,12 +1,16 @@ --- layout: layouts/diffuse.vto +# THEMES + themes: - url: "themes/blur/" title: "Blur" - url: "themes/webamp/" title: "Webamp" +# ELEMENTS + engines: - url: "components/engine/audio/element.js" title: "Audio" @@ -39,6 +43,16 @@ processors: - url: "components/processor/search/element.js" title: "Search" +transformers: + - url: "components/transformer/output-lenses/element.js" + title: "Output Lenses (TODO)" + +# SCHEMAS + +schemas: + - url: "schemas/output/tracks/lexicon.json" + title: "Output / Tracks (TODO)" + --- @@ -83,9 +97,6 @@ processors: - - -

    Elements

    @@ -100,7 +111,7 @@ processors: title: "Configurators", items: configurators, content: ` - Elements that serve as an intermediate in order to make a particular kind of element configurable. In other words, these allow for an applet to be swapped out with another that takes the same, or a subset of the actions and data output. + Elements that serve as an intermediate in order to make a particular kind of element configurable. In other words, these allow for an element to be swapped out with another that takes the same, or a subset of the actions and data output. ` }) }} @@ -140,7 +151,7 @@ processors: title: "Processors", items: processors, content: ` - These elements work with the tracks generated by the input applets to add more data to them, or process them in some other way. + These elements work with the output generated by the input elements to add more data to them, or process them in some other way. ` }) }} @@ -151,9 +162,26 @@ processors: Additional elements, such as scrobblers. ` }) }} + + {{ await comp.element({ + title: "Transformers", + items: transformers, + content: ` + Transform data from one schema into another. See schema section below for more information. + ` + }) }}
    + +
    +

    Schemas

    + +

    All of the elements here are built with these specific data schemas in mind. That said, you can mix elements that use different schemas; you just have to put a transformer between them in order to translate between the schemas.

    + + {{ await comp.list({ items: schemas }) }} +
    + - + diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index 2920f6eb4..2132006c2 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -2,7 +2,8 @@ import { DiffuseElement, query } from "@common/element.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {InputElement, OutputElement, Track} from "@components/core/types.d.ts" + * @import {InputElement, Track} from "@common/types.d.ts" + * @import {OutputElement} from "@components/output/types.d.ts" */ class Browser extends DiffuseElement { diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 6bedb3674..9029c3377 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,6 +1,6 @@ -// import "@components/orchestrator/process-tracks/element.js"; +import "@components/orchestrator/process-tracks/element.js"; import "@components/orchestrator/queue-tracks/element.js"; -import "@components/output/indexed-db/element.js"; +import "@components/output/polymorphic/indexed-db/element.js"; import "@components/processor/metadata/element.js"; import * as Input from "@components/input/opensubsonic/element.js"; diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index a0d50f405..a0b5aca60 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -16,22 +16,27 @@
    + Manage audio inputs

    👀

    + + Manage user data

    👀

    + + Browse collection @@ -72,21 +77,21 @@ --> - + - + diff --git a/src/themes/webamp/webamp/element.js b/src/themes/webamp/webamp/element.js index d368f9014..ca2fb33dc 100644 --- a/src/themes/webamp/webamp/element.js +++ b/src/themes/webamp/webamp/element.js @@ -1,7 +1,7 @@ import Webamp from "webamp/lazy"; /** - * @import {Track} from "@components/core/types.d.ts" + * @import {Track} from "@common/types.d.ts" */ class WebampElement extends HTMLElement { constructor() { From 93b1deebca27a347672f1f768bd517fedc0f0943 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 6 Nov 2025 18:32:52 +0100 Subject: [PATCH 069/244] chore: favicons --- _config.ts | 2 +- src/_includes/layouts/diffuse.vto | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/_config.ts b/_config.ts index eeee344f6..5cae8c27d 100644 --- a/_config.ts +++ b/_config.ts @@ -40,7 +40,7 @@ site.remoteFile( // BINARY ASSETS -site.add("/favicons"); +site.add("/favicons", "/"); site.add("/fonts"); site.add("/images"); diff --git a/src/_includes/layouts/diffuse.vto b/src/_includes/layouts/diffuse.vto index 82ccd526c..8255b39c2 100644 --- a/src/_includes/layouts/diffuse.vto +++ b/src/_includes/layouts/diffuse.vto @@ -7,8 +7,21 @@ title: "Diffuse" + + {{title}} + + + + + + + + + + + + {{ for url of styles }} + + {{ /for }} + + + {{ for url of scripts }} + + {{ /for }} {{ content }} diff --git a/src/common/element.js b/src/common/element.js index c588e6318..5fd4e9c63 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -46,7 +46,7 @@ export class DiffuseElement extends HTMLElement { } /** - * Effect helper that automatically disposes it + * Effect helper that automatically is disposes * when this element is removed from the DOM. * * @param {() => void} fn @@ -265,6 +265,15 @@ export class BroadcastableDiffuseElement extends DiffuseElement { return /** @type {ProxiedActions} */ (actions); } + async isLeader() { + if (this.broadcasted) { + const status = await this.broadcastingStatus(); + return status.leader; + } else { + return true; + } + } + // LIFECYCLE /** diff --git a/src/common/index.js b/src/common/index.js index f6232f339..dfec745ce 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -1,4 +1,4 @@ -// import * as Uint8 from "uint8arrays"; +import * as Uint8 from "uint8arrays"; import { xxh32r } from "xxh32/dist/raw.js"; /** @@ -92,9 +92,7 @@ export function jsonEncode(a) { * @returns {Promise} */ export async function trackArtworkCacheId(track) { - // TODO: - return ""; - // return await crypto.subtle - // .digest("SHA-256", new TextEncoder().encode(track.uri)) - // .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); + return await crypto.subtle + .digest("SHA-256", new TextEncoder().encode(track.uri)) + .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); } diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 60b0cac9a..511e91bd5 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -20,6 +20,8 @@ const _SILENT_MP3 = * @implements {Actions} */ class AudioEngine extends BroadcastableDiffuseElement { + static NAME = "diffuse/engine/audio"; + // SIGNALS #items = signal(/** @type {Audio[]} */ ([])); @@ -43,15 +45,18 @@ class AudioEngine extends BroadcastableDiffuseElement { connectedCallback() { // Setup leader election if shared if (this.hasAttribute("group")) { - const actions = this.broadcast(`diffuse/engine/audio/${this.group}`, { - adjustVolume: { strategy: "leaderOnly", fn: this.adjustVolume }, - pause: { strategy: "leaderOnly", fn: this.pause }, - play: { strategy: "leaderOnly", fn: this.play }, - seek: { strategy: "leaderOnly", fn: this.seek }, - supply: { strategy: "replicate", fn: this.supply }, - - setIsPlaying: { strategy: "replicate", fn: this.$isPlaying.set }, - }); + const actions = this.broadcast( + `${this.constructor.prototype.constructor.NAME}/${this.group}`, + { + adjustVolume: { strategy: "leaderOnly", fn: this.adjustVolume }, + pause: { strategy: "leaderOnly", fn: this.pause }, + play: { strategy: "leaderOnly", fn: this.play }, + seek: { strategy: "leaderOnly", fn: this.seek }, + supply: { strategy: "replicate", fn: this.supply }, + + setIsPlaying: { strategy: "replicate", fn: this.$isPlaying.set }, + }, + ); if (actions) { this.adjustVolume = actions.adjustVolume; @@ -68,7 +73,8 @@ class AudioEngine extends BroadcastableDiffuseElement { super.connectedCallback(); // Get volume from previous session if possible - const VOLUME_KEY = `diffuse/engine/audio/${this.group}/volume`; + const VOLUME_KEY = + `${this.constructor.prototype.constructor.NAME}/${this.group}/volume`; const volume = localStorage.getItem(VOLUME_KEY); if (volume != undefined) { diff --git a/src/components/orchestrator/queue-tracks/element.js b/src/components/orchestrator/queue-tracks/element.js index 44d032218..3ea0b2bd1 100644 --- a/src/components/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/queue-tracks/element.js @@ -1,11 +1,10 @@ import { + BroadcastableDiffuseElement, callWorkerWithProvisions, - DiffuseElement, query, terminateProvisions, whenElementsDefined, workerProxy, - workerTunnel, } from "@common/element.js"; import { untracked } from "@common/signal.js"; @@ -28,7 +27,7 @@ import { untracked } from "@common/signal.js"; * tracks have been loaded, * or the tracks collection changes. */ -class QueueTracksOrchestrator extends DiffuseElement { +class QueueTracksOrchestrator extends BroadcastableDiffuseElement { static NAME = "diffuse/orchestrator/queue-tracks"; static WORKER_URL = "components/orchestrator/queue-tracks/worker.js"; @@ -77,11 +76,15 @@ class QueueTracksOrchestrator extends DiffuseElement { // Watch tracks collection this.effect(() => { - const tracks = output.tracks.collection().filter((t) => - t.kind !== "placeholder" - ); + const tracks = output.tracks.collection(); - untracked(() => this.poolAvailable(tracks)); + this.isLeader().then((isLeader) => { + if (!isLeader) return; + + untracked(() => + this.poolAvailable(tracks.filter((t) => t.kind !== "placeholder")) + ); + }); }); } diff --git a/src/components/output/types.d.ts b/src/components/output/types.d.ts index eda2ea3e1..d46bb8ae3 100644 --- a/src/components/output/types.d.ts +++ b/src/components/output/types.d.ts @@ -1,7 +1,8 @@ import type { SignalReader } from "@common/signal.d.ts"; import type { Track } from "@definitions/types.d.ts"; +import type { DiffuseElement } from "@common/element.js"; -export type OutputElement = HTMLElement & OutputManager; +export type OutputElement = DiffuseElement & OutputManager; export type OutputManager = { tracks: { diff --git a/src/components/processor/artwork/worker.js b/src/components/processor/artwork/worker.js index 9ec9089cf..29eff824a 100644 --- a/src/components/processor/artwork/worker.js +++ b/src/components/processor/artwork/worker.js @@ -2,6 +2,7 @@ import * as IDB from "idb-keyval"; import { IDB_ARTWORK_PREFIX } from "./constants.js"; import { musicMetadataTags } from "../metadata/common.js"; +import { ostiary, rpc } from "@common/worker.js"; /** * @import {IPicture} from "music-metadata" @@ -35,6 +36,17 @@ export function supply(items) { if (exe) shiftQueue(); } +//////////////////////////////////////////// +// ⚡️ +//////////////////////////////////////////// + +ostiary((context) => { + rpc(context, { + artwork, + supply, + }); +}); + //////////////////////////////////////////// // 🛠️ //////////////////////////////////////////// diff --git a/src/index.css b/src/index.css index 11ab69071..5c1377db5 100644 --- a/src/index.css +++ b/src/index.css @@ -80,9 +80,10 @@ small { } .construct { - color: oklch(1 0 0 / 0.75); + color: oklch(from currentColor l c h / 0.65); font-size: var(--fs-2xl); font-weight: 900; + letter-spacing: -0.0125em; line-height: 0.775em; line-height: 1.05cap; margin-bottom: var(--space-md); diff --git a/src/index.vto b/src/index.vto index 1f5d51405..3f4975e88 100644 --- a/src/index.vto +++ b/src/index.vto @@ -1,6 +1,9 @@ --- layout: layouts/diffuse.vto +styles: + - index.css + # THEMES themes: @@ -116,7 +119,6 @@ definitions: url: "definitions/output/tracks.json" --- -

    diff --git a/src/styles/diffuse/colors.css b/src/styles/diffuse/colors.css index 182d2fbb8..0e298114d 100644 --- a/src/styles/diffuse/colors.css +++ b/src/styles/diffuse/colors.css @@ -3,7 +3,8 @@ --color-1: oklch(4.1308% 0.25306 109.22); --color-2: oklch(98.369% 0.01834 67.664); --color-3: oklch(26.787% 0.00168 186.65); - --accent: oklch(86.947% 0.25527 28.789); + /*--accent: oklch(86.947% 0.25527 28.789);*/ + --accent: hsl(80, 60.5%, 34.7%); --bg-color: var(--color-2); --text-color: var(--color-1); diff --git a/src/themes/blur/artwork-controller/_applet.astro b/src/themes/blur/artwork-controller/_applet.astro deleted file mode 100644 index 9b1493d31..000000000 --- a/src/themes/blur/artwork-controller/_applet.astro +++ /dev/null @@ -1,791 +0,0 @@ ---- -import "@styles/reset.css"; -import "@styles/variables.css"; -import "@styles/fonts.css"; -import "@styles/animations.css"; -import "@styles/icons/phosphor.css"; - -import "@styles/diffuse/colors.css"; -import "@styles/diffuse/fonts.css"; ---- - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - - -
    -
    -
    - - - - - - diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css new file mode 100644 index 000000000..fbf908321 --- /dev/null +++ b/src/themes/blur/artwork-controller/element.css @@ -0,0 +1,299 @@ +@import "../../../styles/reset.css"; +@import "../../../styles/variables.css"; +@import "../../../styles/animations.css"; +/*@import "../../../styles/icons/phosphor.css";*/ + +@import "../../../styles/diffuse/colors.css"; +@import "../../../styles/diffuse/fonts.css"; + +:root { + --transition-durition: 500ms; +} + +main { + background: var(--color-3); + color: white; + display: flex; + flex-direction: column; + font-size: var(--fs-sm); + height: 100dvh; + overflow: hidden; + position: relative; + transition: + background-color var(--transition-durition), + color var(--transition-durition); +} + +/* Artwork */ + +.artwork { + app-region: drag; + flex: 1; + position: relative; + user-select: none; +} + +.artwork img { + height: 100%; + left: 0; + object-fit: cover; + opacity: 0; + position: absolute; + top: 0; + transition-duration: var(--transition-durition); + transition-property: opacity; + width: 100%; + z-index: 0; +} + +.artwork label { + background: oklch(0 0 0); + border-radius: var(--radius-sm); + box-shadow: var(--box-shadow-lg); + font-size: var(--fs-2xs); + font-weight: 600; + left: var(--space-xs); + letter-spacing: var(--tracking-wide); + line-height: 1; + padding: 7px 6px 6px; + position: absolute; + text-transform: uppercase; + top: var(--space-xs); + transition: + background-color var(--transition-durition), + color var(--transition-durition); + z-index: 10; +} + +/* Progress bars */ + +progress { + appearance: none; + border: 0; + display: block; + height: 4px; + width: 100%; +} + +progress, +progress::-webkit-progress-bar { + background-color: color-mix(in oklch, currentColor 40%, transparent); + overflow: hidden; + border-radius: 4px; +} + +progress[value]::-webkit-progress-value { + border-radius: 4px; + background-color: color-mix(in oklch, currentColor 90%, transparent); +} + +progress[value]::-moz-progress-bar { + border-radius: 4px; + background-color: color-mix(in oklch, currentColor 50%, transparent); +} + +/* Controller */ + +.controller { + flex-shrink: 0; + padding: 0 var(--space-md) var(--space-md); + position: relative; +} + +.controller__background { + inset: 0; + opacity: 0.5; + position: absolute; + transition: background-color var(--transition-durition); + z-index: 1; +} + +.controller__inner { + position: relative; + transition-duration: var(--transition-durition); + transition-property: color; + z-index: 10; +} + +.controller__inner.controller__inner--light-mode { + color: rgba(0, 0, 0, 0.6); +} + +/* Now playing */ + +cite { + display: block; + font-style: normal; + text-shadow: var(--text-shadow-sm); +} + +.controller__inner--light-mode cite { + text-shadow: none; +} + +/* Progress */ + +.progress { + cursor: pointer; + margin: var(--space-xs) 0; + padding-top: var(--space-2xs); +} + +.timestamps { + display: flex; + font-size: var(--fs-2xs); + font-weight: 500; + justify-content: space-between; + margin-top: var(--space-3xs); + opacity: 0.4; + text-shadow: var(--text-shadow-xs); +} + +.controller__inner--light-mode .timestamps { + text-shadow: none; +} + +/* Controls */ + +.controller menu { + align-items: center; + display: flex; + font-size: var(--fs-lg); + gap: var(--space-lg); + justify-content: center; + margin: var(--space-md) 0; + padding: 0; + text-align: center; +} + +.controller .menu__loader { + line-height: 0; + transform-origin: center; +} + +.controller command { + cursor: pointer; + line-height: 0; + transition-duration: var(--transition-durition); + transition-property: opacity; +} + +.controller .ph-pause, +.controller .ph-play, +.controller .menu__loader { + font-size: var(--fs-xl); +} + +/* Volume */ + +footer { + align-items: center; + display: flex; + font-size: var(--fs-xs); + gap: var(--space-2xs); + justify-content: space-between; +} + +footer .progress-bar { + cursor: pointer; + flex: 1; + padding: var(--space-2xs) 0; +} + +footer i { + cursor: pointer; +} + +/* Gradient blur */ + +.gradient-blur { + bottom: 0; + height: 150%; + left: 0; + pointer-events: none; + position: absolute; + right: 0; + z-index: 2; +} + +.gradient-blur > div { + position: absolute; + inset: 0; +} + +.gradient-blur > div:nth-of-type(1) { + backdrop-filter: blur(1px); + mask: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 0%, + rgba(0, 0, 0, 1) 4.166666665%, + rgba(0, 0, 0, 1) 8.333333332%, + rgba(0, 0, 0, 0) 12.499999999% + ); + z-index: 1; +} + +.gradient-blur > div:nth-of-type(2) { + backdrop-filter: blur(2px); + mask: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 4.166666665%, + rgba(0, 0, 0, 1) 8.333333332%, + rgba(0, 0, 0, 1) 12.499999999%, + rgba(0, 0, 0, 0) 16.666666666% + ); + z-index: 2; +} + +.gradient-blur > div:nth-of-type(3) { + backdrop-filter: blur(4px); + mask: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 8.333333332%, + rgba(0, 0, 0, 1) 12.499999999%, + rgba(0, 0, 0, 1) 16.666666666%, + rgba(0, 0, 0, 0) 20.833333333% + ); + z-index: 3; +} + +.gradient-blur > div:nth-of-type(4) { + backdrop-filter: blur(8px); + mask: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 12.499999999%, + rgba(0, 0, 0, 1) 16.666666666%, + rgba(0, 0, 0, 1) 20.833333333%, + rgba(0, 0, 0, 0) 25% + ); + z-index: 4; +} + +.gradient-blur > div:nth-of-type(5) { + backdrop-filter: blur(16px); + mask: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 16.666666666%, + rgba(0, 0, 0, 1) 20.833333333%, + rgba(0, 0, 0, 1) 25%, + rgba(0, 0, 0, 0) 100% + ); + z-index: 5; +} + +.gradient-blur > div:nth-of-type(6) { + backdrop-filter: blur(32px); + mask: linear-gradient( + to bottom, + rgba(0, 0, 0, 0) 20.833333333%, + rgba(0, 0, 0, 1) 25%, + rgba(0, 0, 0, 1) 100% + ); + z-index: 6; +} + +.gradient-blur > div:nth-of-type(7) { + backdrop-filter: blur(64px); + mask: linear-gradient(to bottom, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 1) 100%); + z-index: 7; +} diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js new file mode 100644 index 000000000..62eb22a78 --- /dev/null +++ b/src/themes/blur/artwork-controller/element.js @@ -0,0 +1,266 @@ +import { FastAverageColor } from "fast-average-color"; +import { Temporal } from "@js-temporal/polyfill"; +import { xxh32r } from "xxh32/dist/raw.js"; +import { debounce } from "throttle-debounce"; + +import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; +import { trackArtworkCacheId } from "@common/index.js"; +import { signal } from "@common/signal.js"; + +/** + * @import {RenderArg} from "@common/element.d.ts" + * @import {Track} from "@definitions/types.d.ts" + * @import {InputElement} from "@components/input/types.d.ts" + * @import {OutputElement} from "@components/output/types.d.ts" + * @import {Artwork} from "@components/processor/artwork/types.d.ts" + */ + +class ArtworkController extends DiffuseElement { + constructor() { + super(); + this.attachShadow({ mode: "open" }); + } + + // SIGNALS + + // activeTrack = signal(/** @type {Track | undefined} */ (undefined)); + #artwork = signal(/** @type {Artwork[]} */ ([])); + #artworkColor = signal(/** @type {string | undefined} */ (undefined)); + #artworkLightMode = signal(false); + #duration = signal("0:00"); + // isLoading = signal(true); + // isPlaying = signal(false); + // progress = signal(0); + #time = signal("0:00"); + // volume = signal(0); + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + /** @type {import("@components/processor/artwork/element.js").CLASS} */ + const artwork = query(this, "artwork-processor-selector"); + + /** @type {import("@components/engine/audio/element.js").CLASS} */ + const audio = query(this, "audio-engine-selector"); + + /** @type {InputElement} */ + const input = query(this, "input-selector"); + + /** @type {import("@components/engine/queue/element.js").CLASS} */ + const queue = query(this, "queue-engine-selector"); + + this.artwork = artwork; + this.audio = audio; + this.input = input; + this.queue = queue; + + whenElementsDefined({ audio, artwork, input, queue }).then(() => { + // Changed artwork based on active queue item. + const debouncedChangeArtwork = debounce( + 1000, + this.#changeArtwork.bind(this), + ); + + this.effect(() => { + debouncedChangeArtwork(queue.now()); + }); + + this.effect(() => { + const trigger = queue.now(); + const _other_trigger = queue.poolHash(); + + queue.fill({ amount: 10, shuffled: true }); + if (!trigger) queue.shift(); + }); + + // Force render when elements are defined + + // this.effect(() => { + // this.forceRender(); + // }); + }); + + this.#artworkEffects(); + } + + // EFFECTS + + /** + * @param {Track | null} track + */ + async #changeArtwork(track) { + if (!track) { + this.#artwork.value = []; + return; + } + + const cacheId = await trackArtworkCacheId(track); + + const resGet = await this.input?.resolve({ method: "GET", uri: track.uri }); + const resHead = await this.input?.resolve({ + method: "HEAD", + uri: track.uri, + }); + + if (!resGet) return; + + const request = "stream" in resGet + ? { + cacheId, + stream: resGet.stream, + tags: track.tags, + } + : { + cacheId, + tags: track.tags, + urls: { + get: resGet.url, + head: resHead && "url" in resHead ? resHead.url : resGet.url, + }, + }; + + const art = await this.artwork?.artwork(request) ?? []; + const currCacheId = track ? await trackArtworkCacheId(track) : undefined; + if (cacheId === currCacheId) this.#artwork.set(art); + } + + #artworkEffects() { + /** @type {Record>} */ + const timeouts = {}; + + this.effect(() => { + const art = this.#artwork.value; + + // No artwork, fade out existing. + if (art.length === 0) { + this.querySelectorAll(":scope .artwork img").forEach((el) => { + const element = /** @type {HTMLElement} */ (el); + element.style.opacity = "0"; + const hash = element.getAttribute("data-hash"); + if (hash) timeouts[hash] = setTimeout(() => element.remove(), 1000); + }); + return; + } + + // Determine if the current artwork needs to be replaced. + const hash = xxh32r(art[0].bytes).toString(); + + /** @type {HTMLImageElement | null} */ + const existingArtwork = this.querySelector( + `:scope .artwork img[data-hash="${hash}"]`, + ); + + // If the artwork is the same, stop here. + if (existingArtwork) { + const timeoutId = timeouts[hash]; + if (timeoutId) clearTimeout(timeoutId); + existingArtwork.style.opacity = "1"; + return; + } + + // Add new artwork + const blob = new Blob( + [/** @type {ArrayBuffer} */ (art[0].bytes.buffer)], + { type: art[0].mime }, + ); + const url = URL.createObjectURL(blob); + + /** @type {HTMLImageElement} */ + const img = document.createElement("img"); + img.setAttribute("data-hash", hash); + img.src = url; + + // Extract average color + img.onload = () => { + const fac = new FastAverageColor(); + const color = fac.getColor(img); + const rgb = color.value; + const o = Math.round( + (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000, + ); + + this.#artworkColor.value = color.rgba; + this.#artworkLightMode.value = o > 165; + + /** @type {HTMLElement | null} */ + const bg = this.querySelector(":scope .controller__background"); + if (bg) bg.style.backgroundColor = color.rgba; + + /** @type {HTMLElement | null} */ + const main = this.querySelector(":scope main"); + if (main) main.style.backgroundColor = color.rgba; + + img.style.opacity = "1"; + + this.querySelectorAll(":scope .artwork img").forEach((el) => { + if (el === img) return; + + const element = /** @type {HTMLElement} */ (el); + element.style.opacity = "0"; + timeouts[hash] = setTimeout(() => element.remove(), 1000); + }); + }; + + // Insert new artwork + this.querySelector(":scope .artwork")?.appendChild(img); + }); + + this.effect(() => { + // if (artworkLightMode()) { + // controller.classList.add("controller__inner--light-mode"); + // } else controller.classList.remove("controller__inner--light-mode"); + }); + } + + // RENDER + + /** + * @param {RenderArg} _ + */ + render({ html }) { + return html` + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    +
    + `; + } +} + +export default ArtworkController; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = ArtworkController; +export const NAME = "db-artwork-controller"; + +customElements.define(NAME, CLASS); diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto new file mode 100644 index 000000000..a655bf8a9 --- /dev/null +++ b/src/themes/blur/artwork-controller/index.vto @@ -0,0 +1,53 @@ +--- +layout: layouts/diffuse.vto + +base: "../../../" + +scripts: + - element.js +--- + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/themes/blur/index.js b/src/themes/blur/index.js index 30e36c789..23e0083eb 100644 --- a/src/themes/blur/index.js +++ b/src/themes/blur/index.js @@ -57,10 +57,5 @@ effect(() => { // 🛠️ async function isLeader() { - if (audio.broadcasted) { - const status = await audio.broadcastingStatus(); - return status.leader; - } else { - return true; - } + return await audio.isLeader(); } diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index 82f0ba8de..4389d1304 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, query } from "@common/element.js"; +import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; /** * @import {RenderArg} from "@common/element.d.ts" @@ -10,18 +10,7 @@ import { DiffuseElement, query } from "@common/element.js"; class Browser extends DiffuseElement { constructor() { super(); - - // Enable Shadow DOM this.attachShadow({ mode: "open" }); - - /** @type {InputElement} */ - this.input = query(this, "input-selector"); - - /** @type {OutputElement} */ - this.output = query(this, "output-selector"); - - /** @type {import("@components/engine/queue/element.js").CLASS} */ - this.queue = query(this, "queue-selector"); } // LIFECYCLE @@ -32,15 +21,21 @@ class Browser extends DiffuseElement { connectedCallback() { super.connectedCallback(); - // Wait for the above dependencies to be defined, then render again. - (async () => { - await customElements.whenDefined(this.input.localName); - await customElements.whenDefined(this.output.localName); + /** @type {InputElement} */ + this.input = query(this, "input-selector"); + + /** @type {OutputElement} */ + this.output = query(this, "output-selector"); + /** @type {import("@components/engine/queue/element.js").CLASS} */ + this.queue = query(this, "queue-engine-selector"); + + // Wait for the above dependencies to be defined, then render again. + whenElementsDefined({ input: this.input, output: this.output }).then(() => { this.effect(() => { this.forceRender(); }); - })(); + }); } // EVENTS @@ -66,7 +61,7 @@ class Browser extends DiffuseElement { * @param {Track} track */ playTrack(track) { - this.queue.add({ + this.queue?.add({ inFront: true, tracks: [track], }); @@ -78,7 +73,7 @@ class Browser extends DiffuseElement { * @param {RenderArg} _ */ render({ html }) { - const tracks = this.output.tracks?.collection() || []; + const tracks = this.output?.tracks?.collection() ?? []; return html` diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index d0ba7cd6b..442c3218b 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -37,7 +37,7 @@ From d667358ee40317380286d09492d885ed9b064e8a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 29 Nov 2025 22:27:15 +0100 Subject: [PATCH 104/244] chore: rearrange styles --- src/_includes/layouts/diffuse.vto | 6 -- src/index.css | 3 +- src/styles/base.css | 7 ++ .../blur/artwork-controller/element.css | 10 +- src/themes/blur/artwork-controller/element.js | 10 +- src/themes/blur/artwork-controller/index.vto | 4 +- src/themes/blur/index.css | 7 -- src/themes/blur/index.vto | 95 ++++++++++--------- 8 files changed, 65 insertions(+), 77 deletions(-) create mode 100644 src/styles/base.css diff --git a/src/_includes/layouts/diffuse.vto b/src/_includes/layouts/diffuse.vto index df2197173..0f3040471 100644 --- a/src/_includes/layouts/diffuse.vto +++ b/src/_includes/layouts/diffuse.vto @@ -26,12 +26,6 @@ styles: [] - - {{ for url of styles }} {{ /for }} diff --git a/src/index.css b/src/index.css index 5c1377db5..61645fa98 100644 --- a/src/index.css +++ b/src/index.css @@ -1,5 +1,4 @@ -@import "./styles/diffuse/colors.css"; -@import "./styles/diffuse/fonts.css"; +@import "./styles/base.css"; body { background-color: var(--bg-color); diff --git a/src/styles/base.css b/src/styles/base.css new file mode 100644 index 000000000..8bf516c8f --- /dev/null +++ b/src/styles/base.css @@ -0,0 +1,7 @@ +@import "./reset.css"; +@import "./variables.css"; +@import "./fonts.css"; +@import "./animations.css"; + +@import "./diffuse/colors.css"; +@import "./diffuse/fonts.css"; diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css index fbf908321..c2747d8cb 100644 --- a/src/themes/blur/artwork-controller/element.css +++ b/src/themes/blur/artwork-controller/element.css @@ -1,12 +1,4 @@ -@import "../../../styles/reset.css"; -@import "../../../styles/variables.css"; -@import "../../../styles/animations.css"; -/*@import "../../../styles/icons/phosphor.css";*/ - -@import "../../../styles/diffuse/colors.css"; -@import "../../../styles/diffuse/fonts.css"; - -:root { +:host { --transition-durition: 500ms; } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 62eb22a78..e76cda2cb 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -16,10 +16,10 @@ import { signal } from "@common/signal.js"; */ class ArtworkController extends DiffuseElement { - constructor() { - super(); - this.attachShadow({ mode: "open" }); - } + // constructor() { + // super(); + // this.attachShadow({ mode: "open" }); + // } // SIGNALS @@ -225,7 +225,7 @@ class ArtworkController extends DiffuseElement { render({ html }) { return html` diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index a655bf8a9..beee0f37c 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -1,7 +1,9 @@ --- layout: layouts/diffuse.vto +base: ../../../ -base: "../../../" +styles: + - ../../../styles/base.css scripts: - element.js diff --git a/src/themes/blur/index.css b/src/themes/blur/index.css index 2ff243c1e..6ac7fa78a 100644 --- a/src/themes/blur/index.css +++ b/src/themes/blur/index.css @@ -1,10 +1,3 @@ -@import "./variables.css"; -@import "../../styles/diffuse/colors.css"; -@import "../../styles/diffuse/fonts.css"; - -/*********************************** - * Base - ***********************************/ body { background-color: oklch(from var(--bg-color) calc(l - 0.025) c h); color: var(--text-color); diff --git a/src/themes/blur/index.vto b/src/themes/blur/index.vto index 66ca89232..c942d3185 100644 --- a/src/themes/blur/index.vto +++ b/src/themes/blur/index.vto @@ -1,47 +1,48 @@ - - - - - - - -
    -
    - - - - - - - - - - - - - - now - - - - - - - - - - - - +--- +layout: layouts/diffuse.vto +base: ../../ + +styles: + - ../../styles/base.css + - index.css + +scripts: + - index.js +--- + + +
    +
    + + + + + + + + + + + + + +now + + + + + + + From 6235859f8c97597ae69f268f7da2cd45ef4ce5cc Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 29 Nov 2025 23:19:47 +0100 Subject: [PATCH 105/244] chore: phosphor icons --- _config.ts | 15 +++++++++++++++ deno.jsonc | 1 + deno.lock | 5 +++++ src/themes/blur/artwork-controller/element.js | 2 +- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/_config.ts b/_config.ts index f312fac2f..66347b6de 100644 --- a/_config.ts +++ b/_config.ts @@ -64,6 +64,21 @@ site.remoteFile( site.add("/definitions"); +function phosphor(path: string) { + site.remoteFile( + `styles/vendor/phosphor/${path}`, + import.meta.resolve(`./node_modules/@phosphor-icons/web/src/${path}`), + ); +} + +phosphor("fill/style.css"); +phosphor("fill/Phosphor-Fill.svg"); +phosphor("fill/Phosphor-Fill.ttf"); +phosphor("fill/Phosphor-Fill.woff"); +phosphor("fill/Phosphor-Fill.woff2"); + +// PHOSPHOR ICONS + // MISC site.use(sourceMaps()); diff --git a/deno.jsonc b/deno.jsonc index 2d5100958..1fd56bb42 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -15,6 +15,7 @@ "@mys/worker-fn": "jsr:@mys/worker-fn@^3.2.1", "@okikio/transferables": "jsr:@okikio/transferables@^1.0.2", "@orama/orama": "jsr:@orama/orama@^2.0.6", + "@phosphor-icons/web": "npm:@phosphor-icons/web@^2.1.2", "@vicary/debounce-microtask": "jsr:@vicary/debounce-microtask@^0.1.8", "alien-signals": "npm:alien-signals@^3.0.0", "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", diff --git a/deno.lock b/deno.lock index 13ecad421..01d76001c 100644 --- a/deno.lock +++ b/deno.lock @@ -43,6 +43,7 @@ "npm:@atcute/lex-cli@^2.3.1": "2.3.1", "npm:@atcute/lexicons@^1.2.2": "1.2.2", "npm:@js-temporal/polyfill@~0.5.1": "0.5.1", + "npm:@phosphor-icons/web@^2.1.2": "2.1.2", "npm:@tauri-apps/plugin-shell@^2.2.0": "2.3.3", "npm:alien-signals@3": "3.0.3", "npm:autoprefixer@10.4.21": "10.4.21_postcss@8.5.6", @@ -381,6 +382,9 @@ "@optique/core" ] }, + "@phosphor-icons/web@2.1.2": { + "integrity": "sha512-rPAR9o/bEcp4Cw4DEeZHXf+nlGCMNGkNDRizYHM47NLxz9vvEHp/Tt6FMK1NcWadzw/pFDPnRBGi/ofRya958A==" + }, "@redux-devtools/extension@3.3.0_redux@5.0.1": { "integrity": "sha512-X34S/rC8S/M1BIrkYD1mJ5f8vlH0BDqxXrs96cvxSBo4FhMdbhU+GUGsmNYov1xjSyLMHgo8NYrUG8bNX7525g==", "dependencies": [ @@ -1805,6 +1809,7 @@ "npm:@atcute/lex-cli@^2.3.1", "npm:@atcute/lexicons@^1.2.2", "npm:@js-temporal/polyfill@~0.5.1", + "npm:@phosphor-icons/web@^2.1.2", "npm:alien-signals@3", "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", "npm:fast-average-color@^9.5.0", diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index e76cda2cb..cfc82527a 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -225,7 +225,7 @@ class ArtworkController extends DiffuseElement { render({ html }) { return html` From bf3fa408a46e6ea08fe3a3d73738558de39f9eda Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 30 Nov 2025 00:09:48 +0100 Subject: [PATCH 106/244] chore: index page tweaks + copy --- src/index.vto | 63 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/src/index.vto b/src/index.vto index 3f4975e88..8a8ad8adc 100644 --- a/src/index.vto +++ b/src/index.vto @@ -150,7 +150,7 @@ definitions:

    Usage

    - The easiest way to start is by exploring the software. If you prefer a typical traditional web application approach, you can check out themes. + The easiest way to start is by exploring the software. If you prefer a traditional pre­packaged web application approach, you can check out themes.

    @@ -164,11 +164,39 @@ definitions:

    NOTE: - I'd like there to be a way to compose your own theme without having to write code. Hopefully sometime in the future. + I'd like there to be a way to compose your own theme without having to write code. Hopefully sometime in the future.

    + +
    +

    Demo

    + +

    Diffuse is not your typical streaming service, you have to add sources of audio. This button here adds a few sample audio files from a S3 bucket.

    + +

    + + TODO: + Implement button + +

    + +

    + Next, select any theme from below to play the audio. Or any of the other options suggested in the usage section. +

    + +

    + + NOTE: + The items are added to the default "IndexedDB" output, so make sure that output is configured. + +

    + + +
    + +

    Themes

    @@ -187,19 +215,19 @@ definitions: {{ await comp.list({ items: themes }) }}
    -
    - -
    -

    Constituents

    + +
    +

    Constituents

    -

    - - TODO: - Explain constituents. - -

    -
    +

    + + TODO: + Explain constituents. + +

    +
    +
    @@ -296,13 +324,4 @@ definitions:

    - - -
    From c1b2fbcd6f0f2a9731552be1bf85dbcd0ba11dbc Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 30 Nov 2025 18:55:32 +0100 Subject: [PATCH 107/244] feat: default constituents config --- src/common/constituents/default.js | 61 +++++++++++++++++++ src/common/constituents/default/config.js | 3 + src/common/element.js | 8 ++- src/components/configurator/input/element.js | 10 ++- src/themes/blur/artwork-controller/element.js | 40 ++++++------ src/themes/blur/artwork-controller/index.vto | 40 +++--------- 6 files changed, 105 insertions(+), 57 deletions(-) create mode 100644 src/common/constituents/default.js create mode 100644 src/common/constituents/default/config.js diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js new file mode 100644 index 000000000..340008d27 --- /dev/null +++ b/src/common/constituents/default.js @@ -0,0 +1,61 @@ +import InputConfigurator from "@components/configurator/input/element.js"; +import Queue from "@components/engine/queue/element.js"; +import OpenSubsonic from "@components/input/opensubsonic/element.js"; +import S3 from "@components/input/s3/element.js"; +import QueueTracksOrchestrator from "@components/orchestrator/queue-tracks/element.js"; +import IndexedDBOutput from "@components/output/polymorphic/indexed-db/element.js"; +import DefaultRefiner from "@components/transformer/output/refiner/default/element.js"; +import JsonStringOutput from "@components/transformer/output/string/json/element.js"; +import { effect } from "../signal.js"; + +export const GROUP = "constituents"; + +/** + * Default config for constituents. + */ +export function config() { + // Input + const openSubsonic = new OpenSubsonic(); + const s3 = new S3(); + + const input = new InputConfigurator(); + input.setAttribute("id", "input"); + input.append(openSubsonic, s3); + + document.body.append(input); + + // Queue + const queue = new Queue(); + queue.setAttribute("group", GROUP); + + document.body.append(queue); + + // Output + const idb = new IndexedDBOutput(); + const json = new JsonStringOutput(); + json.setAttribute("output-selector", idb.localName); + + const refiner = new DefaultRefiner(); + refiner.setAttribute("id", "output"); + refiner.setAttribute("output-selector", json.localName); + + document.body.append(idb, json, refiner); + + // Orchestrators + const oqt = new QueueTracksOrchestrator(); + oqt.setAttribute("group", GROUP); + oqt.setAttribute("input-selector", "#input"); + oqt.setAttribute("output-selector", "#output"); + oqt.setAttribute("queue-engine-selector", queue.localName); + + document.body.append(oqt); + + // Signals & effects + effect(() => { + const trigger = queue.now(); + const _other_trigger = queue.poolHash(); + + queue.fill({ amount: 10, shuffled: true }); + if (!trigger) queue.shift(); + }); +} diff --git a/src/common/constituents/default/config.js b/src/common/constituents/default/config.js new file mode 100644 index 000000000..958794f28 --- /dev/null +++ b/src/common/constituents/default/config.js @@ -0,0 +1,3 @@ +import { config } from "../default.js"; + +config(); diff --git a/src/common/element.js b/src/common/element.js index 5fd4e9c63..5b18c33ab 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -67,8 +67,7 @@ export class DiffuseElement extends HTMLElement { state: "state" in this ? this.state : undefined, }); - const root = this.shadowRoot ? this.shadowRoot : this; - render(tmp, root); + render(tmp, this.root()); } /** */ @@ -76,6 +75,11 @@ export class DiffuseElement extends HTMLElement { return this.#render(); } + /** */ + root() { + return (this.shadowRoot ?? this); + } + // LIFECYCLE connectedCallback() { diff --git a/src/components/configurator/input/element.js b/src/components/configurator/input/element.js index 3623f17db..70fc15d4e 100644 --- a/src/components/configurator/input/element.js +++ b/src/components/configurator/input/element.js @@ -42,7 +42,10 @@ class InputConfigurator extends DiffuseElement { */ createWorker() { const worker = super.createWorker(); - this.configureWorker(worker); + + // Wait for child elements to be rendered + setTimeout(() => this.configureWorker(worker), 0); + return worker; } @@ -54,6 +57,9 @@ class InputConfigurator extends DiffuseElement { async configureWorker(worker) { const inputs = await this.inputTunnels(); + // Check if any inputs are present + if (inputs.length === 0) return; + // Configure worker with input ports const args = transfer({ ports: Object.fromEntries(inputs.map((input) => { @@ -67,7 +73,7 @@ class InputConfigurator extends DiffuseElement { } async inputTunnels() { - const inputElements = this.querySelectorAll(":scope > *"); + const inputElements = this.children; const inputs = await Array.from(inputElements).reduce( /** * @param {Promise>} acc diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index cfc82527a..88385a836 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -11,15 +11,14 @@ import { signal } from "@common/signal.js"; * @import {RenderArg} from "@common/element.d.ts" * @import {Track} from "@definitions/types.d.ts" * @import {InputElement} from "@components/input/types.d.ts" - * @import {OutputElement} from "@components/output/types.d.ts" * @import {Artwork} from "@components/processor/artwork/types.d.ts" */ class ArtworkController extends DiffuseElement { - // constructor() { - // super(); - // this.attachShadow({ mode: "open" }); - // } + constructor() { + super(); + this.attachShadow({ mode: "open" }); + } // SIGNALS @@ -70,14 +69,6 @@ class ArtworkController extends DiffuseElement { debouncedChangeArtwork(queue.now()); }); - this.effect(() => { - const trigger = queue.now(); - const _other_trigger = queue.poolHash(); - - queue.fill({ amount: 10, shuffled: true }); - if (!trigger) queue.shift(); - }); - // Force render when elements are defined // this.effect(() => { @@ -138,7 +129,7 @@ class ArtworkController extends DiffuseElement { // No artwork, fade out existing. if (art.length === 0) { - this.querySelectorAll(":scope .artwork img").forEach((el) => { + this.root().querySelectorAll(".artwork img").forEach((el) => { const element = /** @type {HTMLElement} */ (el); element.style.opacity = "0"; const hash = element.getAttribute("data-hash"); @@ -151,8 +142,8 @@ class ArtworkController extends DiffuseElement { const hash = xxh32r(art[0].bytes).toString(); /** @type {HTMLImageElement | null} */ - const existingArtwork = this.querySelector( - `:scope .artwork img[data-hash="${hash}"]`, + const existingArtwork = this.root().querySelector( + `.artwork img[data-hash="${hash}"]`, ); // If the artwork is the same, stop here. @@ -188,16 +179,16 @@ class ArtworkController extends DiffuseElement { this.#artworkLightMode.value = o > 165; /** @type {HTMLElement | null} */ - const bg = this.querySelector(":scope .controller__background"); + const bg = this.root().querySelector(".controller__background"); if (bg) bg.style.backgroundColor = color.rgba; /** @type {HTMLElement | null} */ - const main = this.querySelector(":scope main"); + const main = this.root().querySelector("main"); if (main) main.style.backgroundColor = color.rgba; img.style.opacity = "1"; - this.querySelectorAll(":scope .artwork img").forEach((el) => { + this.root().querySelectorAll(".artwork img").forEach((el) => { if (el === img) return; const element = /** @type {HTMLElement} */ (el); @@ -207,13 +198,16 @@ class ArtworkController extends DiffuseElement { }; // Insert new artwork - this.querySelector(":scope .artwork")?.appendChild(img); + this.root().querySelector(".artwork")?.appendChild(img); }); this.effect(() => { - // if (artworkLightMode()) { - // controller.classList.add("controller__inner--light-mode"); - // } else controller.classList.remove("controller__inner--light-mode"); + const controller = this.root().querySelector(".controller__inner"); + if (!controller) return; + + if (this.#artworkLightMode.value) { + controller.classList.add("controller__inner--light-mode"); + } else controller.classList.remove("controller__inner--light-mode"); }); } diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index beee0f37c..c3fd782b9 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -4,37 +4,17 @@ base: ../../../ styles: - ../../../styles/base.css - -scripts: - - element.js --- - - - - - - - - - - - - - @@ -42,14 +22,14 @@ scripts: From 6d98596e876162ab5c2bfee52614f33384d681a6 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 2 Dec 2025 18:20:40 +0100 Subject: [PATCH 108/244] refactor: worker connections with dependencies --- src/common/constituents/default.js | 7 +- src/common/element.d.ts | 6 - src/common/element.js | 230 ++++++++++-------- src/common/worker.d.ts | 24 ++ src/common/worker.js | 28 ++- src/components/configurator/input/element.js | 72 ++---- src/components/configurator/input/types.d.ts | 3 - src/components/configurator/input/worker.js | 95 +++----- src/components/engine/audio/element.js | 2 +- src/components/engine/queue/element.js | 4 +- .../orchestrator/process-tracks/element.js | 39 ++- .../orchestrator/process-tracks/types.d.ts | 7 +- .../orchestrator/process-tracks/worker.js | 9 +- .../orchestrator/queue-tracks/element.js | 62 ++--- .../orchestrator/queue-tracks/types.d.ts | 5 +- .../orchestrator/queue-tracks/worker.js | 9 +- .../orchestrator/search-tracks/element.js | 48 ++-- .../orchestrator/search-tracks/types.d.ts | 5 +- .../orchestrator/search-tracks/worker.js | 9 +- src/themes/blur/artwork-controller/element.js | 7 + 20 files changed, 312 insertions(+), 359 deletions(-) delete mode 100644 src/components/configurator/input/types.d.ts diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index 340008d27..eddf99196 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -55,7 +55,10 @@ export function config() { const trigger = queue.now(); const _other_trigger = queue.poolHash(); - queue.fill({ amount: 10, shuffled: true }); - if (!trigger) queue.shift(); + oqt.isLeader().then((isLeader) => { + if (!isLeader) return; + queue.fill({ amount: 10, shuffled: true }); + if (!trigger) queue.shift(); + }); }); } diff --git a/src/common/element.d.ts b/src/common/element.d.ts index 77a6a6ec3..5f5fcdb58 100644 --- a/src/common/element.d.ts +++ b/src/common/element.d.ts @@ -9,12 +9,6 @@ export type HtmlTagFunction = ( ...values: unknown[] ) => string; -export type ProvisionedWorkers = { - [K in T]: ProvisionedWorker; -}; - -export type ProvisionedWorker = Worker | SharedWorker; - export type RenderArg = { html: HtmlTagFunction; state: State; diff --git a/src/common/element.js b/src/common/element.js index 5b18c33ab..cb471d8b5 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -1,9 +1,15 @@ import QS from "query-string"; -import { RPCChannel } from "@kunkun/kkrpc"; +import { decodeMessage, encodeMessage, RPCChannel } from "@kunkun/kkrpc"; import { html, render } from "lit-html"; import { effect, signal } from "@common/signal.js"; -import { rpc, transfer, workerLink, workerTunnel } from "./worker.js"; +import { + rpc, + transfer, + workerLink, + workerProxy, + workerTunnel, +} from "./worker.js"; import { BrowserPostMessageIo } from "./worker/rpc.js"; // RE-EXPORT @@ -21,12 +27,9 @@ export { workerLink, workerProxy, workerTunnel } from "./worker.js"; * around rendering and managing signals. */ export class DiffuseElement extends HTMLElement { + #connected = Promise.withResolvers(); #disposables = /** @type {Array<() => void>} */ ([]); - #teardown() { - this.#disposables.forEach((fn) => fn()); - } - constructor() { super(); @@ -55,6 +58,26 @@ export class DiffuseElement extends HTMLElement { this.#disposables.push(effect(fn)); } + /** */ + forceRender() { + return this.#render(); + } + + /** */ + nameWithGroup() { + return `${this.constructor.prototype.constructor.NAME}/${this.group}`; + } + + /** */ + root() { + return (this.shadowRoot ?? this); + } + + /** */ + whenConnected() { + return this.#connected.promise; + } + /** * Avoid replacing the whole subtree, * morph the existing DOM into the new given tree. @@ -70,19 +93,11 @@ export class DiffuseElement extends HTMLElement { render(tmp, this.root()); } - /** */ - forceRender() { - return this.#render(); - } - - /** */ - root() { - return (this.shadowRoot ?? this); - } - // LIFECYCLE connectedCallback() { + this.#connected.resolve(null); + if (!("render" in this && typeof this.render === "function")) return; this.effect(() => { @@ -95,7 +110,11 @@ export class DiffuseElement extends HTMLElement { this.#teardown(); } - // WORKER + #teardown() { + this.#disposables.forEach((fn) => fn()); + } + + // WORKERS /** @type {undefined | Worker | SharedWorker} */ #worker; @@ -115,7 +134,7 @@ export class DiffuseElement extends HTMLElement { ); // Setup worker - const name = `${NAME}/${this.group}`; + const name = this.nameWithGroup(); const url = import.meta.resolve("./" + WORKER_URL) + `?${query}`; let worker; @@ -129,6 +148,20 @@ export class DiffuseElement extends HTMLElement { return worker; } + /** */ + dependencies() { + return Object.fromEntries( + Array.from(this.children).flatMap((element) => { + if ("nameWithGroup" in element === false) { + return []; + } + + const d = /** @type {DiffuseElement} */ (element); + return [[d.localName, d]]; + }), + ); + } + worker() { this.#worker ??= this.createWorker(); return this.#worker; @@ -138,6 +171,74 @@ export class DiffuseElement extends HTMLElement { const worker = this.worker(); return workerLink(worker); } + + /** + * @template {Record any>} Actions + * @returns {ProxiedActions} + */ + workerProxy() { + return workerProxy( + () => this.workerTunnel().port, + ); + } + + /** + * @param {{ newWorker?: boolean }} [opts] + */ + workerTunnel({ newWorker } = {}) { + // Creates a MessagePort that is connected to the worker. + // All the dependencies are added automatically. + const worker = newWorker ? this.createWorker() : this.worker(); + const deps = this.dependencies(); + + let toWorker; + + if (Object.keys(deps).length) { + toWorker = + /** + * @param {any} msg + */ + async (msg) => { + /** @type {Array<[string, Tunnel]>} */ + const ports = Object.entries(deps).map( + /** @param {[string, DiffuseElement]} _ */ + ([k, v]) => [k, v.workerTunnel()], + ); + + const decoded = await decodeMessage(msg); + const data = { + data: Array.isArray(decoded.args) ? decoded.args[0] : decoded.args, + ports: Object.fromEntries(ports.map(([k, v]) => { + return [k, v.port]; + })), + }; + + const encoded = encodeMessage( + { + ...decoded, + args: Array.isArray(decoded.args) + ? [data, ...decoded.args.slice(1)] + : decoded.args, + }, + {}, + true, + ports.map(([_k, v]) => v.port), + ); + + this.#disposables.push(() => { + ports.forEach(([_k, v]) => v.disconnect()); + }); + + return { + data: encoded, + transfer: ports.map(([_k, v]) => v.port), + }; + }; + } + + const tunnel = workerTunnel(worker, { toWorker }); + return tunnel; + } } /** @@ -171,13 +272,13 @@ export class BroadcastableDiffuseElement extends DiffuseElement { /** * @template {Record any }>} ActionsWithStrategy * @template {{ [K in keyof ActionsWithStrategy]: ActionsWithStrategy[K]["fn"] }} Actions - * @param {string} name + * @param {string} channelName * @param {ActionsWithStrategy} actionsWithStrategy */ - broadcast(name, actionsWithStrategy) { + broadcast(channelName, actionsWithStrategy) { if (this.broadcasted) return; - const channel = new BroadcastChannel(name); + const channel = new BroadcastChannel(channelName); const msg = new MessageChannel(); /** @@ -185,7 +286,7 @@ export class BroadcastableDiffuseElement extends DiffuseElement { */ this.broadcasted = true; - this.name = name; + this.channelName = channelName; const _rpc = rpc( msg.port2, @@ -291,7 +392,7 @@ export class BroadcastableDiffuseElement extends DiffuseElement { // Grab a lock if it isn't acquired yet, // and hold it until `this.lock.promise` resolves. navigator.locks.request( - `${this.name}/lock`, + `${this.channelName}/lock`, { ifAvailable: true }, (lock) => { this.#status.resolve( @@ -305,15 +406,15 @@ export class BroadcastableDiffuseElement extends DiffuseElement { // Additionally, wait for lock if needed. this.#status.promise.then((status) => { if (status.leader) { - console.log(`🧙 Elected leader for: ${this.name}`); + console.log(`🧙 Elected leader for: ${this.channelName}`); } else { - console.log(`🔮 Watching leader: ${this.name}`); + console.log(`🔮 Watching leader: ${this.channelName}`); } // Wait for leadership if (status.leader === false) { navigator.locks.request( - `${this.name}/lock`, + `${this.channelName}/lock`, () => { this.#status = Promise.withResolvers(); this.#status.resolve({ leader: true, initialLeader: false }); @@ -336,56 +437,6 @@ export class BroadcastableDiffuseElement extends DiffuseElement { } } -/** - * @template {string} A - * @template {ProvisionedWorkers} B - * @template {Record} C - * @template R - * @param {Promise | undefined} provisions - * @param {(args: C & { ports: { [K in keyof B]: MessagePort } }) => R} fn - * @param {C} fnArgs - * @returns {Promise} - */ -export async function callWorkerWithProvisions(provisions, fn, fnArgs) { - const workers = await provisions; - if (!workers) throw new Error("Workers not defined"); - - /** @type {Array<[keyof B, Tunnel]>} */ - const tunnels = Object.keys(workers).map( - (value) => { - const key = /** @type {keyof B} */ (value); - const worker = workers[key]; - return [key, workerTunnel(worker)]; - }, - ); - - const ports = /** @type {{ [K in keyof B]: MessagePort }} */ ( - Object.fromEntries( - tunnels.map(([key, tunnel]) => { - return [key, tunnel.port]; - }), - ) - ); - - const args = { - ...fnArgs, - ports, - }; - - const result = await fn(transfer( - args, - tunnels.map(([_key, tunnel]) => { - return tunnel.port; - }), - )); - - tunnels.forEach(([_key, tunnel]) => { - tunnel.disconnect(); - }); - - return result; -} - /** * Component DOM selector. * @@ -433,32 +484,9 @@ export function query(parent, attribute) { } /** - * @template {Record} T - * @param {T} elements + * @param {Record} workers */ -export async function provisionWorkers(elements) { - await whenElementsDefined(elements); - - /** @type {Record} */ - const provisions = {}; - - Object.entries(elements).forEach(([key, element]) => { - const worker = element.createWorker(); - provisions[key] = worker; - }); - - const casted = - /** @type {{ [K in keyof T]: ProvisionedWorker}} */ (provisions); - - return casted; -} - -/** - * @param {ProvisionedWorkers | undefined} workers - */ -export function terminateProvisions(workers) { - if (!workers) return; - +export function terminateWorkers(workers) { Object.values(workers).forEach((worker) => { if (worker instanceof Worker) worker.terminate(); }); diff --git a/src/common/worker.d.ts b/src/common/worker.d.ts index f366e7981..b44f8fd71 100644 --- a/src/common/worker.d.ts +++ b/src/common/worker.d.ts @@ -1,6 +1,16 @@ export type Announcement = MRpcBaseMsg & { type: "announcement"; args: T }; export type IncompleteArray = ["Missing required items", T]; +export type ActionsWithTunnel< + Actions extends Record any>, +> = { + [A in keyof Actions]: WithTunnel; +}; + +export type Dependencies = { + [K in T]: Worker | SharedWorker; +}; + /** * Comes from the `@mys/m-rpc` library, * but it is not exported. Used to identify @@ -34,3 +44,17 @@ export type Tunnel = { disconnect: () => void; port: MessagePort; }; + +/** */ +export type WithTunnel< + Fn extends (...args: any[]) => any, + PromisedReturn = (ReturnType extends Promise ? ReturnType + : Promise>), +> = ( + _: { data: Parameters[0]; ports: Record }, + ...args: Rest> +) => PromisedReturn; + +// 🛑 + +type Rest = T extends [any, ...(infer R)[]] ? R : never; diff --git a/src/common/worker.js b/src/common/worker.js index 149842e36..a3874b9d3 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -1,4 +1,4 @@ -import { RPCChannel } from "@kunkun/kkrpc"; +import { RPCChannel, transfer } from "@kunkun/kkrpc"; import { getTransferables } from "@okikio/transferables"; import { debounceMicrotask } from "@vicary/debounce-microtask"; import { xxh32 } from "xxh32"; @@ -9,7 +9,7 @@ export { getTransferables } from "@okikio/transferables"; export { transfer } from "@kunkun/kkrpc"; /** - * @import {Announcement, MessengerRealm, ProxiedActions, Tunnel} from "./worker.d.ts" + * @import {Announcement, Dependencies, MessengerRealm, ProxiedActions, Tunnel} from "./worker.d.ts" */ //////////////////////////////////////////// @@ -90,8 +90,11 @@ export function workerProxy(workerLinkCreator) { // Create proxy that creates RPC API when needed const proxy = new Proxy(() => {}, { get: (_target, prop) => { - const api = ensureAPI(); - return api[prop.toString()]; + /** @param {Parameters} args */ + return (...args) => { + const api = ensureAPI(); + return api[prop.toString()](...args); + }; }, }); @@ -100,24 +103,31 @@ export function workerProxy(workerLinkCreator) { /** * @param {MessagePort | Worker | SharedWorker} workerOrLink + * @param {{ fromWorker?: (message: any) => Promise<{ data: any, transfer?: Transferable[] }>; toWorker?: (message: any) => Promise<{ data: any, transfer?: Transferable[] }> }} [hooks] * @returns {Tunnel} */ -export function workerTunnel(workerOrLink) { +export function workerTunnel(workerOrLink, hooks = {}) { const link = workerOrLink instanceof SharedWorker ? workerLink(workerOrLink) : workerOrLink; const channel = new MessageChannel(); - channel.port1.addEventListener("message", (event) => { - link.postMessage(event.data); + channel.port1.addEventListener("message", async (event) => { + // Send to worker + const { data, transfer } = await hooks?.toWorker?.(event.data) ?? + { data: event.data }; + link.postMessage(data, { transfer }); }); /** * @param {Event} event */ - const workerListener = (event) => { + const workerListener = async (event) => { + // Receive from worker const msgEvent = /** @type {MessageEvent} */ (event); - channel.port1.postMessage(msgEvent.data); + const { data, transfer } = await hooks?.fromWorker?.(msgEvent.data) ?? + { data: msgEvent.data }; + channel.port1.postMessage(data, { transfer }); }; link.addEventListener("message", workerListener); diff --git a/src/components/configurator/input/element.js b/src/components/configurator/input/element.js index 70fc15d4e..8fdb3c003 100644 --- a/src/components/configurator/input/element.js +++ b/src/components/configurator/input/element.js @@ -1,10 +1,8 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; -import { transfer, workerLink, workerTunnel } from "@common/worker.js"; +import { DiffuseElement, whenElementsDefined } from "@common/element.js"; /** * @import {ProxiedActions, Tunnel} from "@common/worker.d.ts" * @import {InputActions, InputElement} from "@components/input/types.d.ts" - * @import {AdditionalActions} from "./types.d.ts" */ /** @@ -26,7 +24,7 @@ class InputConfigurator extends DiffuseElement { super(); /** @type {ProxiedActions} */ - const proxy = workerProxy(this.workerLink); + const proxy = this.workerProxy(); this.consult = proxy.consult; this.contextualize = proxy.contextualize; @@ -35,70 +33,32 @@ class InputConfigurator extends DiffuseElement { this.resolve = proxy.resolve; } - // WORKER + // LIFECYCLE /** * @override */ - createWorker() { - const worker = super.createWorker(); - - // Wait for child elements to be rendered - setTimeout(() => this.configureWorker(worker), 0); - - return worker; + async connectedCallback() { + super.connectedCallback(); + await whenElementsDefined(this.inputs()); } - // 🛠️ + // WORKERS /** - * @param {Worker | SharedWorker} worker + * @override */ - async configureWorker(worker) { - const inputs = await this.inputTunnels(); - - // Check if any inputs are present - if (inputs.length === 0) return; - - // Configure worker with input ports - const args = transfer({ - ports: Object.fromEntries(inputs.map((input) => { - return [input.element.SCHEME, input.tunnel.port]; - })), - }, inputs.map((i) => i.tunnel.port)); - - /** @type {ProxiedActions} */ - const proxy = workerProxy(() => workerLink(worker)); - proxy.configure(args); + dependencies() { + return this.inputs(); } - async inputTunnels() { - const inputElements = this.children; - const inputs = await Array.from(inputElements).reduce( - /** - * @param {Promise>} acc - * @param {Element} el - */ - async (acc, el) => { - const rec = await acc; - await customElements.whenDefined(el.localName); - - const element = /** @type {InputElement} */ (el); - const worker = element.worker(); - const tunnel = workerTunnel(worker); - - const item = { - element, - tunnel, - worker, - }; - - return [...rec, item]; - }, - Promise.resolve([]), + inputs() { + return Object.fromEntries( + Array.from(this.children).map((element) => { + const input = /** @type {InputElement} */ (element); + return [input.SCHEME, input]; + }), ); - - return inputs; } } diff --git a/src/components/configurator/input/types.d.ts b/src/components/configurator/input/types.d.ts deleted file mode 100644 index 65bb07b8e..000000000 --- a/src/components/configurator/input/types.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type AdditionalActions = { - configure: (args: { ports: { [S in string]: MessagePort } }) => void; -}; diff --git a/src/components/configurator/input/worker.js b/src/components/configurator/input/worker.js index 9df6c530f..007756589 100644 --- a/src/components/configurator/input/worker.js +++ b/src/components/configurator/input/worker.js @@ -6,43 +6,23 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; /** * @import {Track} from "@definitions/types.d.ts"; * @import {GroupConsult, InputActions} from "@components/input/types.d.ts" - * @import {ProxiedActions} from "@common/worker.d.ts" - * @import {AdditionalActions} from "./types.d.ts" + * @import {ActionsWithTunnel, ProxiedActions} from "@common/worker.d.ts" */ -/** @type {Record>} */ -const inputs = {}; - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// - -/** - * @type {AdditionalActions["configure"]} - */ -export function configure({ ports }) { - Object.keys(ports).forEach((key) => { - inputs[key.toLowerCase()] = workerProxy(() => { - const port = ports[key]; - port.start(); - return port; - }); - }); -} - //////////////////////////////////////////// // INPUT ACTIONS //////////////////////////////////////////// /** - * @type {InputActions['consult']} + * @type {ActionsWithTunnel['consult']} */ -export async function consult(fileUriOrScheme) { +export async function consult({ data, ports }) { + const fileUriOrScheme = data; const scheme = fileUriOrScheme.includes(":") ? URI.parse(fileUriOrScheme).scheme || fileUriOrScheme : fileUriOrScheme; - const input = grabInput(scheme); + const input = grabInput(scheme, ports); if (!input) { return { supported: false, reason: "Unsupported scheme" }; @@ -52,13 +32,14 @@ export async function consult(fileUriOrScheme) { } /** - * @type {InputActions['contextualize']} + * @type {ActionsWithTunnel['contextualize']} */ -export async function contextualize(tracks) { - const groups = groupTracks(tracks); +export async function contextualize({ data, ports }) { + const tracks = data; + const groups = groupTracks(tracks, ports); const promises = Object.entries(groups).map( async ([scheme, tracksGroup]) => { - const input = grabInput(scheme); + const input = grabInput(scheme, ports); if (!input || tracksGroup.length === 0) return; return await input.contextualize(tracksGroup); }, @@ -68,15 +49,16 @@ export async function contextualize(tracks) { } /** - * @type {InputActions['groupConsult']} + * @type {ActionsWithTunnel['groupConsult']} */ -export async function groupConsult(tracks) { +export async function groupConsult({ data, ports }) { + const tracks = data; const groups = groupTracksPerScheme(tracks); /** @type {GroupConsult[]} */ const consultations = await Promise.all( Object.keys(groups).map(async (scheme) => { - const input = grabInput(scheme); + const input = grabInput(scheme, ports); if (!input) { return { @@ -98,12 +80,12 @@ export async function groupConsult(tracks) { } /** - * @type {InputActions['list']} + * @type {ActionsWithTunnel['list']} */ -export async function list(cachedTracks = []) { - const groups = await groupConsult(cachedTracks); +export async function list({ data, ports }) { + const groups = await groupConsult({ data, ports }); - Object.keys(inputs).forEach((scheme) => { + Object.keys(ports).forEach((scheme) => { if (!groups[scheme]) groups[scheme] = { available: true, tracks: [] }; }); @@ -111,7 +93,7 @@ export async function list(cachedTracks = []) { async ([scheme, { available, tracks }]) => { if (!available) return tracks; - const input = grabInput(scheme); + const input = grabInput(scheme, ports); if (!input) return tracks; return await input.list(tracks); }, @@ -124,21 +106,16 @@ export async function list(cachedTracks = []) { } /** - * @type {InputActions['resolve']} + * @type {ActionsWithTunnel['resolve']} */ -export async function resolve(args) { - const scheme = args.uri.split(":", 1)[0]; - const input = grabInput(scheme); +export async function resolve({ data, ports }) { + const uri = data.uri; + const scheme = uri.split(":", 1)[0]; + const input = grabInput(scheme, ports); if (!input) return undefined; - try { - return await input.resolve(args); - } catch (err) { - console.error( - `[configurator/input] Resolve error for scheme '${scheme}'.`, - err, - ); - } + const result = await input.resolve(data); + return result; } //////////////////////////////////////////// @@ -152,9 +129,6 @@ ostiary((context) => { groupConsult, list, resolve, - - // Additional - configure, }); }); @@ -164,19 +138,28 @@ ostiary((context) => { /** * @param {string} scheme + * @param {Record} ports + * @returns {ProxiedActions | null} */ -function grabInput(scheme) { - return inputs[scheme.toLowerCase()]; +function grabInput(scheme, ports) { + const port = ports[scheme]; + if (!port) return null; + + return workerProxy(() => { + port.start(); + return port; + }); } /** * @param {Track[]} tracks + * @param {Record} ports */ -function groupTracks(tracks) { +function groupTracks(tracks, ports) { const grouped = groupTracksPerScheme( tracks, Object.fromEntries( - Object.keys(inputs).map((k) => { + Object.keys(ports).map((k) => { return [k, []]; }), ), diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 511e91bd5..744193f7f 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -46,7 +46,7 @@ class AudioEngine extends BroadcastableDiffuseElement { // Setup leader election if shared if (this.hasAttribute("group")) { const actions = this.broadcast( - `${this.constructor.prototype.constructor.NAME}/${this.group}`, + this.nameWithGroup(), { adjustVolume: { strategy: "leaderOnly", fn: this.adjustVolume }, pause: { strategy: "leaderOnly", fn: this.pause }, diff --git a/src/components/engine/queue/element.js b/src/components/engine/queue/element.js index d0388e70f..3e550dff1 100644 --- a/src/components/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; import { listen } from "@common/worker.js"; import { hash } from "@common/index.js"; @@ -23,7 +23,7 @@ class QueueEngine extends DiffuseElement { super(); /** @type {ProxiedActions} */ - this.proxy = workerProxy(this.workerLink); + this.proxy = this.workerProxy(); this.add = this.proxy.add; this.fill = this.proxy.fill; diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index 7bba91c2d..30bdd4f52 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -1,16 +1,8 @@ -import { - callWorkerWithProvisions, - DiffuseElement, - provisionWorkers, - query, - terminateProvisions, - workerProxy, -} from "@common/element.js"; +import { DiffuseElement, query } from "@common/element.js"; import { signal, untracked } from "@common/signal.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {ProvisionedWorkers} from "@common/element.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" * @import {InputElement} from "@components/input/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" @@ -34,12 +26,9 @@ class ProcessTracksOrchestrator extends DiffuseElement { /** @type {ProxiedActions} */ #proxy; - /** @type {Promise> | undefined} */ - #workers = undefined; - constructor() { super(); - this.#proxy = workerProxy(this.workerLink); + this.#proxy = this.workerProxy(); } // SIGNALS @@ -72,9 +61,6 @@ class ProcessTracksOrchestrator extends DiffuseElement { this.output = output; this.metadataProcessor = metadataProcessor; - // Create new workers - this.#workers = provisionWorkers({ input, metadataProcessor }); - // Wait until defined await customElements.whenDefined(output.localName); @@ -87,12 +73,21 @@ class ProcessTracksOrchestrator extends DiffuseElement { }); } + // WORKERS + /** * @override */ - async disconnectedCallback() { - super.disconnectedCallback(); - terminateProvisions(await this.#workers); + dependencies() { + if (!this.input) throw new Error("Input element not defined yet"); + if (!this.metadataProcessor) { + throw new Error("Metadata processor element not defined yet"); + } + + return { + input: this.input, + metadataProcessor: this.metadataProcessor, + }; } // ACTIONS @@ -105,11 +100,7 @@ class ProcessTracksOrchestrator extends DiffuseElement { console.log("🪵 Processing initiated"); const cachedTracks = this.output.tracks.collection(); - const result = await callWorkerWithProvisions( - this.#workers, - this.#proxy.process, - { tracks: cachedTracks }, - ); + const result = await this.#proxy.process(cachedTracks); // Save if collection changed if (result) await this.output.tracks.save(result); diff --git a/src/components/orchestrator/process-tracks/types.d.ts b/src/components/orchestrator/process-tracks/types.d.ts index 1523449fd..50b956b83 100644 --- a/src/components/orchestrator/process-tracks/types.d.ts +++ b/src/components/orchestrator/process-tracks/types.d.ts @@ -1,10 +1,5 @@ import type { Track } from "@definitions/types.d.ts"; export type Actions = { - process: ( - args: { - ports: { input: MessagePort; metadataProcessor: MessagePort }; - tracks: Track[]; - }, - ) => Promise; + process: (tracks: Track[]) => Promise; }; diff --git a/src/components/orchestrator/process-tracks/worker.js b/src/components/orchestrator/process-tracks/worker.js index 0038d1fd4..1a96d3cc2 100644 --- a/src/components/orchestrator/process-tracks/worker.js +++ b/src/components/orchestrator/process-tracks/worker.js @@ -4,7 +4,7 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {ProxiedActions} from "@common/worker.d.ts" + * @import {ActionsWithTunnel, ProxiedActions} from "@common/worker.d.ts" * @import {InputActions} from "@components/input/types.d.ts" * @import {Actions as MetadataProcessorActions} from "@components/processor/metadata/types.d.ts" * @import {Actions} from "./types.d.ts" @@ -15,11 +15,10 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; //////////////////////////////////////////// /** - * @type {Actions["process"]} + * @type {ActionsWithTunnel["process"]} */ -export async function process(args) { - const { ports } = args; - const cachedTracks = args.tracks; +export async function process({ data, ports }) { + const cachedTracks = data; /** @type {ProxiedActions} */ const input = workerProxy(() => ports.input); diff --git a/src/components/orchestrator/queue-tracks/element.js b/src/components/orchestrator/queue-tracks/element.js index 3ea0b2bd1..b15edfe11 100644 --- a/src/components/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/queue-tracks/element.js @@ -1,16 +1,8 @@ -import { - BroadcastableDiffuseElement, - callWorkerWithProvisions, - query, - terminateProvisions, - whenElementsDefined, - workerProxy, -} from "@common/element.js"; +import { BroadcastableDiffuseElement, query } from "@common/element.js"; import { untracked } from "@common/signal.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {ProvisionedWorkers} from "@common/element.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" * @import {InputElement} from "@components/input/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" @@ -34,18 +26,23 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { /** @type {ProxiedActions} */ #proxy; - /** @type {Promise> | undefined} */ - #workers = undefined; - constructor() { super(); - this.#proxy = workerProxy(this.workerLink); + this.#proxy = this.workerProxy(); } + // LIFECYCLE + /** * @override */ async connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + this.broadcast(this.nameWithGroup(), {}); + } + + // Super super.connectedCallback(); /** @type {InputElement} */ @@ -62,17 +59,10 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { this.output = output; this.queue = queue; - // Create new workers - this.#workers = whenElementsDefined({ input, queue }).then(() => { - return { - input: input.createWorker(), - queue: queue.worker(), - }; - }); - // When defined await customElements.whenDefined(this.input.localName); await customElements.whenDefined(this.output.localName); + await customElements.whenDefined(this.queue.localName); // Watch tracks collection this.effect(() => { @@ -82,31 +72,29 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { if (!isLeader) return; untracked(() => - this.poolAvailable(tracks.filter((t) => t.kind !== "placeholder")) + this.#proxy.poolAvailable( + tracks.filter((t) => t.kind !== "placeholder"), + ) ); }); }); - } - /** - * @override - */ - async disconnectedCallback() { - super.disconnectedCallback(); - terminateProvisions(await this.#workers); + // 🌸 } - // 🌊 + // WORKERS /** - * @param {Track[]} cachedTracks + * @override */ - async poolAvailable(cachedTracks) { - return await callWorkerWithProvisions( - this.#workers, - this.#proxy.poolAvailable, - { tracks: cachedTracks }, - ); + dependencies() { + if (!this.input) throw new Error("Input element not defined yet"); + if (!this.queue) throw new Error("Queue element not defined yet"); + + return { + input: this.input, + queue: this.queue, + }; } } diff --git a/src/components/orchestrator/queue-tracks/types.d.ts b/src/components/orchestrator/queue-tracks/types.d.ts index 825285d29..95a112b84 100644 --- a/src/components/orchestrator/queue-tracks/types.d.ts +++ b/src/components/orchestrator/queue-tracks/types.d.ts @@ -1,8 +1,5 @@ import type { Track } from "@definitions/types.d.ts"; export type Actions = { - poolAvailable(args: { - ports: { input: MessagePort; queue: MessagePort }; - tracks: Track[]; - }): Promise; + poolAvailable(tracks: Track[]): Promise; }; diff --git a/src/components/orchestrator/queue-tracks/worker.js b/src/components/orchestrator/queue-tracks/worker.js index 7b85c6c93..2c9103e9a 100644 --- a/src/components/orchestrator/queue-tracks/worker.js +++ b/src/components/orchestrator/queue-tracks/worker.js @@ -2,7 +2,7 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {ProxiedActions} from "@common/worker.d.ts" + * @import {ActionsWithTunnel, ProxiedActions} from "@common/worker.d.ts" * @import {InputActions} from "@components/input/types.d.ts" * @import {Actions as QueueEngineActions} from "@components/engine/queue/types.d.ts" * @import {Actions} from "./types.d.ts" @@ -13,11 +13,10 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; //////////////////////////////////////////// /** - * @type {Actions["poolAvailable"]} + * @type {ActionsWithTunnel["poolAvailable"]} */ -export async function poolAvailable(args) { - const { ports } = args; - const cachedTracks = args.tracks; +export async function poolAvailable({ data, ports }) { + const cachedTracks = data; /** @type {ProxiedActions} */ const input = workerProxy(() => ports.input); diff --git a/src/components/orchestrator/search-tracks/element.js b/src/components/orchestrator/search-tracks/element.js index e3981327c..68a5b856f 100644 --- a/src/components/orchestrator/search-tracks/element.js +++ b/src/components/orchestrator/search-tracks/element.js @@ -1,15 +1,7 @@ -import { - callWorkerWithProvisions, - DiffuseElement, - provisionWorkers, - query, - terminateProvisions, - workerProxy, -} from "@common/element.js"; +import { DiffuseElement, query } from "@common/element.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {ProvisionedWorkers} from "@common/element.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" * @import {InputElement} from "@components/input/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" @@ -33,14 +25,13 @@ class SearchTracksOrchestrator extends DiffuseElement { /** @type {ProxiedActions} */ #proxy; - /** @type {Promise> | undefined} */ - #workers = undefined; - constructor() { super(); - this.#proxy = workerProxy(this.workerLink); + this.#proxy = this.workerProxy(); } + // LIFECYCLE + /** * @override */ @@ -61,9 +52,6 @@ class SearchTracksOrchestrator extends DiffuseElement { this.output = output; this.search = search; - // Create new workers - this.#workers = provisionWorkers({ input, search }); - // When defined await customElements.whenDefined(this.output.localName); @@ -73,29 +61,23 @@ class SearchTracksOrchestrator extends DiffuseElement { t.kind !== "placeholder" ); - this.supplyAvailable(tracks); + this.#proxy.supplyAvailable(tracks); }); } - /** - * @override - */ - async disconnectedCallback() { - super.disconnectedCallback(); - terminateProvisions(await this.#workers); - } - - // 🚛 + // WORKERS /** - * @param {Track[]} cachedTracks + * @override */ - async supplyAvailable(cachedTracks) { - return await callWorkerWithProvisions( - this.#workers, - this.#proxy.supplyAvailable, - { tracks: cachedTracks }, - ); + dependencies() { + if (!this.input) throw new Error("Input element not defined yet"); + if (!this.search) throw new Error("Search element not defined yet"); + + return { + input: this.input, + search: this.search, + }; } } diff --git a/src/components/orchestrator/search-tracks/types.d.ts b/src/components/orchestrator/search-tracks/types.d.ts index b811ed8d8..c9cc6bc16 100644 --- a/src/components/orchestrator/search-tracks/types.d.ts +++ b/src/components/orchestrator/search-tracks/types.d.ts @@ -1,8 +1,5 @@ import type { Track } from "@definitions/types.d.ts"; export type Actions = { - supplyAvailable(args: { - ports: { input: MessagePort; search: MessagePort }; - tracks: Track[]; - }): Promise; + supplyAvailable(tracks: Track[]): Promise; }; diff --git a/src/components/orchestrator/search-tracks/worker.js b/src/components/orchestrator/search-tracks/worker.js index 607711b13..fd52e6de5 100644 --- a/src/components/orchestrator/search-tracks/worker.js +++ b/src/components/orchestrator/search-tracks/worker.js @@ -2,7 +2,7 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {ProxiedActions} from "@common/worker.d.ts" + * @import {ActionsWithTunnel, ProxiedActions} from "@common/worker.d.ts" * @import {InputActions} from "@components/input/types.d.ts" * @import {Actions as SearchProcessorActions} from "@components/processor/search/types.d.ts" * @import {Actions} from "./types.d.ts" @@ -13,11 +13,10 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; //////////////////////////////////////////// /** - * @type {Actions["supplyAvailable"]} + * @type {ActionsWithTunnel["supplyAvailable"]} */ -export async function supplyAvailable(args) { - const { ports } = args; - const cachedTracks = args.tracks; +export async function supplyAvailable({ data, ports }) { + const cachedTracks = data; /** @type {ProxiedActions} */ const input = workerProxy(() => ports.input); diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 88385a836..d5739cffc 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -85,6 +85,8 @@ class ArtworkController extends DiffuseElement { * @param {Track | null} track */ async #changeArtwork(track) { + console.log("QUEUE NOW", track); + if (!track) { this.#artwork.value = []; return; @@ -98,6 +100,8 @@ class ArtworkController extends DiffuseElement { uri: track.uri, }); + console.log(resGet, this.input); + if (!resGet) return; const request = "stream" in resGet @@ -116,6 +120,9 @@ class ArtworkController extends DiffuseElement { }; const art = await this.artwork?.artwork(request) ?? []; + + console.log(art); + const currCacheId = track ? await trackArtworkCacheId(track) : undefined; if (cacheId === currCacheId) this.#artwork.set(art); } From 70e93d5a36c4eae52cdb9471bb0e5ace9fa881bf Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 2 Dec 2025 18:27:35 +0100 Subject: [PATCH 109/244] refactor: use this.workerProxy() everywhere --- src/common/element.js | 12 +----------- src/common/worker.js | 2 +- src/components/input/opensubsonic/element.js | 4 ++-- src/components/input/s3/element.js | 4 ++-- .../output/polymorphic/indexed-db/element.js | 4 ++-- src/components/processor/artwork/element.js | 4 ++-- src/components/processor/metadata/element.js | 4 ++-- src/components/processor/search/element.js | 4 ++-- 8 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/common/element.js b/src/common/element.js index cb471d8b5..78a822ff6 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -3,19 +3,9 @@ import { decodeMessage, encodeMessage, RPCChannel } from "@kunkun/kkrpc"; import { html, render } from "lit-html"; import { effect, signal } from "@common/signal.js"; -import { - rpc, - transfer, - workerLink, - workerProxy, - workerTunnel, -} from "./worker.js"; +import { rpc, workerLink, workerProxy, workerTunnel } from "./worker.js"; import { BrowserPostMessageIo } from "./worker/rpc.js"; -// RE-EXPORT - -export { workerLink, workerProxy, workerTunnel } from "./worker.js"; - /** * @import {BroadcastingStatus, ProvisionedWorker, ProvisionedWorkers} from "./element.d.ts" * @import {ProxiedActions, Tunnel} from "./worker.d.ts"; diff --git a/src/common/worker.js b/src/common/worker.js index a3874b9d3..cee47e7df 100644 --- a/src/common/worker.js +++ b/src/common/worker.js @@ -1,4 +1,4 @@ -import { RPCChannel, transfer } from "@kunkun/kkrpc"; +import { RPCChannel } from "@kunkun/kkrpc"; import { getTransferables } from "@okikio/transferables"; import { debounceMicrotask } from "@vicary/debounce-microtask"; import { xxh32 } from "xxh32"; diff --git a/src/components/input/opensubsonic/element.js b/src/components/input/opensubsonic/element.js index aca7bf715..f5459a6db 100644 --- a/src/components/input/opensubsonic/element.js +++ b/src/components/input/opensubsonic/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; import { SCHEME } from "./constants.js"; /** @@ -24,7 +24,7 @@ class OpensubsonicInput extends DiffuseElement { super(); /** @type {ProxiedActions} */ - const p = workerProxy(this.workerLink); + const p = this.workerProxy(); this.consult = p.consult; this.contextualize = p.contextualize; diff --git a/src/components/input/s3/element.js b/src/components/input/s3/element.js index 5e7fb04ef..55be593d3 100644 --- a/src/components/input/s3/element.js +++ b/src/components/input/s3/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; import { SCHEME } from "./constants.js"; /** @@ -24,7 +24,7 @@ class S3Input extends DiffuseElement { super(); /** @type {ProxiedActions Promise }>} */ - const p = workerProxy(this.workerLink); + const p = this.workerProxy(); this.consult = p.consult; this.contextualize = p.contextualize; diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index 48ba8cec8..5c2c2128a 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; import { outputManager } from "../../common.js"; /** @@ -21,7 +21,7 @@ class IndexedDBOutput extends DiffuseElement { super(); /** @type {ProxiedActions} */ - const p = workerProxy(this.workerLink); + const p = this.workerProxy(); // Manager const manager = outputManager({ diff --git a/src/components/processor/artwork/element.js b/src/components/processor/artwork/element.js index 9569c5d1f..06780fc15 100644 --- a/src/components/processor/artwork/element.js +++ b/src/components/processor/artwork/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts" @@ -20,7 +20,7 @@ class ArtworkProcessor extends DiffuseElement { super(); /** @type {ProxiedActions} */ - const p = workerProxy(this.workerLink); + const p = this.workerProxy(); this.artwork = p.artwork; this.supply = p.supply; diff --git a/src/components/processor/metadata/element.js b/src/components/processor/metadata/element.js index 87a131283..cb0cc2223 100644 --- a/src/components/processor/metadata/element.js +++ b/src/components/processor/metadata/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts" @@ -20,7 +20,7 @@ class MetadataProcessor extends DiffuseElement { super(); /** @type {ProxiedActions} */ - const p = workerProxy(this.workerLink); + const p = this.workerProxy(); // Worker proxy this.supply = p.supply; diff --git a/src/components/processor/search/element.js b/src/components/processor/search/element.js index 54c8b44f9..eaeac592a 100644 --- a/src/components/processor/search/element.js +++ b/src/components/processor/search/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, workerProxy } from "@common/element.js"; +import { DiffuseElement } from "@common/element.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts"; @@ -20,7 +20,7 @@ class SearchProcessor extends DiffuseElement { super(); /** @type {ProxiedActions} */ - const p = workerProxy(this.workerLink); + const p = this.workerProxy(); this.search = p.search; this.supply = p.supply; From b7d719daa2222353ffc7ef2cd71f386aa4d8e830 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 7 Dec 2025 00:14:14 +0100 Subject: [PATCH 110/244] feat: artwork controller time status & progress bar --- src/common/constituents/default.js | 28 ++ src/components/engine/audio/element.js | 142 ++++++--- src/components/engine/audio/types.d.ts | 41 ++- src/themes/blur/artwork-controller/element.js | 281 ++++++++++++------ src/themes/blur/artwork-controller/index.vto | 13 +- 5 files changed, 342 insertions(+), 163 deletions(-) diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index eddf99196..956569d3a 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -61,4 +61,32 @@ export function config() { if (!trigger) queue.shift(); }); }); + + // Return elements + return { + GROUP, + + configurator: { + input, + }, + engine: { + queue, + }, + input: { + openSubsonic, + s3, + }, + orchestrator: { + queueTracks: oqt, + }, + output: { + indexedDB: idb, + }, + transformer: { + jsonStringOutput: json, + refiner: { + default: refiner, + }, + }, + }; } diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 744193f7f..ffc1e0dff 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -1,9 +1,10 @@ import { BroadcastableDiffuseElement } from "@common/element.js"; -import { signal } from "@common/signal.js"; +import { computed, signal } from "@common/signal.js"; /** - * @import {Actions, Audio, AudioState, State} from "./types.d.ts" + * @import {Actions, Audio, AudioState, AudioStateReadOnly, LoadingState} from "./types.d.ts" * @import {RenderArg} from "@common/element.d.ts" + * @import {SignalReader} from "@common/signal.d.ts" */ //////////////////////////////////////////// @@ -112,7 +113,7 @@ class AudioEngine extends BroadcastableDiffuseElement { */ adjustVolume(args) { if (args.audioId) { - this.withAudioNode(args.audioId, (audio) => { + this.#withAudioNode(args.audioId, (audio) => { audio.volume = args.volume; }); } else { @@ -124,14 +125,14 @@ class AudioEngine extends BroadcastableDiffuseElement { * @type {Actions["pause"]} */ pause({ audioId }) { - this.withAudioNode(audioId, (audio) => audio.pause()); + this.#withAudioNode(audioId, (audio) => audio.pause()); } /** * @type {Actions["play"]} */ play({ audioId, volume }) { - this.withAudioNode(audioId, (audio, item) => { + this.#withAudioNode(audioId, (audio, item) => { audio.volume = volume ?? this.volume(); audio.muted = false; @@ -139,7 +140,7 @@ class AudioEngine extends BroadcastableDiffuseElement { if (!audio.isConnected) return; const promise = audio.play() || Promise.resolve(); - item.state({ isPlaying: true }); + item.$state.isPlaying.set(true); promise.catch((e) => { if (!audio.isConnected) { @@ -148,7 +149,7 @@ class AudioEngine extends BroadcastableDiffuseElement { const err = "Couldn't play audio automatically. Please resume playback manually."; console.error(err, e); - item.state({ isPlaying: false }); + item.$state.isPlaying.set(false); }); }); } @@ -157,7 +158,7 @@ class AudioEngine extends BroadcastableDiffuseElement { * @type {Actions["reload"]} */ reload(args) { - this.withAudioNode(args.audioId, (audio, item) => { + this.#withAudioNode(args.audioId, (audio, item) => { if (audio.readyState === 0 || audio.error?.code === 2) { audio.load(); @@ -179,7 +180,7 @@ class AudioEngine extends BroadcastableDiffuseElement { * @type {Actions["seek"]} */ seek({ audioId, percentage }) { - this.withAudioNode(audioId, (audio) => { + this.#withAudioNode(audioId, (audio) => { if (!isNaN(audio.duration)) { audio.currentTime = audio.duration * percentage; } @@ -236,20 +237,53 @@ class AudioEngine extends BroadcastableDiffuseElement { // 🛠️ + /** + * Get the state of a single audio item. + * + * @param {string} audioId + * @returns {SignalReader} + */ + _state(audioId) { + return computed(() => { + const _trigger = this.#items.value; + + const s = this.#itemElement(audioId)?.state; + return s ? { ...s } : undefined; + }); + } + + /** + * Get the state of a single audio item. + * + * @param {string} audioId + * @returns {AudioStateReadOnly | undefined} + */ + state(audioId) { + return this._state(audioId)(); + } + /** * @param {string} audioId - * @param {(audio: HTMLAudioElement, item: AudioEngineItem) => void} fn */ - withAudioNode(audioId, fn) { + #itemElement(audioId) { const node = this.querySelector( `de-audio-item[id="${audioId}"]:not([preload])`, ); if (node) { const item = /** @type {AudioEngineItem} */ (node); - if (item) fn(item.audio, item); + return item; } } + + /** + * @param {string} audioId + * @param {(audio: HTMLAudioElement, item: AudioEngineItem) => void} fn + */ + #withAudioNode(audioId, fn) { + const item = this.#itemElement(audioId); + if (item) fn(item.audio, item); + } } export default AudioEngine; @@ -259,26 +293,21 @@ export default AudioEngine; //////////////////////////////////////////// class AudioEngineItem extends HTMLElement { - /** - * @type {AudioState} - */ - #state; - constructor() { super(); const ip = this.getAttribute("initial-progress"); - this.#state = { - duration: 0, - hasEnded: false, - id: this.id, - isPlaying: true, - isPreload: this.hasAttribute("preload"), - loadingState: "loading", - mimeType: this.getAttribute("mime-type") ?? undefined, - progress: ip ? parseFloat(ip) : 0, - url: this.getAttribute("url") ?? "", + /** + * @type {AudioState} + */ + this.$state = { + duration: signal(0), + hasEnded: signal(false), + isPlaying: signal(true), + isPreload: signal(this.hasAttribute("preload")), + loadingState: signal(/** @type {LoadingState} */ ("loading")), + progress: signal(ip ? parseFloat(ip) : 0), }; const audio = this.audio; @@ -294,6 +323,31 @@ class AudioEngineItem extends HTMLElement { audio.addEventListener("waiting", this.waitingEvent); } + // LIFECYCLE + + connectedCallback() { + } + + // STATE + + /** + * @type {AudioStateReadOnly} + */ + get state() { + return { + id: this.id, + mimeType: (this.getAttribute("mime-type") ?? undefined), + url: (this.getAttribute("url") ?? ""), + + duration: this.$state.duration.get, + hasEnded: this.$state.hasEnded.get, + isPlaying: this.$state.isPlaying.get, + isPreload: this.$state.isPreload.get, + loadingState: this.$state.loadingState.get, + progress: this.$state.progress.get, + }; + } + // RELATED ELEMENTS get audio() { @@ -308,16 +362,6 @@ class AudioEngineItem extends HTMLElement { else return null; } - // STATE - - /** - * @param {Partial | undefined} [s] - */ - state(s) { - if (s) this.#state = { ...this.#state, ...s }; - else return { ...this.#state }; - } - // EVENTS /** @@ -349,7 +393,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); if (!isNaN(audio.duration)) { - engineItem(audio)?.state({ duration: audio.duration }); + engineItem(audio)?.$state.duration.set(audio.duration); } } @@ -360,7 +404,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); audio.currentTime = 0; - engineItem(audio)?.state({ hasEnded: true }); + engineItem(audio)?.$state.hasEnded.set(true); engineItem(audio)?.engine?.$hasEnded.set(true); } @@ -371,7 +415,7 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); const code = audio.error?.code || 0; - engineItem(audio)?.state({ loadingState: { error: { code } } }); + engineItem(audio)?.$state.loadingState.set({ error: { code } }); } /** @@ -381,12 +425,12 @@ class AudioEngineItem extends HTMLElement { const audio = /** @type {HTMLAudioElement} */ (event.target); const item = engineItem(audio); - const itemState = item?.state(); + const itemState = item?.$state; const ended = itemState - ? itemState.hasEnded || itemState.progress === 1 + ? itemState.hasEnded.value || itemState.progress.value === 1 : false; - item?.state({ isPlaying: false }); + item?.$state.isPlaying.set(false); item?.engine?.$isPlaying.set(ended); } @@ -396,7 +440,7 @@ class AudioEngineItem extends HTMLElement { playEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio)?.state({ isPlaying: true }); + engineItem(audio)?.$state.isPlaying.set(true); engineItem(audio)?.engine?.$isPlaying.set(true); // In case audio was preloaded: @@ -416,11 +460,11 @@ class AudioEngineItem extends HTMLElement { timeupdateEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio)?.state({ - progress: isNaN(audio.duration) || audio.duration === 0 + engineItem(audio)?.$state.progress.set( + isNaN(audio.duration) || audio.duration === 0 ? 0 : audio.currentTime / audio.duration, - }); + ); } /** @@ -451,7 +495,7 @@ function engineItem(audio) { */ function finishedLoading(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio)?.state({ loadingState: "loaded" }); + engineItem(audio)?.$state.loadingState.set("loaded"); } /** @@ -460,7 +504,7 @@ function finishedLoading(event) { function initiateLoading(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); if (audio.readyState < 4) { - engineItem(audio)?.state({ loadingState: "loading" }); + engineItem(audio)?.$state.loadingState.set("loading"); } } diff --git a/src/components/engine/audio/types.d.ts b/src/components/engine/audio/types.d.ts index 68199adbd..1b01eaee2 100644 --- a/src/components/engine/audio/types.d.ts +++ b/src/components/engine/audio/types.d.ts @@ -1,4 +1,4 @@ -import type { SignalReader } from "@common/signal.d.ts"; +import type { Signal, SignalReader } from "@common/signal.d.ts"; export type Actions = { adjustVolume: (_: { audioId?: string; volume: number }) => void; @@ -15,28 +15,41 @@ export type Audio = { id: string; isPreload: boolean; mimeType?: string; + // NOTE: Initial progress progress?: number; url: string; }; export type AudioState = { - duration: number; + duration: Signal; + hasEnded: Signal; + isPlaying: Signal; + isPreload: Signal; + loadingState: Signal; + progress: Signal; +}; + +export type AudioStateReadOnly = { id: string; - hasEnded: boolean; - loadingState: - | "initialisation" - | "loading" - | "loaded" - | { - error: { code: number }; - }; - isPlaying: boolean; - isPreload: boolean; - mimeType?: string; - progress: number; url: string; + mimeType: string | undefined; + + duration: SignalReader; + hasEnded: SignalReader; + isPlaying: SignalReader; + isPreload: SignalReader; + loadingState: SignalReader; + progress: SignalReader; }; +export type LoadingState = + | "initialisation" + | "loading" + | "loaded" + | { + error: { code: number }; + }; + export type State = { isPlaying: SignalReader; items: SignalReader; diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index d5739cffc..2befb110d 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -10,6 +10,7 @@ import { signal } from "@common/signal.js"; /** * @import {RenderArg} from "@common/element.d.ts" * @import {Track} from "@definitions/types.d.ts" + * @import {AudioStateReadOnly} from "@components/engine/audio/types.d.ts" * @import {InputElement} from "@components/input/types.d.ts" * @import {Artwork} from "@components/processor/artwork/types.d.ts" */ @@ -22,7 +23,7 @@ class ArtworkController extends DiffuseElement { // SIGNALS - // activeTrack = signal(/** @type {Track | undefined} */ (undefined)); + // #audio = signal(/** @type {AudioStateReadOnly | undefined} */ (undefined)); #artwork = signal(/** @type {Artwork[]} */ ([])); #artworkColor = signal(/** @type {string | undefined} */ (undefined)); #artworkLightMode = signal(false); @@ -62,31 +63,126 @@ class ArtworkController extends DiffuseElement { // Changed artwork based on active queue item. const debouncedChangeArtwork = debounce( 1000, - this.#changeArtwork.bind(this), + this.#setArtwork.bind(this), ); this.effect(() => { debouncedChangeArtwork(queue.now()); }); - // Force render when elements are defined + this.effect(() => { + const curr = queue.now(); + const aud = curr ? audio.state(curr.id) : undefined; + + console.log("NOW", curr, aud); + }); - // this.effect(() => { - // this.forceRender(); - // }); + this.effect(() => this.#changeArtworkInDOM()); + this.effect(() => this.#formatTimestamps()); + this.effect(() => this.#lightOrDark()); }); + } + + //////////////////////////////////////////// + // ✨ EFFECTS + // 🖼️ Artwork + //////////////////////////////////////////// + + /** @type {Record>} */ + #timeouts = {}; + + #changeArtworkInDOM() { + const art = this.#artwork.value; + + // No artwork, fade out existing. + if (art.length === 0) { + this.root().querySelectorAll(".artwork img").forEach((el) => { + const element = /** @type {HTMLElement} */ (el); + element.style.opacity = "0"; + const hash = element.getAttribute("data-hash"); + if (hash) { + this.#timeouts[hash] = setTimeout(() => element.remove(), 1000); + } + }); + return; + } + + // Determine if the current artwork needs to be replaced. + const hash = xxh32r(art[0].bytes).toString(); - this.#artworkEffects(); + /** @type {HTMLImageElement | null} */ + const existingArtwork = this.root().querySelector( + `.artwork img[data-hash="${hash}"]`, + ); + + // If the artwork is the same, stop here. + if (existingArtwork) { + const timeoutId = this.#timeouts[hash]; + if (timeoutId) clearTimeout(timeoutId); + existingArtwork.style.opacity = "1"; + return; + } + + // Add new artwork + const blob = new Blob( + [/** @type {ArrayBuffer} */ (art[0].bytes.buffer)], + { type: art[0].mime }, + ); + const url = URL.createObjectURL(blob); + + /** @type {HTMLImageElement} */ + const img = document.createElement("img"); + img.setAttribute("data-hash", hash); + img.src = url; + + // Extract average color + img.onload = () => { + const fac = new FastAverageColor(); + const color = fac.getColor(img); + const rgb = color.value; + const o = Math.round( + (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000, + ); + + this.#artworkColor.value = color.rgba; + this.#artworkLightMode.value = o > 165; + + /** @type {HTMLElement | null} */ + const bg = this.root().querySelector(".controller__background"); + if (bg) bg.style.backgroundColor = color.rgba; + + /** @type {HTMLElement | null} */ + const main = this.root().querySelector("main"); + if (main) main.style.backgroundColor = color.rgba; + + img.style.opacity = "1"; + + this.root().querySelectorAll(".artwork img").forEach((el) => { + if (el === img) return; + + const element = /** @type {HTMLElement} */ (el); + element.style.opacity = "0"; + this.#timeouts[hash] = setTimeout(() => element.remove(), 1000); + }); + }; + + // Insert new artwork + this.root().querySelector(".artwork")?.appendChild(img); } - // EFFECTS + #lightOrDark() { + const controller = this.root().querySelector(".controller__inner"); + if (!controller) return; + + if (this.#artworkLightMode.value) { + controller.classList.add("controller__inner--light-mode"); + } else controller.classList.remove("controller__inner--light-mode"); + } /** * @param {Track | null} track */ - async #changeArtwork(track) { - console.log("QUEUE NOW", track); - + async #setArtwork(track) { if (!track) { this.#artwork.value = []; return; @@ -100,8 +196,6 @@ class ArtworkController extends DiffuseElement { uri: track.uri, }); - console.log(resGet, this.input); - if (!resGet) return; const request = "stream" in resGet @@ -121,101 +215,72 @@ class ArtworkController extends DiffuseElement { const art = await this.artwork?.artwork(request) ?? []; - console.log(art); + console.log("ART", art); const currCacheId = track ? await trackArtworkCacheId(track) : undefined; if (cacheId === currCacheId) this.#artwork.set(art); } - #artworkEffects() { - /** @type {Record>} */ - const timeouts = {}; - - this.effect(() => { - const art = this.#artwork.value; + //////////////////////////////////////////// + // ✨ EFFECTS + // ⌚️ Time + //////////////////////////////////////////// + #formatTimestamps() { + const curr = this.queue?.now?.() ?? undefined; + const audio = curr ? this.audio?.state(curr.id) : undefined; + const prog = audio?.progress() ?? 0; + const dur = curr?.stats?.duration ?? audio?.duration(); + + if (audio && dur != undefined && !isNaN(dur)) { + const p = Temporal.Duration.from({ + milliseconds: Math.round(dur * prog * 1000), + }).round({ + largestUnit: "hours", + }); - // No artwork, fade out existing. - if (art.length === 0) { - this.root().querySelectorAll(".artwork img").forEach((el) => { - const element = /** @type {HTMLElement} */ (el); - element.style.opacity = "0"; - const hash = element.getAttribute("data-hash"); - if (hash) timeouts[hash] = setTimeout(() => element.remove(), 1000); + const d = Temporal.Duration.from({ milliseconds: Math.round(dur * 1000) }) + .round({ + largestUnit: "hours", }); - return; - } - - // Determine if the current artwork needs to be replaced. - const hash = xxh32r(art[0].bytes).toString(); - - /** @type {HTMLImageElement | null} */ - const existingArtwork = this.root().querySelector( - `.artwork img[data-hash="${hash}"]`, - ); - - // If the artwork is the same, stop here. - if (existingArtwork) { - const timeoutId = timeouts[hash]; - if (timeoutId) clearTimeout(timeoutId); - existingArtwork.style.opacity = "1"; - return; - } - - // Add new artwork - const blob = new Blob( - [/** @type {ArrayBuffer} */ (art[0].bytes.buffer)], - { type: art[0].mime }, - ); - const url = URL.createObjectURL(blob); - - /** @type {HTMLImageElement} */ - const img = document.createElement("img"); - img.setAttribute("data-hash", hash); - img.src = url; - - // Extract average color - img.onload = () => { - const fac = new FastAverageColor(); - const color = fac.getColor(img); - const rgb = color.value; - const o = Math.round( - (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000, - ); - - this.#artworkColor.value = color.rgba; - this.#artworkLightMode.value = o > 165; - - /** @type {HTMLElement | null} */ - const bg = this.root().querySelector(".controller__background"); - if (bg) bg.style.backgroundColor = color.rgba; - - /** @type {HTMLElement | null} */ - const main = this.root().querySelector("main"); - if (main) main.style.backgroundColor = color.rgba; - img.style.opacity = "1"; - - this.root().querySelectorAll(".artwork img").forEach((el) => { - if (el === img) return; - - const element = /** @type {HTMLElement} */ (el); - element.style.opacity = "0"; - timeouts[hash] = setTimeout(() => element.remove(), 1000); - }); - }; + this.#time.value = this.#formatTime(p); + this.#duration.value = this.#formatTime(d); + } else { + this.#time.value = "0:00"; + this.#duration.value = "0:00"; + } + } - // Insert new artwork - this.root().querySelector(".artwork")?.appendChild(img); - }); + /** + * @param {Temporal.Duration} duration + */ + #formatTime(duration) { + return `${duration.hours > 0 ? duration.hours.toFixed(0) + ":" : ""}${ + duration.hours > 0 + ? (duration.minutes > 9 + ? duration.minutes.toFixed(0) + : "0" + duration.minutes.toFixed(0)) + : duration.minutes.toFixed(0) + }:${ + duration.seconds > 9 + ? duration.seconds.toFixed(0) + : "0" + duration.seconds.toFixed(0) + }`; + } - this.effect(() => { - const controller = this.root().querySelector(".controller__inner"); - if (!controller) return; + // EVENTS - if (this.#artworkLightMode.value) { - controller.classList.add("controller__inner--light-mode"); - } else controller.classList.remove("controller__inner--light-mode"); - }); + /** + * @param {MouseEvent} event + */ + seek(event) { + const target = event.target + ? /** @type {HTMLProgressElement} */ (event.target) + : null; + const percentage = target ? event.offsetX / target.clientWidth : 0; + const audioId = this.queue?.now()?.id; + + if (audioId) this.audio?.seek({ audioId, percentage }); } // RENDER @@ -247,8 +312,26 @@ class ArtworkController extends DiffuseElement {
    - -
    +
    + + + Diffuse +
    + +
    + + +
    + +
    + + +
    +
    + + +
    `; diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index c3fd782b9..9d2be916c 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -23,13 +23,24 @@ styles: From ad66ae59c26207f880e10b80532bb404c5bba866 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 7 Dec 2025 17:23:45 +0100 Subject: [PATCH 111/244] fix: audio rendering, phosphor icons, etc. --- _config.ts | 6 +- src/common/element.js | 2 + src/components/engine/audio/element.js | 54 +++--- .../blur/artwork-controller/element.css | 3 +- src/themes/blur/artwork-controller/element.js | 174 ++++++++++++++---- src/themes/blur/artwork-controller/index.vto | 1 + 6 files changed, 179 insertions(+), 61 deletions(-) diff --git a/_config.ts b/_config.ts index 66347b6de..e6dd9fc40 100644 --- a/_config.ts +++ b/_config.ts @@ -64,11 +64,15 @@ site.remoteFile( site.add("/definitions"); +// PHOSPHOR ICONS + function phosphor(path: string) { site.remoteFile( `styles/vendor/phosphor/${path}`, import.meta.resolve(`./node_modules/@phosphor-icons/web/src/${path}`), ); + + site.add(`styles/vendor/phosphor/${path}`); } phosphor("fill/style.css"); @@ -77,8 +81,6 @@ phosphor("fill/Phosphor-Fill.ttf"); phosphor("fill/Phosphor-Fill.woff"); phosphor("fill/Phosphor-Fill.woff2"); -// PHOSPHOR ICONS - // MISC site.use(sourceMaps()); diff --git a/src/common/element.js b/src/common/element.js index 78a822ff6..7750dfe6e 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -6,6 +6,8 @@ import { effect, signal } from "@common/signal.js"; import { rpc, workerLink, workerProxy, workerTunnel } from "./worker.js"; import { BrowserPostMessageIo } from "./worker/rpc.js"; +export { keyed } from "lit-html/directives/keyed.js"; + /** * @import {BroadcastingStatus, ProvisionedWorker, ProvisionedWorkers} from "./element.d.ts" * @import {ProxiedActions, Tunnel} from "./worker.d.ts"; diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index ffc1e0dff..8d5a223c4 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -1,4 +1,4 @@ -import { BroadcastableDiffuseElement } from "@common/element.js"; +import { BroadcastableDiffuseElement, keyed } from "@common/element.js"; import { computed, signal } from "@common/signal.js"; /** @@ -10,7 +10,7 @@ import { computed, signal } from "@common/signal.js"; //////////////////////////////////////////// // CONSTANTS //////////////////////////////////////////// -const _SILENT_MP3 = +const SILENT_MP3 = "data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV"; //////////////////////////////////////////// @@ -201,31 +201,43 @@ class AudioEngine extends BroadcastableDiffuseElement { * @param {RenderArg} _ */ render({ html }) { + const ids = this.items().map((i) => i.id); + + this.querySelectorAll("de-audio-item").forEach((element) => { + if (ids.includes(element.id)) return; + + const source = element.querySelector("source"); + if (source) source.src = SILENT_MP3; + }); + const nodes = this.items().map((audio) => { const ip = audio.progress === undefined ? "0" : JSON.stringify(audio.progress); - return html` - - - - `; + + + `, + ); }); return html` diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css index c2747d8cb..86406b27b 100644 --- a/src/themes/blur/artwork-controller/element.css +++ b/src/themes/blur/artwork-controller/element.css @@ -163,9 +163,10 @@ cite { transform-origin: center; } -.controller command { +.controller li { cursor: pointer; line-height: 0; + list-style: none; transition-duration: var(--transition-durition); transition-property: opacity; } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 2befb110d..9e915666b 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -5,34 +5,63 @@ import { debounce } from "throttle-debounce"; import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; import { trackArtworkCacheId } from "@common/index.js"; -import { signal } from "@common/signal.js"; +import { computed, signal } from "@common/signal.js"; /** * @import {RenderArg} from "@common/element.d.ts" + * @import {Signal} from "@common/signal.d.ts" * @import {Track} from "@definitions/types.d.ts" - * @import {AudioStateReadOnly} from "@components/engine/audio/types.d.ts" + * * @import {InputElement} from "@components/input/types.d.ts" * @import {Artwork} from "@components/processor/artwork/types.d.ts" + * @import AudioEngine from "@components/engine/audio/element.js" + * @import QueueEngine from "@components/engine/queue/element.js" + * @import ArtworkProcessor from "@components/processor/artwork/element.js" */ class ArtworkController extends DiffuseElement { constructor() { super(); - this.attachShadow({ mode: "open" }); + + // Bind event handlers to self + this.next = this.next.bind(this); + this.playPause = this.playPause.bind(this); + this.previous = this.previous.bind(this); + this.seek = this.seek.bind(this); } + // VARIABLES + + /** @type {number | undefined} */ + #isLoadingTimeout = undefined; + // SIGNALS - // #audio = signal(/** @type {AudioStateReadOnly | undefined} */ (undefined)); #artwork = signal(/** @type {Artwork[]} */ ([])); #artworkColor = signal(/** @type {string | undefined} */ (undefined)); #artworkLightMode = signal(false); #duration = signal("0:00"); - // isLoading = signal(true); - // isPlaying = signal(false); - // progress = signal(0); + #isLoading = signal(false); #time = signal("0:00"); - // volume = signal(0); + + // SIGNALS - DEPENDENCIES + + $artwork = signal(/** @type {ArtworkProcessor | undefined} */ (undefined)); + $audio = signal(/** @type {AudioEngine | undefined} */ (undefined)); + $input = signal(/** @type {InputElement | undefined} */ (undefined)); + $queue = signal(/** @type {QueueEngine | undefined} */ (undefined)); + + // SIGNALS - COMPUTED + + #audio = computed(() => { + const curr = this.$queue.value?.now(); + return curr ? this.$audio.value?.state(curr.id) : undefined; + }); + + #isPlaying = computed(() => { + return !!this.$queue.value?.now() && + this.$audio.value?.isPlaying() === true; + }); // LIFECYCLE @@ -42,22 +71,22 @@ class ArtworkController extends DiffuseElement { connectedCallback() { super.connectedCallback(); - /** @type {import("@components/processor/artwork/element.js").CLASS} */ + /** @type {ArtworkProcessor} */ const artwork = query(this, "artwork-processor-selector"); - /** @type {import("@components/engine/audio/element.js").CLASS} */ + /** @type {AudioEngine} */ const audio = query(this, "audio-engine-selector"); /** @type {InputElement} */ const input = query(this, "input-selector"); - /** @type {import("@components/engine/queue/element.js").CLASS} */ + /** @type {QueueEngine} */ const queue = query(this, "queue-engine-selector"); - this.artwork = artwork; - this.audio = audio; - this.input = input; - this.queue = queue; + this.$artwork.value = artwork; + this.$audio.value = audio; + this.$input.value = input; + this.$queue.value = queue; whenElementsDefined({ audio, artwork, input, queue }).then(() => { // Changed artwork based on active queue item. @@ -66,20 +95,32 @@ class ArtworkController extends DiffuseElement { this.#setArtwork.bind(this), ); - this.effect(() => { - debouncedChangeArtwork(queue.now()); - }); + // this.effect(() => { + // debouncedChangeArtwork(queue.now()); + // }); + + // this.effect(() => this.#changeArtworkInDOM()); + this.effect(() => this.#formatTimestamps()); + this.effect(() => this.#lightOrDark()); this.effect(() => { - const curr = queue.now(); - const aud = curr ? audio.state(curr.id) : undefined; + const now = !!queue.now(); + const bool = !now || + (now && this.#audio()?.loadingState() !== "loaded"); - console.log("NOW", curr, aud); - }); + if (this.#isLoadingTimeout) { + clearTimeout(this.#isLoadingTimeout); + } - this.effect(() => this.#changeArtworkInDOM()); - this.effect(() => this.#formatTimestamps()); - this.effect(() => this.#lightOrDark()); + if (bool) { + this.#isLoadingTimeout = setTimeout( + () => this.#isLoading.value = true, + 2000, + ); + } else { + this.#isLoading.set(false); + } + }); }); } @@ -190,8 +231,12 @@ class ArtworkController extends DiffuseElement { const cacheId = await trackArtworkCacheId(track); - const resGet = await this.input?.resolve({ method: "GET", uri: track.uri }); - const resHead = await this.input?.resolve({ + const resGet = await this.$input.value?.resolve({ + method: "GET", + uri: track.uri, + }); + + const resHead = await this.$input.value?.resolve({ method: "HEAD", uri: track.uri, }); @@ -213,7 +258,7 @@ class ArtworkController extends DiffuseElement { }, }; - const art = await this.artwork?.artwork(request) ?? []; + const art = await this.$artwork.value?.artwork(request) ?? []; console.log("ART", art); @@ -226,8 +271,8 @@ class ArtworkController extends DiffuseElement { // ⌚️ Time //////////////////////////////////////////// #formatTimestamps() { - const curr = this.queue?.now?.() ?? undefined; - const audio = curr ? this.audio?.state(curr.id) : undefined; + const curr = this.$queue.value?.now?.() ?? undefined; + const audio = this.#audio(); const prog = audio?.progress() ?? 0; const dur = curr?.stats?.duration ?? audio?.duration(); @@ -270,6 +315,24 @@ class ArtworkController extends DiffuseElement { // EVENTS + playPause() { + const audioId = this.$queue.value?.now()?.id; + + if (this.#isPlaying() && audioId) { + this.$audio.value?.pause({ audioId }); + } else if (audioId) { + this.$audio.value?.play({ audioId }); + } + } + + previous() { + this.$queue.value?.unshift(); + } + + next() { + this.$queue.value?.shift(); + } + /** * @param {MouseEvent} event */ @@ -278,9 +341,9 @@ class ArtworkController extends DiffuseElement { ? /** @type {HTMLProgressElement} */ (event.target) : null; const percentage = target ? event.offsetX / target.clientWidth : 0; - const audioId = this.queue?.now()?.id; + const audioId = this.$queue.value?.now()?.id; - if (audioId) this.audio?.seek({ audioId, percentage }); + if (audioId) this.$audio.value?.seek({ audioId, percentage }); } // RENDER @@ -291,7 +354,6 @@ class ArtworkController extends DiffuseElement { render({ html }) { return html` @@ -315,14 +377,16 @@ class ArtworkController extends DiffuseElement {
    - Diffuse + ${this.$queue.value?.now()?.tags?.title || + "Diffuse"}
    - +
    -
    - +
    +
    + + +
  2. + +
  3. + + + +
  4. + +
  5. + +
  6. + +
  7. + +
  8. + +
  9. +
    diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index 9d2be916c..087edb7d8 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -3,6 +3,7 @@ layout: layouts/diffuse.vto base: ../../../ styles: + - ../../../styles/vendor/phosphor/fill/style.css - ../../../styles/base.css --- From 613abdc8957089936762b2014d83a03dbb0d715e Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 7 Dec 2025 21:01:04 +0100 Subject: [PATCH 112/244] feat: artwork controller volume + fade in artwork --- _config.ts | 3 + src/themes/blur/artwork-controller/element.js | 226 ++++++++++-------- 2 files changed, 126 insertions(+), 103 deletions(-) diff --git a/_config.ts b/_config.ts index e6dd9fc40..f144b535a 100644 --- a/_config.ts +++ b/_config.ts @@ -11,6 +11,9 @@ import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill const site = lume({ src: "./src", + server: { + debugBar: false, + }, }); export default site; diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 9e915666b..49ba5ba03 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -3,13 +3,17 @@ import { Temporal } from "@js-temporal/polyfill"; import { xxh32r } from "xxh32/dist/raw.js"; import { debounce } from "throttle-debounce"; -import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; +import { + DiffuseElement, + keyed, + query, + whenElementsDefined, +} from "@common/element.js"; import { trackArtworkCacheId } from "@common/index.js"; import { computed, signal } from "@common/signal.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {Signal} from "@common/signal.d.ts" * @import {Track} from "@definitions/types.d.ts" * * @import {InputElement} from "@components/input/types.d.ts" @@ -22,12 +26,17 @@ import { computed, signal } from "@common/signal.js"; class ArtworkController extends DiffuseElement { constructor() { super(); + this.attachShadow({ mode: "open" }); // Bind event handlers to self + this.artworkLoaded = this.artworkLoaded.bind(this); + this.fullVolume = this.fullVolume.bind(this); + this.mute = this.mute.bind(this); this.next = this.next.bind(this); this.playPause = this.playPause.bind(this); this.previous = this.previous.bind(this); this.seek = this.seek.bind(this); + this.setVolume = this.setVolume.bind(this); } // VARIABLES @@ -95,11 +104,10 @@ class ArtworkController extends DiffuseElement { this.#setArtwork.bind(this), ); - // this.effect(() => { - // debouncedChangeArtwork(queue.now()); - // }); + this.effect(() => { + debouncedChangeArtwork(queue.now()); + }); - // this.effect(() => this.#changeArtworkInDOM()); this.effect(() => this.#formatTimestamps()); this.effect(() => this.#lightOrDark()); @@ -129,88 +137,6 @@ class ArtworkController extends DiffuseElement { // 🖼️ Artwork //////////////////////////////////////////// - /** @type {Record>} */ - #timeouts = {}; - - #changeArtworkInDOM() { - const art = this.#artwork.value; - - // No artwork, fade out existing. - if (art.length === 0) { - this.root().querySelectorAll(".artwork img").forEach((el) => { - const element = /** @type {HTMLElement} */ (el); - element.style.opacity = "0"; - const hash = element.getAttribute("data-hash"); - if (hash) { - this.#timeouts[hash] = setTimeout(() => element.remove(), 1000); - } - }); - return; - } - - // Determine if the current artwork needs to be replaced. - const hash = xxh32r(art[0].bytes).toString(); - - /** @type {HTMLImageElement | null} */ - const existingArtwork = this.root().querySelector( - `.artwork img[data-hash="${hash}"]`, - ); - - // If the artwork is the same, stop here. - if (existingArtwork) { - const timeoutId = this.#timeouts[hash]; - if (timeoutId) clearTimeout(timeoutId); - existingArtwork.style.opacity = "1"; - return; - } - - // Add new artwork - const blob = new Blob( - [/** @type {ArrayBuffer} */ (art[0].bytes.buffer)], - { type: art[0].mime }, - ); - const url = URL.createObjectURL(blob); - - /** @type {HTMLImageElement} */ - const img = document.createElement("img"); - img.setAttribute("data-hash", hash); - img.src = url; - - // Extract average color - img.onload = () => { - const fac = new FastAverageColor(); - const color = fac.getColor(img); - const rgb = color.value; - const o = Math.round( - (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000, - ); - - this.#artworkColor.value = color.rgba; - this.#artworkLightMode.value = o > 165; - - /** @type {HTMLElement | null} */ - const bg = this.root().querySelector(".controller__background"); - if (bg) bg.style.backgroundColor = color.rgba; - - /** @type {HTMLElement | null} */ - const main = this.root().querySelector("main"); - if (main) main.style.backgroundColor = color.rgba; - - img.style.opacity = "1"; - - this.root().querySelectorAll(".artwork img").forEach((el) => { - if (el === img) return; - - const element = /** @type {HTMLElement} */ (el); - element.style.opacity = "0"; - this.#timeouts[hash] = setTimeout(() => element.remove(), 1000); - }); - }; - - // Insert new artwork - this.root().querySelector(".artwork")?.appendChild(img); - } - #lightOrDark() { const controller = this.root().querySelector(".controller__inner"); if (!controller) return; @@ -259,9 +185,6 @@ class ArtworkController extends DiffuseElement { }; const art = await this.$artwork.value?.artwork(request) ?? []; - - console.log("ART", art); - const currCacheId = track ? await trackArtworkCacheId(track) : undefined; if (cacheId === currCacheId) this.#artwork.set(art); } @@ -315,6 +238,37 @@ class ArtworkController extends DiffuseElement { // EVENTS + /** + * @param {Event} event + */ + artworkLoaded(event) { + if (!(event.target instanceof HTMLImageElement)) return; + + const fac = new FastAverageColor(); + const color = fac.getColor(event.target); + const rgb = color.value; + const o = Math.round( + (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000, + ); + + this.#artworkColor.value = color.rgba; + this.#artworkLightMode.value = o > 165; + + event.target.style.opacity = "1"; + } + + fullVolume() { + this.$audio.value?.adjustVolume({ volume: 1 }); + } + + mute() { + this.$audio.value?.adjustVolume({ volume: 0 }); + } + + next() { + this.$queue.value?.shift(); + } + playPause() { const audioId = this.$queue.value?.now()?.id; @@ -329,10 +283,6 @@ class ArtworkController extends DiffuseElement { this.$queue.value?.unshift(); } - next() { - this.$queue.value?.shift(); - } - /** * @param {MouseEvent} event */ @@ -346,19 +296,60 @@ class ArtworkController extends DiffuseElement { if (audioId) this.$audio.value?.seek({ audioId, percentage }); } + /** + * @param {MouseEvent} event + */ + setVolume(event) { + const target = event.target + ? /** @type {HTMLProgressElement} */ (event.target) + : null; + + const percentage = target ? event.offsetX / target.clientWidth : 0; + this.$audio.value?.adjustVolume({ volume: percentage }); + } + // RENDER /** * @param {RenderArg} _ */ render({ html }) { + const activeQueueItem = this.$queue.value?.now(); + + // Artwork + const artwork = this.#artwork.value.map((art) => { + const hash = xxh32r(art.bytes).toString(); + const blob = new Blob( + [/** @type {ArrayBuffer} */ (art.bytes.buffer)], + { type: art.mime }, + ); + + const url = URL.createObjectURL(blob); + + return keyed( + hash, + html` + + `, + ); + }); + return html` -
    + + + + + + + + + + + + + + + + + + + + diff --git a/src/themes/webamp/window-manager/element.js b/src/themes/webamp/window-manager/element.js index ff8fd80a2..fc153d636 100644 --- a/src/themes/webamp/window-manager/element.js +++ b/src/themes/webamp/window-manager/element.js @@ -155,7 +155,7 @@ class WindowManager extends DiffuseElement { * @param {string} id */ toggleWindow(id) { - const w = this.root().querySelector(`dtw-window#${id}`) + const w = this.querySelector(`dtw-window#${id}`) if (w instanceof WindowElement === false) return w.toggleAttribute("open") @@ -174,99 +174,13 @@ class WindowManager extends DiffuseElement { */ render({ html }) { return html` - - - - - - Manage audio inputs -

    👀

    -
    - - - - - Manage user data - -
    -

    Where do you want to keep your data?

    -
    - - -
    -
    -
    - - - - - Browse collection - - + `; } } From 1757751b4f886da757e885e9cb4680d30fb1b045 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 28 Dec 2025 22:50:12 +0100 Subject: [PATCH 149/244] feat: webamp browser constituent --- _config.ts | 15 ++++++++ src/common/constituents/default.js | 21 +++++++++- .../orchestrator/process-tracks/element.js | 11 +++++- .../orchestrator/queue-audio/element.js | 14 +++++-- .../orchestrator/search-tracks/element.js | 19 +++++++--- src/themes/blur/artwork-controller/index.vto | 5 +-- src/themes/webamp/browser/element.js | 18 +++++++-- src/themes/webamp/browser/index.vto | 38 ++++++++++++++----- src/themes/webamp/constituent.css | 15 ++++++++ src/themes/webamp/index.vto | 2 +- src/themes/webamp/window/element.js | 7 +++- 11 files changed, 134 insertions(+), 31 deletions(-) create mode 100644 src/themes/webamp/constituent.css diff --git a/_config.ts b/_config.ts index 5399941b9..752f139eb 100644 --- a/_config.ts +++ b/_config.ts @@ -51,6 +51,21 @@ site.remoteFile( site.add("/favicons", "/"); site.add("/fonts"); site.add("/images"); +site.add([".woff2"]); + +site.remoteFile( + "styles/vendor/ms_sans_serif.woff2", + import.meta.resolve( + "./node_modules/98.css/fonts/converted/ms_sans_serif.woff2", + ), +); + +site.remoteFile( + "styles/vendor/ms_sans_serif_bold.woff2", + import.meta.resolve( + "./node_modules/98.css/fonts/converted/ms_sans_serif_bold.woff2", + ), +); site.remoteFile( "fonts/ms_sans_serif.woff2", diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index 23a61b2eb..173a1e5e0 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -2,7 +2,11 @@ import Queue from "@components/engine/queue/element.js"; import InputOrchestrator from "@components/orchestrator/input/element.js"; import OutputOrchestrator from "@components/orchestrator/output/element.js"; import QueueTracksOrchestrator from "@components/orchestrator/queue-tracks/element.js"; +import SearchProcessor from "@components/processor/search/element.js"; +import SearchTracksOrchestrator from "@components/orchestrator/search-tracks/element.js"; + import { effect } from "../signal.js"; +import QueueAudioOrchestrator from "@components/orchestrator/queue-audio/element.js"; export const GROUP = "constituents"; @@ -28,6 +32,12 @@ export function config() { document.body.append(output); + // Processors + const search = new SearchProcessor(); + search.setAttribute("group", GROUP); + + document.body.append(search); + // Orchestrators const oqt = new QueueTracksOrchestrator(); oqt.setAttribute("group", GROUP); @@ -35,7 +45,13 @@ export function config() { oqt.setAttribute("output-selector", "#output"); oqt.setAttribute("queue-engine-selector", queue.localName); - document.body.append(oqt); + const ost = new SearchTracksOrchestrator(); + ost.setAttribute("group", GROUP); + ost.setAttribute("input-selector", "#input"); + ost.setAttribute("output-selector", "#output"); + ost.setAttribute("search-processor-selector", search.localName); + + document.body.append(oqt, ost); // Signals & effects effect(() => { @@ -65,5 +81,8 @@ export function config() { output, queueTracks: oqt, }, + processor: { + search, + }, }; } diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index 9c93762f5..cedd779ea 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, query } from "@common/element.js"; +import { BroadcastableDiffuseElement, query } from "@common/element.js"; import { signal, untracked } from "@common/signal.js"; /** @@ -19,7 +19,7 @@ import { signal, untracked } from "@common/signal.js"; * the already existing tracks are loaded * from the assigned output element. */ -class ProcessTracksOrchestrator extends DiffuseElement { +class ProcessTracksOrchestrator extends BroadcastableDiffuseElement { static NAME = "diffuse/orchestrator/process-tracks"; static WORKER_URL = "components/orchestrator/process-tracks/worker.js"; @@ -49,6 +49,12 @@ class ProcessTracksOrchestrator extends DiffuseElement { * @override */ async connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + this.broadcast(this.nameWithGroup, {}); + } + + // Super super.connectedCallback(); /** @type {InputElement} */ @@ -98,6 +104,7 @@ class ProcessTracksOrchestrator extends DiffuseElement { async process() { if (!this.output) return; + if (!(await this.isLeader())) return; // Start this.#isProcessing.value = true; diff --git a/src/components/orchestrator/queue-audio/element.js b/src/components/orchestrator/queue-audio/element.js index 4ed65b6c8..f8fe9bdf5 100644 --- a/src/components/orchestrator/queue-audio/element.js +++ b/src/components/orchestrator/queue-audio/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, query } from "@common/element.js"; +import { BroadcastableDiffuseElement, query } from "@common/element.js"; import { untracked } from "@common/signal.js"; /** @@ -16,11 +16,17 @@ import { untracked } from "@common/signal.js"; * Vice versa, when the audio ends, * shift the queue if needed. */ -class QueueAudioOrchestrator extends DiffuseElement { +class QueueAudioOrchestrator extends BroadcastableDiffuseElement { /** * @override */ async connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + this.broadcast(this.nameWithGroup, {}); + } + + // Super super.connectedCallback(); /** @type {InputElement} */ @@ -50,6 +56,8 @@ class QueueAudioOrchestrator extends DiffuseElement { if (!this.queue) return; const activeTrack = this.queue.now(); + if ((await this.isLeader()) === false) return; + const isPlaying = untracked(this.audio.isPlaying); // Resolve URIs @@ -89,7 +97,7 @@ class QueueAudioOrchestrator extends DiffuseElement { const now = this.queue.now(); const aud = now ? this.audio.state(now.id) : undefined; - if (aud?.hasEnded()) await this.queue.shift(); + if (aud?.hasEnded() && (await this.isLeader())) await this.queue.shift(); } } diff --git a/src/components/orchestrator/search-tracks/element.js b/src/components/orchestrator/search-tracks/element.js index 5e244094c..1bb22bc28 100644 --- a/src/components/orchestrator/search-tracks/element.js +++ b/src/components/orchestrator/search-tracks/element.js @@ -1,4 +1,4 @@ -import { DiffuseElement, query } from "@common/element.js"; +import { BroadcastableDiffuseElement, query } from "@common/element.js"; /** * @import {Track} from "@definitions/types.d.ts" @@ -18,7 +18,7 @@ import { DiffuseElement, query } from "@common/element.js"; * tracks whenever they have been loaded, * or the tracks collection changes. */ -class SearchTracksOrchestrator extends DiffuseElement { +class SearchTracksOrchestrator extends BroadcastableDiffuseElement { static NAME = "diffuse/orchestrator/search-tracks"; static WORKER_URL = "components/orchestrator/search-tracks/worker.js"; @@ -42,6 +42,12 @@ class SearchTracksOrchestrator extends DiffuseElement { * @override */ async connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + this.broadcast(this.nameWithGroup, {}); + } + + // Super super.connectedCallback(); /** @type {InputElement} */ @@ -62,11 +68,12 @@ class SearchTracksOrchestrator extends DiffuseElement { await customElements.whenDefined(this.output.localName); // Watch tracks collection - this.effect(() => { - const tracks = output.tracks.collection().filter((t) => - t.kind !== "placeholder" - ); + this.effect(async () => { + const collection = output.tracks.collection(); + + if ((await this.isLeader()) === false) return; + const tracks = collection.filter((t) => t.kind !== "placeholder"); this.#proxy.supplyAvailable(tracks); }); } diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index f825626b7..0514008db 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -36,12 +36,11 @@ styles: import("./themes/blur/artwork-controller/element.js") // Orchestrators - const oqa = new QueueAudioOrchestrator(); oqa.setAttribute("group", defaults.GROUP); - oqa.setAttribute("input-selector", defaults.configurator.input.localName); + oqa.setAttribute("input-selector", "#" + defaults.orchestrator.input.id); oqa.setAttribute("audio-engine-selector", "de-audio"); oqa.setAttribute("queue-engine-selector", defaults.engine.queue.localName); - document.body.append(oqa); + document.body.append(oqa) diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index b5ed6571a..a9c7b142d 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -92,6 +92,8 @@ class Browser extends DiffuseElement { inFront: true, tracks: [track], }); + + this.queue?.shift(); } async performSearch() { @@ -116,6 +118,12 @@ class Browser extends DiffuseElement { + +
    + +
  10. + +
  11. +
  12. + +
  13. +
    +
    + +
    +

    TODO: Opensubsonic form

    +
    + + +
    +

    TODO: S3 form

    +
    +
    +
    + `; + } +} + +export default InputConfig; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = InputConfig; +export const NAME = "dtw-input-config"; + +customElements.define(NAME, CLASS); diff --git a/src/themes/webamp/configurators/input/index.vto b/src/themes/webamp/configurators/input/index.vto new file mode 100644 index 000000000..d0d94a926 --- /dev/null +++ b/src/themes/webamp/configurators/input/index.vto @@ -0,0 +1,42 @@ +--- +layout: layouts/diffuse.vto +base: ../../../../ + +styles: + - styles/vendor/98.css + - themes/webamp/fonts.css + - themes/webamp/constituent.css +--- + + + +
    +
    +
    + +
    +
    + Input configurator +
    +
    + +
    +
    +
    + +
    +
    + + + + From 14ead75afd9adb02957fe43f2873951232ec3dd9 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 12 Jan 2026 00:17:03 +0100 Subject: [PATCH 168/244] chore: some minor css improvements --- src/themes/webamp/configurators/input/element.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/themes/webamp/configurators/input/element.js b/src/themes/webamp/configurators/input/element.js index aefc1f92b..48bab13a0 100644 --- a/src/themes/webamp/configurators/input/element.js +++ b/src/themes/webamp/configurators/input/element.js @@ -25,12 +25,26 @@ class InputConfig extends DiffuseElement {
    @@ -85,15 +114,126 @@ class InputConfig extends DiffuseElement { +
    -

    TODO: Opensubsonic form

    +
    + Added servers + +

    TODO

    +
    + +
    +
    + Server details + +
    + + +
    + +
    + + +
    + +

    + Either provide a username & password combination: +

    + +
    + + +
    + +
    + + +
    + +

    + Or an API key: +

    + +
    + + +
    + +

    + * are required fields. +

    +
    + +

    + +

    +
    -

    TODO: S3 form

    +
    + Added buckets + +

    TODO

    +
    + +
    +
    + Bucket details + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +

    + * are required fields. +

    +
    + +

    + +

    +
    From 7aa2b2036e2499107626b476d8f5f32227b181f9 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 13 Jan 2026 19:46:57 +0100 Subject: [PATCH 170/244] feat: webamp input configurator source creation --- src/common/constituents/default.js | 18 ++- .../orchestrator/queue-audio/element.js | 12 +- src/definitions/index.ts | 2 +- src/index.vto | 4 + src/themes/webamp/browser/element.js | 7 +- .../webamp/configurators/input/element.js | 145 ++++++++++++++++-- .../webamp/configurators/input/index.vto | 5 +- 7 files changed, 170 insertions(+), 23 deletions(-) diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index 6a86691b0..30214b4a4 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -1,6 +1,8 @@ import Queue from "@components/engine/queue/element.js"; import InputOrchestrator from "@components/orchestrator/input/element.js"; import OutputOrchestrator from "@components/orchestrator/output/element.js"; +import MetadataProcessor from "@components/processor/metadata/element.js"; +import ProcessTracksOrchestrator from "@components/orchestrator/process-tracks/element.js"; import QueueTracksOrchestrator from "@components/orchestrator/queue-tracks/element.js"; import RepeatShuffleOrchestrator from "@components/orchestrator/repeat-shuffle/element.js"; import SearchProcessor from "@components/processor/search/element.js"; @@ -31,12 +33,24 @@ export function config() { document.body.append(output); // Processors + const metadata = new MetadataProcessor(); + metadata.setAttribute("group", GROUP); + + document.body.append(metadata); + const search = new SearchProcessor(); search.setAttribute("group", GROUP); document.body.append(search); // Orchestrators + const opt = new ProcessTracksOrchestrator(); + opt.setAttribute("group", GROUP); + opt.setAttribute("input-selector", "#input"); + opt.setAttribute("output-selector", "#output"); + opt.setAttribute("metadata-processor-selector", metadata.localName); + opt.toggleAttribute("process-when-ready"); + const oqt = new QueueTracksOrchestrator(); oqt.setAttribute("group", GROUP); oqt.setAttribute("input-selector", "#input"); @@ -53,7 +67,7 @@ export function config() { ost.setAttribute("output-selector", "#output"); ost.setAttribute("search-processor-selector", search.localName); - document.body.append(oqt, rso, ost); + document.body.append(opt, oqt, rso, ost); // Return elements return { @@ -69,10 +83,12 @@ export function config() { orchestrator: { input, output, + processTracks: opt, queueTracks: oqt, repeatShuffle: rso, }, processor: { + metadata, search, }, }; diff --git a/src/components/orchestrator/queue-audio/element.js b/src/components/orchestrator/queue-audio/element.js index 818bdcaf1..0edf35a87 100644 --- a/src/components/orchestrator/queue-audio/element.js +++ b/src/components/orchestrator/queue-audio/element.js @@ -17,6 +17,7 @@ import { signal, untracked } from "@common/signal.js"; * shift the queue if needed. */ class QueueAudioOrchestrator extends BroadcastableDiffuseElement { + static NAME = "diffuse/orchestrator/queue-audio"; static observedAttributes = ["repeat"]; // SIGNALS @@ -126,10 +127,13 @@ class QueueAudioOrchestrator extends BroadcastableDiffuseElement { // The idea is that scrobblers would more easily pick this up, // as opposed to just resetting the audio. if (this.#repeat.value) { - await this.queue.add({ - inFront: true, - tracks: [this.queue.now()], - }); + const now = this.queue.now(); + if (now) { + await this.queue.add({ + inFront: true, + tracks: [now], + }); + } } await this.queue.shift(); diff --git a/src/definitions/index.ts b/src/definitions/index.ts index 483e60a36..d2b5362ff 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1 +1 @@ -export * as ShDiffuseOutputTracks from "./types/sh/diffuse/output/tracks.ts"; +export * as ShDiffuseOutputTracks from "./types/sh/diffuse/output/tracks.js"; diff --git a/src/index.vto b/src/index.vto index a902f8080..5b4ef142a 100644 --- a/src/index.vto +++ b/src/index.vto @@ -34,6 +34,10 @@ constituents: title: "Webamp / Browser" desc: > Collection browser + search in a retro, win98, look. + - url: "themes/webamp/configurators/input/" + title: "Webamp / Input Configurator" + desc: > + Windows 98 styled input configurator where you can add music sources. # ELEMENTS diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index a94e67a21..a66a2f656 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -20,13 +20,18 @@ class Browser extends DiffuseElement { #searchResults = signal(/** @type {Track[]} */ ([])); - $input = signal(/** @type {InputElement | undefined} */ (undefined)); + $input = signal( + /** @type {InputElement | undefined} */ (undefined), + ); + $output = signal( /** @type {OutputElement | undefined} */ (undefined), ); + $queue = signal( /** @type {import("@components/engine/queue/element.js").CLASS | undefined} */ (undefined), ); + $search = signal( /** @type {import("@components/processor/search/element.js").CLASS | undefined} */ (undefined), ); diff --git a/src/themes/webamp/configurators/input/element.js b/src/themes/webamp/configurators/input/element.js index 06e4b03cb..ae300276c 100644 --- a/src/themes/webamp/configurators/input/element.js +++ b/src/themes/webamp/configurators/input/element.js @@ -1,19 +1,58 @@ import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; import { signal } from "@common/signal.js"; +import { buildURI as buildOpenSubsonicURI } from "@components/input/opensubsonic/common.js"; +import { buildURI as buildS3cURI } from "@components/input/s3/common.js"; + /** * @import {RenderArg} from "@common/element.d.ts" * @import {Track} from "@definitions/types.d.ts" * @import {InputElement} from "@components/input/types.d.ts" + * @import {OutputElement} from "@components/output/types.d.ts" + * + * @import {Server as OpenSubsonicServer} from "@components/input/opensubsonic/types.d.ts" + * @import {Bucket as S3Bucket} from "@components/input/s3/types.d.ts" */ class InputConfig extends DiffuseElement { constructor() { super(); - this.attachShadow({ mode: "open" }); } + // SIGNALS + + $input = signal( + /** @type {InputElement | undefined} */ (undefined), + ); + + $output = signal( + /** @type {OutputElement | undefined} */ (undefined), + ); + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + /** @type {InputElement} */ + const input = query(this, "input-selector"); + + /** @type {OutputElement} */ + const output = query(this, "output-selector"); + + this.$input.value = input; + this.$output.value = output; + + // Wait for the elements to be defined before proceeding + whenElementsDefined({ input, output }).then(() => { + // + }); + } + // EVENTS /** @@ -21,7 +60,28 @@ class InputConfig extends DiffuseElement { */ #addOpenSubsonicServer = (event) => { event.preventDefault(); - console.log("TODO"); + + const host = this.formElement("opensubsonic-host")?.value; + const tls = this.formElement("opensubsonic-tls")?.value === "true"; + const username = this.formElement("opensubsonic-username")?.value; + const password = this.formElement("opensubsonic-password")?.value; + const apiKey = this.formElement("opensubsonic-apikey")?.value; + + if (!host) { + throw new Error("Missing required `host` input value"); + } + + /** @type {OpenSubsonicServer} */ + const server = { + host, + tls, + username, + password, + apiKey, + }; + + const uri = buildOpenSubsonicURI(server); + return this.addSource(uri); }; /** @@ -29,9 +89,64 @@ class InputConfig extends DiffuseElement { */ #addS3Bucket = (event) => { event.preventDefault(); - console.log("TODO"); + + const accessKey = this.formElement("s3-access-key")?.value; + const bucketName = this.formElement("s3-bucket-name")?.value; + const host = this.formElement("s3-host")?.value ?? "s3.amazonaws.com"; + const path = this.formElement("s3-path")?.value ?? "/"; + const region = this.formElement("s3-region")?.value ?? "us-east-1"; + const secretKey = this.formElement("s3-secret-key")?.value; + + if (!accessKey) throw new Error("Missing required `accessKey` input value"); + if (!bucketName) { + throw new Error("Missing required `bucketName` input value"); + } + if (!secretKey) throw new Error("Missing required `secretKey` input value"); + + /** @type {S3Bucket} */ + const bucket = { + accessKey, + bucketName, + host, + path, + region, + secretKey, + }; + + const uri = buildS3cURI(bucket); + return this.addSource(uri); }; + // 🛠️ + + /** + * @param {string} uri + */ + addSource(uri) { + /** @type {Track} */ + const track = { + $type: "sh.diffuse.output.tracks", + id: crypto.randomUUID(), + kind: "placeholder", + uri, + }; + + const output = this.$output.value; + if (!output) throw new Error("Output isn't ready yet!"); + + output.tracks.save( + [...output.tracks.collection(), track], + ); + } + + /** + * @param {string} id + * @returns {HTMLInputElement | null} + */ + formElement(id) { + return this.root().querySelector(`#${id}`); + } + // RENDER /** @@ -188,41 +303,41 @@ class InputConfig extends DiffuseElement { Bucket details
    - - + +
    - - + +
    - - + +
    - +
    - +
    - - + +

    diff --git a/src/themes/webamp/configurators/input/index.vto b/src/themes/webamp/configurators/input/index.vto index d0d94a926..551eba6e3 100644 --- a/src/themes/webamp/configurators/input/index.vto +++ b/src/themes/webamp/configurators/input/index.vto @@ -25,7 +25,10 @@ styles:

    - +
    From 6a1b5a43f43562b85d4adcbbc0353f7a25d7750b Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 14 Jan 2026 15:41:01 +0100 Subject: [PATCH 171/244] chore: disable automatic track processing in dev --- .env | 1 + _config.ts | 8 +++++++- deno.jsonc | 9 +++++---- .../orchestrator/process-tracks/element.js | 5 +++++ src/themes/blur/artwork-controller/element.js | 13 ++++++------- 5 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 000000000..047f34d61 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +DISABLE_AUTOMATIC_TRACKS_PROCESSING=t diff --git a/_config.ts b/_config.ts index 79fb980f8..53d312467 100644 --- a/_config.ts +++ b/_config.ts @@ -1,3 +1,4 @@ +import { dotenvRun } from "@dotenv-run/esbuild"; import { builtinModules } from "node:module"; import lume from "lume/mod.ts"; @@ -29,7 +30,12 @@ site.use(esbuild({ bundle: true, minify: false, // outExtension: { ".js": ".min.js" }, - plugins: [nodeModulesPolyfillPlugin()], + plugins: [ + nodeModulesPolyfillPlugin(), + dotenvRun({ + files: [".env"], + }), + ], splitting: true, }, })); diff --git a/deno.jsonc b/deno.jsonc index 1f91086e2..4bf0f7d8f 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,7 +4,6 @@ "vendor": true, "imports": { "98.css": "npm:98.css@^0.1.21", - "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.3.1", "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.2", "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", @@ -16,7 +15,6 @@ "@phosphor-icons/web": "npm:@phosphor-icons/web@^2.1.2", "@vicary/debounce-microtask": "jsr:@vicary/debounce-microtask@^0.1.8", "alien-signals": "npm:alien-signals@^3.0.0", - "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", "fast-average-color": "npm:fast-average-color@^9.5.0", "idb-keyval": "npm:idb-keyval@^6.2.2", "iso-base": "npm:iso-base@^4.3.0", @@ -40,12 +38,15 @@ "@common/": "./src/common/", "@components/": "./src/components/", "@definitions/": "./src/definitions/", + "@dotenv-run/esbuild": "npm:@dotenv-run/esbuild@^1.5.1", "@styles/": "./src/styles/", + "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", // Build + "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.3.1", "@std/fs": "jsr:@std/fs@^1.0.19", "@std/path": "jsr:@std/path@^1.1.2", - "lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.2/", + "lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.4/", "lume/jsx-runtime": "https://cdn.jsdelivr.net/gh/oscarotero/ssx@0.1.14/jsx-runtime.ts", }, "exports": {}, @@ -76,7 +77,7 @@ }, "unstable": ["temporal", "fmt-component"], "lint": { - "plugins": ["https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.2/lint.ts"], + "plugins": ["https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.4/lint.ts"], "rules": { "exclude": ["no-import-prefix"], }, diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index 65b61f77b..b871b1507 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -77,6 +77,11 @@ class ProcessTracksOrchestrator extends BroadcastableDiffuseElement { // Process whenever tracks are initially loaded if (this.hasAttribute("process-when-ready")) { this.effect(() => { + const skip = + /** @type {any} */ (import.meta).env + ?.DISABLE_AUTOMATIC_TRACKS_PROCESSING ?? false; + if (skip) return; + const state = output.tracks.state(); if (state !== "loaded") return; diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index c8e260b6e..0d3296d5f 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -207,12 +207,6 @@ class ArtworkController extends DiffuseElement { if (cacheId === currCacheId) { const art = allArt[0]; - const blob = new Blob( - [/** @type {ArrayBuffer} */ (art.bytes.buffer)], - { type: art.mime }, - ); - - const url = URL.createObjectURL(blob); this.#artwork.set({ previous: currArtwork.current @@ -224,7 +218,12 @@ class ArtworkController extends DiffuseElement { hash: xxh32r(art.bytes).toString(), index: (currArtwork.current?.index ?? 0) + 1, loaded: false, - url, + url: URL.createObjectURL( + new Blob( + [/** @type {ArrayBuffer} */ (art.bytes.buffer)], + { type: art.mime }, + ), + ), } : null, }); From bd6c14fee56e9621937cae100f1c6c033184b5fa Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 14 Jan 2026 15:42:20 +0100 Subject: [PATCH 172/244] fix: don't log artwork errors --- src/components/processor/artwork/worker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/processor/artwork/worker.js b/src/components/processor/artwork/worker.js index 29eff824a..d686c7765 100644 --- a/src/components/processor/artwork/worker.js +++ b/src/components/processor/artwork/worker.js @@ -122,7 +122,7 @@ async function lastFmCover(remainingMatches) { }, ]) .catch((err) => { - console.error(err); + // console.error(err); return lastFmCover(remainingMatches.slice(1)); }) : album @@ -159,7 +159,7 @@ async function musicBrainz(req) { } }) .catch((err) => { - console.error(err); + // console.error(err); return []; }); } From 1ce2ad4c066bd1abdd2d08d754fcd715283bad55 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 14 Jan 2026 18:22:23 +0100 Subject: [PATCH 173/244] chore: some webamp input configurator improvements + refactoring --- .env | 2 +- deno.jsonc | 7 +- src/common/{index.js => utils.js} | 0 src/components/configurator/input/worker.js | 2 +- src/components/engine/queue/element.js | 2 +- src/components/engine/queue/worker.js | 2 +- src/components/input/opensubsonic/element.js | 57 ++++++++-- src/components/input/opensubsonic/types.d.ts | 6 ++ src/components/input/s3/element.js | 59 ++++++++-- src/components/input/s3/types.d.ts | 6 ++ .../orchestrator/process-tracks/element.js | 17 ++- src/themes/blur/artwork-controller/element.js | 2 +- .../webamp/configurators/input/element.js | 102 ++++++++++++++---- 13 files changed, 217 insertions(+), 47 deletions(-) rename src/common/{index.js => utils.js} (100%) diff --git a/.env b/.env index 047f34d61..e511603b1 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -DISABLE_AUTOMATIC_TRACKS_PROCESSING=t +#DISABLE_AUTOMATIC_TRACKS_PROCESSING=t diff --git a/deno.jsonc b/deno.jsonc index 4bf0f7d8f..bd7e96974 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -49,7 +49,12 @@ "lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.4/", "lume/jsx-runtime": "https://cdn.jsdelivr.net/gh/oscarotero/ssx@0.1.14/jsx-runtime.ts", }, - "exports": {}, + "exports": { + "./common/*": "./src/common/*", + "./components/*": "./src/components/*", + "./definitions/*": "./src/definitions/*", + "./themes/*": "./src/themes/*", + }, "tasks": { "build": { "description": "Build the site for production", diff --git a/src/common/index.js b/src/common/utils.js similarity index 100% rename from src/common/index.js rename to src/common/utils.js diff --git a/src/components/configurator/input/worker.js b/src/components/configurator/input/worker.js index 9bfadbbd2..c6472cc67 100644 --- a/src/components/configurator/input/worker.js +++ b/src/components/configurator/input/worker.js @@ -1,6 +1,6 @@ import * as URI from "uri-js"; -import { groupTracksPerScheme } from "@common/index.js"; +import { groupTracksPerScheme } from "@common/utils.js"; import { ostiary, rpc, workerProxy } from "@common/worker.js"; /** diff --git a/src/components/engine/queue/element.js b/src/components/engine/queue/element.js index 3e550dff1..9ef27dd8f 100644 --- a/src/components/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -1,7 +1,7 @@ import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; import { listen } from "@common/worker.js"; -import { hash } from "@common/index.js"; +import { hash } from "@common/utils.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts"; diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index 866c3c7b3..3c57d503d 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -1,6 +1,6 @@ import { announce, ostiary, rpc } from "@common/worker.js"; import { effect, signal } from "@common/signal.js"; -import { arrayShuffle, hash } from "@common/index.js"; +import { arrayShuffle, hash } from "@common/utils.js"; /** * @import {Actions, Item} from "./types.d.ts" diff --git a/src/components/input/opensubsonic/element.js b/src/components/input/opensubsonic/element.js index f5459a6db..13f1e15ff 100644 --- a/src/components/input/opensubsonic/element.js +++ b/src/components/input/opensubsonic/element.js @@ -1,9 +1,13 @@ import { DiffuseElement } from "@common/element.js"; +import { computed, signal } from "@common/signal.js"; +import { listen } from "@common/worker.js"; import { SCHEME } from "./constants.js"; /** * @import {InputActions, InputSchemeProvider} from "@components/input/types.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" + * + * @import {Server, State} from "./types.d.ts" */ //////////////////////////////////////////// @@ -23,15 +27,54 @@ class OpensubsonicInput extends DiffuseElement { constructor() { super(); - /** @type {ProxiedActions} */ - const p = this.workerProxy(); + /** @type {ProxiedActions} */ + this.proxy = this.workerProxy(); - this.consult = p.consult; - this.contextualize = p.contextualize; - this.groupConsult = p.groupConsult; - this.list = p.list; - this.resolve = p.resolve; + this.consult = this.proxy.consult; + this.contextualize = this.proxy.contextualize; + this.groupConsult = this.proxy.groupConsult; + this.list = this.proxy.list; + this.resolve = this.proxy.resolve; } + + // SIGNALS + + #servers = signal(/** @type {Record} */ ({})); + + // STATE + + servers = this.#servers.get; + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + // Sync data with worker + const link = this.workerLink(); + + // Listen for remote data changes + listen("servers", this.#servers.set, link); + + // Fetch current data state + this.proxy.servers().then(this.#servers.set); + } + + // 🛠️ + + serverList = computed(() => { + const servers = this.#servers.value; + + return Object.values(servers).map((server) => { + return { + label: `${server.host} (${server.username ?? server.apiKey})`, + server, + }; + }); + }); } export default OpensubsonicInput; diff --git a/src/components/input/opensubsonic/types.d.ts b/src/components/input/opensubsonic/types.d.ts index 457b2639d..d684b6c45 100644 --- a/src/components/input/opensubsonic/types.d.ts +++ b/src/components/input/opensubsonic/types.d.ts @@ -1,3 +1,5 @@ +import type { SignalReader } from "@common/signal.d.ts"; + // https://opensubsonic.netlify.app/docs/api-reference/ export type Server = { apiKey?: string; @@ -6,3 +8,7 @@ export type Server = { tls: boolean; username?: string; }; + +export type State = { + servers: SignalReader>; +}; diff --git a/src/components/input/s3/element.js b/src/components/input/s3/element.js index 55be593d3..0e69efb95 100644 --- a/src/components/input/s3/element.js +++ b/src/components/input/s3/element.js @@ -1,9 +1,13 @@ import { DiffuseElement } from "@common/element.js"; import { SCHEME } from "./constants.js"; +import { computed, signal } from "@common/signal.js"; +import { listen } from "@common/worker.js"; /** * @import {InputActions, InputSchemeProvider} from "@components/input/types.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" + * + * @import {Bucket, State} from "./types.d.ts" */ //////////////////////////////////////////// @@ -23,17 +27,56 @@ class S3Input extends DiffuseElement { constructor() { super(); - /** @type {ProxiedActions Promise }>} */ - const p = this.workerProxy(); + /** @type {ProxiedActions Promise }>} */ + this.proxy = this.workerProxy(); - this.consult = p.consult; - this.contextualize = p.contextualize; - this.groupConsult = p.groupConsult; - this.list = p.list; - this.resolve = p.resolve; + this.consult = this.proxy.consult; + this.contextualize = this.proxy.contextualize; + this.groupConsult = this.proxy.groupConsult; + this.list = this.proxy.list; + this.resolve = this.proxy.resolve; - this.demo = p.demo; + this.demo = this.proxy.demo; } + + // SIGNALS + + #buckets = signal(/** @type {Record} */ ({})); + + // STATE + + buckets = this.#buckets.get; + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + // Sync data with worker + const link = this.workerLink(); + + // Listen for remote data changes + listen("buckets", this.#buckets.set, link); + + // Fetch current data state + this.proxy.buckets().then(this.#buckets.set); + } + + // 🛠️ + + bucketList = computed(() => { + const buckets = this.#buckets.value; + + return Object.values(buckets).map((bucket) => { + return { + label: `${bucket.bucketName} (${bucket.accessKey}, ${bucket.host})`, + bucket, + }; + }); + }); } export default S3Input; diff --git a/src/components/input/s3/types.d.ts b/src/components/input/s3/types.d.ts index 6c0a658f6..6ba11855e 100644 --- a/src/components/input/s3/types.d.ts +++ b/src/components/input/s3/types.d.ts @@ -1,3 +1,5 @@ +import type { SignalReader } from "@common/signal.d.ts"; + export type Bucket = { accessKey: string; bucketName: string; @@ -6,3 +8,7 @@ export type Bucket = { region: string; secretKey: string; }; + +export type State = { + buckets: SignalReader>; +}; diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index b871b1507..fdab8d7a8 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -77,14 +77,21 @@ class ProcessTracksOrchestrator extends BroadcastableDiffuseElement { // Process whenever tracks are initially loaded if (this.hasAttribute("process-when-ready")) { this.effect(() => { - const skip = - /** @type {any} */ (import.meta).env - ?.DISABLE_AUTOMATIC_TRACKS_PROCESSING ?? false; - if (skip) return; - const state = output.tracks.state(); if (state !== "loaded") return; + const skip = /** @type {any} */ (import.meta).env + ?.DISABLE_AUTOMATIC_TRACKS_PROCESSING ?? false; + if (skip) { + // Should still trigger contextualize which `process` normally does for us. + untracked(() => { + input.contextualize( + output.tracks.collection(), + ); + }); + return; + } + untracked(() => this.process()); }); } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 0d3296d5f..a4e27b116 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -11,7 +11,7 @@ import { whenElementsDefined, } from "@common/element.js"; -import { trackArtworkCacheId } from "@common/index.js"; +import { trackArtworkCacheId } from "@common/utils.js"; import { computed, signal, untracked } from "@common/signal.js"; /** diff --git a/src/themes/webamp/configurators/input/element.js b/src/themes/webamp/configurators/input/element.js index ae300276c..b0910a10f 100644 --- a/src/themes/webamp/configurators/input/element.js +++ b/src/themes/webamp/configurators/input/element.js @@ -1,4 +1,9 @@ -import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; +import { + DiffuseElement, + nothing, + query, + whenElementsDefined, +} from "@common/element.js"; import { signal } from "@common/signal.js"; import { buildURI as buildOpenSubsonicURI } from "@components/input/opensubsonic/common.js"; @@ -58,9 +63,13 @@ class InputConfig extends DiffuseElement { /** * @param {Event} event */ - #addOpenSubsonicServer = (event) => { + #addOpenSubsonicServer = async (event) => { event.preventDefault(); + /** @type {HTMLButtonElement | null} */ + const button = this.root().querySelector("#opensubsonic-submit"); + if (button) button.disabled = true; + const host = this.formElement("opensubsonic-host")?.value; const tls = this.formElement("opensubsonic-tls")?.value === "true"; const username = this.formElement("opensubsonic-username")?.value; @@ -81,40 +90,52 @@ class InputConfig extends DiffuseElement { }; const uri = buildOpenSubsonicURI(server); - return this.addSource(uri); + await this.addSource(uri); + + if (button) button.disabled = false; }; /** * @param {Event} event */ - #addS3Bucket = (event) => { + #addS3Bucket = async (event) => { event.preventDefault(); + /** @type {HTMLButtonElement | null} */ + const button = this.root().querySelector("#opensubsonic-submit"); + if (button) button.disabled = true; + const accessKey = this.formElement("s3-access-key")?.value; const bucketName = this.formElement("s3-bucket-name")?.value; - const host = this.formElement("s3-host")?.value ?? "s3.amazonaws.com"; - const path = this.formElement("s3-path")?.value ?? "/"; - const region = this.formElement("s3-region")?.value ?? "us-east-1"; + const host = this.formElement("s3-host")?.value; + const path = this.formElement("s3-path")?.value; + const region = this.formElement("s3-region")?.value; const secretKey = this.formElement("s3-secret-key")?.value; - if (!accessKey) throw new Error("Missing required `accessKey` input value"); + if (!accessKey) { + throw new Error("Missing required `accessKey` input value"); + } if (!bucketName) { throw new Error("Missing required `bucketName` input value"); } - if (!secretKey) throw new Error("Missing required `secretKey` input value"); + if (!secretKey) { + throw new Error("Missing required `secretKey` input value"); + } /** @type {S3Bucket} */ const bucket = { accessKey, bucketName, - host, - path, - region, + host: host?.length ? host : "s3.amazonaws.com", + path: path?.length ? path : "/", + region: region?.length ? region : "us-east-1", secretKey, }; const uri = buildS3cURI(bucket); - return this.addSource(uri); + await this.addSource(uri); + + if (button) button.disabled = false; }; // 🛠️ @@ -122,7 +143,7 @@ class InputConfig extends DiffuseElement { /** * @param {string} uri */ - addSource(uri) { + async addSource(uri) { /** @type {Track} */ const track = { $type: "sh.diffuse.output.tracks", @@ -134,11 +155,29 @@ class InputConfig extends DiffuseElement { const output = this.$output.value; if (!output) throw new Error("Output isn't ready yet!"); - output.tracks.save( + await output.tracks.save( [...output.tracks.collection(), track], ); } + // 🔮 + + openSubsonicServers() { + const input = document.querySelector("di-opensubsonic"); + return input + ? /** @type {import("@components/input/opensubsonic/element.js").CLASS} */ (input) + .serverList() + : []; + } + + s3Buckets() { + const input = document.querySelector("di-s3"); + return input + ? /** @type {import("@components/input/s3/element.js").CLASS} */ (input) + .bucketList() + : []; + } + /** * @param {string} id * @returns {HTMLInputElement | null} @@ -153,6 +192,9 @@ class InputConfig extends DiffuseElement { * @param {RenderArg} _ */ render({ html }) { + const opensubsonicList = this.openSubsonicServers(); + const s3List = this.s3Buckets(); + return html` @@ -235,8 +277,7 @@ class InputConfig extends DiffuseElement {
    Added servers - -

    TODO

    + ${this.renderList(html, opensubsonicList)}
    @@ -285,7 +326,7 @@ class InputConfig extends DiffuseElement {

    - +

    @@ -294,8 +335,7 @@ class InputConfig extends DiffuseElement {
    Added buckets - -

    TODO

    + ${this.renderList(html, s3List)}
    @@ -346,7 +386,7 @@ class InputConfig extends DiffuseElement {

    - +

    @@ -354,6 +394,26 @@ class InputConfig extends DiffuseElement { `; } + + /** + * @param {RenderArg["html"]} html + * @param {Array<{ label: string}>} list + */ + renderList(html, list) { + return list.length + ? html` +
      + ${list.map((item) => { + return html` +
    • + ${item.label} +
    • + `; + })} +
    + ` + : nothing; + } } export default InputConfig; From 0aaa6ee4166f96f83bd9ce8cbf70c787853d52d3 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 16 Jan 2026 18:11:16 +0100 Subject: [PATCH 174/244] feat: take control section on index page --- src/index.vto | 85 ++++++++++++++++++++++++++++--------- src/styles/diffuse/page.css | 6 +++ 2 files changed, 70 insertions(+), 21 deletions(-) diff --git a/src/index.vto b/src/index.vto index 5b4ef142a..a5002f622 100644 --- a/src/index.vto +++ b/src/index.vto @@ -13,7 +13,7 @@ themes: title: "Blur" todo: true desc: > - **A DJ theme with an Apple-inspired playback view.** Features two audio players instead of the usual one. + **A theme with an Apple-inspired playback view.** Features two audio players instead of the usual one. - title: "Loader" todo: true desc: > @@ -184,14 +184,7 @@ definitions:

    - If you're a programmer, you can compose the elements listed below to make your own theme. Easily build software by connecting various elements. -

    - -

    - - - I'd like there to be a way to compose your own theme without having to write code. Hopefully sometime in the future. - + The goal is for every user, no matter their experience with web software, to have agency over their software. One can start with making small changes and gradually progress to making big changes.

    @@ -258,6 +251,68 @@ definitions: + +
    +
    +

    Take control

    + +

    + Diffuse ranges from “eating out at a great restaurant”, all the way to “making your favourite meal at home”. +

    + +
      +
    • +

      + Level 1: Pick your restaurant, food comes in all shapes and sizes. The equivalent of choosing a Diffuse theme. +

      +
    • +
    • +

      + Level 2: Take out food from various places, eg. cheese shop + bakery. You choose how you combine the foods and from where you order them. That's constituents. +

      +
    • +
    • +

      + Level 3: Now that you know which food is good and how to make combinations, you might make a slight customization, add a little something of your own. For example, add some spice. However, you're not quite confident enough which spice to pick, so you hire some help. +

      +

      + This can be done using the constituents loader which allows you to build on top of a familiar foundation. You can load custom constituents using this. You can use snippets from other people or use an LLM to generate something for you (eg. an album art gallery) +

      +
    • +
    +
    +
    +

     

    + +
      +
    • +

      + Level 4: You learned a bit from watching and talking to the help you hired, so you decide to take things in your own hands. +

      +

      + You continue to use the constituents loader but learn a bit of HTML, Javascript and CSS; so you can write your own constituent. +

      +
    • +
    • +

      + Level 5: At this point you're confident enough to make a meal from scratch. You can start very simple, eg. just throwing a steak in the pan with some butter and some salt to it. Then later add some baked potatoes and go from there. You use a friend's kitchen with all the necessary tools. +

      +

      + A similar tool comes into play here, the themes loader. Same concept as the constituents loader, but now you need to specify the foundation yourself, the connecting tissue. +

      +
    • +
    • +

      + Level 6: You were inspired by your friend's kitchen and get yourself a fully equiped kitchen. +

      +

      + You can self-host Diffuse, it's open-source! +

      +
    • +
    +
    +
    +

    Elements

    @@ -341,18 +396,6 @@ definitions: {{ await comp.list({ items: definitions }) }}
    - - -
    -

    Code your own

    - -

    - - TODO: - Explain how to connect the various elements. - -

    -
    - Added servers - ${this.renderList(html, opensubsonicList)} + ${this.renderList( + html, + sources?.[OPENSUBSONIC_SCHEME] ?? [], + "Added servers", + )} + +

    + +

    @@ -334,8 +382,17 @@ class InputConfig extends DiffuseElement {
    - Added buckets - ${this.renderList(html, s3List)} + ${this.renderList( + html, + sources?.[S3_SCHEME] ?? [], + "Added buckets", + )} + +

    + +

    @@ -397,22 +454,30 @@ class InputConfig extends DiffuseElement { /** * @param {RenderArg["html"]} html - * @param {Array<{ label: string}>} list + * @param {Array<{label: string, uri: string}>} list + * @param {string} title */ - renderList(html, list) { - return list.length - ? html` -
      - ${list.map((item) => { - return html` -
    • - ${item.label} -
    • - `; - })} -
    - ` - : nothing; + renderList(html, list, title) { + return html` +
    + + + + + + + + ${list.map((item) => + html` + + + + ` + )} + +
    ${title}
    ${item.label}
    +
    + `; } } diff --git a/src/themes/webamp/configurators/input/index.vto b/src/themes/webamp/configurators/input/index.vto index 551eba6e3..68d6dbbdd 100644 --- a/src/themes/webamp/configurators/input/index.vto +++ b/src/themes/webamp/configurators/input/index.vto @@ -28,6 +28,7 @@ styles:
    From 52341b7a9b0d72f227c21f46ca577695b36bdecc Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 18 Jan 2026 19:00:46 +0100 Subject: [PATCH 176/244] feat: implement detach functions --- src/components/input/common.js | 19 +++++++++++++ src/components/input/opensubsonic/common.js | 2 +- .../input/opensubsonic/constants.js | 2 -- src/components/input/opensubsonic/worker.js | 22 ++++++++++++--- src/components/input/s3/worker.js | 28 +++++++++++++++---- 5 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/components/input/common.js b/src/components/input/common.js index ddc95fe06..5374f8681 100644 --- a/src/components/input/common.js +++ b/src/components/input/common.js @@ -1,5 +1,24 @@ import { base64url } from "iso-base/rfc4648"; +/** + * @import {Track} from "@definitions/types.d.ts" + */ + +/** + * @param {{ fileUriOrScheme: string; handleFileUri: (args: { fileURI: string; tracks: Track[] }) => Track[]; inputScheme: string; tracks: Track[] }} _ + */ +export function detach( + { fileUriOrScheme, handleFileUri, inputScheme, tracks }, +) { + if (!fileUriOrScheme.includes("://")) { + // Delete everything if scheme matches + if (fileUriOrScheme === inputScheme) return []; + return tracks; + } + + return handleFileUri({ fileURI: fileUriOrScheme, tracks }); +} + /** * @param {string} scheme * @param {string} groupId diff --git a/src/components/input/opensubsonic/common.js b/src/components/input/opensubsonic/common.js index 36f24f64f..ebb4ec203 100644 --- a/src/components/input/opensubsonic/common.js +++ b/src/components/input/opensubsonic/common.js @@ -2,7 +2,7 @@ import { SubsonicAPI } from "subsonic-api"; import * as URI from "uri-js"; import QS from "query-string"; -import { IDB_SERVERS, SCHEME } from "./constants.js"; +import { SCHEME } from "./constants.js"; /** * @import {Child} from "subsonic-api" diff --git a/src/components/input/opensubsonic/constants.js b/src/components/input/opensubsonic/constants.js index 981a35df4..10b8cf322 100644 --- a/src/components/input/opensubsonic/constants.js +++ b/src/components/input/opensubsonic/constants.js @@ -1,3 +1 @@ -export const IDB_PREFIX = "@components/input/opensubsonic"; -export const IDB_SERVERS = `${IDB_PREFIX}/servers`; export const SCHEME = "opensubsonic"; diff --git a/src/components/input/opensubsonic/worker.js b/src/components/input/opensubsonic/worker.js index 424cd9aa3..e4d4a9978 100644 --- a/src/components/input/opensubsonic/worker.js +++ b/src/components/input/opensubsonic/worker.js @@ -2,6 +2,7 @@ import * as URI from "uri-js"; import { ostiary, rpc } from "@common/worker.js"; import { SCHEME } from "./constants.js"; +import { detach as detachUtil, groupKeyHash } from "../common.js"; import { autoTypeToTrackKind, buildURI, @@ -11,7 +12,6 @@ import { parseURI, serverId, } from "./common.js"; -import { groupKeyHash } from "../common.js"; /** * @import {Child, SubsonicAPI} from "subsonic-api" @@ -42,9 +42,23 @@ export async function consult(fileUriOrScheme) { /** * @type {Actions['detach']} */ -export async function detach({ fileUriOrScheme, tracks }) { - console.log("opensubsonic", fileUriOrScheme); - return tracks; +export async function detach(args) { + return detachUtil({ + ...args, + + inputScheme: SCHEME, + handleFileUri: ({ fileURI, tracks }) => { + const result = parseURI(fileURI); + if (!result) return tracks; + + const sid = serverId(result.server); + const groups = groupTracksByServer(tracks); + + delete groups[sid]; + + return Object.values(groups).map((a) => a.tracks).flat(1); + }, + }); } /** diff --git a/src/components/input/s3/worker.js b/src/components/input/s3/worker.js index 646051150..0b8648d80 100644 --- a/src/components/input/s3/worker.js +++ b/src/components/input/s3/worker.js @@ -1,4 +1,9 @@ -import { groupKeyHash, isAudioFile } from "@components/input/common.js"; +import { ostiary, rpc } from "@common/worker.js"; +import { + detach as detachUtil, + groupKeyHash, + isAudioFile, +} from "@components/input/common.js"; import { bucketId, buildURI, @@ -8,7 +13,6 @@ import { parseURI, } from "./common.js"; import { SCHEME } from "./constants.js"; -import { ostiary, rpc } from "@common/worker.js"; /** * @import { InputActions as Actions, ConsultGrouping } from "@components/input/types.d.ts"; @@ -38,9 +42,23 @@ export async function consult(fileUriOrScheme) { /** * @type {Actions['detach']} */ -export async function detach({ fileUriOrScheme, tracks }) { - console.log("s3", fileUriOrScheme); - return tracks; +export async function detach(args) { + return detachUtil({ + ...args, + + inputScheme: SCHEME, + handleFileUri: ({ fileURI, tracks }) => { + const result = parseURI(fileURI); + if (!result) return tracks; + + const bid = bucketId(result.bucket); + const groups = groupTracksByBucket(tracks); + + delete groups[bid]; + + return Object.values(groups).map((a) => a.tracks).flat(1); + }, + }); } /** From 7e65dbbd4fbc068a7aaddf9a08db34efb0b6f3aa Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 18 Jan 2026 19:21:50 +0100 Subject: [PATCH 177/244] fix: search supply issue --- src/components/processor/search/worker.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/processor/search/worker.js b/src/components/processor/search/worker.js index 506bf5a08..22260fe9f 100644 --- a/src/components/processor/search/worker.js +++ b/src/components/processor/search/worker.js @@ -17,7 +17,9 @@ import { effect, signal } from "@common/signal.js"; // STATE //////////////////////////////////////////// -export const $inserted = signal(/** @type {Set} */ (new Set())); +export const $inserted = signal(/** @type {Set} */ (new Set()), { + eager: true, +}); // Communicated state export const $cacheId = signal(/** @type {string | undefined} */ (undefined)); @@ -82,6 +84,8 @@ export async function supply({ tracks }) { const currentSet = $inserted.value; const newSet = new Set(ids); + $inserted.value = newSet; + const removedIds = currentSet.difference(newSet); const newIds = newSet.difference(currentSet); const newTracks = Array.from(newIds).map((id) => tracksMap[id]); @@ -89,7 +93,6 @@ export async function supply({ tracks }) { await Orama.removeMultiple(db, Array.from(removedIds)); await Orama.insertMultiple(db, newTracks); - $inserted.value = newSet; $cacheId.value = ids.length === 0 ? undefined : xxh32(ids.sort().join("")).toString(); From f1e1c76d1d98c031107e79b3e4bbdec167bb5807 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 18 Jan 2026 21:41:41 +0100 Subject: [PATCH 178/244] refactor: constituents --- deno.jsonc | 1 + src/_includes/layouts/constituent.vto | 42 ++++++++++++++ src/_includes/layouts/diffuse.vto | 5 +- src/common/constituents/default.js | 24 ++++---- src/common/constituents/default/config.js | 2 +- src/common/element.js | 11 +++- src/themes/blur/artwork-controller/element.js | 10 +--- src/themes/blur/artwork-controller/index.js | 41 +++++++++++++ src/themes/blur/artwork-controller/index.vto | 57 ++----------------- src/themes/webamp/browser/index.js | 13 +++++ src/themes/webamp/browser/index.vto | 24 ++------ .../webamp/configurators/input/index.js | 12 ++++ .../webamp/configurators/input/index.vto | 23 ++------ 13 files changed, 148 insertions(+), 117 deletions(-) create mode 100644 src/_includes/layouts/constituent.vto create mode 100644 src/themes/blur/artwork-controller/index.js create mode 100644 src/themes/webamp/browser/index.js create mode 100644 src/themes/webamp/configurators/input/index.js diff --git a/deno.jsonc b/deno.jsonc index bd7e96974..e01c538ff 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -40,6 +40,7 @@ "@definitions/": "./src/definitions/", "@dotenv-run/esbuild": "npm:@dotenv-run/esbuild@^1.5.1", "@styles/": "./src/styles/", + "@themes/": "./src/themes/", "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", // Build diff --git a/src/_includes/layouts/constituent.vto b/src/_includes/layouts/constituent.vto new file mode 100644 index 000000000..78985a2af --- /dev/null +++ b/src/_includes/layouts/constituent.vto @@ -0,0 +1,42 @@ +--- +title: "Diffuse" + +base: "./" +--- + + + + + + + + + + {{title}} + + + + + + + + + + + + + + + {{ for url of styles }} + + {{ /for }} + + + {{ for url of scripts }} + + {{ /for }} + + + {{ content }} + + diff --git a/src/_includes/layouts/diffuse.vto b/src/_includes/layouts/diffuse.vto index f9207af41..fdf637377 100644 --- a/src/_includes/layouts/diffuse.vto +++ b/src/_includes/layouts/diffuse.vto @@ -11,9 +11,6 @@ styles: [] - - {{title}} @@ -35,7 +32,7 @@ styles: [] {{ for url of scripts }} - + {{ /for }} diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index a53af1ee1..c10f99737 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -47,31 +47,31 @@ export function config() { // Orchestrators const opt = new ProcessTracksOrchestrator(); opt.setAttribute("group", GROUP); - opt.setAttribute("input-selector", "#input"); - opt.setAttribute("output-selector", "#output"); - opt.setAttribute("metadata-processor-selector", metadata.localName); + opt.setAttribute("input-selector", input.selector); + opt.setAttribute("output-selector", output.selector); + opt.setAttribute("metadata-processor-selector", metadata.selector); opt.toggleAttribute("process-when-ready"); const oqt = new QueueTracksOrchestrator(); oqt.setAttribute("group", GROUP); - oqt.setAttribute("input-selector", "#input"); - oqt.setAttribute("output-selector", "#output"); - oqt.setAttribute("queue-engine-selector", queue.localName); + oqt.setAttribute("input-selector", input.selector); + oqt.setAttribute("output-selector", output.selector); + oqt.setAttribute("queue-engine-selector", queue.selector); const ors = new RepeatShuffleOrchestrator(); ors.setAttribute("group", GROUP); - ors.setAttribute("queue-engine-selector", queue.localName); + ors.setAttribute("queue-engine-selector", queue.selector); const ost = new SearchTracksOrchestrator(); ost.setAttribute("group", GROUP); - ost.setAttribute("input-selector", "#input"); - ost.setAttribute("output-selector", "#output"); - ost.setAttribute("search-processor-selector", search.localName); + ost.setAttribute("input-selector", input.selector); + ost.setAttribute("output-selector", output.selector); + ost.setAttribute("search-processor-selector", search.selector); const osr = new SourcesOrchestrator(); osr.setAttribute("group", GROUP); - osr.setAttribute("input-selector", "#input"); - osr.setAttribute("output-selector", "#output"); + osr.setAttribute("input-selector", input.selector); + osr.setAttribute("output-selector", output.selector); document.body.append(opt, oqt, ors, ost, osr); diff --git a/src/common/constituents/default/config.js b/src/common/constituents/default/config.js index 958794f28..1d95c06ca 100644 --- a/src/common/constituents/default/config.js +++ b/src/common/constituents/default/config.js @@ -1,3 +1,3 @@ import { config } from "../default.js"; -config(); +export default config(); diff --git a/src/common/element.js b/src/common/element.js index 7ec054bd5..76a67e552 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -20,7 +20,7 @@ export const DEFAULT_GROUP = "default"; * around rendering and managing signals. */ export class DiffuseElement extends HTMLElement { - $connected = signal(false) + $connected = signal(false); #connected = Promise.withResolvers(); #disposables = /** @type {Array<() => void>} */ ([]); @@ -77,6 +77,11 @@ export class DiffuseElement extends HTMLElement { return (this.shadowRoot ?? this); } + /** */ + get selector() { + return this.id.length ? `#${this.id}` : this.localName; + } + /** */ whenConnected() { return this.#connected.promise; @@ -100,7 +105,7 @@ export class DiffuseElement extends HTMLElement { // LIFECYCLE connectedCallback() { - this.$connected.value = true + this.$connected.value = true; this.#connected.resolve(null); if (!("render" in this && typeof this.render === "function")) return; @@ -112,7 +117,7 @@ export class DiffuseElement extends HTMLElement { } disconnectedCallback() { - this.$connected.value = false + this.$connected.value = false; this.#teardown(); } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index a4e27b116..8fdbf3ec8 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -395,13 +395,9 @@ class ArtworkController extends DiffuseElement { }); return html` - - - + + +
    diff --git a/src/themes/blur/artwork-controller/index.js b/src/themes/blur/artwork-controller/index.js new file mode 100644 index 000000000..34a1fdb9c --- /dev/null +++ b/src/themes/blur/artwork-controller/index.js @@ -0,0 +1,41 @@ +import defaults from "@common/constituents/default/config.js"; +import { effect } from "@common/signal.js"; + +import AudioEngine from "@components/engine/audio/element.js"; +import ArtworkProcessor from "@components/processor/artwork/element.js"; +import QueueAudioOrchestrator from "@components/orchestrator/queue-audio/element.js"; + +import ArtworkController from "@themes/blur/artwork-controller/element.js"; + +// Prerequisites +const aud = new AudioEngine(); +aud.setAttribute("group", defaults.GROUP); + +const art = new ArtworkProcessor(); +const oqa = new QueueAudioOrchestrator(); +oqa.setAttribute("group", defaults.GROUP); +oqa.setAttribute("input-selector", defaults.orchestrator.input.selector); +oqa.setAttribute("audio-engine-selector", "de-audio"); +oqa.setAttribute("queue-engine-selector", defaults.engine.queue.selector); + +// Controller +const dac = new ArtworkController(); +dac.setAttribute("artwork-processor-selector", art.selector); +dac.setAttribute("audio-engine-selector", aud.selector); +dac.setAttribute("input-selector", defaults.orchestrator.input.selector); +dac.setAttribute("queue-engine-selector", defaults.engine.queue.selector); + +// Add to DOM +document.body.append(aud, art, oqa, dac); + +// Effect - Link the repeat/shuffle & queue-audio orchestrators +effect(() => { + const rso = defaults.orchestrator.repeatShuffle; + const repeat = rso.repeat(); + + if (repeat && !oqa.hasAttribute("repeat")) { + oqa.toggleAttribute("repeat"); + } else if (!repeat && oqa.hasAttribute("repeat")) { + oqa.removeAttribute("repeat"); + } +}); diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index 37acebe10..73310b3db 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -1,60 +1,11 @@ --- -layout: layouts/diffuse.vto +layout: layouts/constituent.vto base: ../../../ styles: - styles/vendor/phosphor/fill/style.css - styles/base.css ---- - - - - - - - - - - - - +scripts: + - themes/blur/artwork-controller/index.js +--- diff --git a/src/themes/webamp/browser/index.js b/src/themes/webamp/browser/index.js new file mode 100644 index 000000000..aa3f6dda6 --- /dev/null +++ b/src/themes/webamp/browser/index.js @@ -0,0 +1,13 @@ +import defaults from "@common/constituents/default/config.js"; +import BrowserElement from "@themes/webamp/browser/element.js"; + +const el = new BrowserElement(); +el.setAttribute("input-selector", defaults.orchestrator.input.selector); +el.setAttribute("output-selector", defaults.orchestrator.output.selector); +el.setAttribute("queue-engine-selector", defaults.engine.queue.selector); +el.setAttribute( + "search-processor-selector", + defaults.processor.search.selector, +); + +document.querySelector("#placeholder")?.replaceWith(el); diff --git a/src/themes/webamp/browser/index.vto b/src/themes/webamp/browser/index.vto index 08b9895c4..dbf0ea4e0 100644 --- a/src/themes/webamp/browser/index.vto +++ b/src/themes/webamp/browser/index.vto @@ -1,11 +1,14 @@ --- -layout: layouts/diffuse.vto +layout: layouts/constituent.vto base: ../../../ styles: - styles/vendor/98.css - themes/webamp/fonts.css - themes/webamp/constituent.css + +scripts: + - themes/webamp/browser/index.js --- @@ -25,23 +28,6 @@ styles:
    - +
    - - - - diff --git a/src/themes/webamp/configurators/input/index.js b/src/themes/webamp/configurators/input/index.js new file mode 100644 index 000000000..2e58102c8 --- /dev/null +++ b/src/themes/webamp/configurators/input/index.js @@ -0,0 +1,12 @@ +import defaults from "@common/constituents/default/config.js"; +import InputConfigElement from "@themes/webamp/configurators/input/element.js"; + +const el = new InputConfigElement(); +el.setAttribute("input-selector", defaults.orchestrator.input.selector); +el.setAttribute("output-selector", defaults.orchestrator.output.selector); +el.setAttribute( + "sources-orchestrator-selector", + defaults.orchestrator.sources.selector, +); + +document.querySelector("#placeholder")?.replaceWith(el); diff --git a/src/themes/webamp/configurators/input/index.vto b/src/themes/webamp/configurators/input/index.vto index 68d6dbbdd..5cd474fd5 100644 --- a/src/themes/webamp/configurators/input/index.vto +++ b/src/themes/webamp/configurators/input/index.vto @@ -1,11 +1,14 @@ --- -layout: layouts/diffuse.vto +layout: layouts/constituent.vto base: ../../../../ styles: - styles/vendor/98.css - themes/webamp/fonts.css - themes/webamp/constituent.css + +scripts: + - themes/webamp/configurators/input/index.js --- @@ -25,22 +28,6 @@ styles:
    - +
    - - - - From 2bcfbb60a1bf3db492f170b40b3f1e0556c21c3f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 18 Jan 2026 22:11:06 +0100 Subject: [PATCH 179/244] fix: audio broadcasting issue - sync items on start --- src/components/engine/audio/element.js | 94 ++++++++++--------- src/themes/blur/artwork-controller/element.js | 8 +- 2 files changed, 58 insertions(+), 44 deletions(-) diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 7113b2755..9d72a6fe2 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -58,16 +58,25 @@ class AudioEngine extends BroadcastableDiffuseElement { play: { strategy: "leaderOnly", fn: this.play }, seek: { strategy: "leaderOnly", fn: this.seek }, supply: { strategy: "replicate", fn: this.supply }, + + // State + items: { strategy: "leaderOnly", fn: this.items }, }, ); - if (actions) { - this.adjustVolume = actions.adjustVolume; - this.pause = actions.pause; - this.play = actions.play; - this.seek = actions.seek; - this.supply = actions.supply; - } + if (!actions) return; + + this.adjustVolume = actions.adjustVolume; + this.pause = actions.pause; + this.play = actions.play; + this.seek = actions.seek; + this.supply = actions.supply; + + // Sync items with leader if needed + this.broadcastingStatus().then(async (status) => { + if (status.leader) return; + this.#items.value = await actions.items(); + }); } // Super @@ -82,41 +91,6 @@ class AudioEngine extends BroadcastableDiffuseElement { this.#volume.set(parseFloat(volume)); } - // Manage playback across tabs if needed - if (this.broadcasted) { - this.effect(async () => { - const status = await this.broadcastingStatus(); - untracked(() => { - if (!(status.leader && status.initialLeader === false)) return; - - console.log("🧙 Leadership acquired"); - this.items().forEach((item) => { - const el = this.#itemElement(item.id); - if (!el) return; - - el.removeAttribute("initial-progress"); - - if (!el.audio) return; - - const progress = el.$state.progress.value; - const canPlay = () => { - this.seek({ - audioId: item.id, - percentage: progress, - }); - - if (el.$state.isPlaying.value) this.play({ audioId: item.id }); - }; - - el.audio.addEventListener("canplay", canPlay, { once: true }); - - if (el.audio.readyState === 0) el.audio.load(); - else canPlay(); - }); - }); - }); - } - // Monitor volume signal this.effect(() => { Array.from(this.querySelectorAll("de-audio-item")).forEach( @@ -130,6 +104,42 @@ class AudioEngine extends BroadcastableDiffuseElement { localStorage.setItem(VOLUME_KEY, this.#volume.value.toString()); }); + + // Only broadcasting stuff from here on out + if (!this.broadcasted) return; + + // Manage playback across tabs if needed + this.effect(async () => { + const status = await this.broadcastingStatus(); + untracked(() => { + if (!(status.leader && status.initialLeader === false)) return; + + console.log("🧙 Leadership acquired"); + this.items().forEach((item) => { + const el = this.#itemElement(item.id); + if (!el) return; + + el.removeAttribute("initial-progress"); + + if (!el.audio) return; + + const progress = el.$state.progress.value; + const canPlay = () => { + this.seek({ + audioId: item.id, + percentage: progress, + }); + + if (el.$state.isPlaying.value) this.play({ audioId: item.id }); + }; + + el.audio.addEventListener("canplay", canPlay, { once: true }); + + if (el.audio.readyState === 0) el.audio.load(); + else canPlay(); + }); + }); + }); } // ACTIONS diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 8fdbf3ec8..ae3f0a460 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -121,7 +121,11 @@ class ArtworkController extends DiffuseElement { this.effect(() => { const now = !!queue.now(); - const bool = now && this.#audio()?.loadingState() !== "loaded"; + const aud = this.#audio()?.loadingState(); + const bool = now && aud !== "loaded"; + + const q = queue.now(); + // console.log(aud, this.#audio(), q, q && audio.state(q.id)); if (this.#isLoadingTimeout) { clearTimeout(this.#isLoadingTimeout); @@ -133,7 +137,7 @@ class ArtworkController extends DiffuseElement { 2000, ); } else { - this.#isLoading.set(false); + this.#isLoading.value = false; } }); }); From 625cc4630c33f41715a9564c94e32443af4a1095 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 18 Jan 2026 22:12:02 +0100 Subject: [PATCH 180/244] chore: remove console.log --- src/themes/blur/artwork-controller/element.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index ae3f0a460..f5c282848 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -124,9 +124,6 @@ class ArtworkController extends DiffuseElement { const aud = this.#audio()?.loadingState(); const bool = now && aud !== "loaded"; - const q = queue.now(); - // console.log(aud, this.#audio(), q, q && audio.state(q.id)); - if (this.#isLoadingTimeout) { clearTimeout(this.#isLoadingTimeout); } From b664d71ca8af99ad0c25e965abf0056cb1d266e5 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 18 Jan 2026 23:36:08 +0100 Subject: [PATCH 181/244] chore: index page content updates --- src/index.vto | 71 ++++++++++++++++++++++--------------- src/styles/diffuse/page.css | 10 ++++++ 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/index.vto b/src/index.vto index 084112e46..59f3cc8f2 100644 --- a/src/index.vto +++ b/src/index.vto @@ -17,7 +17,7 @@ themes: - title: "Loader" todo: true desc: > - **A theme that loads other themes!** Gives you the option to save a theme to your user data output and load it from there. + **A theme that loads other themes!** Load a theme from a URL, text snippet or from your user data output. - url: "themes/webamp/" title: "Webamp" desc: > @@ -30,6 +30,10 @@ constituents: title: "Blur / Artwork controller" desc: > Audio playback controller with artwork display. + - title: "Loader" + desc: > + **A constituent that loads other constituents!** Load a constituent from a URL, text snippet or from your user data output. + todo: true - url: "themes/webamp/browser/" title: "Webamp / Browser" desc: > @@ -164,9 +168,9 @@ definitions: Diffuse is a collection of components and software that make it possible to listen to audio from various sources on your devices and the web, and to create the ideal digital audio listening experience for you.

    -

    - - HEAVILY EXPERIMENTAL +

    + + WORK IN PROGRESS

    Built by tokono.ma @@ -254,67 +258,78 @@ definitions: - -

    -
    -

    Take control

    + +
    +

    Take control

    -

    - Diffuse ranges from “eating out at a great restaurant”, all the way to “making your favourite meal at home”. -

    +

    + Diffuse ranges from “eating out at a great restaurant” all the way to “making your favourite meal at home”. +

    -
      +
        +
        +
      • Level 1: Pick your restaurant, food comes in all shapes and sizes. The equivalent of choosing a Diffuse theme.

      • +
      • Level 2: Take out food from various places, eg. cheese shop + bakery. You choose how you combine the foods and from where you order them. That's constituents.

      • +
      • - Level 3: Now that you know which food is good and how to make combinations, you might make a slight customization, add a little something of your own. For example, add some spice. However, you're not quite confident enough which spice to pick, so you hire some help. + Level 3: Now that you know which food is good and how to make combinations, you might make a slight customization, add a little something of your own (eg. add some spice). However, you're not quite confident enough which spice to pick, so you hire some help.

        - This can be done using the constituents loader which allows you to build on top of a familiar foundation. You can load custom constituents using this. You can use snippets from other people or use an LLM to generate something for you (eg. an album art gallery) + This can be done using the constituents loader which allows you to build on top of a familiar foundation and load custom constituents. People might share their own, or maybe you use an LLM to generate something for you (eg. an album art gallery).

      • -
      -
    -
    -

     

    - -
      +
    • Level 4: You learned a bit from watching and talking to the help you hired, so you decide to take things in your own hands.

      - You continue to use the constituents loader but learn a bit of HTML, Javascript and CSS; so you can write your own constituent. + You continue to use the constituents loader but learn a bit of HTML, Javascript and CSS; so you're able to write your own constituent.

    • +
    +
    +
  14. - Level 5: At this point you're confident enough to make a meal from scratch. You can start very simple, eg. just throwing a steak in the pan with some butter and some salt to it. Then later add some baked potatoes and go from there. You use a friend's kitchen with all the necessary tools. + Level 5: At this point you're confident enough to make a meal from scratch. You can start very simple, eg. just throwing a steak in the pan with some butter and some salt to it. Then later add some baked potatoes and go from there.

    - A similar tool comes into play here, the themes loader. Same concept as the constituents loader, but now you need to specify the foundation yourself, the connecting tissue. + A similar tool comes into play here, the themes loader. Same concept as the constituents loader, but now you need to specify the foundation yourself. You can use the elements listed below to do so. The code for these is available from this website or through the Javascript package.

  15. +
  16. - Level 6: You were inspired by your friend's kitchen and get yourself a fully equiped kitchen. + Level 6: You open your own restaurant.

    - You can self-host Diffuse, it's open-source! + You can host the theme you made on any web server, it's only HTML after all. Only difference is that you'll have to create the entire HTML tree, not just the body element, as is the case with the theme loader.

  17. - - -
    + +
  18. +

    + Level 7: You got promoted to chef. Time to open your own restaurant chain. +

    +

    + You can self-host Diffuse, it's open-source! Or you present your own collection of elements and however you want to present them. +

    +
  19. + + +
    diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 4d11b1876..5cdfdfdf8 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -102,6 +102,16 @@ small { gap: 0 var(--space-3xl); } +ul.columns { + list-style: none; + padding: 0; + max-width: 100%; + + li { + margin-bottom: var(--space-xl); + } +} + .construct { color: oklch(from currentColor l c h / 0.3); font-size: var(--fs-3xl); From 3e876417a173938dd70b41fc09ed36522dc9edfb Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 19 Jan 2026 19:02:20 +0100 Subject: [PATCH 182/244] feat: broadcast output indexed-db put + make demo on index page a constituent --- src/common/constituents/default.js | 2 + src/common/element.js | 1 + src/components/input/s3/element.js | 3 +- src/components/input/s3/types.d.ts | 7 +- src/components/input/s3/worker.js | 5 +- src/components/orchestrator/output/element.js | 6 +- .../orchestrator/process-tracks/element.js | 8 +- src/components/output/common.js | 3 + .../output/polymorphic/indexed-db/element.js | 74 ++++++++++++++++--- src/components/output/types.d.ts | 9 ++- src/index.js | 60 +++++++++++++++ src/index.vto | 74 +------------------ 12 files changed, 164 insertions(+), 88 deletions(-) create mode 100644 src/index.js diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index c10f99737..d208a9161 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -23,12 +23,14 @@ export function config() { // Input const input = new InputOrchestrator(); + input.setAttribute("group", GROUP); input.setAttribute("id", "input"); document.body.append(input); // Output const output = new OutputOrchestrator(); + output.setAttribute("group", GROUP); output.setAttribute("id", "output"); document.body.append(output); diff --git a/src/common/element.js b/src/common/element.js index 76a67e552..0536c7b21 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -29,6 +29,7 @@ export class DiffuseElement extends HTMLElement { constructor() { super(); + this.uuid = crypto.randomUUID(); this.worker = this.worker.bind(this); this.workerLink = this.workerLink.bind(this); } diff --git a/src/components/input/s3/element.js b/src/components/input/s3/element.js index a014b9e94..8deb899b4 100644 --- a/src/components/input/s3/element.js +++ b/src/components/input/s3/element.js @@ -6,6 +6,7 @@ import { bucketsFromTracks, buildURI } from "./common.js"; * @import {InputActions, InputSchemeProvider} from "@components/input/types.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" * @import {Track} from "@definitions/types.d.ts" + * @import {Demo} from "./types.d.ts" */ //////////////////////////////////////////// @@ -25,7 +26,7 @@ class S3Input extends DiffuseElement { constructor() { super(); - /** @type {ProxiedActions Promise }>} */ + /** @type {ProxiedActions Demo }>} */ this.proxy = this.workerProxy(); this.consult = this.proxy.consult; diff --git a/src/components/input/s3/types.d.ts b/src/components/input/s3/types.d.ts index 75c485ae4..95ccd654c 100644 --- a/src/components/input/s3/types.d.ts +++ b/src/components/input/s3/types.d.ts @@ -1,4 +1,4 @@ -import type { SignalReader } from "@common/signal.d.ts"; +import type { Track } from "@definitions/types.d.ts"; export type Bucket = { accessKey: string; @@ -8,3 +8,8 @@ export type Bucket = { region: string; secretKey: string; }; + +export type Demo = { + bucket: Bucket; + track: Track; +}; diff --git a/src/components/input/s3/worker.js b/src/components/input/s3/worker.js index 0b8648d80..b59294326 100644 --- a/src/components/input/s3/worker.js +++ b/src/components/input/s3/worker.js @@ -17,7 +17,7 @@ import { SCHEME } from "./constants.js"; /** * @import { InputActions as Actions, ConsultGrouping } from "@components/input/types.d.ts"; * @import { Track } from "@definitions/types.d.ts" - * @import { Bucket } from "./types.d.ts" + * @import { Bucket, Demo } from "./types.d.ts" */ //////////////////////////////////////////// @@ -189,6 +189,9 @@ export async function resolve( // ADDITIONAL ACTIONS //////////////////////////////////////////// +/** + * @returns {Demo} + */ export function demo() { // Credentials are read-only, no worries. diff --git a/src/components/orchestrator/output/element.js b/src/components/orchestrator/output/element.js index 60ffc8c75..7a270acea 100644 --- a/src/components/orchestrator/output/element.js +++ b/src/components/orchestrator/output/element.js @@ -1,4 +1,5 @@ -import { DiffuseElement } from "@common/element.js"; +import { ifDefined } from "lit-html/directives/if-defined.js" +import { DEFAULT_GROUP, DiffuseElement } from "@common/element.js"; import "@components/configurator/output/element.js"; import "@components/output/polymorphic/indexed-db/element.js"; @@ -41,9 +42,12 @@ class OutputOrchestrator extends DiffuseElement { * @param {RenderArg} _ */ render({ html }) { + const group = this.group === DEFAULT_GROUP ? undefined : this.group + return html` diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index 8314968ff..18b3b93cb 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -51,7 +51,11 @@ class ProcessTracksOrchestrator extends BroadcastableDiffuseElement { async connectedCallback() { // Broadcast if needed if (this.hasAttribute("group")) { - this.broadcast(this.nameWithGroup, {}); + const actions = this.broadcast(this.nameWithGroup, { + process: { strategy: "leaderOnly", fn: this.process }, + }); + + if (actions) this.process = actions.process; } // Super @@ -110,7 +114,7 @@ class ProcessTracksOrchestrator extends BroadcastableDiffuseElement { async process() { if (!this.output) return; - if (!(await this.isLeader())) return; + if (this.#isProcessing.value) return; // Start this.#isProcessing.value = true; diff --git a/src/components/output/common.js b/src/components/output/common.js index b522d0ff8..cdd7b72ff 100644 --- a/src/components/output/common.js +++ b/src/components/output/common.js @@ -31,5 +31,8 @@ export function outputManager({ init, tracks }) { }, state: ts.get, }, + signals: { + tracks: t, + }, }; } diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index 650727e86..0e8361754 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -1,9 +1,9 @@ -import { DiffuseElement } from "@common/element.js"; +import { BroadcastableDiffuseElement } from "@common/element.js"; import { outputManager } from "../../common.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts" - * @import {OutputManager, OutputWorkerActions} from "../../types.d.ts" + * @import {OutputElement, OutputManager, OutputWorkerActions} from "../../types.d.ts" * @import {SupportedDataTypes} from "./types.d.ts" */ @@ -12,29 +12,85 @@ import { outputManager } from "../../common.js"; //////////////////////////////////////////// /** - * @implements {OutputManager} + * @implements {OutputElement} */ -class IndexedDBOutput extends DiffuseElement { +class IndexedDBOutput extends BroadcastableDiffuseElement { static NAME = "diffuse/output/polymorphic/indexed-db"; static WORKER_URL = "components/output/polymorphic/indexed-db/worker.js"; + #manager; + constructor() { super(); /** @type {ProxiedActions>} */ - const p = this.workerProxy(); + this.proxy = this.workerProxy(); /** @type {OutputManager} */ - const manager = outputManager({ + this.#manager = outputManager({ init: this.whenConnected.bind(this), tracks: { empty: () => undefined, - get: () => p.get({ name: this.#cat("tracks") }), - put: (data) => p.put({ name: this.#cat("tracks"), data }), + get: () => this.#get("tracks"), + put: (data) => this.#put("tracks", data), }, }); - this.tracks = manager.tracks; + this.tracks = this.#manager.tracks; + } + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + const actions = this.broadcast(this.nameWithGroup, { + put: { strategy: "replicate", fn: this.#putIncoming }, + }); + + if (actions) { + this.#put = this.#putOutgoing(actions.put); + } + } + + // Super + super.connectedCallback(); + } + + // GET & PUT + + /** @param {string} name */ + #getProxy = (name) => this.proxy.get({ name: this.#cat(name) }); + #get = this.#getProxy; + + /** @param {string} name; @param {any} data */ + #putProxy = (name, data) => this.proxy.put({ name: this.#cat(name), data }); + #put = this.#putProxy; + + /** + * @param {(uuidSender: ReturnType, name: string, data: any) => Promise} action + * @returns {(name: string, data: any) => Promise} + */ + #putOutgoing = (action) => async (name, data) => { + return await action(this.uuid, name, data); + }; + + /** + * @param {ReturnType} uuidSender + * @param {string} name + * @param {any} data + */ + #putIncoming(uuidSender, name, data) { + if (uuidSender === this.uuid) { + // Initiator + this.#putProxy(name, data); + } else { + // Listener + if (name === "tracks") this.#manager.signals.tracks.value = data; + } } // 🛠️ diff --git a/src/components/output/types.d.ts b/src/components/output/types.d.ts index 5f7bf2795..bb4193f69 100644 --- a/src/components/output/types.d.ts +++ b/src/components/output/types.d.ts @@ -1,9 +1,14 @@ -import type { SignalReader } from "@common/signal.d.ts"; +import type { Signal, SignalReader } from "@common/signal.d.ts"; import type { DiffuseElement } from "@common/element.js"; -export type OutputElement = DiffuseElement & OutputManager; +export type OutputElement = + & DiffuseElement + & Omit, "signals">; export type OutputManager = { + signals: { + tracks: Signal; + }; tracks: { collection: SignalReader; reload: () => Promise; diff --git a/src/index.js b/src/index.js new file mode 100644 index 000000000..5482108a9 --- /dev/null +++ b/src/index.js @@ -0,0 +1,60 @@ +import { GROUP } from "@common/constituents/default.js"; + +import InputConfigurator from "@components/configurator/input/element.js"; +import MetadataProcessor from "@components/processor/metadata/element.js"; +import OutputOrchestrator from "@components/orchestrator/output/element.js"; +import ProcessTracksOrchestrator from "@components/orchestrator/process-tracks/element.js"; +import S3Input from "@components/input/s3/element.js"; + +// Add components to DOM +const s3 = new S3Input(); +const input = new InputConfigurator(); +input.setAttribute("group", GROUP); +input.append(s3); + +const output = new OutputOrchestrator(); +output.setAttribute("group", GROUP); + +const metadataProcessor = new MetadataProcessor(); +metadataProcessor.setAttribute("group", GROUP); + +document.body.append(input, output, metadataProcessor); + +const pto = new ProcessTracksOrchestrator(); +pto.setAttribute("group", GROUP); +pto.setAttribute("input-selector", input.selector); +pto.setAttribute("output-selector", output.selector); +pto.setAttribute("metadata-processor-selector", metadataProcessor.selector); + +document.body.append(pto); + +// Demo +const addDemoBtn = document.querySelector("#add-sample-content"); + +async function addSampleContent() { + if (!addDemoBtn) return; + + addDemoBtn.setAttribute("disabled", ""); + addDemoBtn.innerHTML = ` + + Adding source + `; + + const demo = await s3.demo(); + const tracks = output.tracks.collection(); + + await output.tracks.save([...tracks, demo.track]); + + addDemoBtn.innerHTML = ` + + Processing source + `; + + await pto.process(); + + addDemoBtn.innerHTML = ` + Added + `; +} + +addDemoBtn?.addEventListener("click", addSampleContent); diff --git a/src/index.vto b/src/index.vto index 59f3cc8f2..65afa9df4 100644 --- a/src/index.vto +++ b/src/index.vto @@ -6,6 +6,9 @@ styles: - styles/diffuse/page.css - styles/vendor/phosphor/fill/style.css +scripts: + - index.js + # THEMES themes: @@ -415,74 +418,3 @@ definitions: {{ await comp.list({ items: definitions }) }}
    - - - - - - - - - - - - - From d113f21ac7444ffb837bf493f0a5f0838bb4e987 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 19 Jan 2026 19:13:51 +0100 Subject: [PATCH 183/244] fix: unset queue.now if it got deleted --- src/components/engine/queue/worker.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index 3c57d503d..9b4f980e4 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -113,6 +113,11 @@ ostiary((context, _firstConnection, _connectionId) => { effect(() => { const existing = new Set($lake.value.map((t) => t.id)); + if ($now.value && !existing.has($now.value.id)) { + // TODO: Shift queue instead? + $now.value = null; + } + $future.value = $future.value.filter((i) => { return existing.has(i.id); }); From 8c2b8f19e53c3a76f0bdaa3f7bb94da170131d46 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 20 Jan 2026 18:49:03 +0100 Subject: [PATCH 184/244] feat: index page content & style updates --- src/index.vto | 43 +++++++++++++++++++++++++++--- src/styles/diffuse/page.css | 52 ++++++++++++++++++++++++++++++++++--- 2 files changed, 88 insertions(+), 7 deletions(-) diff --git a/src/index.vto b/src/index.vto index 65afa9df4..93c6e69ee 100644 --- a/src/index.vto +++ b/src/index.vto @@ -71,10 +71,28 @@ engines: input: - url: "components/input/opensubsonic/element.js" title: "Opensubsonic" - desc: "Add any (open)subsonic server." + desc: > + Add any (open)subsonic server. + - title: "HTTPS (Raw)" + desc: > + Enables usage of tracks with a HTTPS URI. + todo: true + - title: "HTTPS (JSON)" + desc: > + Generate tracks based on HTTPS servers that provide JSON (directory) listings. + todo: true - url: "components/input/s3/element.js" title: "S3" - desc: "AWS S3 and services that provide the same surface API such as Cloudflare R2." + desc: > + AWS S3 and services that provide the same surface API such as Cloudflare R2. + - title: "Soundcloud" + desc: > + Add items from your Soundcloud feed. + todo: true + - title: "WebDAV" + desc: > + Add any WebDAV server. + todo: true orchestrators: - url: "components/orchestrator/input/element.js" @@ -103,9 +121,16 @@ orchestrators: desc: "Supplies tracks to the given search processor whenever the tracks collection changes." output: + - title: "Bytes / Automerge Repo" + desc: "Sync with an Automerge repo [sync server](https://github.com/automerge/automerge-repo-sync-server/tree/main)." + todo: true - url: "components/output/polymorphic/indexed-db/element.js" title: "Polymorphic / IndexedDB" desc: "Stores output into the local indexedDB. Supports any type of data that indexedDB supports." + - title: "Raw / AT Protocol" + desc: > + Store your user data on the storage associated with your ATProtocol identity. Data is lexicon shaped by default so this element takes in that data directly without any transformations. + todo: true processors: - url: "components/processor/artwork/element.js" @@ -129,6 +154,9 @@ supplements: todo: true transformers: + - title: "Output / Bytes / Automerge" + desc: "Translate data to and from an Automerge CRDT." + todo: true - title: "Output / Bytes / Cambria lenses" desc: "Uses the Cambria library to seamlessly translate between data schemas so that no data migration is needed." todo: true @@ -173,8 +201,17 @@ definitions:

    - WORK IN PROGRESS + WORK IN PROGRESS

    +

    Built by tokono.ma

    diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 5cdfdfdf8..aafa110e0 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -3,6 +3,10 @@ body { color: var(--text-color); } +[id] { + scroll-margin-top: var(--space-md); +} + header, main { margin: var(--space-md) var(--space-lg); @@ -96,6 +100,11 @@ small { font-size: var(--fs-xs); } +ul li::marker { + color: oklch(from currentColor l c h / 0.4); + content: "◦ "; +} + .columns { display: flex; flex-wrap: wrap; @@ -110,24 +119,33 @@ ul.columns { li { margin-bottom: var(--space-xl); } + + li::marker { + content: none; + } } .construct { - color: oklch(from currentColor l c h / 0.3); + /*color: oklch(from currentColor l c h / 0.3);*/ + color: var(--accent); font-size: var(--fs-3xl); font-weight: 900; + image-rendering: pixelated; letter-spacing: -0.0125em; line-height: 0.775em; - line-height: 0.9cap; + line-height: 1.05cap; margin-bottom: var(--space-md); + mask: + url("data:image/png;base64,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"), + radial-gradient(circle at 50% 0, transparent 45%, oklab(0 0 0 / 0.65) 85%) 0 0/50% 100%; max-width: var(--container-xl); text-transform: uppercase; - @media (prefers-color-scheme: dark) { + /*@media (prefers-color-scheme: dark) { & { color: oklch(from var(--color-2) l c h / 0.75); } - } + }*/ } .element { @@ -142,6 +160,32 @@ ul.columns { opacity: 0.6; } +.table-of-contents { + font-weight: 300; + list-style: none; + padding: 0; + + & li { + display: flex; + gap: var(--space-3xs); + white-space: nowrap; + } + + & li:after { + content: " ............................................................................................................................................................................"; + direction: rtl; + flex: 1; + opacity: 0.4; + overflow: hidden; + text-align: right; + text-overflow: ellipsis; + } + + & a { + text-decoration: none; + } +} + .todo { font-size: var(--fs-sm); font-weight: 600; From 99133f4aea261b16682b1e669686ee230d636be1 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 20 Jan 2026 19:24:12 +0100 Subject: [PATCH 185/244] chore: apply dither style to page h2 headers --- src/index.vto | 2 +- src/styles/diffuse/page.css | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/index.vto b/src/index.vto index 93c6e69ee..9fc2cf034 100644 --- a/src/index.vto +++ b/src/index.vto @@ -192,7 +192,7 @@ definitions:

    {{ await comp.diffuse.logo() }}

    -

    +

    Construct your audio player.

    diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index aafa110e0..9509186ee 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -126,7 +126,6 @@ ul.columns { } .construct { - /*color: oklch(from currentColor l c h / 0.3);*/ color: var(--accent); font-size: var(--fs-3xl); font-weight: 900; @@ -135,17 +134,15 @@ ul.columns { line-height: 0.775em; line-height: 1.05cap; margin-bottom: var(--space-md); - mask: - url("data:image/png;base64,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"), - radial-gradient(circle at 50% 0, transparent 45%, oklab(0 0 0 / 0.65) 85%) 0 0/50% 100%; max-width: var(--container-xl); text-transform: uppercase; +} - /*@media (prefers-color-scheme: dark) { - & { - color: oklch(from var(--color-2) l c h / 0.75); - } - }*/ +.dither-mask, +h2 { + mask: + url("data:image/png;base64,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"), + radial-gradient(circle at 50% 0, transparent 45%, oklab(0 0 0 / 0.65) 85%) 0 0/50% 100%; } .element { From 93b8665a54de2a4848d013a62b1931d6afb9afc3 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 20 Jan 2026 19:32:39 +0100 Subject: [PATCH 186/244] fix: couple index page issues --- src/index.vto | 2 +- src/styles/diffuse/page.css | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/index.vto b/src/index.vto index 9fc2cf034..220fe2ca6 100644 --- a/src/index.vto +++ b/src/index.vto @@ -300,7 +300,7 @@ definitions:

    -

    Take control

    +

    Take control

    Diffuse ranges from “eating out at a great restaurant” all the way to “making your favourite meal at home”. diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 9509186ee..8c8b0c53b 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -123,6 +123,10 @@ ul.columns { li::marker { content: none; } + + li i.ph-fill { + opacity: 0.4; + } } .construct { From cec5121d08191c13297739dbd0adc9829bf72ad6 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 22 Jan 2026 18:58:33 +0100 Subject: [PATCH 187/244] chore: add DESIGN doc --- DESIGN.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 DESIGN.md diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 000000000..8cba5bb3e --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,38 @@ +# Design + +## Architecture + +Diffuse provides a set of custom (DOM) elements (aka. web components) that can be combined into a working audio player or media browser living in a web view. + + +### Components / Elements + +There are various categories of these elements, and may have subcategories. Each element lives in its own directory, containing the code, documentation and other assets associated with that element. The directory for the elements is `src/components/`, each subdirectory is a category which in turn may have one or more subcategories. If a directory has an `element.js` then that directory represents the element, not a subcategory. + +A few examples: +- `src/components/engine/audio/element.js`: Category = engine, element = audio +- `src/components/output/polymorphic/indexed-db/element.js`: Category = output, subcategory = polymorphic, element = indexed-db +- `src/components/transformer/output/refiner/default/element.js`: Category = transformer, subcategory 1 = output, subcategory 2 = refiner, element = default + +Most categories of components are independent, they do not rely on other components. There are a few exceptions: + +- The category named 'orchestrator'. These are compositions of other components, meaning they consume other components. These have attributes ending with `-selector` which is a DOM selector that points at the component that is the dependency. +- The category named 'configurator'. These take other components as DOM children with the same actions/methods as the configurator itself. They serve to delegate or combine. + + +### Definitions + +`src/definitions/` are lexicons, JSON schemas that describe data in the system. + + +### Themes + +Like orchestrator components, these are compositions of elements. Unlike orchestrators however, it doesn't compose by the use of selectors, instead we write the custom elements as HTML and use the DOM as the composition layer. Alternatively, custom elements can be created in Javascript and then added to the DOM from there. + + +### Other directories + +- `src/common`: Common Javascript code shared by various components and/or themes. +- `src/styles`: Common CSS shared by themes, the index page or constituents (part of themes). +- `src/favicons`, `src/fonts`, `src/images` are binary assets for themes and the index page (`src/index.vto`) +- `src/_components` and `src/_includes` are templates used in `.vto` templates, again themes and index page. From abf2c4c4c700bb99a347d6aff1d307c1c276c954 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 13:48:18 +0100 Subject: [PATCH 188/244] chore: docs --- AGENTS.md | 22 +++++++++++++++++----- DESIGN.md => docs/ARCHITECTURE.md | 14 +++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) rename DESIGN.md => docs/ARCHITECTURE.md (87%) diff --git a/AGENTS.md b/AGENTS.md index d0b2074aa..bc43a81ab 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,18 @@ -# Agent instructions +# Agent guide -* This project is a collection of custom elements for the web. Additionally it uses web workers and signals (using the 'alien-signals' library). -* The code is written in Javascript with Typescript annotations. -* Templates are written using the Vento templating language. -* Custom elements use 'lit-html' templates. +Before you write any code, read: + +- The **why** document: `src/index.vto` + (there might be a compiled version `dist/index.html`, if so prefer that) +- The **how** document: `docs/ARCHITECTURE.md` + + +## Your responsibilities + +As an agent, your job is to: +- Keep the architecture described in `docs/ARCHITECTURE.md` intact. +- Preserve the overall goals and constraints described in the 'why' document. + +If you are unsure how to implement something: +- Prefer a small, clean, testable implementation that matches the intent. +- Do **not** invent new architecture without clear justification in comments. diff --git a/DESIGN.md b/docs/ARCHITECTURE.md similarity index 87% rename from DESIGN.md rename to docs/ARCHITECTURE.md index 8cba5bb3e..6fb56aa0a 100644 --- a/DESIGN.md +++ b/docs/ARCHITECTURE.md @@ -1,11 +1,9 @@ -# Design - -## Architecture +# Architecture Diffuse provides a set of custom (DOM) elements (aka. web components) that can be combined into a working audio player or media browser living in a web view. -### Components / Elements +## Components / Elements There are various categories of these elements, and may have subcategories. Each element lives in its own directory, containing the code, documentation and other assets associated with that element. The directory for the elements is `src/components/`, each subdirectory is a category which in turn may have one or more subcategories. If a directory has an `element.js` then that directory represents the element, not a subcategory. @@ -19,18 +17,20 @@ Most categories of components are independent, they do not rely on other compone - The category named 'orchestrator'. These are compositions of other components, meaning they consume other components. These have attributes ending with `-selector` which is a DOM selector that points at the component that is the dependency. - The category named 'configurator'. These take other components as DOM children with the same actions/methods as the configurator itself. They serve to delegate or combine. +A lot of components will have a worker (located in `worker.js` besides the `element.js`) which is connected to the element using `this.workerProxy()` in the constructor. The proxy itself may be stored on the class instance, but it is usually not required. + -### Definitions +## Definitions `src/definitions/` are lexicons, JSON schemas that describe data in the system. -### Themes +## Themes Like orchestrator components, these are compositions of elements. Unlike orchestrators however, it doesn't compose by the use of selectors, instead we write the custom elements as HTML and use the DOM as the composition layer. Alternatively, custom elements can be created in Javascript and then added to the DOM from there. -### Other directories +## Other directories - `src/common`: Common Javascript code shared by various components and/or themes. - `src/styles`: Common CSS shared by themes, the index page or constituents (part of themes). From de703edc27b53104075122999cc050b8fa880249 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 16:11:24 +0100 Subject: [PATCH 189/244] chore: publish prep --- deno.jsonc | 87 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/deno.jsonc b/deno.jsonc index e01c538ff..cf842d089 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -26,10 +26,9 @@ "xxh32": "npm:xxh32@^2.0.5", // music-metadata - // NOTE: A lot of issues with `node:` imports, hence this mess. - "@tokenizer/http": "https://esm.sh/@tokenizer/http@0.9.2/lib/http-client.js", - "@tokenizer/range": "https://esm.sh/@tokenizer/range@0.13.0/lib/index.js", - "music-metadata": "https://esm.sh/music-metadata@11.9.0/lib/core.js", + "@tokenizer/http": "npm:@tokenizer/http@^0.9.2", + "@tokenizer/range": "npm:@tokenizer/range@^0.13.0", + "music-metadata": "npm:music-metadata@^11.10.6", // Webamp "webamp": "npm:webamp@^2.2.0", @@ -51,10 +50,78 @@ "lume/jsx-runtime": "https://cdn.jsdelivr.net/gh/oscarotero/ssx@0.1.14/jsx-runtime.ts", }, "exports": { - "./common/*": "./src/common/*", - "./components/*": "./src/components/*", - "./definitions/*": "./src/definitions/*", - "./themes/*": "./src/themes/*", + // .js + "./common/constituents/default.js": "./src/common/constituents/default.js", + "./common/constituents/default/config.js": "./src/common/constituents/default/config.js", + "./common/element.js": "./src/common/element.js", + "./common/signal.js": "./src/common/signal.js", + "./common/worker.js": "./src/common/worker.js", + "./common/worker/rpc.js": "./src/common/worker/rpc.js", + "./common/utils.js": "./src/common/utils.js", + "./components/configurator/input/element.js": "./src/components/configurator/input/element.js", + "./components/configurator/input/worker.js": "./src/components/configurator/input/worker.js", + "./components/configurator/output/element.js": "./src/components/configurator/output/element.js", + "./components/engine/audio/element.js": "./src/components/engine/audio/element.js", + "./components/engine/queue/element.js": "./src/components/engine/queue/element.js", + "./components/engine/queue/worker.js": "./src/components/engine/queue/worker.js", + "./components/input/common.js": "./src/components/input/common.js", + "./components/input/opensubsonic/common.js": "./src/components/input/opensubsonic/common.js", + "./components/input/opensubsonic/constants.js": "./src/components/input/opensubsonic/constants.js", + "./components/input/opensubsonic/element.js": "./src/components/input/opensubsonic/element.js", + "./components/input/opensubsonic/worker.js": "./src/components/input/opensubsonic/worker.js", + "./components/input/s3/common.js": "./src/components/input/s3/common.js", + "./components/input/s3/constants.js": "./src/components/input/s3/constants.js", + "./components/input/s3/element.js": "./src/components/input/s3/element.js", + "./components/input/s3/worker.js": "./src/components/input/s3/worker.js", + "./components/orchestrator/input/element.js": "./src/components/orchestrator/input/element.js", + "./components/orchestrator/output/element.js": "./src/components/orchestrator/output/element.js", + "./components/orchestrator/process-tracks/element.js": "./src/components/orchestrator/process-tracks/element.js", + "./components/orchestrator/process-tracks/worker.js": "./src/components/orchestrator/process-tracks/worker.js", + "./components/orchestrator/queue-audio/element.js": "./src/components/orchestrator/queue-audio/element.js", + "./components/orchestrator/queue-tracks/element.js": "./src/components/orchestrator/queue-tracks/element.js", + "./components/orchestrator/queue-tracks/worker.js": "./src/components/orchestrator/queue-tracks/worker.js", + "./components/orchestrator/search-tracks/element.js": "./src/components/orchestrator/search-tracks/element.js", + "./components/orchestrator/search-tracks/worker.js": "./src/components/orchestrator/search-tracks/worker.js", + "./components/orchestrator/repeat-shuffle/element.js": "./src/components/orchestrator/repeat-shuffle/element.js", + "./components/orchestrator/sources/element.js": "./src/components/orchestrator/sources/element.js", + "./components/output/common.js": "./src/components/output/common.js", + "./components/output/polymorphic/indexed-db/constants.js": "./src/components/output/polymorphic/indexed-db/constants.js", + "./components/output/polymorphic/indexed-db/element.js": "./src/components/output/polymorphic/indexed-db/element.js", + "./components/output/polymorphic/indexed-db/worker.js": "./src/components/output/polymorphic/indexed-db/worker.js", + "./components/processor/artwork/constants.js": "./src/components/processor/artwork/constants.js", + "./components/processor/artwork/element.js": "./src/components/processor/artwork/element.js", + "./components/processor/artwork/worker.js": "./src/components/processor/artwork/worker.js", + "./components/processor/metadata/common.js": "./src/components/processor/metadata/common.js", + "./components/processor/metadata/element.js": "./src/components/processor/metadata/element.js", + "./components/processor/metadata/worker.js": "./src/components/processor/metadata/worker.js", + "./components/processor/search/constants.js": "./src/components/processor/search/constants.js", + "./components/processor/search/element.js": "./src/components/processor/search/element.js", + "./components/processor/search/worker.js": "./src/components/processor/search/worker.js", + "./components/transformer/output/base.js": "./src/components/transformer/output/base.js", + "./components/transformer/output/refiner/default/element.js": "./src/components/transformer/output/refiner/default/element.js", + "./components/transformer/output/string/json/element.js": "./src/components/transformer/output/string/json/element.js", + + // .d.ts + "./common/element.d.ts": "./src/common/element.d.ts", + "./common/signal.d.ts": "./src/common/signal.d.ts", + "./common/worker.d.ts": "./src/common/worker.d.ts", + "./components/engine/audio/types.d.ts": "./src/components/engine/audio/types.d.ts", + "./components/engine/queue/types.d.ts": "./src/components/engine/queue/types.d.ts", + "./components/input/opensubsonic/types.d.ts": "./src/components/input/opensubsonic/types.d.ts", + "./components/input/s3/types.d.ts": "./src/components/input/s3/types.d.ts", + "./components/input/types.d.ts": "./src/components/input/types.d.ts", + "./components/orchestrator/process-tracks/types.d.ts": "./src/components/orchestrator/process-tracks/types.d.ts", + "./components/orchestrator/queue-tracks/types.d.ts": "./src/components/orchestrator/queue-tracks/types.d.ts", + "./components/orchestrator/search-tracks/types.d.ts": "./src/components/orchestrator/search-tracks/types.d.ts", + "./components/output/polymorphic/indexed-db/types.d.ts": "./src/components/output/polymorphic/indexed-db/types.d.ts", + "./components/output/types.d.ts": "./src/components/output/types.d.ts", + "./components/processor/artwork/types.d.ts": "./src/components/processor/artwork/types.d.ts", + "./components/processor/metadata/types.d.ts": "./src/components/processor/metadata/types.d.ts", + "./components/processor/search/types.d.ts": "./src/components/processor/search/types.d.ts", + "./definitions/types.d.ts": "./src/definitions/types.d.ts", + + // .ts + "./definitions/types/sh/diffuse/output/tracks.ts": "./src/definitions/types/sh/diffuse/output/tracks.ts", }, "tasks": { "build": { @@ -89,10 +156,10 @@ }, }, "publish": { - "exclude": ["!dist"], + "exclude": ["!dist", "!src/definitions/types"], "include": [ "LICENSE", - "README.md", + "**/*.md", "src/**/*.css", "src/**/*.ico", "src/**/*.jpg", From a137b910d5083f09b4d5596cc06d80cee17315dd Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 16:36:37 +0100 Subject: [PATCH 190/244] fix: output manager types --- src/components/configurator/output/element.js | 6 +++--- src/components/output/types.d.ts | 7 ++++++- src/components/transformer/output/base.js | 6 +++--- .../transformer/output/refiner/default/element.js | 4 ++-- src/components/transformer/output/string/json/element.js | 6 +++--- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 6e81ba6ec..2e7b3f4ae 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -3,7 +3,7 @@ import { computed, signal } from "@common/signal.js"; /** * @import {Track} from "@definitions/types.d.ts" - * @import {OutputManager, OutputElement} from "@components/output/types.d.ts" + * @import {OutputManagerDeputy, OutputElement} from "@components/output/types.d.ts" */ /** @@ -17,7 +17,7 @@ const STORAGE_PREFIX = "diffuse/configurator/output"; //////////////////////////////////////////// /** - * @implements {OutputManager} + * @implements {OutputElement} */ class OutputConfigurator extends DiffuseElement { static NAME = "diffuse/configurator/output"; @@ -25,7 +25,7 @@ class OutputConfigurator extends DiffuseElement { constructor() { super(); - /** @type {OutputManager} */ + /** @type {OutputManagerDeputy} */ const manager = { tracks: { collection: computed(() => { diff --git a/src/components/output/types.d.ts b/src/components/output/types.d.ts index bb4193f69..2268c662f 100644 --- a/src/components/output/types.d.ts +++ b/src/components/output/types.d.ts @@ -3,7 +3,12 @@ import type { DiffuseElement } from "@common/element.js"; export type OutputElement = & DiffuseElement - & Omit, "signals">; + & OutputManagerDeputy; + +export type OutputManagerDeputy = Omit< + OutputManager, + "signals" +>; export type OutputManager = { signals: { diff --git a/src/components/transformer/output/base.js b/src/components/transformer/output/base.js index 5716e96bc..32ddfa2a1 100644 --- a/src/components/transformer/output/base.js +++ b/src/components/transformer/output/base.js @@ -2,7 +2,7 @@ import { DiffuseElement, query } from "@common/element.js"; import { computed, signal } from "@common/signal.js"; /** - * @import { OutputElement, OutputManager } from "../../output/types.d.ts" + * @import { OutputElement, OutputManagerDeputy } from "../../output/types.d.ts" */ /** @@ -40,7 +40,7 @@ export class OutputTransformer extends DiffuseElement { // MANAGER base() { - /** @type {OutputManager} */ + /** @type {OutputManagerDeputy} */ const m = { tracks: { collection: computed(() => { @@ -55,7 +55,7 @@ export class OutputTransformer extends DiffuseElement { await this.output.signal()?.tracks.save(newTracks); }, state: computed(() => { - return this.output.signal()?.tracks.state() ?? "loading" + return this.output.signal()?.tracks.state() ?? "loading"; }), }, }; diff --git a/src/components/transformer/output/refiner/default/element.js b/src/components/transformer/output/refiner/default/element.js index 716dc9416..c34b1e796 100644 --- a/src/components/transformer/output/refiner/default/element.js +++ b/src/components/transformer/output/refiner/default/element.js @@ -2,7 +2,7 @@ import { computed } from "@common/signal.js"; import { OutputTransformer } from "../../base.js"; /** - * @import { OutputManager } from "../../../../output/types.d.ts" + * @import { OutputManagerDeputy } from "../../../../output/types.d.ts" * @import { Track } from "@definitions/types.d.ts" */ @@ -15,7 +15,7 @@ class DefaultOutputRefinerTransformer extends OutputTransformer { const base = this.base(); - /** @type {OutputManager} */ + /** @type {OutputManagerDeputy} */ const manager = { tracks: { ...base.tracks, diff --git a/src/components/transformer/output/string/json/element.js b/src/components/transformer/output/string/json/element.js index 2d5d32f88..0b4535d21 100644 --- a/src/components/transformer/output/string/json/element.js +++ b/src/components/transformer/output/string/json/element.js @@ -2,7 +2,7 @@ import { computed } from "@common/signal.js"; import { OutputTransformer } from "../../base.js"; /** - * @import { OutputManager } from "../../../../output/types.d.ts" + * @import { OutputManagerDeputy } from "../../../../output/types.d.ts" * @import { Track } from "@definitions/types.d.ts" */ @@ -15,13 +15,13 @@ class JsonStringOutputTransformer extends OutputTransformer { const base = this.base(); - /** @type {OutputManager} */ + /** @type {OutputManagerDeputy} */ const manager = { tracks: { ...base.tracks, collection: computed(() => { let json = base.tracks.collection(); - if (typeof json !== "string") json = "[]" + if (typeof json !== "string") json = "[]"; // Try parsing JSON try { From 081b73b37108ddfe369426974ec3bf2efe726ab4 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 16:59:04 +0100 Subject: [PATCH 191/244] chore: use jsr pkg name --- deno.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deno.jsonc b/deno.jsonc index cf842d089..def7bf8ea 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,5 +1,5 @@ { - "name": "@tokono.ma/diffuse", + "name": "@toko/diffuse", "version": "4.0.0-alpha", "vendor": true, "imports": { From 165d7414f8571456094b5055bfbfabf92c1a0acf Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 17:02:23 +0100 Subject: [PATCH 192/244] chore: limit what we publish on jsr --- deno.jsonc | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/deno.jsonc b/deno.jsonc index def7bf8ea..7e38abaf1 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -156,22 +156,15 @@ }, }, "publish": { - "exclude": ["!dist", "!src/definitions/types"], + "exclude": ["!src/definitions/types"], "include": [ "LICENSE", - "**/*.md", - "src/**/*.css", - "src/**/*.ico", - "src/**/*.jpg", - "src/**/*.js", - "src/**/*.json", - "src/**/*.png", - "src/**/*.svg", - "src/**/*.ts", - "src/**/*.vto", - "src/**/*.woff", - "src/**/*.woff2", - "src/**/*.xml", + "src/common/**/*.js", + "src/common/**/*.d.ts", + "src/components/**/*.js", + "src/components/**/*.d.ts", + "src/definitions/**/*.json", + "src/definitions/**/*.ts", ], }, "permissions": { From a0547e827460c3624d43e88ef8a5fa85253204b7 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 17:04:45 +0100 Subject: [PATCH 193/244] chore: bump @atcute/lexicons --- deno.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deno.jsonc b/deno.jsonc index 7e38abaf1..671974212 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,7 +4,7 @@ "vendor": true, "imports": { "98.css": "npm:98.css@^0.1.21", - "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.2", + "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.6", "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", "@js-temporal/polyfill": "npm:@js-temporal/polyfill@^0.5.1", From 9909392a567520a332963db9679efeaf00d78b9f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 23 Jan 2026 18:01:52 +0100 Subject: [PATCH 194/244] chore: add input config window to webamp theme --- src/themes/webamp/configurators/input/element.js | 14 +++++++------- src/themes/webamp/index.js | 2 ++ src/themes/webamp/index.vto | 14 +++++++++++++- src/themes/webamp/window/element.js | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/themes/webamp/configurators/input/element.js b/src/themes/webamp/configurators/input/element.js index b84babd3c..322646e82 100644 --- a/src/themes/webamp/configurators/input/element.js +++ b/src/themes/webamp/configurators/input/element.js @@ -1,9 +1,4 @@ -import { - DiffuseElement, - nothing, - query, - whenElementsDefined, -} from "@common/element.js"; +import { DiffuseElement, query } from "@common/element.js"; import { signal } from "@common/signal.js"; import { buildURI as buildOpenSubsonicURI } from "@components/input/opensubsonic/common.js"; @@ -49,7 +44,7 @@ class InputConfig extends DiffuseElement { /** * @override */ - connectedCallback() { + async connectedCallback() { super.connectedCallback(); /** @type {InputElement} */ @@ -61,6 +56,10 @@ class InputConfig extends DiffuseElement { /** @type {import("@components/orchestrator/sources/element.js").CLASS} */ const sourcesOrchestrator = query(this, "sources-orchestrator-selector"); + await customElements.whenDefined(input.localName); + await customElements.whenDefined(output.localName); + await customElements.whenDefined(sourcesOrchestrator.localName); + this.$input.value = input; this.$output.value = output; this.$sourcesOrchestrator.value = sourcesOrchestrator; @@ -276,6 +275,7 @@ class InputConfig extends DiffuseElement { /* LIST */ table { + color: black; table-layout: fixed; } diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index db88fba66..e63fb193a 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -5,6 +5,7 @@ import "@components/orchestrator/output/element.js"; import "@components/orchestrator/process-tracks/element.js"; import "@components/orchestrator/queue-tracks/element.js"; import "@components/orchestrator/search-tracks/element.js"; +import "@components/orchestrator/sources/element.js"; import "@components/processor/metadata/element.js"; import * as Input from "@components/configurator/input/element.js"; @@ -15,6 +16,7 @@ import { component } from "@common/element.js"; import { effect, signal, untracked } from "@common/signal.js"; import "./browser/element.js"; +import "./configurators/input/element.js"; import "./configurators/output.js"; import "./window/element.js"; diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index 8cf36e1ac..2fb6ae789 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -77,7 +77,13 @@ styles: Manage audio inputs -

    👀

    + + + @@ -92,6 +98,7 @@ styles: Browse collection + + + + + + + } */ +export const INITIAL_TRACKS_DOCUMENT = Automerge.load( + base64.decode( + "hW9Kg3QEcPYAeAEQhsIBj6DgCDtXSHEiZhcqigHxj0/xVpP8KdUJQ8e6qVEgaz7v6CpLuCGB58iHmx4plQYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf9Xbz8sGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", + ), +); diff --git a/src/components/transformer/output/bytes/automerge/element.js b/src/components/transformer/output/bytes/automerge/element.js new file mode 100644 index 000000000..726f6589e --- /dev/null +++ b/src/components/transformer/output/bytes/automerge/element.js @@ -0,0 +1,73 @@ +import * as Automerge from "@automerge/automerge"; +import { isUint8Array } from "iso-base/utils"; + +import { computed } from "@common/signal.js"; +import { OutputTransformer } from "../../base.js"; +import { INITIAL_TRACKS_DOCUMENT } from "./constants.js"; +import { recursivelyCloneRecords } from "@toko/diffuse/common/utils.js"; + +/** + * @import { SignalReader } from "@common/signal.d.ts"; + * @import { OutputManagerDeputy } from "@components/output/types.d.ts" + * @import { Track } from "@definitions/types.d.ts" + * @import { TracksDocument } from "./types.d.ts" + */ + +/** + * @extends {OutputTransformer} + */ +class AutomergeBytesOutputTransformer extends OutputTransformer { + constructor() { + super(); + + const base = this.base(); + + /** @type {SignalReader>} */ + const document = computed(() => { + const value = base.tracks.collection(); + + if (isUint8Array(value)) { + return Automerge.load(value); + } else if (value == undefined) { + return INITIAL_TRACKS_DOCUMENT; + } else { + // TODO: Better error + throw new Error("Invalid data type"); + } + }); + + /** @type {OutputManagerDeputy} */ + const manager = { + tracks: { + ...base.tracks, + collection: computed(() => document().collection), + save: async (newTracks) => { + const doc = Automerge.change(document(), (d) => { + const clonedCollection = newTracks.map((track) => { + return recursivelyCloneRecords(track); + }); + + d.collection = clonedCollection; + }); + + const bytes = Automerge.save(doc); + await base.tracks.save(bytes); + }, + }, + }; + + // Assign manager properties to class + this.tracks = manager.tracks; + } +} + +export default AutomergeBytesOutputTransformer; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = AutomergeBytesOutputTransformer; +export const NAME = "dtob-automerge"; + +customElements.define(NAME, CLASS); diff --git a/src/components/transformer/output/bytes/automerge/types.d.ts b/src/components/transformer/output/bytes/automerge/types.d.ts new file mode 100644 index 000000000..36dc1a91a --- /dev/null +++ b/src/components/transformer/output/bytes/automerge/types.d.ts @@ -0,0 +1,3 @@ +import type { Track } from "@definitions/types.d.ts"; + +export type TracksDocument = { collection: Track[] }; diff --git a/src/components/transformer/output/bytes/automerge/utils.js b/src/components/transformer/output/bytes/automerge/utils.js new file mode 100644 index 000000000..f264ce9fc --- /dev/null +++ b/src/components/transformer/output/bytes/automerge/utils.js @@ -0,0 +1,14 @@ +import * as Automerge from "@automerge/automerge"; +import { base64 } from "iso-base/rfc4648"; + +/** + * Generate a new tracks document to put in the `INITIAL_TRACKS_DOCUMENT` constant. + */ +export function initTracksDoc() { + const doc = Automerge.change(Automerge.init(), (doc) => { + doc.collection = []; + }); + + const bytes = Automerge.save(doc); + return base64.encode(bytes); +} diff --git a/src/index.vto b/src/index.vto index 5876078da..1d9b9da6e 100644 --- a/src/index.vto +++ b/src/index.vto @@ -156,7 +156,7 @@ supplements: transformers: - title: "Output / Bytes / Automerge" desc: "Translate data to and from an Automerge CRDT." - todo: true + url: "components/transformer/output/bytes/automerge/element.js" - title: "Output / Bytes / Cambria lenses" desc: "Uses the Cambria library to seamlessly translate between data schemas so that no data migration is needed." todo: true From 4da8c7b5e25ee68719c47150887888d8a9991d2b Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 25 Jan 2026 23:12:20 +0100 Subject: [PATCH 198/244] test: components/engine/queue --- deno.jsonc | 8 +++++ src/common/element.js | 5 +++ src/components/engine/queue/worker.js | 15 --------- src/testing/index.vto | 17 ++++++++++ src/testing/sample/tracks.js | 16 ++++++++++ tests/common/index.ts | 10 ++++++ tests/components/engine/queue/test.ts | 46 +++++++++++++++++++++++++++ 7 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 src/testing/index.vto create mode 100644 src/testing/sample/tracks.js create mode 100644 tests/common/index.ts create mode 100644 tests/components/engine/queue/test.ts diff --git a/deno.jsonc b/deno.jsonc index 74d335292..5c6064291 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -35,6 +35,9 @@ "webamp": "npm:webamp@^2.2.0", // Paths + "@src/": "./src/", + "@tests/": "./tests/", + "@common/": "./src/common/", "@components/": "./src/components/", "@definitions/": "./src/definitions/", @@ -50,6 +53,11 @@ "esbuild-plugin-wasm": "npm:esbuild-plugin-wasm@^1.1.0", "lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.4/", "lume/jsx-runtime": "https://cdn.jsdelivr.net/gh/oscarotero/ssx@0.1.14/jsx-runtime.ts", + + // Tests + "@astral/astral": "jsr:@astral/astral", + "@std/expect": "jsr:@std/expect", + "@std/testing/bdd": "jsr:@std/testing/bdd", }, "exports": { // .js diff --git a/src/common/element.js b/src/common/element.js index 0536c7b21..b94eb0711 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -88,6 +88,11 @@ export class DiffuseElement extends HTMLElement { return this.#connected.promise; } + /** */ + whenDefined() { + return customElements.whenDefined(this.localName); + } + /** * Avoid replacing the whole subtree, * morph the existing DOM into the new given tree. diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index 9b4f980e4..6e801bd76 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -107,21 +107,6 @@ ostiary((context, _firstConnection, _connectionId) => { effect(() => announce("now", $now.value, context)); effect(() => announce("past", $past.value, context)); effect(() => announce("poolHash", $poolHash.value, context)); - - // When the pool changes, - // make sure all future queue items still exist. - effect(() => { - const existing = new Set($lake.value.map((t) => t.id)); - - if ($now.value && !existing.has($now.value.id)) { - // TODO: Shift queue instead? - $now.value = null; - } - - $future.value = $future.value.filter((i) => { - return existing.has(i.id); - }); - }); }); //////////////////////////////////////////// diff --git a/src/testing/index.vto b/src/testing/index.vto new file mode 100644 index 000000000..684c2f356 --- /dev/null +++ b/src/testing/index.vto @@ -0,0 +1,17 @@ +--- +layout: layouts/diffuse.vto + +base: "../" + +styles: + - styles/base.css +--- + + diff --git a/src/testing/sample/tracks.js b/src/testing/sample/tracks.js new file mode 100644 index 000000000..15fed118a --- /dev/null +++ b/src/testing/sample/tracks.js @@ -0,0 +1,16 @@ +/** + * @import { Track } from "@definitions/types.d.ts"; + */ + +/** + * @type {Track} + */ +const trackA = { + $type: "sh.diffuse.output.tracks", + id: "sample-a", + uri: "http://example.com/audio-a.mp3", +}; + +export const tracks = [ + trackA, +]; diff --git a/tests/common/index.ts b/tests/common/index.ts new file mode 100644 index 000000000..36862defb --- /dev/null +++ b/tests/common/index.ts @@ -0,0 +1,10 @@ +import { type EvaluateFunction, launch } from "@astral/astral"; + +export async function testWeb(evalFn: EvaluateFunction): Promise { + const url = "http://localhost:3000/testing/index.html"; + + await using browser = await launch(); + await using page = await browser.newPage(url); + + return await page.evaluate(evalFn); +} diff --git a/tests/components/engine/queue/test.ts b/tests/components/engine/queue/test.ts new file mode 100644 index 000000000..b2990992b --- /dev/null +++ b/tests/components/engine/queue/test.ts @@ -0,0 +1,46 @@ +import { describe, it } from "@std/testing/bdd"; +import { expect } from "@std/expect"; + +import { testWeb } from "@tests/common/index.ts"; +import { tracks } from "@src/testing/sample/tracks.js"; + +import type { Item } from "@components/engine/queue/types.d.ts"; + +describe("components/engine/queue", () => { + it("adds tracks", async () => { + const items = await testWeb(async () => { + const QueueEngine = await import("@components/engine/queue/element.js"); + const engine = new QueueEngine.CLASS(); + + document.body.append(engine); + + const { tracks } = await import("@src/testing/sample/tracks.js"); + + await engine.add({ tracks }); + return engine.future(); + }); + + expect(items.map((i) => i.id).join("/")).toBe( + tracks.map((t) => t.id).join("/"), + ); + }); + + it("pools + fills tracks and shifts the queue", async () => { + const item = await testWeb(async () => { + const QueueEngine = await import("@components/engine/queue/element.js"); + const engine = new QueueEngine.CLASS(); + + document.body.append(engine); + + const { tracks } = await import("@src/testing/sample/tracks.js"); + + await engine.pool(tracks); + await engine.fill({ amount: 1, shuffled: false }); + await engine.shift(); + + return engine.now(); + }); + + expect(item?.id).toBe(tracks[0].id); + }); +}); From c217ee23b0a4b455b318ef16beeabaa06db5e443 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 25 Jan 2026 23:20:53 +0100 Subject: [PATCH 199/244] test: queue engine uses shared worker --- src/testing/sample/tracks.js | 10 ++++++ tests/components/engine/queue/test.ts | 48 +++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/testing/sample/tracks.js b/src/testing/sample/tracks.js index 15fed118a..ba5adb489 100644 --- a/src/testing/sample/tracks.js +++ b/src/testing/sample/tracks.js @@ -11,6 +11,16 @@ const trackA = { uri: "http://example.com/audio-a.mp3", }; +/** + * @type {Track} + */ +const trackB = { + $type: "sh.diffuse.output.tracks", + id: "sample-b", + uri: "http://example.com/audio-b.mp3", +}; + export const tracks = [ trackA, + trackB, ]; diff --git a/tests/components/engine/queue/test.ts b/tests/components/engine/queue/test.ts index b2990992b..c1dea02b9 100644 --- a/tests/components/engine/queue/test.ts +++ b/tests/components/engine/queue/test.ts @@ -20,9 +20,10 @@ describe("components/engine/queue", () => { return engine.future(); }); - expect(items.map((i) => i.id).join("/")).toBe( - tracks.map((t) => t.id).join("/"), - ); + const futureIds = items.map((i) => i.id).join("/"); + const sampleIds = tracks.map((t) => t.id).join("/"); + + expect(futureIds).toEqual(sampleIds); }); it("pools + fills tracks and shifts the queue", async () => { @@ -43,4 +44,45 @@ describe("components/engine/queue", () => { expect(item?.id).toBe(tracks[0].id); }); + + it("[shared worker] adds tracks and shifts + unshifts the queue", async () => { + const item = await testWeb(async () => { + const QueueEngine = await import("@components/engine/queue/element.js"); + const engine = new QueueEngine.CLASS(); + engine.setAttribute("group", "tests"); + + document.body.append(engine); + + const { tracks } = await import("@src/testing/sample/tracks.js"); + + await engine.add({ tracks }); + await engine.shift(); + await engine.shift(); + await engine.unshift(); + + return engine.now(); + }); + + expect(item?.id).toBe(tracks[0].id); + }); + + it("[shared worker] has the correct past", async () => { + const item = await testWeb(async () => { + const QueueEngine = await import("@components/engine/queue/element.js"); + const engine = new QueueEngine.CLASS(); + engine.setAttribute("group", "tests"); + + document.body.append(engine); + + const { tracks } = await import("@src/testing/sample/tracks.js"); + + await engine.add({ tracks }); + await engine.shift(); + await engine.shift(); + + return engine.past()[0]; + }); + + expect(item?.id).toBe(tracks[0].id); + }); }); From c7e7a10e0a1dd7067d582ba99a46aa51e3f089b0 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 26 Jan 2026 14:57:27 +0100 Subject: [PATCH 200/244] fix: default state output configurator --- src/components/configurator/output/element.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 8291a44ce..d299e714b 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -62,7 +62,7 @@ class OutputConfigurator extends DiffuseElement { const def = this.#defaultOutput.value; if (def) def.tracks.state(); - return out === undefined ? "loading" : "loaded"; + return def === undefined ? "loading" : "loaded"; }), }, }; From 225f8ea52d2f369feaa89cd96c7b858782ca6ab8 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 26 Jan 2026 15:24:42 +0100 Subject: [PATCH 201/244] fix: more loading issues --- src/components/engine/queue/element.js | 3 +-- src/components/engine/queue/types.d.ts | 2 +- src/components/engine/queue/worker.js | 4 ++-- src/themes/webamp/browser/element.js | 10 ++++++++-- src/themes/webamp/index.js | 3 +++ 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/engine/queue/element.js b/src/components/engine/queue/element.js index 9ef27dd8f..d21978295 100644 --- a/src/components/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -1,7 +1,6 @@ import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; import { listen } from "@common/worker.js"; -import { hash } from "@common/utils.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts"; @@ -37,7 +36,7 @@ class QueueEngine extends DiffuseElement { #future = signal(/** @type {Array} */ ([])); #now = signal(/** @type {Item | null} */ (null)); #past = signal(/** @type {Array} */ ([])); - #poolHash = signal(hash([])); + #poolHash = signal(/** @type {string | undefined} */ (undefined)); // STATE diff --git a/src/components/engine/queue/types.d.ts b/src/components/engine/queue/types.d.ts index 887413412..298e4f787 100644 --- a/src/components/engine/queue/types.d.ts +++ b/src/components/engine/queue/types.d.ts @@ -24,5 +24,5 @@ export type State = { future: SignalReader; now: SignalReader; past: SignalReader; - poolHash: SignalReader; + poolHash: SignalReader; }; diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index 6e801bd76..3a89eb227 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -17,7 +17,7 @@ export const $lake = signal(/** @type {Track[]} */ ([])); export const $future = signal(/** @type {Item[]} */ ([])); export const $now = signal(/** @type {Item | null} */ (null)); export const $past = signal(/** @type {Item[]} */ ([])); -export const $poolHash = signal(hash([])); +export const $poolHash = signal(/** @type {string | undefined} */ (undefined)); //////////////////////////////////////////// // ACTIONS @@ -55,7 +55,7 @@ export function fill({ augment, amount, shuffled }) { */ export function pool(tracks) { $lake.value = tracks; - $poolHash.value = hash(tracks); + $poolHash.value = tracks.length ? hash(tracks) : undefined; } /** diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index 27ff2e61b..093fa405c 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -19,6 +19,7 @@ class Browser extends DiffuseElement { // SIGNALS + #collectionSize = signal(0); #searchResults = signal(/** @type {Track[]} */ ([])); $input = signal( @@ -70,8 +71,12 @@ class Browser extends DiffuseElement { }); this.effect(() => { - this.forceRender(); + this.#collectionSize.value = output.tracks.collection().filter( + (t) => t.kind !== "placeholder", + ).length; }); + + this.forceRender(); }); // Effects @@ -112,8 +117,9 @@ class Browser extends DiffuseElement { */ render({ html }) { const isLoading = this.$output.value?.tracks?.state() !== "loaded" || - (this.$output.value?.tracks?.collection()?.length && + (this.#collectionSize.value > 0 && this.$search.value?.cacheId() === undefined); + const tracks = this.#searchResults.value; return html` diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index e63fb193a..dc6c9be4b 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -119,6 +119,9 @@ effect(() => { const cacheId = search.cacheId(); if (cacheId === undefined) return; + const poolHash = queue.poolHash(); + if (poolHash === undefined) return; + tracksPromise.resolve("loaded"); }); From 818806ab677c3ecdf2011ee8b2075cdc9475a640 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 26 Jan 2026 15:58:33 +0100 Subject: [PATCH 202/244] refactor: search + queue supply --- src/components/engine/queue/element.js | 10 +++---- src/components/engine/queue/types.d.ts | 8 ++++-- src/components/engine/queue/worker.js | 26 +++++++++++-------- .../orchestrator/queue-tracks/worker.js | 2 +- .../orchestrator/repeat-shuffle/element.js | 2 +- src/components/processor/search/element.js | 8 +++--- src/components/processor/search/types.d.ts | 5 +++- src/components/processor/search/worker.js | 14 +++++----- src/themes/blur/index.js | 4 +-- src/themes/webamp/browser/element.js | 5 ++-- src/themes/webamp/index.js | 20 ++++++-------- tests/components/engine/queue/test.ts | 4 +-- 12 files changed, 58 insertions(+), 50 deletions(-) diff --git a/src/components/engine/queue/element.js b/src/components/engine/queue/element.js index d21978295..94ae8cb82 100644 --- a/src/components/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -26,8 +26,8 @@ class QueueEngine extends DiffuseElement { this.add = this.proxy.add; this.fill = this.proxy.fill; - this.pool = this.proxy.pool; this.shift = this.proxy.shift; + this.supply = this.proxy.supply; this.unshift = this.proxy.unshift; } @@ -36,14 +36,14 @@ class QueueEngine extends DiffuseElement { #future = signal(/** @type {Array} */ ([])); #now = signal(/** @type {Item | null} */ (null)); #past = signal(/** @type {Array} */ ([])); - #poolHash = signal(/** @type {string | undefined} */ (undefined)); + #supplyFingerprint = signal(/** @type {string | undefined} */ (undefined)); // STATE future = this.#future.get; now = this.#now.get; past = this.#past.get; - poolHash = this.#poolHash.get; + supplyFingerprint = this.#supplyFingerprint.get; // LIFECYCLE @@ -60,13 +60,13 @@ class QueueEngine extends DiffuseElement { listen("future", this.#future.set, link); listen("now", this.#now.set, link); listen("past", this.#past.set, link); - listen("poolHash", this.#poolHash.set, link); + listen("supplyFingerprint", this.#supplyFingerprint.set, link); // Fetch current data state this.proxy.future().then(this.#future.set); this.proxy.now().then(this.#now.set); this.proxy.past().then(this.#past.set); - this.proxy.poolHash().then(this.#poolHash.set); + this.proxy.supplyFingerprint().then(this.#supplyFingerprint.set); } } diff --git a/src/components/engine/queue/types.d.ts b/src/components/engine/queue/types.d.ts index 298e4f787..8a6338831 100644 --- a/src/components/engine/queue/types.d.ts +++ b/src/components/engine/queue/types.d.ts @@ -11,8 +11,8 @@ export type Actions = { shuffled: boolean; }, ) => void; - pool: (tracks: Track[]) => void; shift: () => void; + supply: (args: { tracks: Track[] }) => void; unshift: () => void; }; @@ -24,5 +24,9 @@ export type State = { future: SignalReader; now: SignalReader; past: SignalReader; - poolHash: SignalReader; + + /** + * Initially this is set to `undefined`, but whenever the cache is changed afterwards this will be the hash of the items in the supply. + */ + supplyFingerprint: SignalReader; }; diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index 3a89eb227..1290668cc 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -17,7 +17,9 @@ export const $lake = signal(/** @type {Track[]} */ ([])); export const $future = signal(/** @type {Item[]} */ ([])); export const $now = signal(/** @type {Item | null} */ (null)); export const $past = signal(/** @type {Item[]} */ ([])); -export const $poolHash = signal(/** @type {string | undefined} */ (undefined)); +export const $supplyFingerprint = signal( + /** @type {string | undefined} */ (undefined), +); //////////////////////////////////////////// // ACTIONS @@ -51,18 +53,18 @@ export function fill({ augment, amount, shuffled }) { } /** - * @type {Actions['pool']} + * @type {Actions['shift']} */ -export function pool(tracks) { - $lake.value = tracks; - $poolHash.value = tracks.length ? hash(tracks) : undefined; +export function shift() { + return _shift(); } /** - * @type {Actions['shift']} + * @type {Actions['supply']} */ -export function shift() { - return _shift(); +export function supply({ tracks }) { + $lake.value = tracks; + $supplyFingerprint.value = tracks.length ? hash(tracks) : undefined; } /** @@ -89,15 +91,15 @@ ostiary((context, _firstConnection, _connectionId) => { rpc(context, { add, fill, - pool, shift, + supply, unshift, // State future: $future.get, now: $now.get, past: $past.get, - poolHash: $poolHash.get, + supplyFingerprint: $supplyFingerprint.get, }); // Effects @@ -106,7 +108,9 @@ ostiary((context, _firstConnection, _connectionId) => { effect(() => announce("future", $future.value, context)); effect(() => announce("now", $now.value, context)); effect(() => announce("past", $past.value, context)); - effect(() => announce("poolHash", $poolHash.value, context)); + effect(() => + announce("supplyFingerprint", $supplyFingerprint.value, context) + ); }); //////////////////////////////////////////// diff --git a/src/components/orchestrator/queue-tracks/worker.js b/src/components/orchestrator/queue-tracks/worker.js index c1d54cafe..664e73f50 100644 --- a/src/components/orchestrator/queue-tracks/worker.js +++ b/src/components/orchestrator/queue-tracks/worker.js @@ -39,7 +39,7 @@ export async function poolAvailable({ data, ports }) { }, []); // Set pool - await queue.pool(availableTracks); + await queue.supply({ tracks: availableTracks }); } //////////////////////////////////////////// diff --git a/src/components/orchestrator/repeat-shuffle/element.js b/src/components/orchestrator/repeat-shuffle/element.js index 45e7264da..6f1eca31a 100644 --- a/src/components/orchestrator/repeat-shuffle/element.js +++ b/src/components/orchestrator/repeat-shuffle/element.js @@ -53,7 +53,7 @@ class RepeatShuffleOrchestrator extends BroadcastableDiffuseElement { // Effects this.effect(() => { const trigger = queue.now(); - const _other_trigger = queue.poolHash(); + const _other_trigger = queue.supplyFingerprint(); this.isLeader().then((isLeader) => { if (!isLeader) return; diff --git a/src/components/processor/search/element.js b/src/components/processor/search/element.js index 237d545ba..d73abb7f8 100644 --- a/src/components/processor/search/element.js +++ b/src/components/processor/search/element.js @@ -30,11 +30,11 @@ class SearchProcessor extends DiffuseElement { // SIGNALS - #cacheId = signal(/** @type {string | undefined} */ (undefined)); + #supplyFingerprint = signal(/** @type {string | undefined} */ (undefined)); // STATE - cacheId = this.#cacheId.get; + supplyFingerprint = this.#supplyFingerprint.get; // LIFECYCLE @@ -48,10 +48,10 @@ class SearchProcessor extends DiffuseElement { const link = this.workerLink(); // Listen for remote data changes - listen("cacheId", this.#cacheId.set, link); + listen("supplyFingerprint", this.#supplyFingerprint.set, link); // Fetch current data state - this.proxy.cacheId().then(this.#cacheId.set); + this.proxy.supplyFingerprint().then(this.#supplyFingerprint.set); } } diff --git a/src/components/processor/search/types.d.ts b/src/components/processor/search/types.d.ts index 97a981b40..ec9579aad 100644 --- a/src/components/processor/search/types.d.ts +++ b/src/components/processor/search/types.d.ts @@ -15,5 +15,8 @@ export type Actions = { export type Schema = Orama; export type State = { - cacheId: SignalReader; + /** + * Initially this is set to `undefined`, but whenever the cache is changed afterwards this will be the hash of the items in the supply. + */ + supplyFingerprint: SignalReader; }; diff --git a/src/components/processor/search/worker.js b/src/components/processor/search/worker.js index 22260fe9f..12a48e7ea 100644 --- a/src/components/processor/search/worker.js +++ b/src/components/processor/search/worker.js @@ -22,7 +22,9 @@ export const $inserted = signal(/** @type {Set} */ (new Set()), { }); // Communicated state -export const $cacheId = signal(/** @type {string | undefined} */ (undefined)); +export const $supplyFingerprint = signal( + /** @type {string | undefined} */ (undefined), +); //////////////////////////////////////////// // DATABASE @@ -93,9 +95,7 @@ export async function supply({ tracks }) { await Orama.removeMultiple(db, Array.from(removedIds)); await Orama.insertMultiple(db, newTracks); - $cacheId.value = ids.length === 0 - ? undefined - : xxh32(ids.sort().join("")).toString(); + $supplyFingerprint.value = xxh32(ids.sort().join("")).toString(); } //////////////////////////////////////////// @@ -108,13 +108,15 @@ ostiary((context) => { supply, // State - cacheId: $cacheId.get, + supplyFingerprint: $supplyFingerprint.get, }); // Effects // Communicate state - effect(() => announce("cacheId", $cacheId.value, context)); + effect(() => + announce("supplyFingerprint", $supplyFingerprint.value, context) + ); }); //////////////////////////////////////////// diff --git a/src/themes/blur/index.js b/src/themes/blur/index.js index 16ec18662..a92a7c155 100644 --- a/src/themes/blur/index.js +++ b/src/themes/blur/index.js @@ -34,7 +34,7 @@ effect(() => { }); effect(() => { - console.log("Queue pool hash:", queue.poolHash()); + console.log("Queue pool hash:", queue.supplyFingerprint()); }); /** @@ -42,7 +42,7 @@ effect(() => { */ effect(() => { const trigger = queue.now(); - const _other_trigger = queue.poolHash(); + const _other_trigger = queue.supplyFingerprint(); isLeader().then((bool) => { if (bool) { diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index 093fa405c..ce4ea941b 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -66,7 +66,7 @@ class Browser extends DiffuseElement { // Wait for the above dependencies to be defined, then render again. whenElementsDefined({ input, output, search }).then(() => { this.effect(() => { - const _cacheId = search.cacheId(); + const _ = search.supplyFingerprint(); this.performSearch(); }); @@ -118,7 +118,7 @@ class Browser extends DiffuseElement { render({ html }) { const isLoading = this.$output.value?.tracks?.state() !== "loaded" || (this.#collectionSize.value > 0 && - this.$search.value?.cacheId() === undefined); + this.$search.value?.supplyFingerprint() === undefined); const tracks = this.#searchResults.value; @@ -174,6 +174,7 @@ class Browser extends DiffuseElement { } table tbody tr { + cursor: pointer; content-visibility: auto; } diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index dc6c9be4b..1f3e8a1bf 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -85,18 +85,17 @@ amp.media.loadFromUrl = loadOverride.bind(amp.media); * Whenever the queue changes update the playlist. */ effect(() => { - const now = untracked(queue.now); - const past = untracked(queue.past); const future = queue.future(); const playlist = [ - ...past, - ...(now ? [now] : []), ...future, ]; const lengthLastPlaylist = untracked($playlist.get).length; - const tracksToAdd = playlist.slice(lengthLastPlaylist); + const tracksToAdd = playlist.slice( + 0, + Math.max(0, playlist.length - lengthLastPlaylist), + ); $playlist.value = playlist; @@ -116,11 +115,11 @@ effect(() => { const state = output.tracks.state(); if (state !== "loaded") return; - const cacheId = search.cacheId(); - if (cacheId === undefined) return; + const fingerprintSearch = search.supplyFingerprint(); + if (fingerprintSearch === undefined) return; - const poolHash = queue.poolHash(); - if (poolHash === undefined) return; + const fingerprintQueue = queue.supplyFingerprint(); + if (fingerprintQueue === undefined) return; tracksPromise.resolve("loaded"); }); @@ -172,9 +171,6 @@ amp.onClose(() => winampIsShown = false); async function addBatch() { await queue.fill({ augment: true, amount: 50, shuffled: true }); - - // Automatically insert track if there isn't any - if (!queue.now()) await queue.shift(); } function windowManager() { diff --git a/tests/components/engine/queue/test.ts b/tests/components/engine/queue/test.ts index c1dea02b9..6669f53ac 100644 --- a/tests/components/engine/queue/test.ts +++ b/tests/components/engine/queue/test.ts @@ -4,8 +4,6 @@ import { expect } from "@std/expect"; import { testWeb } from "@tests/common/index.ts"; import { tracks } from "@src/testing/sample/tracks.js"; -import type { Item } from "@components/engine/queue/types.d.ts"; - describe("components/engine/queue", () => { it("adds tracks", async () => { const items = await testWeb(async () => { @@ -35,7 +33,7 @@ describe("components/engine/queue", () => { const { tracks } = await import("@src/testing/sample/tracks.js"); - await engine.pool(tracks); + await engine.supply({ tracks }); await engine.fill({ amount: 1, shuffled: false }); await engine.shift(); From a49b7bccd7eec23d0dc725c9c329b2ac080c2c26 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 26 Jan 2026 16:16:21 +0100 Subject: [PATCH 203/244] fix: still allow webamp to load local files --- src/themes/webamp/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 1f3e8a1bf..946a970f8 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -66,6 +66,10 @@ const loadFromUrl = amp.media.loadFromUrl.bind(amp.media); * @param {boolean} autoPlay */ async function loadOverride(uri, autoPlay) { + if (uri.startsWith("blob:")) { + return await loadFromUrl(uri, autoPlay); + } + const resp = await input.resolve({ method: "GET", uri }); if (!resp) throw new Error("Failed to resolve URI"); if (resp && "stream" in resp) { From 85c47779f0643a6137aeeed92b476247d78612e1 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 26 Jan 2026 16:37:53 +0100 Subject: [PATCH 204/244] chore: couple minor index page adjustments --- src/index.vto | 10 +++++----- src/styles/diffuse/page.css | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/index.vto b/src/index.vto index 1d9b9da6e..015d43e91 100644 --- a/src/index.vto +++ b/src/index.vto @@ -20,7 +20,7 @@ themes: - title: "Loader" todo: true desc: > - **A theme that loads other themes!** Load a theme from a URL, text snippet or from your user data output. + **A theme that loads other themes!** Load a theme from a URL, text snippet or from your user data output. _If you're taking the first steps to customize, checkout the [constituents loader](#constituents) first!_ - url: "themes/webamp/" title: "Webamp" desc: > @@ -319,7 +319,7 @@ definitions: Level 3: Now that you know which food is good and how to make combinations, you might make a slight customization, add a little something of your own (eg. add some spice). However, you're not quite confident enough which spice to pick, so you hire some help.

    - This can be done using the constituents loader which allows you to build on top of a familiar foundation and load custom constituents. People might share their own, or maybe you use an LLM to generate something for you (eg. an album art gallery). + This can be done using the constituents loader which allows you to build on top of a familiar preconfigured foundation and load custom constituents. People might share their own, or maybe you use an LLM to generate something for you (eg. an album art gallery).

    @@ -339,7 +339,7 @@ definitions: Level 5: At this point you're confident enough to make a meal from scratch. You can start very simple, eg. just throwing a steak in the pan with some butter and some salt to it. Then later add some baked potatoes and go from there.

    - A similar tool comes into play here, the themes loader. Same concept as the constituents loader, but now you need to specify the foundation yourself. You can use the elements listed below to do so. The code for these is available from this website or through the Javascript package. + A similar tool comes into play here, the themes loader. Same concept as the constituents loader, but now you need to specify the foundation yourself. You can use the elements listed below to do so. The code for these is available from this website or through the Javascript package.

    @@ -354,10 +354,10 @@ definitions:
  20. - Level 7: You got promoted to chef. Time to open your own restaurant chain. + Level 7: You got promoted to master chef. Time to open your own restaurant chain.

    - You can self-host Diffuse, it's open-source! Or you present your own collection of elements and however you want to present them. + You can self-host Diffuse, it's open-source! Or you present your own collection of elements.

  21. diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 8c8b0c53b..e1ef42263 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -159,6 +159,10 @@ h2 { margin-bottom: var(--space-xs); margin-top: var(--space-2xs); opacity: 0.6; + + a { + text-underline-offset: 3px; + } } .table-of-contents { From a97645ce0f239cbd174852c5103b576787319722 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 26 Jan 2026 17:07:52 +0100 Subject: [PATCH 205/244] test: search processor --- src/testing/sample/tracks.js | 12 +++- tests/components/processor/search/test.ts | 67 +++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 tests/components/processor/search/test.ts diff --git a/src/testing/sample/tracks.js b/src/testing/sample/tracks.js index ba5adb489..5ca538bcb 100644 --- a/src/testing/sample/tracks.js +++ b/src/testing/sample/tracks.js @@ -5,19 +5,27 @@ /** * @type {Track} */ -const trackA = { +export const trackA = { $type: "sh.diffuse.output.tracks", id: "sample-a", uri: "http://example.com/audio-a.mp3", + tags: { + artist: "Artist", + title: "Sample", + }, }; /** * @type {Track} */ -const trackB = { +export const trackB = { $type: "sh.diffuse.output.tracks", id: "sample-b", uri: "http://example.com/audio-b.mp3", + tags: { + album: "B-side", + title: "Unknown", + }, }; export const tracks = [ diff --git a/tests/components/processor/search/test.ts b/tests/components/processor/search/test.ts new file mode 100644 index 000000000..1c23f68ac --- /dev/null +++ b/tests/components/processor/search/test.ts @@ -0,0 +1,67 @@ +import { describe, it } from "@std/testing/bdd"; +import { expect } from "@std/expect"; + +import { testWeb } from "@tests/common/index.ts"; +import { trackA, trackB } from "@src/testing/sample/tracks.js"; + +describe("components/processor/search", () => { + it("finds tracks by album", async () => { + const results = await testWeb(async () => { + const SearchProcessor = await import( + "@components/processor/search/element.js" + ); + const processor = new SearchProcessor.CLASS(); + + document.body.append(processor); + + // Add sample tracks to the supply first + const { tracks } = await import("@src/testing/sample/tracks.js"); + await processor.supply({ tracks }); + + // Search for a specific term + return processor.search({ term: tracks[1]?.tags?.album }); + }); + + expect(results[0]?.id).toBe(trackB.id); + }); + + it("finds tracks by artist", async () => { + const results = await testWeb(async () => { + const SearchProcessor = await import( + "@components/processor/search/element.js" + ); + const processor = new SearchProcessor.CLASS(); + + document.body.append(processor); + + // Add sample tracks to the supply first + const { tracks } = await import("@src/testing/sample/tracks.js"); + await processor.supply({ tracks }); + + // Search for a specific term + return processor.search({ term: tracks[0]?.tags?.artist }); + }); + + expect(results[0]?.id).toBe(trackA.id); + }); + + it("finds tracks by title", async () => { + const results = await testWeb(async () => { + const SearchProcessor = await import( + "@components/processor/search/element.js" + ); + const processor = new SearchProcessor.CLASS(); + + document.body.append(processor); + + // Add sample tracks to the supply first + const { tracks } = await import("@src/testing/sample/tracks.js"); + await processor.supply({ tracks }); + + // Search for a specific term + return processor.search({ term: tracks[1]?.tags?.title }); + }); + + expect(results[0]?.id).toBe(trackB.id); + }); +}); From 685b6144189458ebade90e07e6ba83ed87ba16dc Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 27 Jan 2026 18:33:40 +0100 Subject: [PATCH 206/244] feat: initial work for constituents loader --- src/common/constituents/default.js | 167 +++++++++--- .../orchestrator/repeat-shuffle/element.js | 1 + src/fonts/CommitMonoVariable.woff2 | Bin 0 -> 86768 bytes src/index.vto | 78 +++--- src/styles/base.css | 2 +- src/styles/diffuse/fonts.css | 5 + src/styles/diffuse/page.css | 249 +++++++++++------- src/styles/{fonts.css => font-faces.css} | 8 + src/styles/variables.css | 2 + src/themes/blur/artwork-controller/index.js | 26 +- src/themes/loader/constituent/index.js | 0 src/themes/loader/constituent/index.vto | 122 +++++++++ src/themes/loader/constituent/s/index.vto | 7 + src/themes/webamp/browser/index.js | 13 +- .../webamp/configurators/input/index.js | 7 +- 15 files changed, 503 insertions(+), 184 deletions(-) create mode 100644 src/fonts/CommitMonoVariable.woff2 rename src/styles/{fonts.css => font-faces.css} (65%) create mode 100644 src/themes/loader/constituent/index.js create mode 100644 src/themes/loader/constituent/index.vto create mode 100644 src/themes/loader/constituent/s/index.vto diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index d208a9161..87d56ce37 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -1,26 +1,27 @@ +import ArtworkProcessor from "@components/processor/artwork/element.js"; +import AudioEngine from "@components/engine/audio/element.js"; import Queue from "@components/engine/queue/element.js"; import InputOrchestrator from "@components/orchestrator/input/element.js"; import OutputOrchestrator from "@components/orchestrator/output/element.js"; import MetadataProcessor from "@components/processor/metadata/element.js"; import ProcessTracksOrchestrator from "@components/orchestrator/process-tracks/element.js"; +import QueueAudioOrchestrator from "@components/orchestrator/queue-audio/element.js"; import QueueTracksOrchestrator from "@components/orchestrator/queue-tracks/element.js"; import RepeatShuffleOrchestrator from "@components/orchestrator/repeat-shuffle/element.js"; import SearchProcessor from "@components/processor/search/element.js"; import SearchTracksOrchestrator from "@components/orchestrator/search-tracks/element.js"; import SourcesOrchestrator from "@components/orchestrator/sources/element.js"; +/** + * @import { DiffuseElement } from "@toko/diffuse/common/element.js"; + */ + export const GROUP = "constituents"; /** * Default config for constituents. */ export function config() { - // Queue - const queue = new Queue(); - queue.setAttribute("group", GROUP); - - document.body.append(queue); - // Input const input = new InputOrchestrator(); input.setAttribute("group", GROUP); @@ -41,11 +42,6 @@ export function config() { document.body.append(metadata); - const search = new SearchProcessor(); - search.setAttribute("group", GROUP); - - document.body.append(search); - // Orchestrators const opt = new ProcessTracksOrchestrator(); opt.setAttribute("group", GROUP); @@ -54,48 +50,145 @@ export function config() { opt.setAttribute("metadata-processor-selector", metadata.selector); opt.toggleAttribute("process-when-ready"); - const oqt = new QueueTracksOrchestrator(); - oqt.setAttribute("group", GROUP); - oqt.setAttribute("input-selector", input.selector); - oqt.setAttribute("output-selector", output.selector); - oqt.setAttribute("queue-engine-selector", queue.selector); + document.body.append(opt); + + // LAZY + // ---- + + // Engines + function audio() { + const a = new AudioEngine(); + a.setAttribute("group", GROUP); + + addToBodyIfNeeded(a); + return a; + } + + function queue() { + const q = new Queue(); + q.setAttribute("group", GROUP); - const ors = new RepeatShuffleOrchestrator(); - ors.setAttribute("group", GROUP); - ors.setAttribute("queue-engine-selector", queue.selector); + addToBodyIfNeeded(q); + return q; + } - const ost = new SearchTracksOrchestrator(); - ost.setAttribute("group", GROUP); - ost.setAttribute("input-selector", input.selector); - ost.setAttribute("output-selector", output.selector); - ost.setAttribute("search-processor-selector", search.selector); + // Processors + function artwork() { + const a = new ArtworkProcessor(); + a.setAttribute("group", GROUP); + + addToBodyIfNeeded(a); + return a; + } + + function search() { + const s = new SearchProcessor(); + s.setAttribute("group", GROUP); - const osr = new SourcesOrchestrator(); - osr.setAttribute("group", GROUP); - osr.setAttribute("input-selector", input.selector); - osr.setAttribute("output-selector", output.selector); + addToBodyIfNeeded(s); + return s; + } - document.body.append(opt, oqt, ors, ost, osr); + // Orchestrators + function queueAudio() { + const a = audio(); + const q = queue(); + + const oqa = new QueueAudioOrchestrator(); + oqa.setAttribute("group", GROUP); + oqa.setAttribute("audio-engine-selector", a.selector); + oqa.setAttribute("input-selector", input.selector); + oqa.setAttribute("queue-engine-selector", q.selector); + + addToBodyIfNeeded(oqa); + return oqa; + } + + function queueTracks() { + const q = queue(); + + const oqt = new QueueTracksOrchestrator(); + oqt.setAttribute("group", GROUP); + oqt.setAttribute("input-selector", input.selector); + oqt.setAttribute("output-selector", output.selector); + oqt.setAttribute("queue-engine-selector", q.selector); + + addToBodyIfNeeded(oqt); + return oqt; + } + + function repeatShuffle() { + const q = queue(); + + const ors = new RepeatShuffleOrchestrator(); + ors.setAttribute("group", GROUP); + ors.setAttribute("queue-engine-selector", q.selector); + + addToBodyIfNeeded(ors); + return ors; + } + + function searchTracks() { + const s = search(); + + const ost = new SearchTracksOrchestrator(); + ost.setAttribute("group", GROUP); + ost.setAttribute("input-selector", input.selector); + ost.setAttribute("output-selector", output.selector); + ost.setAttribute("search-processor-selector", s.selector); + + addToBodyIfNeeded(ost); + return ost; + } + + function sources() { + const so = new SourcesOrchestrator(); + so.setAttribute("group", GROUP); + so.setAttribute("input-selector", input.selector); + so.setAttribute("output-selector", output.selector); + + addToBodyIfNeeded(so); + return so; + } // Return elements return { GROUP, - engine: { - queue, - }, + engine: {}, orchestrator: { input, output, processTracks: opt, - queueTracks: oqt, - repeatShuffle: ors, - searchTracks: ost, - sources: osr, }, processor: { metadata, - search, + }, + + lazy: { + engine: { + audio, + queue, + }, + orchestrator: { + queueAudio, + queueTracks, + repeatShuffle, + searchTracks, + sources, + }, + processor: { + artwork, + search, + }, }, }; } + +/** + * @param {DiffuseElement} element + */ +export function addToBodyIfNeeded(element) { + const alreadyAdded = document.body.querySelector(element.selector); + if (!alreadyAdded) document.body.append(element); +} diff --git a/src/components/orchestrator/repeat-shuffle/element.js b/src/components/orchestrator/repeat-shuffle/element.js index 6f1eca31a..12d767801 100644 --- a/src/components/orchestrator/repeat-shuffle/element.js +++ b/src/components/orchestrator/repeat-shuffle/element.js @@ -24,6 +24,7 @@ class RepeatShuffleOrchestrator extends BroadcastableDiffuseElement { async connectedCallback() { // Broadcast if needed if (this.hasAttribute("group")) { + // TODO: Replicate state (repeat & shuffle) this.broadcast(this.nameWithGroup, {}); } diff --git a/src/fonts/CommitMonoVariable.woff2 b/src/fonts/CommitMonoVariable.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f9ac1ee498c33ac55b804c3dbd6c8035b6828042 GIT binary patch literal 86768 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 Audio playback controller with artwork display. - - title: "Loader" + - url: "themes/loader/constituent/" + title: "Loader" desc: > **A constituent that loads other constituents!** Load a constituent from a URL, text snippet or from your user data output. todo: true @@ -173,48 +174,63 @@ transformers: # DEFINITIONS definitions: + - title: "Output / Constituent" + desc: > + Custom constituents to keep around. + todo: true - title: "Output / Favourites" - desc: "Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified using the audio's title and artist." + desc: > + Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified using the audio's title and artist. todo: true - title: "Output / Playlist" - desc: "Just like favourites, does not refer to specific tracks. Unlike favourites, must also specify the album. Can also be considered a collection which is basically an unordered playlist." + desc: > + Just like favourites, does not refer to specific tracks. Unlike favourites, must also specify the album. Can also be considered a collection which is basically an unordered playlist. todo: true - title: "Output / Progress" - desc: "Used to track progress of (long) audio playback." + desc: > + Used to track progress of (long) audio playback. + todo: true + - title: "Output / Theme" + desc: > + Custom theme to keep around. todo: true - title: "Output / Tracks" - desc: "Represents audio that can be played, or a placeholder for a source of tracks. Contains a URI that will resolve to the audio. This object may be cached if convenient." + desc: > + Represents audio that can be played, or a placeholder for a source of tracks. Contains a URI that will resolve to the audio. This object may be cached if convenient. url: "definitions/output/tracks.json" ---
    -

    - {{ await comp.diffuse.logo() }} -

    -

    - Construct your audio player. -

    -

    - Diffuse is a collection of components and software that make it possible to listen to audio from various sources on your devices and the web, and to create the ideal digital - audio listening experience for you. -

    -

    - - WORK IN PROGRESS -

    - -

    - Built by tokono.ma -

    +
    +

    + {{ await comp.diffuse.logo() }} +

    +

    + Construct your audio player. +

    +

    + Diffuse is a collection of components and software that make it possible to listen to audio from various sources on your devices and the web, and to create the ideal digital + audio listening experience for you. +

    +

    + + WORK IN PROGRESS +

    + +

    + Built by tokono.ma +

    +
    +
    diff --git a/src/styles/base.css b/src/styles/base.css index 8bf516c8f..47d864010 100644 --- a/src/styles/base.css +++ b/src/styles/base.css @@ -1,6 +1,6 @@ @import "./reset.css"; @import "./variables.css"; -@import "./fonts.css"; +@import "./font-faces.css"; @import "./animations.css"; @import "./diffuse/colors.css"; diff --git a/src/styles/diffuse/fonts.css b/src/styles/diffuse/fonts.css index e1b9d1738..138e6df25 100644 --- a/src/styles/diffuse/fonts.css +++ b/src/styles/diffuse/fonts.css @@ -11,3 +11,8 @@ font-optical-sizing: auto; } } + +.monospace-font, +code { + font-family: CommitMonoVariable, "Commit Mono", monospace; +} diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index e1ef42263..d817fe2c4 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -7,57 +7,99 @@ body { scroll-margin-top: var(--space-md); } +/** + * Containers + */ + +p, +ul, +ol { + margin: var(--space-sm) 0; + max-width: var(--container-sm); +} + +header { + display: flex; + gap: var(--space-lg); +} + header, main { - margin: var(--space-md) var(--space-lg); + margin: var(--space-md) auto; + max-width: var(--container-7xl); + padding: 0 var(--space-lg); } -a { - color: inherit; - text-underline-offset: 6px; +main { + margin-bottom: var(--space-lg); } -button { - background: var(--accent); - border: 0; - border-radius: var(--radius-md); - color: var(--bg-color); - cursor: pointer; - font-family: inherit; - font-weight: 500; - line-height: var(--leading-tight); - padding: var(--space-2xs) var(--space-xs); - transition-duration: 500ms; - transition-property: opacity; +.columns { + display: flex; + flex-wrap: wrap; + gap: 0 var(--space-3xl); +} - &[disabled] { - opacity: 0.5; +ul.columns { + list-style: none; + padding: 0; + max-width: 100%; + + li { + margin-bottom: var(--space-xl); } - & > span { - align-items: center; - display: inline-flex; - gap: var(--space-3xs); - padding-top: 1px; + li::marker { + content: none; + } + + li i.ph-fill { + opacity: 0.4; } } -h1 { - margin: var(--space-lg) 0 var(--space-xl); - padding-top: var(--space-2xs); +.filler { + background: oklch(from var(--accent) l c h / 0.2); + flex: 1; } -h1 svg { - fill: oklch(from var(--bg-color) calc(l - 0.5) c h); - opacity: 0.2; - width: 4.25em; +.flex { + flex: 1; + margin-bottom: var(--space-xs); + min-width: var(--container-3xs); +} - @media (prefers-color-scheme: dark) { - & { - fill: var(--text-color); - opacity: 0.25; - } - } +/** + * Forms + */ + +textarea { + background: transparent; + border: 3px solid oklch(from currentColor l c h / 0.25); + border-radius: var(--radius-md); + color: inherit; + font-size: var(--fs-sm); + height: var(--container-xs); + padding: var(--space-xs); + resize: none; + width: 100%; +} + +/** + * Headers + */ + +.construct { + color: var(--accent); + font-size: var(--fs-3xl); + font-weight: 900; + image-rendering: pixelated; + letter-spacing: -0.0125em; + line-height: 0.775em; + line-height: 1.05cap; + margin-bottom: var(--space-md); + max-width: var(--container-xl); + text-transform: uppercase; } h2 { @@ -84,69 +126,74 @@ h2 + h3 { margin-top: var(--space-md); } -ul, -ol { - padding-left: var(--space-md); +/** + * Inline + */ + +a { + color: inherit; + text-underline-offset: 6px; } -p, -ul, -ol { - margin: var(--space-sm) 0; - max-width: var(--container-sm); +button { + background: var(--accent); + border: 0; + border-radius: var(--radius-md); + color: var(--bg-color); + cursor: pointer; + font-family: inherit; + font-weight: 500; + line-height: var(--leading-tight); + padding: var(--space-2xs) var(--space-xs); + transition-duration: 500ms; + transition-property: opacity; + + &[disabled] { + cursor: not-allowed; + opacity: 0.5; + } + + & > span { + align-items: center; + display: inline-flex; + gap: var(--space-3xs); + padding-top: 1px; + } } small { font-size: var(--fs-xs); } -ul li::marker { - color: oklch(from currentColor l c h / 0.4); - content: "◦ "; +.button-row { + display: inline-flex; + gap: var(--space-2xs); } -.columns { - display: flex; - flex-wrap: wrap; - gap: 0 var(--space-3xl); +.todo { + font-size: var(--fs-sm); + font-weight: 600; + opacity: 0.4; } -ul.columns { - list-style: none; - padding: 0; - max-width: 100%; - - li { - margin-bottom: var(--space-xl); - } - - li::marker { - content: none; - } - - li i.ph-fill { - opacity: 0.4; - } +.with-icon { + align-items: center; + display: inline-flex; + gap: var(--space-3xs); } -.construct { - color: var(--accent); - font-size: var(--fs-3xl); - font-weight: 900; - image-rendering: pixelated; - letter-spacing: -0.0125em; - line-height: 0.775em; - line-height: 1.05cap; - margin-bottom: var(--space-md); - max-width: var(--container-xl); - text-transform: uppercase; +/** + * Lists + */ + +ul, +ol { + padding-left: var(--space-md); } -.dither-mask, -h2 { - mask: - url("data:image/png;base64,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"), - radial-gradient(circle at 50% 0, transparent 45%, oklab(0 0 0 / 0.65) 85%) 0 0/50% 100%; +ul li::marker { + color: oklch(from currentColor l c h / 0.4); + content: "◦ "; } .element { @@ -191,14 +238,34 @@ h2 { } } -.todo { - font-size: var(--fs-sm); - font-weight: 600; - opacity: 0.4; +/** + * Logo + */ + +.diffuse-logo { + font-size: var(--fs-lg); + margin: var(--space-lg) 0 var(--space-xl); + padding-top: var(--space-2xs); + + svg { + fill: oklch(from var(--bg-color) calc(l - 0.5) c h); + opacity: 0.2; + width: 4.25em; + + @media (prefers-color-scheme: dark) { + fill: var(--text-color); + opacity: 0.25; + } + } } -.with-icon { - align-items: center; - display: inline-flex; - gap: var(--space-3xs); +/** + * 😶‍🌫️ + */ + +.dither-mask, +h2 { + mask: + url("data:image/png;base64,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"), + radial-gradient(circle at 50% 0, transparent 45%, oklab(0 0 0 / 0.65) 85%) 0 0/50% 100%; } diff --git a/src/styles/fonts.css b/src/styles/font-faces.css similarity index 65% rename from src/styles/fonts.css rename to src/styles/font-faces.css index ade90e099..318b559ef 100644 --- a/src/styles/fonts.css +++ b/src/styles/font-faces.css @@ -1,3 +1,11 @@ +@font-face { + font-display: swap; + font-family: CommitMonoVariable; + font-style: normal; + font-weight: 100 900; + src: url("../fonts/CommitMonoVariable.woff2") format("woff2"); +} + @font-face { font-display: swap; font-family: InterVariable; diff --git a/src/styles/variables.css b/src/styles/variables.css index 73693dd62..b71731c63 100644 --- a/src/styles/variables.css +++ b/src/styles/variables.css @@ -46,6 +46,8 @@ --container-5xl: 64rem; --container-6xl: 72rem; --container-7xl: 80rem; + --container-8xl: 88rem; + --container-9xl: 96rem; /* Letter-spacing */ --tracking-tighter: -0.05em; diff --git a/src/themes/blur/artwork-controller/index.js b/src/themes/blur/artwork-controller/index.js index 34a1fdb9c..0ede11ac3 100644 --- a/src/themes/blur/artwork-controller/index.js +++ b/src/themes/blur/artwork-controller/index.js @@ -1,36 +1,32 @@ import defaults from "@common/constituents/default/config.js"; import { effect } from "@common/signal.js"; -import AudioEngine from "@components/engine/audio/element.js"; -import ArtworkProcessor from "@components/processor/artwork/element.js"; -import QueueAudioOrchestrator from "@components/orchestrator/queue-audio/element.js"; - import ArtworkController from "@themes/blur/artwork-controller/element.js"; // Prerequisites -const aud = new AudioEngine(); -aud.setAttribute("group", defaults.GROUP); +const aud = defaults.lazy.engine.audio(); +const queue = defaults.lazy.engine.queue(); + +const art = defaults.lazy.processor.artwork(); + +const oqa = defaults.lazy.orchestrator.queueAudio(); +const rso = defaults.lazy.orchestrator.repeatShuffle(); -const art = new ArtworkProcessor(); -const oqa = new QueueAudioOrchestrator(); -oqa.setAttribute("group", defaults.GROUP); -oqa.setAttribute("input-selector", defaults.orchestrator.input.selector); -oqa.setAttribute("audio-engine-selector", "de-audio"); -oqa.setAttribute("queue-engine-selector", defaults.engine.queue.selector); +defaults.lazy.orchestrator.queueTracks(); +defaults.lazy.orchestrator.repeatShuffle(); // Controller const dac = new ArtworkController(); dac.setAttribute("artwork-processor-selector", art.selector); dac.setAttribute("audio-engine-selector", aud.selector); dac.setAttribute("input-selector", defaults.orchestrator.input.selector); -dac.setAttribute("queue-engine-selector", defaults.engine.queue.selector); +dac.setAttribute("queue-engine-selector", queue.selector); // Add to DOM -document.body.append(aud, art, oqa, dac); +document.body.append(dac); // Effect - Link the repeat/shuffle & queue-audio orchestrators effect(() => { - const rso = defaults.orchestrator.repeatShuffle; const repeat = rso.repeat(); if (repeat && !oqa.hasAttribute("repeat")) { diff --git a/src/themes/loader/constituent/index.js b/src/themes/loader/constituent/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto new file mode 100644 index 000000000..08ecee691 --- /dev/null +++ b/src/themes/loader/constituent/index.vto @@ -0,0 +1,122 @@ +--- +layout: layouts/constituent.vto +base: ../../../ + +styles: + - styles/base.css + - styles/diffuse/page.css + - styles/vendor/phosphor/fill/style.css + +scripts: + - index.js +--- + +
    +
    + +

    + Constituent loader ❈ +

    +

    + This tool allows you to load a custom constituent besides the existing ones. If you're missing a feature in Diffuse, this is the place to be! +

    +
    +
    +
    +
    + +
    +
    +

    Generate

    +

    + TODO: Explain how to instruct AI to generate a constituent for you. For example, "I want a nice album overview grouped by the month they were added to my collection" +

    +
    + +
    +

    Community

    +

    + Check out some constituents from the community and load them here. +

    +

    + Nothing here yet, we're still in alpha. +

    +
    +
    + + +
    +

    Build it yourself

    + + +
    +
    +

    + If you know a bit of HTML & Javascript, you can write your own or plug in some code you found elsewhere (be careful what to copy/paste though): +

    + + + + +
    + +
    +

    + Your code here builds on the foundation listed below, it'll be injected into a <body> element. +

    +

    + Some tips: +

    +
      +
    • Use type="module" when writing scripts.
    • +
    +

    + + + + + +

    +

    + Add dependencies for: +

    +
    + +
    +

    + + + +

    +
    +
    +
    + + +
    +

    Foundation

    +

    + The default configuration for constituents includes the following elements which are loaded automatically: +

    +
      +
    • orchestrator / input
    • +
    • orchestrator / output
    • +
    • orchestrator / process-tracks (process on launch)
    • +
    • processor / metadata
    • +
    +

    + Besides this the foundation provides most other elements preconfigured. These are lazy loaded so you do need to call the method in order to load it. For example: +

    +
    {{-
    +      "import defaults from \"@common/constituents/default/config.js\"\ndefaults.lazy.engine.audio()"
    +    }}
    +
    +
    diff --git a/src/themes/loader/constituent/s/index.vto b/src/themes/loader/constituent/s/index.vto new file mode 100644 index 000000000..035931002 --- /dev/null +++ b/src/themes/loader/constituent/s/index.vto @@ -0,0 +1,7 @@ +--- +layout: layouts/constituent.vto +base: ../../../../ + +styles: + - styles/base.css +--- diff --git a/src/themes/webamp/browser/index.js b/src/themes/webamp/browser/index.js index aa3f6dda6..da0599bf3 100644 --- a/src/themes/webamp/browser/index.js +++ b/src/themes/webamp/browser/index.js @@ -1,13 +1,16 @@ import defaults from "@common/constituents/default/config.js"; import BrowserElement from "@themes/webamp/browser/element.js"; +const queue = defaults.lazy.engine.queue(); +const search = defaults.lazy.processor.search(); + +defaults.lazy.orchestrator.queueTracks(); +defaults.lazy.orchestrator.searchTracks(); + const el = new BrowserElement(); el.setAttribute("input-selector", defaults.orchestrator.input.selector); el.setAttribute("output-selector", defaults.orchestrator.output.selector); -el.setAttribute("queue-engine-selector", defaults.engine.queue.selector); -el.setAttribute( - "search-processor-selector", - defaults.processor.search.selector, -); +el.setAttribute("queue-engine-selector", queue.selector); +el.setAttribute("search-processor-selector", search.selector); document.querySelector("#placeholder")?.replaceWith(el); diff --git a/src/themes/webamp/configurators/input/index.js b/src/themes/webamp/configurators/input/index.js index 2e58102c8..1d8f68e27 100644 --- a/src/themes/webamp/configurators/input/index.js +++ b/src/themes/webamp/configurators/input/index.js @@ -1,12 +1,11 @@ import defaults from "@common/constituents/default/config.js"; import InputConfigElement from "@themes/webamp/configurators/input/element.js"; +const sources = defaults.lazy.orchestrator.sources(); + const el = new InputConfigElement(); el.setAttribute("input-selector", defaults.orchestrator.input.selector); el.setAttribute("output-selector", defaults.orchestrator.output.selector); -el.setAttribute( - "sources-orchestrator-selector", - defaults.orchestrator.sources.selector, -); +el.setAttribute("sources-orchestrator-selector", sources.selector); document.querySelector("#placeholder")?.replaceWith(el); From cb4c4cb81f5753abfaf51531b9e93b884f8d6c71 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 28 Jan 2026 15:08:11 +0100 Subject: [PATCH 207/244] docs: add contributing.md & update readme --- AGENTS.md | 18 ------------------ CONTRIBUTING.md | 7 +++++++ README.md | 39 +++++++++++++++++++++++++++++++++++---- 3 files changed, 42 insertions(+), 22 deletions(-) delete mode 100644 AGENTS.md create mode 100644 CONTRIBUTING.md diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index bc43a81ab..000000000 --- a/AGENTS.md +++ /dev/null @@ -1,18 +0,0 @@ -# Agent guide - -Before you write any code, read: - -- The **why** document: `src/index.vto` - (there might be a compiled version `dist/index.html`, if so prefer that) -- The **how** document: `docs/ARCHITECTURE.md` - - -## Your responsibilities - -As an agent, your job is to: -- Keep the architecture described in `docs/ARCHITECTURE.md` intact. -- Preserve the overall goals and constraints described in the 'why' document. - -If you are unsure how to implement something: -- Prefer a small, clean, testable implementation that matches the intent. -- Do **not** invent new architecture without clear justification in comments. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..cc17d5a86 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Welcome 👋 + +Thanks for considering to contribute! To get started, take a look at the following items: + +- **`README.md`**: Also in the root of this project, along side this file, for some general context and build instructions. +- **Explainer web page**: Important context, explains all non-technical aspects. You can either check out the [last deployed version](https://elements.diffuse.sh/latest/), or build the version located in this repo (`deno run build` → `dist/index.html`, or alternatively: `deno run serve` and open `http://localhost:3000`) +- **Architecture docs**: Another important piece, talks about code and file/directory organisation. Located in `docs/`. diff --git a/README.md b/README.md index cb963a288..099295ee5 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,34 @@ Diffuse -**Construct your audio player**, make a music player by composing web components. +**Construct your audio player**, make a music player and browser by composing web components. Diffuse provides a range of custom elements: audio input, data output, metadata & artwork processing, audio playback, a queue system, and much more. -It also features themes which are prebuilt compositions of those elements. +It is also aimed at consumers, providing themes and constituents, preconfigured component compositions; while simultaneously trying to be [malleable software](https://www.inkandswitch.com/essay/malleable-software/). -More information on the [website](https://elements.diffuse.sh). +More information on the [website](https://elements.diffuse.sh/latest/). + + +## Developer usage + +You can either consume the Diffuse library via the [deployed instance](https://elements.diffuse.sh/latest/) (the listed elements link to Javascript files) or the [Javascript package](https://jsr.io/@toko/diffuse). + +From there you can use the custom elements as with any other custom DOM element, by writing HTML or creating a `Class` instance. + +```html + + + +``` + +```js +import QueueEngine from "@toko/diffuse/components/engine/queue/element.js" + +const queue = new QueueEngine() +queue.setAttribute("group", "constituents") + +document.body.append(queue) +```` ## Build it yourself @@ -15,5 +37,14 @@ Install [deno](https://docs.deno.com/runtime/getting_started/installation/). ```shell deno run gen:defs:types -deno run build +deno run build # or deno run build ``` + +Diffuse is built with: +- [Deno](https://deno.com) +- Web components (custom elements) +- Web workers (also: shared + service workers) +- Signals (currently alien-signals, but hopefully [TC39](https://github.com/tc39/proposal-signals) in the future) +- [`lit-html`](https://lit.dev/docs/libraries/standalone-templates/) +- [`music-metadata`](https://github.com/Borewit/music-metadata) +- Lume & ESBuild From d7a2a90849ed3f725fc04da4d847faee0aa59379 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 28 Jan 2026 22:55:24 +0100 Subject: [PATCH 208/244] feat: output managers should be lazy --- src/components/configurator/output/element.js | 23 +++++++++++++++---- src/components/output/common.js | 15 ++++++++---- .../output/polymorphic/indexed-db/element.js | 2 +- src/components/output/types.d.ts | 2 +- src/components/transformer/output/base.js | 2 +- src/testing/output.js | 14 +++++++++++ src/testing/output.vto | 12 ++++++++++ 7 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 src/testing/output.js create mode 100644 src/testing/output.vto diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index d299e714b..2bb0a8089 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -1,5 +1,5 @@ import { DiffuseElement } from "@common/element.js"; -import { computed, signal } from "@common/signal.js"; +import { batch, computed, signal } from "@common/signal.js"; /** * @import {Track} from "@definitions/types.d.ts" @@ -60,9 +60,9 @@ class OutputConfigurator extends DiffuseElement { if (out) return out.tracks.state(); const def = this.#defaultOutput.value; - if (def) def.tracks.state(); + if (def) return def.tracks.state(); - return def === undefined ? "loading" : "loaded"; + return this.#setupFinished.value ? "loaded" : "sleeping"; }), }, }; @@ -85,6 +85,8 @@ class OutputConfigurator extends DiffuseElement { /** @type {Output | null | undefined} */ (undefined), ); + #setupFinished = signal(false); + // LIFECYCLE /** @@ -93,10 +95,21 @@ class OutputConfigurator extends DiffuseElement { async connectedCallback() { super.connectedCallback(); + /** @type {Output | null | undefined} */ + let defaultOutput = undefined; + const def_ault = this.getAttribute("default"); - if (def_ault) this.#defaultOutput.value = await this.#findOutput(def_ault); + if (def_ault) { + defaultOutput = await this.#findOutput(def_ault); + } - this.#selectedOutput.value = await this.#findSelectedOutput(); + const selectedOutput = await this.#findSelectedOutput(); + + batch(() => { + this.#defaultOutput.value = defaultOutput; + this.#selectedOutput.value = selectedOutput; + this.#setupFinished.value = true; + }); } // MISC diff --git a/src/components/output/common.js b/src/components/output/common.js index cdd7b72ff..aec7feeba 100644 --- a/src/components/output/common.js +++ b/src/components/output/common.js @@ -1,4 +1,4 @@ -import { effect, signal } from "@common/signal.js"; +import { computed, effect, signal, untracked } from "@common/signal.js"; /** * @import {OutputManager, OutputManagerProperties} from "./types.d.ts" @@ -11,21 +11,26 @@ import { effect, signal } from "@common/signal.js"; */ export function outputManager({ init, tracks }) { const t = signal(/** @type {Tracks} */ (tracks.empty())); - const ts = signal(/** @type {"loading" | "loaded"} */ ("loading")); + const ts = signal( + /** @type {"loading" | "loaded" | "sleeping"} */ ("sleeping"), + ); async function loadTracks() { if (init && (await init()) === false) return; + ts.value = "loading"; t.value = await tracks.get(); ts.value = "loaded"; } - effect(loadTracks); - return { tracks: { - collection: t.get, + collection: computed(() => { + if (untracked(() => ts.value === "sleeping")) loadTracks(); + return t.value; + }), reload: loadTracks, save: async (newTracks) => { + if (untracked(() => ts.value === "sleeping")) loadTracks(); t.value = newTracks; await tracks.put(newTracks); }, diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index 0e8361754..f129baf1c 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -28,7 +28,7 @@ class IndexedDBOutput extends BroadcastableDiffuseElement { /** @type {OutputManager} */ this.#manager = outputManager({ - init: this.whenConnected.bind(this), + init: () => this.whenConnected(), tracks: { empty: () => undefined, get: () => this.#get("tracks"), diff --git a/src/components/output/types.d.ts b/src/components/output/types.d.ts index 2268c662f..219488d14 100644 --- a/src/components/output/types.d.ts +++ b/src/components/output/types.d.ts @@ -18,7 +18,7 @@ export type OutputManager = { collection: SignalReader; reload: () => Promise; save: (tracks: Tracks) => Promise; - state: SignalReader<"loading" | "loaded">; + state: SignalReader<"loading" | "loaded" | "sleeping">; }; }; diff --git a/src/components/transformer/output/base.js b/src/components/transformer/output/base.js index 32ddfa2a1..c0db476ea 100644 --- a/src/components/transformer/output/base.js +++ b/src/components/transformer/output/base.js @@ -55,7 +55,7 @@ export class OutputTransformer extends DiffuseElement { await this.output.signal()?.tracks.save(newTracks); }, state: computed(() => { - return this.output.signal()?.tracks.state() ?? "loading"; + return this.output.signal()?.tracks.state() ?? "sleeping"; }), }, }; diff --git a/src/testing/output.js b/src/testing/output.js new file mode 100644 index 000000000..614bb16ce --- /dev/null +++ b/src/testing/output.js @@ -0,0 +1,14 @@ +import Output from "@components/configurator/output/element.js"; +import { effect } from "@common/signal.js"; + +const output = new Output(); + +document.body.append(output); + +effect(() => { + console.log(output.tracks.state()); +}); + +effect(() => { + console.log(output.tracks.collection()); +}); diff --git a/src/testing/output.vto b/src/testing/output.vto new file mode 100644 index 000000000..d31125d1e --- /dev/null +++ b/src/testing/output.vto @@ -0,0 +1,12 @@ +--- +layout: layouts/diffuse.vto + +base: "../../" + +styles: + - styles/base.css + - styles/diffuse/page.css + +scripts: + - testing/output.js +--- From 2a86b64d9928ec2b9ba9f67fd7adfbc606056117 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 29 Jan 2026 18:14:19 +0100 Subject: [PATCH 209/244] feat: repeat & shuffle buttons for artwork controller --- _config.ts | 5 ++ deno.jsonc | 2 +- .../blur/artwork-controller/element.css | 48 +++++++++++++- src/themes/blur/artwork-controller/element.js | 63 +++++++++++++------ src/themes/blur/artwork-controller/index.js | 1 + src/themes/blur/artwork-controller/index.vto | 1 + 6 files changed, 96 insertions(+), 24 deletions(-) diff --git a/_config.ts b/_config.ts index 30e82db98..b013505ab 100644 --- a/_config.ts +++ b/_config.ts @@ -115,6 +115,11 @@ phosphor("fill/Phosphor-Fill.svg"); phosphor("fill/Phosphor-Fill.ttf"); phosphor("fill/Phosphor-Fill.woff"); phosphor("fill/Phosphor-Fill.woff2"); +phosphor("bold/style.css"); +phosphor("bold/Phosphor-Bold.svg"); +phosphor("bold/Phosphor-Bold.ttf"); +phosphor("bold/Phosphor-Bold.woff"); +phosphor("bold/Phosphor-Bold.woff2"); // MISC diff --git a/deno.jsonc b/deno.jsonc index 5c6064291..c23768425 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -41,12 +41,12 @@ "@common/": "./src/common/", "@components/": "./src/components/", "@definitions/": "./src/definitions/", - "@dotenv-run/esbuild": "npm:@dotenv-run/esbuild@^1.5.1", "@styles/": "./src/styles/", "@themes/": "./src/themes/", // Build "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.3.1", + "@dotenv-run/esbuild": "npm:@dotenv-run/esbuild@^1.5.1", "@std/fs": "jsr:@std/fs@^1.0.19", "@std/path": "jsr:@std/path@^1.1.2", "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css index eb8f3e377..2813f9ea6 100644 --- a/src/themes/blur/artwork-controller/element.css +++ b/src/themes/blur/artwork-controller/element.css @@ -113,6 +113,38 @@ progress[value]::-moz-progress-bar { color: rgba(0, 0, 0, 0.6); } +/* Button row */ + +.button-row { + display: inline-flex; + gap: 1px; + + button { + background: color-mix(in oklch, currentColor 7.5%, transparent); + border: 0; + color: color-mix(in oklch, currentColor 50%, transparent); + cursor: pointer; + font-size: var(--fs-base); + font-size: calc(var(--fs-base) * 0.9); + padding: calc(var(--space-2xs) + 1px) var(--space-sm) var(--space-2xs); + + &[data-enabled="t"] { + background-color: color-mix(in oklch, currentColor 25%, transparent); + color: currentColor; + } + } + + button:first-child { + border-bottom-left-radius: var(--radius-xl); + border-top-left-radius: var(--radius-xl); + } + + button:last-child { + border-bottom-right-radius: var(--radius-xl); + border-top-right-radius: var(--radius-xl); + } +} + /* Now playing */ cite { @@ -189,7 +221,7 @@ cite { /* Volume */ -footer { +.volume { align-items: center; display: flex; font-size: var(--fs-xs); @@ -197,16 +229,26 @@ footer { justify-content: space-between; } -footer .progress-bar { +.volume .progress-bar { cursor: pointer; flex: 1; padding: var(--space-2xs) 0; } -footer i { +.volume i { cursor: pointer; } +/* Footer */ + +footer { + align-items: center; + display: flex; + gap: var(--space-2xs); + justify-content: center; + margin-top: var(--space-sm); +} + /* Gradient blur */ .gradient-blur { diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index f5c282848..0b7cf503d 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -22,22 +22,13 @@ import { computed, signal, untracked } from "@common/signal.js"; * @import AudioEngine from "@components/engine/audio/element.js" * @import QueueEngine from "@components/engine/queue/element.js" * @import ArtworkProcessor from "@components/processor/artwork/element.js" + * @import RepeatShuffleOrchestrator from "@components/orchestrator/repeat-shuffle/element.js" */ class ArtworkController extends DiffuseElement { constructor() { super(); this.attachShadow({ mode: "open" }); - - // Bind event handlers to self - this.artworkLoaded = this.artworkLoaded.bind(this); - this.fullVolume = this.fullVolume.bind(this); - this.mute = this.mute.bind(this); - this.next = this.next.bind(this); - this.playPause = this.playPause.bind(this); - this.previous = this.previous.bind(this); - this.seek = this.seek.bind(this); - this.setVolume = this.setVolume.bind(this); } // VARIABLES @@ -67,6 +58,7 @@ class ArtworkController extends DiffuseElement { $audio = signal(/** @type {AudioEngine | undefined} */ (undefined)); $input = signal(/** @type {InputElement | undefined} */ (undefined)); $queue = signal(/** @type {QueueEngine | undefined} */ (undefined)); + $repeatShuffle = signal(/** @type {RepeatShuffleOrchestrator | undefined} */ (undefined)); // SIGNALS - COMPUTED @@ -99,12 +91,16 @@ class ArtworkController extends DiffuseElement { /** @type {QueueEngine} */ const queue = query(this, "queue-engine-selector"); + /** @type {RepeatShuffleOrchestrator} */ + const repeatShuffle = query(this, "repeat-shuffle-orchestrator-selector"); + this.$artwork.value = artwork; this.$audio.value = audio; this.$input.value = input; this.$queue.value = queue; + this.$repeatShuffle.value = repeatShuffle; - whenElementsDefined({ audio, artwork, input, queue }).then(() => { + whenElementsDefined({ audio, artwork, input, queue, repeatShuffle }).then(() => { // Changed artwork based on active queue item. const debouncedChangeArtwork = debounce( 1000, @@ -288,7 +284,7 @@ class ArtworkController extends DiffuseElement { /** * @param {Event} event */ - artworkLoaded(event) { + artworkLoaded = (event) => { if (!(event.target instanceof HTMLImageElement)) return; const hash = event.target.getAttribute("data-hash"); @@ -312,19 +308,19 @@ class ArtworkController extends DiffuseElement { }; } - fullVolume() { + fullVolume = () => { this.$audio.value?.adjustVolume({ volume: 1 }); } - mute() { + mute = () => { this.$audio.value?.adjustVolume({ volume: 0 }); } - next() { + next = () => { this.$queue.value?.shift(); } - playPause() { + playPause = () => { const audioId = this.$queue.value?.now()?.id; if (this.#isPlaying() && audioId) { @@ -334,14 +330,14 @@ class ArtworkController extends DiffuseElement { } } - previous() { + previous = () => { this.$queue.value?.unshift(); } /** * @param {MouseEvent} event */ - seek(event) { + seek = (event) => { const target = event.target ? /** @type {HTMLProgressElement} */ (event.target) : null; @@ -354,7 +350,7 @@ class ArtworkController extends DiffuseElement { /** * @param {MouseEvent} event */ - setVolume(event) { + setVolume = (event) => { const target = event.target ? /** @type {HTMLProgressElement} */ (event.target) : null; @@ -363,6 +359,18 @@ class ArtworkController extends DiffuseElement { this.$audio.value?.adjustVolume({ volume: percentage }); } + toggleRepeat = () => { + const rs = this.$repeatShuffle.value + if (!rs) return + rs.setRepeat(!rs.repeat()) + } + + toggleShuffle = () => { + const rs = this.$repeatShuffle.value + if (!rs) return + rs.setShuffle(!rs.shuffle()) + } + // RENDER /** @@ -396,6 +404,7 @@ class ArtworkController extends DiffuseElement { }); return html` + @@ -502,7 +511,7 @@ class ArtworkController extends DiffuseElement { -
    +
    +
    + +
    +
    + + + +
    diff --git a/src/themes/blur/artwork-controller/index.js b/src/themes/blur/artwork-controller/index.js index 0ede11ac3..e1c8d3849 100644 --- a/src/themes/blur/artwork-controller/index.js +++ b/src/themes/blur/artwork-controller/index.js @@ -21,6 +21,7 @@ dac.setAttribute("artwork-processor-selector", art.selector); dac.setAttribute("audio-engine-selector", aud.selector); dac.setAttribute("input-selector", defaults.orchestrator.input.selector); dac.setAttribute("queue-engine-selector", queue.selector); +dac.setAttribute("repeat-shuffle-orchestrator-selector", rso.selector); // Add to DOM document.body.append(dac); diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto index 73310b3db..8cf07026c 100644 --- a/src/themes/blur/artwork-controller/index.vto +++ b/src/themes/blur/artwork-controller/index.vto @@ -3,6 +3,7 @@ layout: layouts/constituent.vto base: ../../../ styles: + - styles/vendor/phosphor/bold/style.css - styles/vendor/phosphor/fill/style.css - styles/base.css From c0338fd974d75da6850d9ed705bcd7ef1ec5c8fe Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 29 Jan 2026 18:54:58 +0100 Subject: [PATCH 210/244] fix: don't make opensubsonic servers download the whole audio file --- src/components/input/opensubsonic/class.js | 20 ++++++++++++++++++++ src/components/input/opensubsonic/common.js | 4 ++-- src/components/input/opensubsonic/types.d.ts | 18 ++++++++++++++++++ src/components/input/opensubsonic/worker.js | 2 +- 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/components/input/opensubsonic/class.js diff --git a/src/components/input/opensubsonic/class.js b/src/components/input/opensubsonic/class.js new file mode 100644 index 000000000..e35395d8b --- /dev/null +++ b/src/components/input/opensubsonic/class.js @@ -0,0 +1,20 @@ +import { SubsonicAPI } from "subsonic-api"; + +export class SubsonicAPIWithoutFetch extends SubsonicAPI { + /** + * @param {import("./types.d.ts").SubsonicConfig} config + */ + constructor(config) { + super({ + ...config, + fetch: async (path, params) => { + if (path.toString().includes("/rest/stream.view")) { + return await fetch(path, { ...params, method: "HEAD" }); + } else { + return await fetch(path, params); + } + }, + }); + this.config = config; + } +} diff --git a/src/components/input/opensubsonic/common.js b/src/components/input/opensubsonic/common.js index ebb4ec203..9531f46fc 100644 --- a/src/components/input/opensubsonic/common.js +++ b/src/components/input/opensubsonic/common.js @@ -1,8 +1,8 @@ -import { SubsonicAPI } from "subsonic-api"; import * as URI from "uri-js"; import QS from "query-string"; import { SCHEME } from "./constants.js"; +import { SubsonicAPIWithoutFetch } from "./class.js"; /** * @import {Child} from "subsonic-api" @@ -65,7 +65,7 @@ export async function consultServer(server) { * @param {Server} server */ export function createClient(server) { - return new SubsonicAPI({ + return new SubsonicAPIWithoutFetch({ url: `http${server.tls ? "s" : ""}://${server.host}`, auth: server.apiKey ? { apiKey: URI.unescapeComponent(server.apiKey) } : { username: URI.unescapeComponent(server.username || ""), diff --git a/src/components/input/opensubsonic/types.d.ts b/src/components/input/opensubsonic/types.d.ts index 457b2639d..94be2a0ea 100644 --- a/src/components/input/opensubsonic/types.d.ts +++ b/src/components/input/opensubsonic/types.d.ts @@ -6,3 +6,21 @@ export type Server = { tls: boolean; username?: string; }; + +export interface SubsonicConfig { + /** The base URL of the Subsonic server, e.g., https://demo.navidrome.org. */ + url: string; + + /** The authentication details to use when connecting to the server. */ + auth: + | { + username: string; + password: string; + apiKey?: never; + } + | { + username?: never; + password?: never; + apiKey: string; + }; +} diff --git a/src/components/input/opensubsonic/worker.js b/src/components/input/opensubsonic/worker.js index ab45d6078..890929557 100644 --- a/src/components/input/opensubsonic/worker.js +++ b/src/components/input/opensubsonic/worker.js @@ -265,7 +265,7 @@ export async function resolve({ uri }) { // const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; const url = await client - .download({ + .stream({ id: songId, format: "raw", }) From 8d364476d0ed87594891b70f6aa4d781083f696d Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 29 Jan 2026 21:52:16 +0100 Subject: [PATCH 211/244] fix: improve webamp playlist behaviour --- src/themes/webamp/index.js | 42 ++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 946a970f8..d80eeebba 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -43,9 +43,11 @@ globalThis.output = output; // 📡 //////////////////////////////////////////// -const $playlist = signal(/** @type {Array} */ ([]), { - eager: true, -}); +/** @type {Record} */ +const index = {}; + +/** @type {boolean} */ +let initiatedPlaylist = false; //////////////////////////////////////////// // ⚡️ @@ -89,23 +91,37 @@ amp.media.loadFromUrl = loadOverride.bind(amp.media); * Whenever the queue changes update the playlist. */ effect(() => { + const past = untracked(() => queue.past()); + const now = untracked(() => queue.now()); const future = queue.future(); + const list = [...past, ...(now ? [now] : []), ...future]; + + /** @type {Record} */ + const newIdx = {}; - const playlist = [ - ...future, - ]; + /** @type {Record} */ + const idMap = {}; - const lengthLastPlaylist = untracked($playlist.get).length; - const tracksToAdd = playlist.slice( - 0, - Math.max(0, playlist.length - lengthLastPlaylist), - ); + list.forEach((item) => { + newIdx[item.id] = (newIdx[item.id] ?? 0) + 1; + idMap[item.id] = item; + }); - $playlist.value = playlist; + /** @type {Track[]} */ + const tracksToAdd = []; + + Object.entries(newIdx).forEach(([id, n]) => { + const x = index[id] ?? 0; + if (n > x) { + tracksToAdd.push(idMap[id]); + index[id] = x + 1; + } + }); tracksToAdd.forEach((t) => ampElement.addTrack(t)); - if (lengthLastPlaylist === 0 && playlist.length) { + if (!initiatedPlaylist && tracksToAdd.length) { + initiatedPlaylist = true; amp.store.dispatch({ type: "BUFFER_TRACK", id: 0 }); } }); From 574bd7c24e66e768053f393ee2c34013d71fc051 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 29 Jan 2026 23:26:46 +0100 Subject: [PATCH 212/244] feat: add a little link on index page that points at external chronicle page --- src/index.vto | 3 +++ src/styles/diffuse/page.css | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/index.vto b/src/index.vto index 309ecad86..7718349bb 100644 --- a/src/index.vto +++ b/src/index.vto @@ -205,6 +205,9 @@ definitions:

    {{ await comp.diffuse.logo() }} + + +

    Construct your audio player. diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index d817fe2c4..831844059 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -170,6 +170,13 @@ small { gap: var(--space-2xs); } +.chronicle-link { + font-size: var(--fs-sm); + opacity: 0.55; + padding: var(--space-3xs); + text-decoration: none; +} + .todo { font-size: var(--fs-sm); font-weight: 600; @@ -243,13 +250,16 @@ ul li::marker { */ .diffuse-logo { + align-items: center; + display: flex; font-size: var(--fs-lg); + justify-content: space-between; margin: var(--space-lg) 0 var(--space-xl); - padding-top: var(--space-2xs); svg { fill: oklch(from var(--bg-color) calc(l - 0.5) c h); opacity: 0.2; + padding: var(--space-3xs) 0; width: 4.25em; @media (prefers-color-scheme: dark) { From b3ffdb0eb7488bbe2fe57bdd7729e75ea8998999 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 30 Jan 2026 17:02:07 +0100 Subject: [PATCH 213/244] feat: upgrade to latest link --- src/index.js | 27 +++++++++++++++++++++++++++ src/index.vto | 11 ++++++++--- src/styles/diffuse/page.css | 31 ++++++++++++++++++++++++------- 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/src/index.js b/src/index.js index 5482108a9..2ac4748c8 100644 --- a/src/index.js +++ b/src/index.js @@ -58,3 +58,30 @@ async function addSampleContent() { } addDemoBtn?.addEventListener("click", addSampleContent); + +// Version upgrade (only works with `diffuse-artifacts` deployments) +if (document.location.hostname.endsWith("diffuse.sh")) { + document.querySelectorAll("#status").forEach(async (status) => { + const versionOrCid = + document.location.pathname.slice(1).split("/")[0]?.toLowerCase() ?? ""; + const usesCid = versionOrCid.startsWith("bafy"); + const { default: artifacts } = await import( + `${document.location.origin}/artifacts.json`, + { with: { type: "json" } } + ); + + // Latest is located at the end + const lastArtifact = Object.values(artifacts).reverse()[0]; + + // Check if using latest + const isLatest = usesCid + ? versionOrCid === lastArtifact.cid + : versionOrCid === lastArtifact.version; + + // If using CID, append `/hash/` to href + status.querySelectorAll(`[href="/latest/"]`).forEach((a) => { + if (usesCid) a.setAttribute("href", "/latest/hash/"); + if (!isLatest) a.classList.remove("hidden"); + }); + }); +} diff --git a/src/index.vto b/src/index.vto index 7718349bb..3de9b2b70 100644 --- a/src/index.vto +++ b/src/index.vto @@ -205,9 +205,14 @@ definitions:

    {{ await comp.diffuse.logo() }} - - - + + + + + +

    Construct your audio player. diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 831844059..30133f142 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -170,13 +170,6 @@ small { gap: var(--space-2xs); } -.chronicle-link { - font-size: var(--fs-sm); - opacity: 0.55; - padding: var(--space-3xs); - text-decoration: none; -} - .todo { font-size: var(--fs-sm); font-weight: 600; @@ -269,6 +262,30 @@ ul li::marker { } } +/** + * Status + */ +#status { + align-items: center; + display: flex; + font-size: var(--fs-sm); + gap: var(--space-3xs); + + a { + display: inline-block; + opacity: 0.55; + padding: var(--space-3xs); + text-decoration: none; + transition-duration: 250ms; + transition-property: opacity; + } + + a.hidden { + opacity: 0; + pointer-events: none; + } +} + /** * 😶‍🌫️ */ From c2ba18ed1ac4281d6fa13f8ea2ba2cadbfca1d2e Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 30 Jan 2026 17:17:51 +0100 Subject: [PATCH 214/244] fix: improve index page responsivity --- src/styles/diffuse/page.css | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 30133f142..f3b5d71ec 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -19,8 +19,12 @@ ol { } header { - display: flex; - gap: var(--space-lg); + display: block; + + @media (min-width: 42rem) { + display: flex; + gap: var(--space-lg); + } } header, @@ -35,9 +39,13 @@ main { } .columns { - display: flex; - flex-wrap: wrap; - gap: 0 var(--space-3xl); + display: block; + + @media (min-width: 42rem) { + display: flex; + flex-wrap: wrap; + gap: 0 var(--space-3xl); + } } ul.columns { From c2d2c5c8883d0ce7723f0dafe18a1b5b31097242 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 30 Jan 2026 18:16:06 +0100 Subject: [PATCH 215/244] feat: loading animation for version detector --- src/index.js | 12 ++++++++++++ src/index.vto | 5 +++-- src/styles/diffuse/page.css | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 2ac4748c8..c2f7a7880 100644 --- a/src/index.js +++ b/src/index.js @@ -78,10 +78,22 @@ if (document.location.hostname.endsWith("diffuse.sh")) { ? versionOrCid === lastArtifact.cid : versionOrCid === lastArtifact.version; + // Remove loading animation + status.querySelectorAll(".ph-spinner").forEach((icon) => { + icon.parentElement?.classList.add("hidden"); + icon.parentElement?.classList.remove("animate-spin"); + icon.classList.remove("ph-spinner"); + icon.classList.add("ph-arrow-fat-lines-up"); + }); + // If using CID, append `/hash/` to href status.querySelectorAll(`[href="/latest/"]`).forEach((a) => { if (usesCid) a.setAttribute("href", "/latest/hash/"); if (!isLatest) a.classList.remove("hidden"); }); }); +} else { + document.querySelectorAll("#status").forEach((status) => { + status.remove(); + }); } diff --git a/src/index.vto b/src/index.vto index 3de9b2b70..0ea112b4a 100644 --- a/src/index.vto +++ b/src/index.vto @@ -4,6 +4,7 @@ layout: layouts/diffuse.vto styles: - styles/base.css - styles/diffuse/page.css + - styles/vendor/phosphor/bold/style.css - styles/vendor/phosphor/fill/style.css scripts: @@ -206,8 +207,8 @@ definitions:

    {{ await comp.diffuse.logo() }} - + diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index f3b5d71ec..15e504762 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -292,6 +292,11 @@ ul li::marker { opacity: 0; pointer-events: none; } + + .ph-spinner { + position: relative; + top: 1px; + } } /** From 00a775fa84e7ab01e118d0e7697b54aac2ab7b42 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 30 Jan 2026 18:23:06 +0100 Subject: [PATCH 216/244] fix: loading animation fade out --- src/index.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index c2f7a7880..868b0e590 100644 --- a/src/index.js +++ b/src/index.js @@ -81,15 +81,22 @@ if (document.location.hostname.endsWith("diffuse.sh")) { // Remove loading animation status.querySelectorAll(".ph-spinner").forEach((icon) => { icon.parentElement?.classList.add("hidden"); - icon.parentElement?.classList.remove("animate-spin"); - icon.classList.remove("ph-spinner"); - icon.classList.add("ph-arrow-fat-lines-up"); + + setTimeout(() => { + icon.parentElement?.classList.remove("animate-spin"); + icon.classList.remove("ph-spinner"); + icon.classList.add("ph-arrow-fat-lines-up"); + }, 500); }); // If using CID, append `/hash/` to href status.querySelectorAll(`[href="/latest/"]`).forEach((a) => { if (usesCid) a.setAttribute("href", "/latest/hash/"); - if (!isLatest) a.classList.remove("hidden"); + if (!isLatest) { + setTimeout(() => { + a.classList.remove("hidden"); + }, 750); + } }); }); } else { From 89496269d2b62c9b326d3555d5ccb2dfb50c7912 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 3 Feb 2026 16:16:27 +0100 Subject: [PATCH 217/244] chore: various constituents loader work + align definitions --- deno.jsonc | 6 +- src/components/output/common.js | 2 +- src/definitions/index.ts | 3 +- src/definitions/output/constituent.json | 22 +++ .../output/{tracks.json => track.json} | 2 +- src/definitions/types.d.ts | 6 +- src/index.vto | 10 +- src/styles/diffuse/colors.css | 8 +- src/styles/diffuse/page.css | 33 ++++- src/themes/blur/artwork-controller/index.js | 1 - src/themes/loader/constituent/index.vto | 125 +++++++++++++----- 11 files changed, 169 insertions(+), 49 deletions(-) create mode 100644 src/definitions/output/constituent.json rename src/definitions/output/{tracks.json => track.json} (99%) diff --git a/deno.jsonc b/deno.jsonc index c23768425..699480956 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -4,7 +4,9 @@ "vendor": true, "imports": { "98.css": "npm:98.css@^0.1.21", - "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.6", + "@atcute/cbor": "npm:@atcute/cbor@^2.3.0", + "@atcute/cid": "npm:@atcute/cid@^2.4.0", + "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.7", "@automerge/automerge": "npm:@automerge/automerge@^3.2.3", "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", @@ -45,7 +47,7 @@ "@themes/": "./src/themes/", // Build - "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.3.1", + "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.5.3", "@dotenv-run/esbuild": "npm:@dotenv-run/esbuild@^1.5.1", "@std/fs": "jsr:@std/fs@^1.0.19", "@std/path": "jsr:@std/path@^1.1.2", diff --git a/src/components/output/common.js b/src/components/output/common.js index aec7feeba..1e2b610e0 100644 --- a/src/components/output/common.js +++ b/src/components/output/common.js @@ -1,4 +1,4 @@ -import { computed, effect, signal, untracked } from "@common/signal.js"; +import { computed, signal, untracked } from "@common/signal.js"; /** * @import {OutputManager, OutputManagerProperties} from "./types.d.ts" diff --git a/src/definitions/index.ts b/src/definitions/index.ts index d2b5362ff..2b699ab08 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1 +1,2 @@ -export * as ShDiffuseOutputTracks from "./types/sh/diffuse/output/tracks.js"; +export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.js"; +export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.js"; diff --git a/src/definitions/output/constituent.json b/src/definitions/output/constituent.json new file mode 100644 index 000000000..a464b882e --- /dev/null +++ b/src/definitions/output/constituent.json @@ -0,0 +1,22 @@ +{ + "lexicon": 1, + "id": "sh.diffuse.output.constituent", + "defs": { + "main": { + "type": "record", + "record": { + "type": "object", + "required": ["cid", "html", "label"], + "properties": { + "cid": { + "type": "string", + "description": "A DASL CID representing the DRISL-encoded HTML" + }, + "description": { "type": "string" }, + "html": { "type": "string", "description": "The constituent HTML" }, + "label": { "type": "string" } + } + } + } + } +} diff --git a/src/definitions/output/tracks.json b/src/definitions/output/track.json similarity index 99% rename from src/definitions/output/tracks.json rename to src/definitions/output/track.json index 53a43f333..4bfbc8399 100644 --- a/src/definitions/output/tracks.json +++ b/src/definitions/output/track.json @@ -1,6 +1,6 @@ { "lexicon": 1, - "id": "sh.diffuse.output.tracks", + "id": "sh.diffuse.output.track", "defs": { "main": { "type": "record", diff --git a/src/definitions/types.d.ts b/src/definitions/types.d.ts index 076b7762a..98f24e0f8 100644 --- a/src/definitions/types.d.ts +++ b/src/definitions/types.d.ts @@ -1,5 +1,9 @@ +export type { + Main as Constituent, +} from "./types/sh/diffuse/output/constituent.ts"; + export type { Main as Track, Stats as TrackStats, Tags as TrackTags, -} from "./types/sh/diffuse/output/tracks.ts"; +} from "./types/sh/diffuse/output/track.ts"; diff --git a/src/index.vto b/src/index.vto index 0ea112b4a..899c8259e 100644 --- a/src/index.vto +++ b/src/index.vto @@ -37,7 +37,7 @@ constituents: - url: "themes/loader/constituent/" title: "Loader" desc: > - **A constituent that loads other constituents!** Load a constituent from a URL, text snippet or from your user data output. + **Bring in other constituents!** Load a constituent from a URL, text snippet or from your user data output. todo: true - url: "themes/webamp/browser/" title: "Webamp / Browser" @@ -178,8 +178,8 @@ definitions: - title: "Output / Constituent" desc: > Custom constituents to keep around. - todo: true - - title: "Output / Favourites" + url: "definitions/output/constituent.json" + - title: "Output / Favourite" desc: > Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified using the audio's title and artist. todo: true @@ -195,10 +195,10 @@ definitions: desc: > Custom theme to keep around. todo: true - - title: "Output / Tracks" + - title: "Output / Track" desc: > Represents audio that can be played, or a placeholder for a source of tracks. Contains a URI that will resolve to the audio. This object may be cached if convenient. - url: "definitions/output/tracks.json" + url: "definitions/output/track.json" --- diff --git a/src/styles/diffuse/colors.css b/src/styles/diffuse/colors.css index 58cde8b42..93edd7dc6 100644 --- a/src/styles/diffuse/colors.css +++ b/src/styles/diffuse/colors.css @@ -19,13 +19,19 @@ --bg-color: var(--color-2); --text-color: var(--color-1); + + --code-color: oklch(from var(--bg-color) calc(l - 0.0375) c h / 1); + --form-color: oklch(from var(--bg-color) calc(l - 0.075) c h / 1); } @media (prefers-color-scheme: dark) { :root { + --accent: #9e86b8; + --bg-color: var(--color-3); --text-color: var(--color-2); - --accent: #9e86b8; + --code-color: oklch(from var(--bg-color) calc(l + 0.0375) c h / 1); + --form-color: oklch(from var(--bg-color) calc(l + 0.075) c h / 1); } } diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 15e504762..8c924a63c 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -7,6 +7,32 @@ body { scroll-margin-top: var(--space-md); } +/** + * Code + */ + +code { + background: var(--code-color); + border-radius: var(--radius-sm); + color: var(--text-color); + font-size: var(--fs-sm); + padding: var(--space-3xs); +} + +.code-block code { + border-radius: 0; + display: block; + overflow: hidden; + padding: var(--space-sm); + white-space: pre-wrap; + word-break: break-all; +} + +.code-block { + margin: var(--space-sm) 0; + max-width: var(--container-xl); +} + /** * Containers */ @@ -77,14 +103,17 @@ ul.columns { min-width: var(--container-3xs); } +.flex p { + max-width: 100%; +} + /** * Forms */ textarea { background: transparent; - border: 3px solid oklch(from currentColor l c h / 0.25); - border-radius: var(--radius-md); + border: 3px solid var(--form-color); color: inherit; font-size: var(--fs-sm); height: var(--container-xs); diff --git a/src/themes/blur/artwork-controller/index.js b/src/themes/blur/artwork-controller/index.js index e1c8d3849..48b829038 100644 --- a/src/themes/blur/artwork-controller/index.js +++ b/src/themes/blur/artwork-controller/index.js @@ -13,7 +13,6 @@ const oqa = defaults.lazy.orchestrator.queueAudio(); const rso = defaults.lazy.orchestrator.repeatShuffle(); defaults.lazy.orchestrator.queueTracks(); -defaults.lazy.orchestrator.repeatShuffle(); // Controller const dac = new ArtworkController(); diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index 08ecee691..05801ca81 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -22,41 +22,53 @@ scripts: Constituent loader ❈

    - This tool allows you to load a custom constituent besides the existing ones. If you're missing a feature in Diffuse, this is the place to be! + Missing a feature, or prefer a different user interface that is not part of Diffuse? Add it here. This tool allows you to load a custom constituent besides the existing ones.

    - + +
    +
    + +
    +

    Yours

    + +

    + You have not added any constituents yet. Add or create some using the tools below. +

    +
    +
    + +
    -
    +

    Generate

    - TODO: Explain how to instruct AI to generate a constituent for you. For example, "I want a nice album overview grouped by the month they were added to my collection" + On the todo list, the idea is to have AI generate a piece of UI for you; building on the logical blocks provided by Diffuse.

    -
    +

    Community

    -

    +

    - Nothing here yet, we're still in alpha. + Nothing here yet, too early.

    -

    Build it yourself

    - +

    Build

    -

    - If you know a bit of HTML & Javascript, you can write your own or plug in some code you found elsewhere (be careful what to copy/paste though): +

    + If you know a bit of HTML & Javascript, you can write your own or plug in some code you found elsewhere:

    @@ -68,17 +80,11 @@ scripts:

    Your code here builds on the foundation listed below, it'll be injected into a <body> element.

    -

    - Some tips: -

    -
      -
    • Use type="module" when writing scripts.
    • -

    + -

    @@ -86,6 +92,9 @@ scripts:

    - - - - + + +

    @@ -148,15 +145,15 @@ scripts:

    • - Add items to the queue + Play audio from the queue
      - foundation.assemblage.addItemsToQueue() + foundation.assemblage.playAudioFromQueue()
    • - Play audio from the queue + Queue management
      - foundation.assemblage.playAudioFromQueue() + foundation.assemblage.queueManagement()
    • diff --git a/src/themes/webamp/browser/index.js b/src/themes/webamp/browser/index.js index 60b777e7c..2b945d3e1 100644 --- a/src/themes/webamp/browser/index.js +++ b/src/themes/webamp/browser/index.js @@ -1,7 +1,7 @@ import foundation from "@common/constituents/foundation.js"; import BrowserElement from "@themes/webamp/browser/element.js"; -const que = foundation.assemblage.addItemsToQueue(); +const que = foundation.assemblage.queueManagement(); const sea = foundation.assemblage.searchThroughCollection(); const el = new BrowserElement(); From 57cfd137ba119cf2594b95c2afdfb66d178a3b4c Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 4 Feb 2026 17:53:06 +0100 Subject: [PATCH 223/244] feat: initial working constituent loader --- _config.ts | 1 + deno.jsonc | 4 +- src/common/constituents/foundation.js | 47 ++++---- src/components/orchestrator/output/element.js | 7 +- src/definitions/output/constituent.json | 6 +- src/index.vto | 1 - src/styles/diffuse/page.css | 7 +- .../constituent/examples/now-playing.txt | 29 +++++ src/themes/loader/constituent/index.js | 109 ++++++++++++++++++ src/themes/loader/constituent/index.vto | 42 +++---- src/themes/loader/constituent/s/index.js | 62 ++++++++++ src/themes/loader/constituent/s/index.vto | 5 + src/themes/webamp/configurators/output.js | 6 +- 13 files changed, 262 insertions(+), 64 deletions(-) create mode 100644 src/themes/loader/constituent/examples/now-playing.txt create mode 100644 src/themes/loader/constituent/s/index.js diff --git a/_config.ts b/_config.ts index b013505ab..2a4717147 100644 --- a/_config.ts +++ b/_config.ts @@ -123,6 +123,7 @@ phosphor("bold/Phosphor-Bold.woff2"); // MISC +site.add("/themes/loader/constituent/examples/"); site.use(sourceMaps()); site.script("copy-type-defs", () => { diff --git a/deno.jsonc b/deno.jsonc index 9543f7e08..7166b76c5 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -5,7 +5,7 @@ "imports": { "98.css": "npm:98.css@^0.1.21", "@atcute/cbor": "npm:@atcute/cbor@^2.3.0", - "@atcute/cid": "npm:@atcute/cid@^2.4.0", + "@atcute/cid": "https://esm.sh/@atcute/cid@2.4.0", "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.7", "@automerge/automerge": "npm:@automerge/automerge@^3.2.3", "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", @@ -51,7 +51,7 @@ "@dotenv-run/esbuild": "npm:@dotenv-run/esbuild@^1.5.1", "@std/fs": "jsr:@std/fs@^1.0.19", "@std/path": "jsr:@std/path@^1.1.2", - "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", + "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.8.1", "esbuild-plugin-wasm": "npm:esbuild-plugin-wasm@^1.1.0", "lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.4/", "lume/jsx-runtime": "https://cdn.jsdelivr.net/gh/oscarotero/ssx@0.1.14/jsx-runtime.ts", diff --git a/src/common/constituents/foundation.js b/src/common/constituents/foundation.js index 6f777ca6d..d39bfa788 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/constituents/foundation.js @@ -110,16 +110,14 @@ function audio() { const a = new AudioEngine(); a.setAttribute("group", GROUP); - addToBodyIfNeeded(a); - return a; + return findExistingOrAdd(a) } function queue() { const q = new Queue(); q.setAttribute("group", GROUP); - addToBodyIfNeeded(q); - return q; + return findExistingOrAdd(q); } // Processors @@ -127,24 +125,21 @@ function artwork() { const a = new ArtworkProcessor(); a.setAttribute("group", GROUP); - addToBodyIfNeeded(a); - return a; + return findExistingOrAdd(a); } function metadata() { const m = new MetadataProcessor(); m.setAttribute("group", GROUP); - addToBodyIfNeeded(m); - return m; + return findExistingOrAdd(m); } function search() { const s = new SearchProcessor(); s.setAttribute("group", GROUP); - addToBodyIfNeeded(s); - return s; + return findExistingOrAdd(s); } // Orchestrators @@ -153,8 +148,7 @@ function input() { i.setAttribute("group", GROUP); i.setAttribute("id", "input"); - addToBodyIfNeeded(i); - return i; + return findExistingOrAdd(i); } function output() { @@ -162,8 +156,7 @@ function output() { o.setAttribute("group", GROUP); o.setAttribute("id", "output"); - addToBodyIfNeeded(o); - return o; + return findExistingOrAdd(o); } function processTracks() { @@ -178,7 +171,7 @@ function processTracks() { opt.setAttribute("metadata-processor-selector", m.selector); opt.toggleAttribute("process-when-ready"); - document.body.append(opt); + return findExistingOrAdd(opt); } function queueAudio() { @@ -192,8 +185,7 @@ function queueAudio() { oqa.setAttribute("input-selector", i.selector); oqa.setAttribute("queue-engine-selector", q.selector); - addToBodyIfNeeded(oqa); - return oqa; + return findExistingOrAdd(oqa); } function queueTracks() { @@ -207,8 +199,7 @@ function queueTracks() { oqt.setAttribute("output-selector", o.selector); oqt.setAttribute("queue-engine-selector", q.selector); - addToBodyIfNeeded(oqt); - return oqt; + return findExistingOrAdd(oqt); } function repeatShuffle() { @@ -218,8 +209,7 @@ function repeatShuffle() { ors.setAttribute("group", GROUP); ors.setAttribute("queue-engine-selector", q.selector); - addToBodyIfNeeded(ors); - return ors; + return findExistingOrAdd(ors); } function searchTracks() { @@ -233,8 +223,7 @@ function searchTracks() { ost.setAttribute("output-selector", o.selector); ost.setAttribute("search-processor-selector", s.selector); - addToBodyIfNeeded(ost); - return ost; + return findExistingOrAdd(ost); } function sources() { @@ -245,8 +234,7 @@ function sources() { so.setAttribute("input-selector", i.selector); so.setAttribute("output-selector", o.selector); - addToBodyIfNeeded(so); - return so; + return findExistingOrAdd(so); } // 🛠️ @@ -254,7 +242,12 @@ function sources() { /** * @param {DiffuseElement} element */ -export function addToBodyIfNeeded(element) { +export function findExistingOrAdd(element) { const alreadyAdded = document.body.querySelector(element.selector); - if (!alreadyAdded) document.body.append(element); + if (!alreadyAdded) { + document.body.append(element); + return element + } + + return alreadyAdded } diff --git a/src/components/orchestrator/output/element.js b/src/components/orchestrator/output/element.js index 031856b38..0cd364dba 100644 --- a/src/components/orchestrator/output/element.js +++ b/src/components/orchestrator/output/element.js @@ -9,7 +9,6 @@ import "@components/transformer/output/string/json/element.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {Track} from "@definitions/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" */ @@ -28,7 +27,7 @@ class OutputOrchestrator extends DiffuseElement { */ get output() { /** @type {OutputElement | null} */ - const output = this.querySelector("#do-output__output"); + const output = this.root().querySelector("#do-output__output"); if (!output) throw new Error("Output orchestrator did not render yet."); return output; @@ -36,6 +35,10 @@ class OutputOrchestrator extends DiffuseElement { // PROXY OUTPUT ACTIONS + get constituents() { + return this.output.constituents; + } + get tracks() { return this.output.tracks; } diff --git a/src/definitions/output/constituent.json b/src/definitions/output/constituent.json index a464b882e..90b917b37 100644 --- a/src/definitions/output/constituent.json +++ b/src/definitions/output/constituent.json @@ -6,15 +6,15 @@ "type": "record", "record": { "type": "object", - "required": ["cid", "html", "label"], + "required": ["cid", "html", "name"], "properties": { "cid": { "type": "string", - "description": "A DASL CID representing the DRISL-encoded HTML" + "description": "A DASL CID representing the DRISL-encoded HTML (raw 0x55 codec)" }, "description": { "type": "string" }, "html": { "type": "string", "description": "The constituent HTML" }, - "label": { "type": "string" } + "name": { "type": "string" } } } } diff --git a/src/index.vto b/src/index.vto index 899c8259e..123319ddf 100644 --- a/src/index.vto +++ b/src/index.vto @@ -38,7 +38,6 @@ constituents: title: "Loader" desc: > **Bring in other constituents!** Load a constituent from a URL, text snippet or from your user data output. - todo: true - url: "themes/webamp/browser/" title: "Webamp / Browser" desc: > diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 6965c2739..49305434d 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -111,15 +111,20 @@ ul.columns { * Forms */ +input, textarea { background: transparent; border: 3px solid var(--form-color); color: inherit; font-size: var(--fs-sm); + padding: var(--space-2xs); + width: 100%; +} + +textarea { height: var(--container-xs); padding: var(--space-xs); resize: none; - width: 100%; } /** diff --git a/src/themes/loader/constituent/examples/now-playing.txt b/src/themes/loader/constituent/examples/now-playing.txt new file mode 100644 index 000000000..92bd64a11 --- /dev/null +++ b/src/themes/loader/constituent/examples/now-playing.txt @@ -0,0 +1,29 @@ +
      Loading ...
      + + + diff --git a/src/themes/loader/constituent/index.js b/src/themes/loader/constituent/index.js index e69de29bb..d81337c85 100644 --- a/src/themes/loader/constituent/index.js +++ b/src/themes/loader/constituent/index.js @@ -0,0 +1,109 @@ +import * as CID from "@atcute/cid"; +import { html, render } from "lit-html"; + +import foundation from "@common/constituents/foundation.js"; +import { effect } from "@common/signal.js"; + +/** + * @import {Constituent} from "@definitions/types.d.ts" + */ + +//////////////////////////////////////////// +// LIST +//////////////////////////////////////////// + +/** @type {HTMLElement | null} */ +const listEl = document.querySelector("#list"); +if (!listEl) throw new Error("List element not found"); + +const output = foundation.orchestrator.output(); + +effect(() => { + const col = output.constituents.collection(); + + const h = col.length + ? html` + + ` + : output.constituents.state() === "loaded" + ? emptyConstituentsList + : html` + + `; + + render(h, listEl); +}); + +const emptyConstituentsList = html` +

      + You have not added any constituents yet. Add + or create some using the tools below. +

      +`; + +//////////////////////////////////////////// +// BUILD +//////////////////////////////////////////// + +document.querySelector("#build-form")?.addEventListener( + "submit", + onBuildSubmit, +); + +/** + * @param {Event} event + */ +async function onBuildSubmit(event) { + event.preventDefault(); + + const htmlEl = + /** @type {HTMLTextAreaElement | null} */ (document.querySelector( + "#html-input", + )); + const nameEl = /** @type {HTMLInputElement | null} */ (document.querySelector( + "#name-input", + )); + + const html = htmlEl?.value ?? ""; + const cid = await CID.create(0x55, new TextEncoder().encode(html)); + const name = nameEl?.value ?? "nameless"; + + /** @type {Constituent} */ + const constituent = { + $type: "sh.diffuse.output.constituent", + cid: CID.toString(cid), + html, + name, + }; + + switch (/** @type {any} */ (event).submitter.name) { + case "load-example": { + /** @type {HTMLSelectElement | null} */ + const selected = document.body.querySelector("#example-select"); + + if (htmlEl && selected?.value) { + htmlEl.value = await fetch( + `themes/loader/constituent/examples/${selected.value}`, + ).then((r) => r.text()); + } + break; + } + case "save": + await output.constituents.save([constituent]); + break; + case "save+open": + await output.constituents.save([constituent]); + window.open(`${location.href}s/?cid=${constituent.cid}`, "blank"); + break; + } +} diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index 7feddf60b..d898f6715 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -5,10 +5,11 @@ base: ../../../ styles: - styles/base.css - styles/diffuse/page.css + - styles/vendor/phosphor/bold/style.css - styles/vendor/phosphor/fill/style.css scripts: - - index.js + - themes/loader/constituent/index.js ---
      @@ -34,10 +35,7 @@ scripts:

      Yours

      - -

      - You have not added any constituents yet. Add or create some using the tools below. -

      +
    @@ -61,49 +59,47 @@ scripts:
    - +

    Build

    -
    +

    If you know a bit of HTML & Javascript, you can write your own or plug in some code you found elsewhere:

    - - - +
    + +

    - Your code here builds on the foundation listed below, it'll be injected into a <body> element. + Your code here builds on the foundation listed below, it'll be injected into a <div id="container"> element in the body.

    +

    - - - + +

    - Add element assemblage: + Browse examples:

    -
    - + -
    +

    - +

    - +
    diff --git a/src/themes/loader/constituent/s/index.js b/src/themes/loader/constituent/s/index.js new file mode 100644 index 000000000..7f2b2a258 --- /dev/null +++ b/src/themes/loader/constituent/s/index.js @@ -0,0 +1,62 @@ +import foundation from "@common/constituents/foundation.js"; +import { effect } from "@common/signal.js"; + +/** + * @import {Constituent} from "@definitions/types.d.ts" + */ + +//////////////////////////////////////////// +// OUTPUT +//////////////////////////////////////////// + +const output = foundation.orchestrator.output(); + +//////////////////////////////////////////// +// URL PARAMS +//////////////////////////////////////////// + +const url = new URL(document.location.href); + +const cid = url.searchParams.get("cid"); +const name = url.searchParams.get("name"); + +//////////////////////////////////////////// +// LOAD +//////////////////////////////////////////// + +const containerNull = document.querySelector("#container"); +if (!containerNull) throw new Error("Container not found"); + +const container = /** @type {HTMLDivElement} */ (containerNull); + +effect(() => { + const collection = output.constituents.collection(); + if (output.constituents.state() !== "loaded") return; + + let constituent; + + if (cid) { + constituent = collection.find((c) => c.cid === cid); + } else if (name) { + constituent = collection.find((c) => c.name === name); + } + + // TODO: Message that constituent was not found + if (!constituent) return; + + loadIntoContainer(constituent); +}); + +/** + * @param {Constituent} constituent + */ +function loadIntoContainer(constituent) { + // TODO: Validate if CID matches HTML + + const range = document.createRange(); + range.selectNode(container); + const documentFragment = range.createContextualFragment(constituent.html); + + container.innerHTML = ""; + container.append(documentFragment); +} diff --git a/src/themes/loader/constituent/s/index.vto b/src/themes/loader/constituent/s/index.vto index 035931002..42fbfdbc4 100644 --- a/src/themes/loader/constituent/s/index.vto +++ b/src/themes/loader/constituent/s/index.vto @@ -4,4 +4,9 @@ base: ../../../../ styles: - styles/base.css + +scripts: + - themes/loader/constituent/s/index.js --- + +
    diff --git a/src/themes/webamp/configurators/output.js b/src/themes/webamp/configurators/output.js index 642415e9f..a87c3c71c 100644 --- a/src/themes/webamp/configurators/output.js +++ b/src/themes/webamp/configurators/output.js @@ -1,11 +1,7 @@ -import { DiffuseElement, query, whenElementsDefined } from "@common/element.js"; -import { signal } from "@common/signal.js"; +import { DiffuseElement } from "@common/element.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {Track} from "@definitions/types.d.ts" - * @import {InputElement} from "@components/input/types.d.ts" - * @import {OutputElement} from "@components/output/types.d.ts" */ class OutputConfig extends DiffuseElement { From b2073ccc81468c9765d2682afd6b6ae83cb8ba17 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 5 Feb 2026 15:51:56 +0100 Subject: [PATCH 224/244] feat: add code editor to loader --- deno.jsonc | 5 + src/common/constituents/foundation.js | 11 ++- src/styles/diffuse/colors.css | 29 ++++-- src/styles/diffuse/page.css | 99 +++++++++++++++++++ .../constituent/examples/now-playing.txt | 20 +++- src/themes/loader/constituent/index.js | 48 +++++++-- src/themes/loader/constituent/index.vto | 7 +- src/themes/loader/constituent/s/index.vto | 3 - 8 files changed, 192 insertions(+), 30 deletions(-) diff --git a/deno.jsonc b/deno.jsonc index 7166b76c5..a546700e2 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -9,6 +9,10 @@ "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.7", "@automerge/automerge": "npm:@automerge/automerge@^3.2.3", "@bradenmacdonald/s3-lite-client": "jsr:@bradenmacdonald/s3-lite-client@^0.9.4", + "@codemirror/autocomplete": "npm:@codemirror/autocomplete@^6.20.0", + "@codemirror/lang-css": "npm:@codemirror/lang-css@^6.3.1", + "@codemirror/lang-html": "npm:@codemirror/lang-html@^6.4.11", + "@codemirror/lang-javascript": "npm:@codemirror/lang-javascript@^6.2.4", "@fry69/deep-diff": "jsr:@fry69/deep-diff@^0.1.10", "@js-temporal/polyfill": "npm:@js-temporal/polyfill@^0.5.1", "@kunkun/kkrpc": "jsr:@kunkun/kkrpc@^0.6.0", @@ -18,6 +22,7 @@ "@phosphor-icons/web": "npm:@phosphor-icons/web@^2.1.2", "@vicary/debounce-microtask": "jsr:@vicary/debounce-microtask@^0.1.8", "alien-signals": "npm:alien-signals@^3.0.0", + "codemirror": "npm:codemirror@^6.0.2", "fast-average-color": "npm:fast-average-color@^9.5.0", "idb-keyval": "npm:idb-keyval@^6.2.2", "iso-base": "npm:iso-base@^4.3.0", diff --git a/src/common/constituents/foundation.js b/src/common/constituents/foundation.js index d39bfa788..089b2d996 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/constituents/foundation.js @@ -110,7 +110,7 @@ function audio() { const a = new AudioEngine(); a.setAttribute("group", GROUP); - return findExistingOrAdd(a) + return findExistingOrAdd(a); } function queue() { @@ -240,14 +240,17 @@ function sources() { // 🛠️ /** - * @param {DiffuseElement} element + * @template {DiffuseElement} T + * @param {T} element + * @returns {T} */ export function findExistingOrAdd(element) { + /** @type {T | null} */ const alreadyAdded = document.body.querySelector(element.selector); if (!alreadyAdded) { document.body.append(element); - return element + return element; } - return alreadyAdded + return alreadyAdded; } diff --git a/src/styles/diffuse/colors.css b/src/styles/diffuse/colors.css index 93edd7dc6..e6b3ea0af 100644 --- a/src/styles/diffuse/colors.css +++ b/src/styles/diffuse/colors.css @@ -4,23 +4,24 @@ --color-2: oklch(98.369% 0.01834 67.664); --color-3: oklch(26.787% 0.00168 186.65); - /* Orange/Red */ - /*--accent: oklch(86.947% 0.25527 28.789);*/ - /*--accent: hsl(51, 100%, 50%);*/ - /*--accent: #9e86b8;*/ - /* Green */ - /*--accent: hsl(120, 73.4%, 74.9%);*/ --accent: hsl(82, 39%, 30.2%); - /*--accent: hsl(80, 60.5%, 34.7%);*/ - /* Blue */ - /*--accent: hsl(203, 92%, 75.5%);*/ + /* Based on accent */ + --accent-twist-1: oklch(0.4394087182327507 0.07236154661033459 126.18581796616421); + --accent-twist-2: oklch(0.595520818778872 0.0651155417011046 241.18580587451083); + --accent-twist-3: oklch(0.6455208185961163 0.07999998225841164 241.185809134907); + --accent-twist-4: oklch(0.49552082249860496 0.056052673525189174 11.185823191211629); + --accent-twist-5: oklch(0.4155208216940155 0.07999998497864118 11.185815502393897); + + /* Derivatives */ + --accent-mark: oklch(from var(--accent-twist-1) l c h / 0.125); + --accent-highlight: oklch(from var(--accent) l c h / 0.375); --bg-color: var(--color-2); --text-color: var(--color-1); - --code-color: oklch(from var(--bg-color) calc(l - 0.0375) c h / 1); + --code-color: oklch(from #fefcf1 l c h); --form-color: oklch(from var(--bg-color) calc(l - 0.075) c h / 1); } @@ -28,6 +29,14 @@ :root { --accent: #9e86b8; + /* Based on accent */ + --accent-twist-1: oklch(0.8304625409973806 0.04463693607878053 306.25919097736113); + --accent-twist-2: oklch(0.8598598403285739 0.0562638076130437 71.2592389751063); + --accent-twist-3: oklch(0.9098598401854464 0.04000001621772218 71.25925756817853); + --accent-twist-4: oklch(0.759859834391464 0.0968658786601377 181.2591638095228); + --accent-twist-5: oklch(0.5798598316017731 0.08000002153797516 181.25916489227464); + + /* Derivatives */ --bg-color: var(--color-3); --text-color: var(--color-2); diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 49305434d..1392dd19c 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -7,6 +7,10 @@ body { scroll-margin-top: var(--space-md); } +::selection { + background: var(--accent-highlight); +} + /** * Code */ @@ -33,6 +37,96 @@ code { max-width: var(--container-xl); } +.code-editor { + font-size: var(--fs-sm); + font-size: calc((var(--fs-xs) + var(--fs-sm)) / 2); + height: var(--container-xs); +} + +.code-editor .cm-editor { + background: var(--code-color); + height: 100%; + + .cm-selectionBackground, + &::selection { + background: var(--accent-mark) !important; + } + + .cm-content { + padding: var(--space-2xs) var(--space-3xs); + padding-right: var(--space-2xs); + } + + .cm-gutters { + background: oklch(from var(--code-color) calc(l - 0.025) c h); + border: 0; + color: oklch(from var(--text-color) l c h / 0.375); + font-size: var(--fs-xs); + line-height: 20px; + } + + .cm-activeLineGutter { + background: var(--accent); + color: var(--bg-color); + } + + .cm-scroller { + font-family: inherit; + } + + .cm-selectionMatch, + .cm-matchingBracket { + background: var(--accent-highlight); + } + + .cm-activeline { + background: oklch(from var(--text-color) l c h / 0.075); + } + + .cm-cursor, + .cm-dropCursor { + border-left-color: var(--text-color); + } + + .cm-tooltip { + background: var(--bg-color); + border: 0; + padding: var(--space-3xs); + } + + .cm-tooltip-autocomplete ul li[aria-selected] { + background: var(--accent); + color: var(--bg-color); + } + + /* Code styling */ + .ͼi { + color: var(--accent); + } + + .ͼe { + color: var(--accent-twist-4); + } + + .ͼb { + color: var(--accent-twist-1); + color: oklch(from currentColor l c h / 0.6); + } + + .ͼg { + color: var(--accent-twist-2); + } + + .ͼf { + color: var(--accent-twist-5); + } + + .ͼ5, + .ͼm { + color: oklch(from currentColor l c h / 0.4); + } +} + /** * Containers */ @@ -111,6 +205,11 @@ ul.columns { * Forms */ +/*select, +::picker(select) { + appearance: base-select; +}*/ + input, textarea { background: transparent; diff --git a/src/themes/loader/constituent/examples/now-playing.txt b/src/themes/loader/constituent/examples/now-playing.txt index 92bd64a11..5eda5de02 100644 --- a/src/themes/loader/constituent/examples/now-playing.txt +++ b/src/themes/loader/constituent/examples/now-playing.txt @@ -1,13 +1,24 @@ -
    Loading ...
    - +
    +
    Loading tracks ...
    + +
    + + diff --git a/src/themes/loader/constituent/index.js b/src/themes/loader/constituent/index.js index d81337c85..890f053dc 100644 --- a/src/themes/loader/constituent/index.js +++ b/src/themes/loader/constituent/index.js @@ -1,6 +1,12 @@ import * as CID from "@atcute/cid"; import { html, render } from "lit-html"; +import { basicSetup, EditorView } from "codemirror"; +import { css as langCss } from "@codemirror/lang-css"; +import { html as langHtml } from "@codemirror/lang-html"; +import { javascript as langJs } from "@codemirror/lang-javascript"; +import { autocompletion } from "@codemirror/autocomplete"; + import foundation from "@common/constituents/foundation.js"; import { effect } from "@common/signal.js"; @@ -55,6 +61,34 @@ const emptyConstituentsList = html` // BUILD //////////////////////////////////////////// +// Code editor +const editorContainer = document.body.querySelector("#html-input-container"); +if (!editorContainer) throw new Error("Editor container not found"); + +const editor = new EditorView({ + parent: editorContainer, + doc: ` + + `.trim(), + extensions: [ + basicSetup, + langHtml(), + langCss(), + langJs(), + autocompletion(), + ], +}); + +// Form submit document.querySelector("#build-form")?.addEventListener( "submit", onBuildSubmit, @@ -66,15 +100,11 @@ document.querySelector("#build-form")?.addEventListener( async function onBuildSubmit(event) { event.preventDefault(); - const htmlEl = - /** @type {HTMLTextAreaElement | null} */ (document.querySelector( - "#html-input", - )); const nameEl = /** @type {HTMLInputElement | null} */ (document.querySelector( "#name-input", )); - const html = htmlEl?.value ?? ""; + const html = editor.state.doc.toString(); const cid = await CID.create(0x55, new TextEncoder().encode(html)); const name = nameEl?.value ?? "nameless"; @@ -91,10 +121,14 @@ async function onBuildSubmit(event) { /** @type {HTMLSelectElement | null} */ const selected = document.body.querySelector("#example-select"); - if (htmlEl && selected?.value) { - htmlEl.value = await fetch( + if (selected?.value) { + const text = await fetch( `themes/loader/constituent/examples/${selected.value}`, ).then((r) => r.text()); + + editor.dispatch({ + changes: { from: 0, to: editor.state.doc.length, insert: text }, + }); } break; } diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index d898f6715..1b41c3c0d 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -69,8 +69,7 @@ scripts: If you know a bit of HTML & Javascript, you can write your own or plug in some code you found elsewhere:

    -
    - +
    @@ -90,6 +89,10 @@ scripts:

    diff --git a/src/themes/loader/constituent/s/index.vto b/src/themes/loader/constituent/s/index.vto index 42fbfdbc4..ed2de573e 100644 --- a/src/themes/loader/constituent/s/index.vto +++ b/src/themes/loader/constituent/s/index.vto @@ -2,9 +2,6 @@ layout: layouts/constituent.vto base: ../../../../ -styles: - - styles/base.css - scripts: - themes/loader/constituent/s/index.js --- From a8ad8ba121788244067b6717f91f0630aed16e18 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 5 Feb 2026 16:20:46 +0100 Subject: [PATCH 225/244] chore: more examples --- .../examples/generate-playlist.txt | 37 ++++++++++++++++++ src/themes/loader/constituent/index.js | 39 +++++++++++++++++-- src/themes/loader/constituent/index.vto | 3 +- 3 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 src/themes/loader/constituent/examples/generate-playlist.txt diff --git a/src/themes/loader/constituent/examples/generate-playlist.txt b/src/themes/loader/constituent/examples/generate-playlist.txt new file mode 100644 index 000000000..27f0fc4ea --- /dev/null +++ b/src/themes/loader/constituent/examples/generate-playlist.txt @@ -0,0 +1,37 @@ +
    + +
      +
      + + + + diff --git a/src/themes/loader/constituent/index.js b/src/themes/loader/constituent/index.js index 890f053dc..a686945f4 100644 --- a/src/themes/loader/constituent/index.js +++ b/src/themes/loader/constituent/index.js @@ -25,17 +25,27 @@ if (!listEl) throw new Error("List element not found"); const output = foundation.orchestrator.output(); effect(() => { - const col = output.constituents.collection(); + const col = output.constituents.collection().sort((a, b) => { + return a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase()); + }); const h = col.length ? html`
        ${col.map((c) => html` -
      • +
      • ${c.name} +
        + + + Delete + +
      • ` )} @@ -57,6 +67,17 @@ const emptyConstituentsList = html`

        `; +/** + * @param {string} cid + */ +function deleteConstituent(cid) { + return () => { + output.constituents.save( + output.constituents.collection().filter((c) => c.cid !== cid), + ); + }; +} + //////////////////////////////////////////// // BUILD //////////////////////////////////////////// @@ -133,11 +154,21 @@ async function onBuildSubmit(event) { break; } case "save": - await output.constituents.save([constituent]); + await saveConstituent(constituent); break; case "save+open": - await output.constituents.save([constituent]); + await saveConstituent(constituent); window.open(`${location.href}s/?cid=${constituent.cid}`, "blank"); break; } } + +/** + * @param {Constituent} constituent + */ +async function saveConstituent(constituent) { + const col = output.constituents.collection(); + const colWithoutName = col.filter((c) => c.name !== constituent.name); + + await output.constituents.save([...colWithoutName, constituent]); +} diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index 1b41c3c0d..047c11f5f 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -93,7 +93,8 @@ scripts: - + +

        From 6301db872a5065e2781e4139f079b882d86a860a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 5 Feb 2026 22:14:35 +0100 Subject: [PATCH 226/244] feat: favourite definition --- deno.jsonc | 1 + src/definitions/index.ts | 1 + src/definitions/output/favourite.json | 38 +++++++++++++++++++++++++++ src/definitions/types.d.ts | 6 +++++ src/index.vto | 6 ++--- 5 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 src/definitions/output/favourite.json diff --git a/deno.jsonc b/deno.jsonc index a546700e2..91a3d43fd 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -138,6 +138,7 @@ // .ts "./definitions/types/sh/diffuse/output/constituent.ts": "./src/definitions/types/sh/diffuse/output/constituent.ts", + "./definitions/types/sh/diffuse/output/favourite.ts": "./src/definitions/types/sh/diffuse/output/favourite.ts", "./definitions/types/sh/diffuse/output/track.ts": "./src/definitions/types/sh/diffuse/output/track.ts", }, "tasks": { diff --git a/src/definitions/index.ts b/src/definitions/index.ts index 2b699ab08..62d6730fb 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,2 +1,3 @@ export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.js"; +export * as ShDiffuseOutputFavourite from "./types/sh/diffuse/output/favourite.js"; export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.js"; diff --git a/src/definitions/output/favourite.json b/src/definitions/output/favourite.json new file mode 100644 index 000000000..5cdb545b7 --- /dev/null +++ b/src/definitions/output/favourite.json @@ -0,0 +1,38 @@ +{ + "lexicon": 1, + "id": "sh.diffuse.output.favourite", + "defs": { + "main": { + "type": "record", + "record": { + "type": "object", + "required": ["criteria"], + "properties": { + "criteria": { + "type": "array", + "items": { "type": "ref", "ref": "#criterion" } + } + } + } + }, + "criterion": { + "type": "object", + "required": ["field", "value"], + "properties": { + "field": { "type": "string" }, + "transformations": { + "type": "array", + "items": { "type": "ref", "ref": "#transformation" } + }, + "value": { + "type": "unknown", + "description": "Value that should be matched belonging to the given field" + } + } + }, + "transformation": { + "type": "string", + "description": "Transformation to apply to the field value before comparison" + } + } +} diff --git a/src/definitions/types.d.ts b/src/definitions/types.d.ts index 98f24e0f8..2ccc0fe15 100644 --- a/src/definitions/types.d.ts +++ b/src/definitions/types.d.ts @@ -2,6 +2,12 @@ export type { Main as Constituent, } from "./types/sh/diffuse/output/constituent.ts"; +export type { + Criterion, + Main as Favourite, + Transformation, +} from "./types/sh/diffuse/output/favourite.ts"; + export type { Main as Track, Stats as TrackStats, diff --git a/src/index.vto b/src/index.vto index 123319ddf..7d0a9375e 100644 --- a/src/index.vto +++ b/src/index.vto @@ -180,11 +180,11 @@ definitions: url: "definitions/output/constituent.json" - title: "Output / Favourite" desc: > - Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified using the audio's title and artist. - todo: true + Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified with criteria that will be used to match the tracks. + url: "definitions/output/favourite.json" - title: "Output / Playlist" desc: > - Just like favourites, does not refer to specific tracks. Unlike favourites, must also specify the album. Can also be considered a collection which is basically an unordered playlist. + Just like favourites, does not refer to specific tracks. Can also be considered a collection which is basically an unordered playlist. todo: true - title: "Output / Progress" desc: > From 966299497a9315f8e024dd6da30ebb9dd86159e9 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 5 Feb 2026 23:15:01 +0100 Subject: [PATCH 227/244] feat: playlist definition --- deno.jsonc | 1 + src/definitions/index.ts | 1 + src/definitions/output/playlist.json | 75 ++++++++++++++++++++++++++++ src/definitions/types.d.ts | 8 ++- 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/definitions/output/playlist.json diff --git a/deno.jsonc b/deno.jsonc index 91a3d43fd..9bc9230e2 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -139,6 +139,7 @@ // .ts "./definitions/types/sh/diffuse/output/constituent.ts": "./src/definitions/types/sh/diffuse/output/constituent.ts", "./definitions/types/sh/diffuse/output/favourite.ts": "./src/definitions/types/sh/diffuse/output/favourite.ts", + "./definitions/types/sh/diffuse/output/playlist.ts": "./src/definitions/types/sh/diffuse/output/playlist.ts", "./definitions/types/sh/diffuse/output/track.ts": "./src/definitions/types/sh/diffuse/output/track.ts", }, "tasks": { diff --git a/src/definitions/index.ts b/src/definitions/index.ts index 62d6730fb..455ac6984 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,3 +1,4 @@ export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.js"; export * as ShDiffuseOutputFavourite from "./types/sh/diffuse/output/favourite.js"; +export * as ShDiffuseOutputPlaylist from "./types/sh/diffuse/output/playlist.js"; export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.js"; diff --git a/src/definitions/output/playlist.json b/src/definitions/output/playlist.json new file mode 100644 index 000000000..0dc53dbd9 --- /dev/null +++ b/src/definitions/output/playlist.json @@ -0,0 +1,75 @@ +{ + "lexicon": 1, + "id": "sh.diffuse.output.playlist", + "defs": { + "main": { + "type": "record", + "record": { + "type": "object", + "required": ["collection", "items", "name"], + "nullable": ["autoGenerate"], + "properties": { + "autoGenerate": { + "type": "ref", + "ref": "#autoGenerate" + }, + "collection": { + "type": "boolean", + "default": false, + "description": "If this property is set to true, the playlist items should not be presented in order. It's considered a collection of tracks." + }, + "items": { + "type": "array", + "items": { + "type": "ref", + "ref": "#item" + } + }, + "name": { + "type": "string" + } + } + } + }, + "autoGenerate": { + "type": "object", + "description": "Auto-generate the items of the playlist, overriding the included items. If this property is set, the playlist should always be treated as a collection.", + "required": ["criteria"], + "properties": { + "criteria": { + "type": "array", + "items": { "type": "ref", "ref": "#criterion" } + } + } + }, + "criterion": { + "type": "object", + "required": ["field", "value"], + "properties": { + "field": { "type": "string" }, + "transformations": { + "type": "array", + "items": { "type": "ref", "ref": "#transformation" } + }, + "value": { + "type": "unknown", + "description": "Value that should be matched belonging to the given field" + } + } + }, + "item": { + "type": "object", + "required": ["criteria"], + "properties": { + "criteria": { + "type": "array", + "items": { "type": "ref", "ref": "#criterion" } + } + } + }, + "transformation": { + "type": "string", + "description": "Transformation to apply to the field value before comparison" + } + } +} diff --git a/src/definitions/types.d.ts b/src/definitions/types.d.ts index 2ccc0fe15..c9fe6d932 100644 --- a/src/definitions/types.d.ts +++ b/src/definitions/types.d.ts @@ -2,11 +2,15 @@ export type { Main as Constituent, } from "./types/sh/diffuse/output/constituent.ts"; +export type { Main as Favourite } from "./types/sh/diffuse/output/favourite.ts"; + export type { + AutoGenerate as PlaylistAutoGeneration, Criterion, - Main as Favourite, + Item as PlaylistItem, + Main as Playlist, Transformation, -} from "./types/sh/diffuse/output/favourite.ts"; +} from "./types/sh/diffuse/output/playlist.ts"; export type { Main as Track, From 6473131caf66e1f66224e969629f96aa4b4a1895 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 5 Feb 2026 23:25:27 +0100 Subject: [PATCH 228/244] refactor: favourites can just be a playlist --- deno.jsonc | 1 - src/definitions/index.ts | 1 - src/definitions/output/favourite.json | 38 --------------------------- src/definitions/output/playlist.json | 14 +++++----- src/definitions/types.d.ts | 2 -- src/index.vto | 8 ++---- 6 files changed, 9 insertions(+), 55 deletions(-) delete mode 100644 src/definitions/output/favourite.json diff --git a/deno.jsonc b/deno.jsonc index 9bc9230e2..6c53cdaf7 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -138,7 +138,6 @@ // .ts "./definitions/types/sh/diffuse/output/constituent.ts": "./src/definitions/types/sh/diffuse/output/constituent.ts", - "./definitions/types/sh/diffuse/output/favourite.ts": "./src/definitions/types/sh/diffuse/output/favourite.ts", "./definitions/types/sh/diffuse/output/playlist.ts": "./src/definitions/types/sh/diffuse/output/playlist.ts", "./definitions/types/sh/diffuse/output/track.ts": "./src/definitions/types/sh/diffuse/output/track.ts", }, diff --git a/src/definitions/index.ts b/src/definitions/index.ts index 455ac6984..63787798e 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,4 +1,3 @@ export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.js"; -export * as ShDiffuseOutputFavourite from "./types/sh/diffuse/output/favourite.js"; export * as ShDiffuseOutputPlaylist from "./types/sh/diffuse/output/playlist.js"; export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.js"; diff --git a/src/definitions/output/favourite.json b/src/definitions/output/favourite.json deleted file mode 100644 index 5cdb545b7..000000000 --- a/src/definitions/output/favourite.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "lexicon": 1, - "id": "sh.diffuse.output.favourite", - "defs": { - "main": { - "type": "record", - "record": { - "type": "object", - "required": ["criteria"], - "properties": { - "criteria": { - "type": "array", - "items": { "type": "ref", "ref": "#criterion" } - } - } - } - }, - "criterion": { - "type": "object", - "required": ["field", "value"], - "properties": { - "field": { "type": "string" }, - "transformations": { - "type": "array", - "items": { "type": "ref", "ref": "#transformation" } - }, - "value": { - "type": "unknown", - "description": "Value that should be matched belonging to the given field" - } - } - }, - "transformation": { - "type": "string", - "description": "Transformation to apply to the field value before comparison" - } - } -} diff --git a/src/definitions/output/playlist.json b/src/definitions/output/playlist.json index 0dc53dbd9..1ab874ab9 100644 --- a/src/definitions/output/playlist.json +++ b/src/definitions/output/playlist.json @@ -6,18 +6,13 @@ "type": "record", "record": { "type": "object", - "required": ["collection", "items", "name"], + "required": ["items", "name", "unordered"], "nullable": ["autoGenerate"], "properties": { "autoGenerate": { "type": "ref", "ref": "#autoGenerate" }, - "collection": { - "type": "boolean", - "default": false, - "description": "If this property is set to true, the playlist items should not be presented in order. It's considered a collection of tracks." - }, "items": { "type": "array", "items": { @@ -27,13 +22,18 @@ }, "name": { "type": "string" + }, + "unordered": { + "type": "boolean", + "default": false, + "description": "If this property is set to true, the playlist items should not be presented in order. It's considered an unordered collection of tracks." } } } }, "autoGenerate": { "type": "object", - "description": "Auto-generate the items of the playlist, overriding the included items. If this property is set, the playlist should always be treated as a collection.", + "description": "Auto-generate the items of the playlist, overriding the included items. If this property is set, the playlist should always be treated as unordered.", "required": ["criteria"], "properties": { "criteria": { diff --git a/src/definitions/types.d.ts b/src/definitions/types.d.ts index c9fe6d932..a69c3e510 100644 --- a/src/definitions/types.d.ts +++ b/src/definitions/types.d.ts @@ -2,8 +2,6 @@ export type { Main as Constituent, } from "./types/sh/diffuse/output/constituent.ts"; -export type { Main as Favourite } from "./types/sh/diffuse/output/favourite.ts"; - export type { AutoGenerate as PlaylistAutoGeneration, Criterion, diff --git a/src/index.vto b/src/index.vto index 7d0a9375e..60bcdbec4 100644 --- a/src/index.vto +++ b/src/index.vto @@ -178,14 +178,10 @@ definitions: desc: > Custom constituents to keep around. url: "definitions/output/constituent.json" - - title: "Output / Favourite" - desc: > - Indicate a user's favourite audio. Not a property of a track because tracks are associated with a specific source. Favourites may match with multiple tracks. Specified with criteria that will be used to match the tracks. - url: "definitions/output/favourite.json" - title: "Output / Playlist" desc: > - Just like favourites, does not refer to specific tracks. Can also be considered a collection which is basically an unordered playlist. - todo: true + Represents a collection of tracks, which may be ordered or unordered. Tracks are matched based on the given criteria. + url: "definitions/output/playlist.json" - title: "Output / Progress" desc: > Used to track progress of (long) audio playback. From 3c766b5dd2ee17d476ae0f3e26432b0fabb21b93 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 6 Feb 2026 17:09:20 +0100 Subject: [PATCH 229/244] refactor: foundation + some orchestrators --- deno.jsonc | 8 +- src/common/constituents/foundation.js | 82 ++++++++++--------- .../repeat-shuffle/element.js | 50 ++++------- .../{queue-tracks => auto-queue}/element.js | 52 ++++++++---- .../{queue-tracks => auto-queue}/types.d.ts | 2 +- .../{queue-tracks => auto-queue}/worker.js | 2 +- .../orchestrator/queue-audio/element.js | 30 ++----- src/index.vto | 4 +- src/themes/blur/artwork-controller/element.js | 8 +- src/themes/blur/artwork-controller/index.js | 29 ++----- src/themes/blur/index.js | 59 ------------- src/themes/loader/constituent/index.js | 15 ++-- src/themes/loader/constituent/index.vto | 30 +++++-- src/themes/webamp/browser/index.js | 18 ++-- src/themes/webamp/index.js | 2 +- 15 files changed, 170 insertions(+), 221 deletions(-) rename src/components/{orchestrator => engine}/repeat-shuffle/element.js (52%) rename src/components/orchestrator/{queue-tracks => auto-queue}/element.js (57%) rename src/components/orchestrator/{queue-tracks => auto-queue}/types.d.ts (59%) rename src/components/orchestrator/{queue-tracks => auto-queue}/worker.js (94%) diff --git a/deno.jsonc b/deno.jsonc index 6c53cdaf7..9fc53f726 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -80,6 +80,7 @@ "./components/engine/audio/element.js": "./src/components/engine/audio/element.js", "./components/engine/queue/element.js": "./src/components/engine/queue/element.js", "./components/engine/queue/worker.js": "./src/components/engine/queue/worker.js", + "./components/engine/repeat-shuffle/element.js": "./src/components/engine/repeat-shuffle/element.js", "./components/input/common.js": "./src/components/input/common.js", "./components/input/opensubsonic/common.js": "./src/components/input/opensubsonic/common.js", "./components/input/opensubsonic/constants.js": "./src/components/input/opensubsonic/constants.js", @@ -89,16 +90,15 @@ "./components/input/s3/constants.js": "./src/components/input/s3/constants.js", "./components/input/s3/element.js": "./src/components/input/s3/element.js", "./components/input/s3/worker.js": "./src/components/input/s3/worker.js", + "./components/orchestrator/auto-queue/element.js": "./src/components/orchestrator/auto-queue/element.js", + "./components/orchestrator/auto-queue/worker.js": "./src/components/orchestrator/auto-queue/worker.js", "./components/orchestrator/input/element.js": "./src/components/orchestrator/input/element.js", "./components/orchestrator/output/element.js": "./src/components/orchestrator/output/element.js", "./components/orchestrator/process-tracks/element.js": "./src/components/orchestrator/process-tracks/element.js", "./components/orchestrator/process-tracks/worker.js": "./src/components/orchestrator/process-tracks/worker.js", "./components/orchestrator/queue-audio/element.js": "./src/components/orchestrator/queue-audio/element.js", - "./components/orchestrator/queue-tracks/element.js": "./src/components/orchestrator/queue-tracks/element.js", - "./components/orchestrator/queue-tracks/worker.js": "./src/components/orchestrator/queue-tracks/worker.js", "./components/orchestrator/search-tracks/element.js": "./src/components/orchestrator/search-tracks/element.js", "./components/orchestrator/search-tracks/worker.js": "./src/components/orchestrator/search-tracks/worker.js", - "./components/orchestrator/repeat-shuffle/element.js": "./src/components/orchestrator/repeat-shuffle/element.js", "./components/orchestrator/sources/element.js": "./src/components/orchestrator/sources/element.js", "./components/output/common.js": "./src/components/output/common.js", "./components/output/polymorphic/indexed-db/constants.js": "./src/components/output/polymorphic/indexed-db/constants.js", @@ -126,8 +126,8 @@ "./components/input/opensubsonic/types.d.ts": "./src/components/input/opensubsonic/types.d.ts", "./components/input/s3/types.d.ts": "./src/components/input/s3/types.d.ts", "./components/input/types.d.ts": "./src/components/input/types.d.ts", + "./components/orchestrator/auto-queue/types.d.ts": "./src/components/orchestrator/auto-queue/types.d.ts", "./components/orchestrator/process-tracks/types.d.ts": "./src/components/orchestrator/process-tracks/types.d.ts", - "./components/orchestrator/queue-tracks/types.d.ts": "./src/components/orchestrator/queue-tracks/types.d.ts", "./components/orchestrator/search-tracks/types.d.ts": "./src/components/orchestrator/search-tracks/types.d.ts", "./components/output/polymorphic/indexed-db/types.d.ts": "./src/components/output/polymorphic/indexed-db/types.d.ts", "./components/output/types.d.ts": "./src/components/output/types.d.ts", diff --git a/src/common/constituents/foundation.js b/src/common/constituents/foundation.js index 089b2d996..4d06dfbfd 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/constituents/foundation.js @@ -1,13 +1,13 @@ import ArtworkProcessor from "@components/processor/artwork/element.js"; import AudioEngine from "@components/engine/audio/element.js"; +import AutoQueueOrchestrator from "@components/orchestrator/auto-queue/element.js"; import Queue from "@components/engine/queue/element.js"; import InputOrchestrator from "@components/orchestrator/input/element.js"; import OutputOrchestrator from "@components/orchestrator/output/element.js"; import MetadataProcessor from "@components/processor/metadata/element.js"; import ProcessTracksOrchestrator from "@components/orchestrator/process-tracks/element.js"; import QueueAudioOrchestrator from "@components/orchestrator/queue-audio/element.js"; -import QueueTracksOrchestrator from "@components/orchestrator/queue-tracks/element.js"; -import RepeatShuffleOrchestrator from "@components/orchestrator/repeat-shuffle/element.js"; +import RepeatShuffleEngine from "@components/engine/repeat-shuffle/element.js"; import SearchProcessor from "@components/processor/search/element.js"; import SearchTracksOrchestrator from "@components/orchestrator/search-tracks/element.js"; import SourcesOrchestrator from "@components/orchestrator/sources/element.js"; @@ -24,10 +24,10 @@ export const GROUP = "constituents"; export const config = { GROUP, - /* Some predefined activity groups */ - assemblage: { + features: { + fillQueueAutomatically, playAudioFromQueue, - queueManagement, + processInputs, searchThroughCollection, }, @@ -35,14 +35,14 @@ export const config = { engine: { audio, queue, + repeatShuffle, }, orchestrator: { + autoQueue, input, output, queueAudio, - queueTracks, processTracks, - repeatShuffle, searchTracks, sources, }, @@ -57,33 +57,38 @@ export default config; // 📦️ -function playAudioFromQueue() { - const base = queueManagement(); - +function fillQueueAutomatically() { return { - ...base, engine: { - ...base.engine, - audio: audio(), + queue: queue(), + repeatShuffle: repeatShuffle(), }, orchestrator: { - ...base.orchestrator, - queueAudio: queueAudio(), + autoQueue: autoQueue(), + input: input(), + output: output(), }, }; } -function queueManagement() { +function playAudioFromQueue() { return { engine: { + audio: audio(), queue: queue(), }, + orchestrator: { + queueAudio: queueAudio(), + }, + }; +} + +function processInputs() { + return { orchestrator: { input: input(), output: output(), processTracks: processTracks(), - queueTracks: queueTracks(), - repeatShuffle: repeatShuffle(), }, processor: { metadata: metadata(), @@ -143,6 +148,22 @@ function search() { } // Orchestrators +function autoQueue() { + const i = input(); + const o = output(); + const q = queue(); + const r = repeatShuffle(); + + const aqo = new AutoQueueOrchestrator(); + aqo.setAttribute("group", GROUP); + aqo.setAttribute("input-selector", i.selector); + aqo.setAttribute("output-selector", o.selector); + aqo.setAttribute("queue-engine-selector", q.selector); + aqo.setAttribute("repeat-shuffle-engine-selector", r.selector); + + return findExistingOrAdd(aqo); +} + function input() { const i = new InputOrchestrator(); i.setAttribute("group", GROUP); @@ -178,38 +199,23 @@ function queueAudio() { const a = audio(); const i = input(); const q = queue(); + const r = repeatShuffle(); const oqa = new QueueAudioOrchestrator(); oqa.setAttribute("group", GROUP); oqa.setAttribute("audio-engine-selector", a.selector); oqa.setAttribute("input-selector", i.selector); oqa.setAttribute("queue-engine-selector", q.selector); + oqa.setAttribute("repeat-shuffle-engine-selector", r.selector); return findExistingOrAdd(oqa); } -function queueTracks() { - const i = input(); - const o = output(); - const q = queue(); - - const oqt = new QueueTracksOrchestrator(); - oqt.setAttribute("group", GROUP); - oqt.setAttribute("input-selector", i.selector); - oqt.setAttribute("output-selector", o.selector); - oqt.setAttribute("queue-engine-selector", q.selector); - - return findExistingOrAdd(oqt); -} - function repeatShuffle() { - const q = queue(); - - const ors = new RepeatShuffleOrchestrator(); - ors.setAttribute("group", GROUP); - ors.setAttribute("queue-engine-selector", q.selector); + const rse = new RepeatShuffleEngine(); + rse.setAttribute("group", GROUP); - return findExistingOrAdd(ors); + return findExistingOrAdd(rse); } function searchTracks() { diff --git a/src/components/orchestrator/repeat-shuffle/element.js b/src/components/engine/repeat-shuffle/element.js similarity index 52% rename from src/components/orchestrator/repeat-shuffle/element.js rename to src/components/engine/repeat-shuffle/element.js index 12d767801..1752d4f9a 100644 --- a/src/components/orchestrator/repeat-shuffle/element.js +++ b/src/components/engine/repeat-shuffle/element.js @@ -1,12 +1,12 @@ -import { BroadcastableDiffuseElement, query } from "@common/element.js"; +import { BroadcastableDiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; //////////////////////////////////////////// // ELEMENT //////////////////////////////////////////// -class RepeatShuffleOrchestrator extends BroadcastableDiffuseElement { - static NAME = "diffuse/orchestrator/repeat-shuffle"; +class RepeatShuffleEngine extends BroadcastableDiffuseElement { + static NAME = "diffuse/engine/repeat-shuffle"; // SIGNALS @@ -21,22 +21,23 @@ class RepeatShuffleOrchestrator extends BroadcastableDiffuseElement { /** * @override */ - async connectedCallback() { + connectedCallback() { // Broadcast if needed if (this.hasAttribute("group")) { - // TODO: Replicate state (repeat & shuffle) - this.broadcast(this.nameWithGroup, {}); + const actions = this.broadcast(this.nameWithGroup, { + setRepeat: { strategy: "replicate", fn: this.setRepeat }, + setShuffle: { strategy: "replicate", fn: this.setShuffle }, + }); + + if (actions) { + this.setRepeat = actions.setRepeat; + this.setShuffle = actions.setShuffle; + } } // Super super.connectedCallback(); - /** @type {import("@components/engine/queue/element.js").CLASS} */ - const queue = query(this, "queue-engine-selector"); - - // Assign to self - this.queue = queue; - // Signals const storagePrefix = `${this.constructor.prototype.constructor.NAME}/${this.group}/`; @@ -48,22 +49,7 @@ class RepeatShuffleOrchestrator extends BroadcastableDiffuseElement { ? true : false; - // Wait until defined - await customElements.whenDefined(queue.localName); - // Effects - this.effect(() => { - const trigger = queue.now(); - const _other_trigger = queue.supplyFingerprint(); - - this.isLeader().then((isLeader) => { - if (!isLeader) return; - // TODO: What happens when shuffle changes here? Need to reset queue probably. - queue.fill({ amount: 10, shuffled: this.#shuffle.value }); - if (!trigger) queue.shift(); - }); - }); - this.effect(() => localStorage.setItem( `${storagePrefix}/repeat`, @@ -82,19 +68,19 @@ class RepeatShuffleOrchestrator extends BroadcastableDiffuseElement { // ACTIONS /** @param {boolean} bool */ - setRepeat = (bool) => this.#repeat.value = bool; + setRepeat = async (bool) => this.#repeat.value = bool; /** @param {boolean} bool */ - setShuffle = (bool) => this.#shuffle.value = bool; + setShuffle = async (bool) => this.#shuffle.value = bool; } -export default RepeatShuffleOrchestrator; +export default RepeatShuffleEngine; //////////////////////////////////////////// // REGISTER //////////////////////////////////////////// -export const CLASS = RepeatShuffleOrchestrator; -export const NAME = "do-repeat-shuffle"; +export const CLASS = RepeatShuffleEngine; +export const NAME = "de-repeat-shuffle"; customElements.define(NAME, CLASS); diff --git a/src/components/orchestrator/queue-tracks/element.js b/src/components/orchestrator/auto-queue/element.js similarity index 57% rename from src/components/orchestrator/queue-tracks/element.js rename to src/components/orchestrator/auto-queue/element.js index f8eaeb173..644585ddf 100644 --- a/src/components/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/auto-queue/element.js @@ -2,10 +2,10 @@ import { BroadcastableDiffuseElement, query } from "@common/element.js"; import { untracked } from "@common/signal.js"; /** - * @import {Track} from "@definitions/types.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" * @import {InputElement} from "@components/input/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" + * @import RepeatShuffleEngine from "@components/engine/repeat-shuffle/element.js" * * @import {Actions} from "./types.d.ts" */ @@ -15,13 +15,14 @@ import { untracked } from "@common/signal.js"; //////////////////////////////////////////// /** - * Update the queue pool whenever - * tracks have been loaded, + * Update the queue pool whenever tracks have been loaded, * or the tracks collection changes. + * + * At the same time, */ -class QueueTracksOrchestrator extends BroadcastableDiffuseElement { - static NAME = "diffuse/orchestrator/queue-tracks"; - static WORKER_URL = "components/orchestrator/queue-tracks/worker.js"; +class AutoTracksOrchestrator extends BroadcastableDiffuseElement { + static NAME = "diffuse/orchestrator/auto-queue"; + static WORKER_URL = "components/orchestrator/auto-queue/worker.js"; /** @type {ProxiedActions} */ #proxy; @@ -60,15 +61,20 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { /** @type {import("@components/engine/queue/element.js").CLASS} */ const queue = query(this, "queue-engine-selector"); + /** @type {RepeatShuffleEngine} */ + const repeatShuffle = query(this, "repeat-shuffle-engine-selector"); + // Assign to self this.input = input; this.output = output; this.queue = queue; + this.repeatShuffle = repeatShuffle; // When defined - await customElements.whenDefined(this.input.localName); - await customElements.whenDefined(this.output.localName); - await customElements.whenDefined(this.queue.localName); + await customElements.whenDefined(input.localName); + await customElements.whenDefined(output.localName); + await customElements.whenDefined(queue.localName); + await customElements.whenDefined(repeatShuffle.localName); // Watch tracks collection this.effect(() => { @@ -76,11 +82,27 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { this.isLeader().then((isLeader) => { if (!isLeader) return; - untracked(() => this.#proxy.poolAvailable(tracks)); + untracked(() => this.#proxy.poolAvailable({ tracks })); + }); + }); + + // Automatically fill queue + this.effect(() => { + const trigger = queue.now(); + const _other_trigger = queue.supplyFingerprint(); + + this.isLeader().then((isLeader) => { + if (!isLeader) return; + + queue.fill({ amount: 10, shuffled: repeatShuffle.shuffle() }); + + // Insert now-playing track if there's none + if (!trigger) queue.shift(); }); }); - // 🌸 + // TODO: Clear non-manual items from the queue + // when 'shuffle' gets turned off or on. } // WORKERS @@ -99,13 +121,13 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { } } -export default QueueTracksOrchestrator; +export default AutoTracksOrchestrator; //////////////////////////////////////////// // REGISTER //////////////////////////////////////////// -export const CLASS = QueueTracksOrchestrator; -export const NAME = "do-queue-tracks"; +export const CLASS = AutoTracksOrchestrator; +export const NAME = "do-auto-queue"; -customElements.define(NAME, QueueTracksOrchestrator); +customElements.define(NAME, CLASS); diff --git a/src/components/orchestrator/queue-tracks/types.d.ts b/src/components/orchestrator/auto-queue/types.d.ts similarity index 59% rename from src/components/orchestrator/queue-tracks/types.d.ts rename to src/components/orchestrator/auto-queue/types.d.ts index 95a112b84..565e5e7ec 100644 --- a/src/components/orchestrator/queue-tracks/types.d.ts +++ b/src/components/orchestrator/auto-queue/types.d.ts @@ -1,5 +1,5 @@ import type { Track } from "@definitions/types.d.ts"; export type Actions = { - poolAvailable(tracks: Track[]): Promise; + poolAvailable(_: { tracks: Track[] }): Promise; }; diff --git a/src/components/orchestrator/queue-tracks/worker.js b/src/components/orchestrator/auto-queue/worker.js similarity index 94% rename from src/components/orchestrator/queue-tracks/worker.js rename to src/components/orchestrator/auto-queue/worker.js index 664e73f50..2a538f815 100644 --- a/src/components/orchestrator/queue-tracks/worker.js +++ b/src/components/orchestrator/auto-queue/worker.js @@ -16,7 +16,7 @@ import { ostiary, rpc, workerProxy } from "@common/worker.js"; * @type {ActionsWithTunnel["poolAvailable"]} */ export async function poolAvailable({ data, ports }) { - const cachedTracks = data.filter((t) => t.kind !== "placeholder"); + const cachedTracks = data.tracks.filter((t) => t.kind !== "placeholder"); /** @type {ProxiedActions} */ const input = workerProxy(() => ports.input); diff --git a/src/components/orchestrator/queue-audio/element.js b/src/components/orchestrator/queue-audio/element.js index 0edf35a87..7bfae73a7 100644 --- a/src/components/orchestrator/queue-audio/element.js +++ b/src/components/orchestrator/queue-audio/element.js @@ -1,8 +1,9 @@ import { BroadcastableDiffuseElement, query } from "@common/element.js"; -import { signal, untracked } from "@common/signal.js"; +import { untracked } from "@common/signal.js"; /** * @import {InputElement} from "@components/input/types.d.ts" + * @import RepeatShuffleEngine from "@components/engine/repeat-shuffle/element.js" */ //////////////////////////////////////////// @@ -18,11 +19,6 @@ import { signal, untracked } from "@common/signal.js"; */ class QueueAudioOrchestrator extends BroadcastableDiffuseElement { static NAME = "diffuse/orchestrator/queue-audio"; - static observedAttributes = ["repeat"]; - - // SIGNALS - - #repeat = signal(false); // LIFE CYCLE @@ -30,8 +26,6 @@ class QueueAudioOrchestrator extends BroadcastableDiffuseElement { * @override */ async connectedCallback() { - this.#repeat.value = this.hasAttribute("repeat"); - // Broadcast if needed if (this.hasAttribute("group")) { this.broadcast(this.nameWithGroup, {}); @@ -49,30 +43,20 @@ class QueueAudioOrchestrator extends BroadcastableDiffuseElement { /** @type {import("@components/engine/queue/element.js").CLASS} */ this.queue = query(this, "queue-engine-selector"); + /** @type {RepeatShuffleEngine} */ + this.repeatShuffle = query(this, "repeat-shuffle-engine-selector"); + // Wait until defined await customElements.whenDefined(this.audio.localName); await customElements.whenDefined(this.input.localName); await customElements.whenDefined(this.queue.localName); + await customElements.whenDefined(this.repeatShuffle.localName); // Effects this.effect(() => this.monitorActiveQueueItem()); this.effect(() => this.monitorAudioEnd()); } - /** - * @override - * @param {string} name - * @param {string} oldValue - * @param {string} newValue - */ - attributeChangedCallback(name, oldValue, newValue) { - super.attributeChangedCallback(name, oldValue, newValue); - - if (name === "repeat") { - this.#repeat.value = newValue != null; - } - } - // 🛠️ async monitorActiveQueueItem() { @@ -126,7 +110,7 @@ class QueueAudioOrchestrator extends BroadcastableDiffuseElement { // TODO: Not sure yet if this is the best way to approach this. // The idea is that scrobblers would more easily pick this up, // as opposed to just resetting the audio. - if (this.#repeat.value) { + if (this.repeatShuffle?.repeat()) { const now = this.queue.now(); if (now) { await this.queue.add({ diff --git a/src/index.vto b/src/index.vto index 60bcdbec4..32c7dc327 100644 --- a/src/index.vto +++ b/src/index.vto @@ -21,7 +21,7 @@ themes: - title: "Loader" todo: true desc: > - **A theme that loads other themes!** Load a theme from a URL, text snippet or from your user data output. _If you're taking the first steps to customize, checkout the [constituents loader](#constituents) first!_ + **A theme that loads other themes!** _If you're taking the first steps to customize, checkout the [constituents loader](#constituents) first!_ - url: "themes/webamp/" title: "Webamp" desc: > @@ -37,7 +37,7 @@ constituents: - url: "themes/loader/constituent/" title: "Loader" desc: > - **Bring in other constituents!** Load a constituent from a URL, text snippet or from your user data output. + **Bring in other constituents!** Load a constituent from a code snippet, store it in your user data output, explore community creations, or generate one. - url: "themes/webamp/browser/" title: "Webamp / Browser" desc: > diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 0b7cf503d..a1a1ef014 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -22,7 +22,7 @@ import { computed, signal, untracked } from "@common/signal.js"; * @import AudioEngine from "@components/engine/audio/element.js" * @import QueueEngine from "@components/engine/queue/element.js" * @import ArtworkProcessor from "@components/processor/artwork/element.js" - * @import RepeatShuffleOrchestrator from "@components/orchestrator/repeat-shuffle/element.js" + * @import RepeatShuffleEngine from "@components/engine/repeat-shuffle/element.js" */ class ArtworkController extends DiffuseElement { @@ -58,7 +58,7 @@ class ArtworkController extends DiffuseElement { $audio = signal(/** @type {AudioEngine | undefined} */ (undefined)); $input = signal(/** @type {InputElement | undefined} */ (undefined)); $queue = signal(/** @type {QueueEngine | undefined} */ (undefined)); - $repeatShuffle = signal(/** @type {RepeatShuffleOrchestrator | undefined} */ (undefined)); + $repeatShuffle = signal(/** @type {RepeatShuffleEngine | undefined} */ (undefined)); // SIGNALS - COMPUTED @@ -91,8 +91,8 @@ class ArtworkController extends DiffuseElement { /** @type {QueueEngine} */ const queue = query(this, "queue-engine-selector"); - /** @type {RepeatShuffleOrchestrator} */ - const repeatShuffle = query(this, "repeat-shuffle-orchestrator-selector"); + /** @type {RepeatShuffleEngine} */ + const repeatShuffle = query(this, "repeat-shuffle-engine-selector"); this.$artwork.value = artwork; this.$audio.value = audio; diff --git a/src/themes/blur/artwork-controller/index.js b/src/themes/blur/artwork-controller/index.js index 19e5cbc41..30bd84d66 100644 --- a/src/themes/blur/artwork-controller/index.js +++ b/src/themes/blur/artwork-controller/index.js @@ -1,18 +1,16 @@ import foundation from "@common/constituents/foundation.js"; -import { effect } from "@common/signal.js"; - import ArtworkController from "@themes/blur/artwork-controller/element.js"; // Setup the prerequisite elements -const assemblage = foundation.assemblage.playAudioFromQueue(); - -const aud = assemblage.engine.audio; -const inp = assemblage.orchestrator.input; -const oqa = assemblage.orchestrator.queueAudio; -const ors = assemblage.orchestrator.repeatShuffle; -const que = assemblage.engine.queue; +foundation.features.fillQueueAutomatically(); +foundation.features.playAudioFromQueue(); +foundation.features.processInputs(); +const aud = foundation.engine.audio(); const art = foundation.processor.artwork(); +const inp = foundation.orchestrator.input(); +const que = foundation.engine.queue(); +const rse = foundation.engine.repeatShuffle(); // Controller const dac = new ArtworkController(); @@ -20,18 +18,7 @@ dac.setAttribute("artwork-processor-selector", art.selector); dac.setAttribute("audio-engine-selector", aud.selector); dac.setAttribute("input-selector", inp.selector); dac.setAttribute("queue-engine-selector", que.selector); -dac.setAttribute("repeat-shuffle-orchestrator-selector", ors.selector); +dac.setAttribute("repeat-shuffle-engine-selector", rse.selector); // Add to DOM document.body.append(dac); - -// Effect - Link the repeat/shuffle & queue-audio orchestrators -effect(() => { - const repeat = ors.repeat(); - - if (repeat && !oqa.hasAttribute("repeat")) { - oqa.toggleAttribute("repeat"); - } else if (!repeat && oqa.hasAttribute("repeat")) { - oqa.removeAttribute("repeat"); - } -}); diff --git a/src/themes/blur/index.js b/src/themes/blur/index.js index a92a7c155..e69de29bb 100644 --- a/src/themes/blur/index.js +++ b/src/themes/blur/index.js @@ -1,59 +0,0 @@ -import "@components/input/opensubsonic/element.js"; -import "@components/processor/metadata/element.js"; - -import * as Audio from "@components/engine/audio/element.js"; -import * as Output from "@components/orchestrator/output/element.js"; -import * as Queue from "@components/engine/queue/element.js"; - -import { component } from "@common/element.js"; -import { effect } from "@common/signal.js"; - -const audio = component(Audio); -const output = component(Output); -const queue = component(Queue); - -globalThis.audio = audio; -globalThis.output = output; -globalThis.queue = queue; - -// 🚀 - -isLeader().then((bool) => { - if (!bool) return; - - // Only load these orchestrators if leader - import("@components/orchestrator/process-tracks/element.js"); - import("@components/orchestrator/queue-audio/element.js"); - import("@components/orchestrator/queue-tracks/element.js"); -}); - -// EFFECTS - -effect(() => { - console.log("Active queue item:", queue.now()); -}); - -effect(() => { - console.log("Queue pool hash:", queue.supplyFingerprint()); -}); - -/** - * Make sure there's always some random tracks in the queue. - */ -effect(() => { - const trigger = queue.now(); - const _other_trigger = queue.supplyFingerprint(); - - isLeader().then((bool) => { - if (bool) { - queue.fill({ amount: 10, shuffled: true }); - if (!trigger) queue.shift(); - } - }); -}); - -// 🛠️ - -async function isLeader() { - return await audio.isLeader(); -} diff --git a/src/themes/loader/constituent/index.js b/src/themes/loader/constituent/index.js index a686945f4..b07098889 100644 --- a/src/themes/loader/constituent/index.js +++ b/src/themes/loader/constituent/index.js @@ -40,9 +40,10 @@ effect(() => {
        - + Delete @@ -68,12 +69,14 @@ const emptyConstituentsList = html` `; /** - * @param {string} cid + * @param {{ cid: string; name: string }} _ */ -function deleteConstituent(cid) { +function deleteConstituent({ cid, name }) { return () => { output.constituents.save( - output.constituents.collection().filter((c) => c.cid !== cid), + output.constituents.collection().filter((c) => + !(c.name === name && c.cid === cid) + ), ); }; } diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index 047c11f5f..b30df60e0 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -112,7 +112,7 @@ scripts:

        Foundation

        - Diffuse comes with a foundation that preconfigures all elements so you don't have to set them up yourself, along with an assemblage of elements for certain activities. It internally tracks the DOM addition of the custom elements, so no need to worry about setting up an element multiple times. + Diffuse comes with a foundation that preconfigures all elements so you don't have to set them up yourself, along with a combination of elements for certain features. It internally tracks the DOM addition of the custom elements, so no need to worry about setting up an element multiple times.

        Refer to the elements index to find out what each element does. @@ -124,13 +124,13 @@ scripts: {{ /echo }} {{ echo -}}foundation.engine.audio(){{- /echo }} {{ echo -}}foundation.engine.queue(){{- /echo }} +{{ echo -}}foundation.engine.repeatShuffle(){{- /echo }} +{{ echo -}}foundation.orchestrator.autoQueue(){{- /echo }} {{ echo -}}foundation.orchestrator.input(){{- /echo }} {{ echo -}}foundation.orchestrator.output(){{- /echo }} {{ echo -}}foundation.orchestrator.queueAudio(){{- /echo }} -{{ echo -}}foundation.orchestrator.queueTracks(){{- /echo }} {{ echo -}}foundation.orchestrator.processTracks(){{- /echo }} -{{ echo -}}foundation.orchestrator.repeatShuffle(){{- /echo }} {{ echo -}}foundation.orchestrator.searchTracks(){{- /echo }} {{ echo -}}foundation.orchestrator.sources(){{- /echo }} @@ -141,28 +141,42 @@ scripts:

        - Assemblages: + Features:

          +
        • + Fill the queue automatically (infinite play) +
          + foundation.feature.fillQueueAutomatically() +
          +
        • Play audio from the queue
          - foundation.assemblage.playAudioFromQueue() + foundation.feature.playAudioFromQueue()
        • - Queue management + Process inputs (into tracks, etc)
          - foundation.assemblage.queueManagement() + foundation.feature.processInputs()
        • Search through your collection
          - foundation.assemblage.searchThroughCollection() + foundation.feature.searchThroughCollection()
        +

        Notes

        +

        + While you have the ability to do whatever you want in a custom constituent, the existing constituents are designed to work a certain way; so here's some things to keep in mind: +

        +
          +
        • In most cases you'll want to call foundation.feature.processInputs() so that your audio files and streams actually show up.
        • +
        • Most elements are configured in broadcast mode so they communicate across tabs. There are a few exceptions such as inputs, where we prefer parallelisation.
        • +
        diff --git a/src/themes/webamp/browser/index.js b/src/themes/webamp/browser/index.js index 2b945d3e1..0a04d6016 100644 --- a/src/themes/webamp/browser/index.js +++ b/src/themes/webamp/browser/index.js @@ -1,13 +1,19 @@ import foundation from "@common/constituents/foundation.js"; import BrowserElement from "@themes/webamp/browser/element.js"; -const que = foundation.assemblage.queueManagement(); -const sea = foundation.assemblage.searchThroughCollection(); +foundation.features.fillQueueAutomatically(); +foundation.features.processInputs(); +foundation.features.searchThroughCollection(); + +const inp = foundation.orchestrator.input(); +const out = foundation.orchestrator.output(); +const que = foundation.engine.queue(); +const sea = foundation.processor.search(); const el = new BrowserElement(); -el.setAttribute("input-selector", que.orchestrator.input.selector); -el.setAttribute("output-selector", que.orchestrator.output.selector); -el.setAttribute("queue-engine-selector", que.engine.queue.selector); -el.setAttribute("search-processor-selector", sea.processor.search.selector); +el.setAttribute("input-selector", inp.selector); +el.setAttribute("output-selector", out.selector); +el.setAttribute("queue-engine-selector", que.selector); +el.setAttribute("search-processor-selector", sea.selector); document.querySelector("#placeholder")?.replaceWith(el); diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index e79810d9a..7c63c5913 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,9 +1,9 @@ import "@components/input/opensubsonic/element.js"; import "@components/input/s3/element.js"; +import "@components/orchestrator/auto-queue/element.js"; import "@components/orchestrator/input/element.js"; import "@components/orchestrator/output/element.js"; import "@components/orchestrator/process-tracks/element.js"; -import "@components/orchestrator/queue-tracks/element.js"; import "@components/orchestrator/search-tracks/element.js"; import "@components/orchestrator/sources/element.js"; import "@components/processor/metadata/element.js"; From 2d16e35f4b6230c1c175a71c109ae38d0cd72251 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 6 Feb 2026 17:26:06 +0100 Subject: [PATCH 230/244] chore: update index page --- src/index.vto | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/index.vto b/src/index.vto index 32c7dc327..36093e81d 100644 --- a/src/index.vto +++ b/src/index.vto @@ -67,7 +67,10 @@ engines: desc: "Plays audio through audio elements." - url: "components/engine/queue/element.js" title: "Queue" - desc: "A simple queue for tracks." + desc: "A queue for tracks." + - url: "components/engine/repeat-shuffle/element.js" + title: "Repeat & Shuffle" + desc: "Signals synced with local storage (classified by group) that decide if audio should be repeated and if the queue should be shuffled when filling it." input: - url: "components/input/opensubsonic/element.js" @@ -96,6 +99,9 @@ input: todo: true orchestrators: + - url: "components/orchestrator/auto-queue/element.js" + title: "Automatic queue" + desc: "Sets the given queue element pool whenever the tracks signal from the given output changes. Additionally it always fills the queue automatically based (shuffled or regular, based on repeat-shuffle engine)." - url: "components/orchestrator/input/element.js" title: "Input" desc: "**A default input configuration.** Contains all the inputs provided here." @@ -108,12 +114,6 @@ orchestrators: - url: "components/orchestrator/queue-audio/element.js" title: "Queue ⭤ Audio" desc: "Connects the given queue engine to the given audio engine." - - url: "components/orchestrator/queue-tracks/element.js" - title: "Queue ⭤ Tracks" - desc: "Sets the given queue element pool whenever the tracks signal from the given output changes." - - url: "components/orchestrator/repeat-shuffle/element.js" - title: "Repeat & Shuffle" - desc: "An opinionated way to setup repeat & shuffle." - url: "components/orchestrator/sources/element.js" title: "Sources" desc: "Monitor tracks from the given output to form a list of sources based on the input's sources return value." From 8512c9ea40b1e0a6bd0856ad445bc4e1a879ae9d Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 6 Feb 2026 17:39:07 +0100 Subject: [PATCH 231/244] chore: add favourites todo --- src/index.vto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/index.vto b/src/index.vto index 36093e81d..c88000f27 100644 --- a/src/index.vto +++ b/src/index.vto @@ -65,6 +65,10 @@ engines: - url: "components/engine/audio/element.js" title: "Audio" desc: "Plays audio through audio elements." + - title: "Favourites" + desc: > + Mark tracks as favourites. Automatically creates an unordered 'Favourites' playlist. + todo: true - url: "components/engine/queue/element.js" title: "Queue" desc: "A queue for tracks." From 150b1dcac4c42697b9dd606f341020844b7b8326 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 6 Feb 2026 18:22:50 +0100 Subject: [PATCH 232/244] fix: typos --- src/themes/loader/constituent/index.vto | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index b30df60e0..445c1aa45 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -147,25 +147,25 @@ scripts:
      • Fill the queue automatically (infinite play)
        - foundation.feature.fillQueueAutomatically() + foundation.features.fillQueueAutomatically()
      • Play audio from the queue
        - foundation.feature.playAudioFromQueue() + foundation.features.playAudioFromQueue()
      • Process inputs (into tracks, etc)
        - foundation.feature.processInputs() + foundation.features.processInputs()
      • Search through your collection
        - foundation.feature.searchThroughCollection() + foundation.features.searchThroughCollection()
      @@ -174,7 +174,7 @@ scripts: While you have the ability to do whatever you want in a custom constituent, the existing constituents are designed to work a certain way; so here's some things to keep in mind:

        -
      • In most cases you'll want to call foundation.feature.processInputs() so that your audio files and streams actually show up.
      • +
      • In most cases you'll want to call foundation.features.processInputs() so that your audio files and streams actually show up.
      • Most elements are configured in broadcast mode so they communicate across tabs. There are a few exceptions such as inputs, where we prefer parallelisation.
      From 13c6a4a8c985c0685e141f207c1eab7df96c068f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 6 Feb 2026 18:38:07 +0100 Subject: [PATCH 233/244] fix: constituent loader examples --- .../constituent/examples/generate-playlist.txt | 3 ++- .../loader/constituent/examples/now-playing.txt | 11 +++++++---- src/themes/loader/constituent/index.js | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/themes/loader/constituent/examples/generate-playlist.txt b/src/themes/loader/constituent/examples/generate-playlist.txt index 27f0fc4ea..ccbb7b48f 100644 --- a/src/themes/loader/constituent/examples/generate-playlist.txt +++ b/src/themes/loader/constituent/examples/generate-playlist.txt @@ -1,5 +1,6 @@
      - +

      Generate a playlist based on playback history:

      +
        diff --git a/src/themes/loader/constituent/examples/now-playing.txt b/src/themes/loader/constituent/examples/now-playing.txt index 5eda5de02..009404f6b 100644 --- a/src/themes/loader/constituent/examples/now-playing.txt +++ b/src/themes/loader/constituent/examples/now-playing.txt @@ -1,5 +1,5 @@
        -
        Loading tracks ...
        +

        Loading tracks ...

        @@ -12,11 +12,14 @@ import foundation from "./common/constituents/foundation.js"; import { computed, effect } from "./common/signal.js"; - const components = foundation.assemblage.queueManagement(); - const queue = components.engine.queue; + foundation.features.processInputs(); + foundation.features.fillQueueAutomatically(); + + const output = foundation.orchestrator.output(); + const queue = foundation.engine.queue(); const isLoadingTracks = computed(() => { - return components.orchestrator.output.tracks.state() !== "loaded"; + return output.tracks.state() !== "loaded"; }); effect(() => { diff --git a/src/themes/loader/constituent/index.js b/src/themes/loader/constituent/index.js index b07098889..3ab006cf4 100644 --- a/src/themes/loader/constituent/index.js +++ b/src/themes/loader/constituent/index.js @@ -92,14 +92,29 @@ if (!editorContainer) throw new Error("Editor container not found"); const editor = new EditorView({ parent: editorContainer, doc: ` +
        +

        + Waiting on tracks & queue to load ... +

        +
        + + + `.trim(), From e629e4a45ca57a989c9610eee95672b4639b94c9 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 7 Feb 2026 22:49:39 +0100 Subject: [PATCH 234/244] feat: add url to constituent definition + theme definition --- deno.jsonc | 1 + src/definitions/index.ts | 1 + src/definitions/output/constituent.json | 13 ++++++++--- src/definitions/output/theme.json | 29 +++++++++++++++++++++++++ src/index.vto | 6 ++--- 5 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 src/definitions/output/theme.json diff --git a/deno.jsonc b/deno.jsonc index 9fc53f726..8493759ed 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -139,6 +139,7 @@ // .ts "./definitions/types/sh/diffuse/output/constituent.ts": "./src/definitions/types/sh/diffuse/output/constituent.ts", "./definitions/types/sh/diffuse/output/playlist.ts": "./src/definitions/types/sh/diffuse/output/playlist.ts", + "./definitions/types/sh/diffuse/output/theme.ts": "./src/definitions/types/sh/diffuse/output/theme.ts", "./definitions/types/sh/diffuse/output/track.ts": "./src/definitions/types/sh/diffuse/output/track.ts", }, "tasks": { diff --git a/src/definitions/index.ts b/src/definitions/index.ts index 63787798e..4b0c53e9e 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,3 +1,4 @@ export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.js"; export * as ShDiffuseOutputPlaylist from "./types/sh/diffuse/output/playlist.js"; +export * as ShDiffuseOutputTheme from "./types/sh/diffuse/output/theme.js"; export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.js"; diff --git a/src/definitions/output/constituent.json b/src/definitions/output/constituent.json index 90b917b37..13446b015 100644 --- a/src/definitions/output/constituent.json +++ b/src/definitions/output/constituent.json @@ -10,11 +10,18 @@ "properties": { "cid": { "type": "string", - "description": "A DASL CID representing the DRISL-encoded HTML (raw 0x55 codec)" + "description": "A DASL CID representing the UTF8 encoded HTML (raw 0x55 codec)" }, "description": { "type": "string" }, - "html": { "type": "string", "description": "The constituent HTML" }, - "name": { "type": "string" } + "html": { + "type": "string", + "description": "The UTF8 HTML string that makes up the constituent" + }, + "name": { "type": "string" }, + "url": { + "type": "string", + "description": "An optional URL that points at the constituent; can be used to update this artifact" + } } } } diff --git a/src/definitions/output/theme.json b/src/definitions/output/theme.json new file mode 100644 index 000000000..5e977b102 --- /dev/null +++ b/src/definitions/output/theme.json @@ -0,0 +1,29 @@ +{ + "lexicon": 1, + "id": "sh.diffuse.output.theme", + "defs": { + "main": { + "type": "record", + "record": { + "type": "object", + "required": ["cid", "html", "name"], + "properties": { + "cid": { + "type": "string", + "description": "A DASL CID representing the UTF8 encoded HTML (raw 0x55 codec)" + }, + "description": { "type": "string" }, + "html": { + "type": "string", + "description": "The UTF8 HTML string that makes up the theme" + }, + "name": { "type": "string" }, + "url": { + "type": "string", + "description": "An optional URL that points at the theme; can be used to update this artifact" + } + } + } + } + } +} diff --git a/src/index.vto b/src/index.vto index c88000f27..09b77961d 100644 --- a/src/index.vto +++ b/src/index.vto @@ -180,7 +180,7 @@ transformers: definitions: - title: "Output / Constituent" desc: > - Custom constituents to keep around. + Constituent pointer or HTML snippet. url: "definitions/output/constituent.json" - title: "Output / Playlist" desc: > @@ -192,8 +192,8 @@ definitions: todo: true - title: "Output / Theme" desc: > - Custom theme to keep around. - todo: true + Theme pointer or HTML snippet. + url: "definitions/output/theme.json" - title: "Output / Track" desc: > Represents audio that can be played, or a placeholder for a source of tracks. Contains a URI that will resolve to the audio. This object may be cached if convenient. From 9ec339c6b0da200f20efbda793e06be9afc57e6a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 7 Feb 2026 23:21:20 +0100 Subject: [PATCH 235/244] chore: clear some todos --- src/components/engine/queue/element.js | 1 + src/components/engine/queue/types.d.ts | 4 ++++ src/components/engine/queue/worker.js | 10 ++++++++++ src/components/input/opensubsonic/worker.js | 4 ---- src/components/orchestrator/auto-queue/element.js | 13 ++++++++++--- src/themes/blur/index.css | 4 ---- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/components/engine/queue/element.js b/src/components/engine/queue/element.js index 94ae8cb82..f89ba9932 100644 --- a/src/components/engine/queue/element.js +++ b/src/components/engine/queue/element.js @@ -25,6 +25,7 @@ class QueueEngine extends DiffuseElement { this.proxy = this.workerProxy(); this.add = this.proxy.add; + this.clear = this.proxy.clear; this.fill = this.proxy.fill; this.shift = this.proxy.shift; this.supply = this.proxy.supply; diff --git a/src/components/engine/queue/types.d.ts b/src/components/engine/queue/types.d.ts index 8a6338831..c9f317ab6 100644 --- a/src/components/engine/queue/types.d.ts +++ b/src/components/engine/queue/types.d.ts @@ -3,6 +3,10 @@ import type { SignalReader } from "@common/signal.d.ts"; export type Actions = { add: (args: { inFront?: boolean; tracks: Track[] }) => void; + /** + * Clear the `future()` items. + */ + clear: (args: { manualOnly?: boolean }) => void; fill: ( args: { /** Always keep adding, even if the amount of non-manual items in the queue are passed the given `amount` */ diff --git a/src/components/engine/queue/worker.js b/src/components/engine/queue/worker.js index 1290668cc..54a8235f7 100644 --- a/src/components/engine/queue/worker.js +++ b/src/components/engine/queue/worker.js @@ -38,6 +38,15 @@ export function add({ inFront, tracks }) { : [...$future.value, ...items]; } +/** + * @type {Actions['clear']} + */ +export function clear({ manualOnly }) { + $future.value = manualOnly + ? $future.value.filter((i) => i.manualEntry === true) + : []; +} + /** * @type {Actions['fill']} */ @@ -90,6 +99,7 @@ ostiary((context, _firstConnection, _connectionId) => { rpc(context, { add, + clear, fill, shift, supply, diff --git a/src/components/input/opensubsonic/worker.js b/src/components/input/opensubsonic/worker.js index 3ba7eee71..ef46ba526 100644 --- a/src/components/input/opensubsonic/worker.js +++ b/src/components/input/opensubsonic/worker.js @@ -260,10 +260,6 @@ export async function resolve({ uri }) { const songId = parsed.songId; if (!songId) return undefined; - // TODO: - // const expiresInSeconds = 60 * 60 * 24 * 7; // 7 days - // const expiresAtSeconds = Math.round(Date.now() / 1000) + expiresInSeconds; - const url = await client .stream({ id: songId, diff --git a/src/components/orchestrator/auto-queue/element.js b/src/components/orchestrator/auto-queue/element.js index 644585ddf..fc2de39c6 100644 --- a/src/components/orchestrator/auto-queue/element.js +++ b/src/components/orchestrator/auto-queue/element.js @@ -87,22 +87,29 @@ class AutoTracksOrchestrator extends BroadcastableDiffuseElement { }); // Automatically fill queue + let lastShuffle = repeatShuffle.shuffle(); + this.effect(() => { const trigger = queue.now(); const _other_trigger = queue.supplyFingerprint(); + const shuffled = repeatShuffle.shuffle(); this.isLeader().then((isLeader) => { if (!isLeader) return; + // Clear non-manual items from the queue + // when 'shuffle' gets turned off or on. + if (shuffled !== lastShuffle) { + lastShuffle = shuffled; + queue.clear({ manualOnly: true }); + } + queue.fill({ amount: 10, shuffled: repeatShuffle.shuffle() }); // Insert now-playing track if there's none if (!trigger) queue.shift(); }); }); - - // TODO: Clear non-manual items from the queue - // when 'shuffle' gets turned off or on. } // WORKERS diff --git a/src/themes/blur/index.css b/src/themes/blur/index.css index 6ac7fa78a..1bcd6bfe8 100644 --- a/src/themes/blur/index.css +++ b/src/themes/blur/index.css @@ -18,10 +18,6 @@ main { height: 100dvh; overflow: hidden; padding: var(--space-md) var(--space-md); - - /* TODO: & iframe { - border-radius: 6px; - }*/ } /*********************************** From 6d4024511e84ccf818caec94e10b4bf6ceeb6a72 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 7 Feb 2026 23:47:19 +0100 Subject: [PATCH 236/244] fix: add missing playlist properties to definition --- src/definitions/output/playlist.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/definitions/output/playlist.json b/src/definitions/output/playlist.json index 1ab874ab9..2286c394d 100644 --- a/src/definitions/output/playlist.json +++ b/src/definitions/output/playlist.json @@ -6,13 +6,15 @@ "type": "record", "record": { "type": "object", - "required": ["items", "name", "unordered"], + "required": ["id", "items", "name", "unordered"], "nullable": ["autoGenerate"], "properties": { + "id": { "type": "string" }, "autoGenerate": { "type": "ref", "ref": "#autoGenerate" }, + "createdAt": { "type": "string", "format": "datetime" }, "items": { "type": "array", "items": { @@ -27,7 +29,8 @@ "type": "boolean", "default": false, "description": "If this property is set to true, the playlist items should not be presented in order. It's considered an unordered collection of tracks." - } + }, + "updatedAt": { "type": "string", "format": "datetime" } } } }, From 509e23b9a7ea850920ac65187d2ffc68e14fe425 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 8 Feb 2026 23:38:29 +0100 Subject: [PATCH 237/244] feat: scoped-tracks orchestrator --- deno.jsonc | 8 +- src/common/constituents/foundation.js | 56 ++++--- src/common/element.js | 18 ++- src/components/engine/scope/element.js | 86 +++++++++++ .../orchestrator/auto-queue/element.js | 63 ++------ .../orchestrator/auto-queue/types.d.ts | 5 - .../orchestrator/auto-queue/worker.js | 51 ------- .../orchestrator/scoped-tracks/element.js | 142 ++++++++++++++++++ .../types.d.ts | 0 .../worker.js | 0 .../orchestrator/search-tracks/element.js | 103 ------------- .../output/refiner/default/element.js | 1 - src/index.vto | 12 +- src/themes/loader/constituent/index.vto | 3 +- src/themes/webamp/index.js | 13 +- src/themes/webamp/index.vto | 10 +- 16 files changed, 315 insertions(+), 256 deletions(-) create mode 100644 src/components/engine/scope/element.js delete mode 100644 src/components/orchestrator/auto-queue/types.d.ts delete mode 100644 src/components/orchestrator/auto-queue/worker.js create mode 100644 src/components/orchestrator/scoped-tracks/element.js rename src/components/orchestrator/{search-tracks => scoped-tracks}/types.d.ts (100%) rename src/components/orchestrator/{search-tracks => scoped-tracks}/worker.js (100%) delete mode 100644 src/components/orchestrator/search-tracks/element.js diff --git a/deno.jsonc b/deno.jsonc index 8493759ed..3d41f42df 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -81,6 +81,7 @@ "./components/engine/queue/element.js": "./src/components/engine/queue/element.js", "./components/engine/queue/worker.js": "./src/components/engine/queue/worker.js", "./components/engine/repeat-shuffle/element.js": "./src/components/engine/repeat-shuffle/element.js", + "./components/engine/scope/element.js": "./src/components/engine/scope/element.js", "./components/input/common.js": "./src/components/input/common.js", "./components/input/opensubsonic/common.js": "./src/components/input/opensubsonic/common.js", "./components/input/opensubsonic/constants.js": "./src/components/input/opensubsonic/constants.js", @@ -91,14 +92,13 @@ "./components/input/s3/element.js": "./src/components/input/s3/element.js", "./components/input/s3/worker.js": "./src/components/input/s3/worker.js", "./components/orchestrator/auto-queue/element.js": "./src/components/orchestrator/auto-queue/element.js", - "./components/orchestrator/auto-queue/worker.js": "./src/components/orchestrator/auto-queue/worker.js", "./components/orchestrator/input/element.js": "./src/components/orchestrator/input/element.js", "./components/orchestrator/output/element.js": "./src/components/orchestrator/output/element.js", "./components/orchestrator/process-tracks/element.js": "./src/components/orchestrator/process-tracks/element.js", "./components/orchestrator/process-tracks/worker.js": "./src/components/orchestrator/process-tracks/worker.js", "./components/orchestrator/queue-audio/element.js": "./src/components/orchestrator/queue-audio/element.js", - "./components/orchestrator/search-tracks/element.js": "./src/components/orchestrator/search-tracks/element.js", - "./components/orchestrator/search-tracks/worker.js": "./src/components/orchestrator/search-tracks/worker.js", + "./components/orchestrator/scoped-tracks/element.js": "./src/components/orchestrator/scoped-tracks/element.js", + "./components/orchestrator/scoped-tracks/worker.js": "./src/components/orchestrator/scoped-tracks/worker.js", "./components/orchestrator/sources/element.js": "./src/components/orchestrator/sources/element.js", "./components/output/common.js": "./src/components/output/common.js", "./components/output/polymorphic/indexed-db/constants.js": "./src/components/output/polymorphic/indexed-db/constants.js", @@ -128,7 +128,7 @@ "./components/input/types.d.ts": "./src/components/input/types.d.ts", "./components/orchestrator/auto-queue/types.d.ts": "./src/components/orchestrator/auto-queue/types.d.ts", "./components/orchestrator/process-tracks/types.d.ts": "./src/components/orchestrator/process-tracks/types.d.ts", - "./components/orchestrator/search-tracks/types.d.ts": "./src/components/orchestrator/search-tracks/types.d.ts", + "./components/orchestrator/scoped-tracks/types.d.ts": "./src/components/orchestrator/scoped-tracks/types.d.ts", "./components/output/polymorphic/indexed-db/types.d.ts": "./src/components/output/polymorphic/indexed-db/types.d.ts", "./components/output/types.d.ts": "./src/components/output/types.d.ts", "./components/processor/artwork/types.d.ts": "./src/components/processor/artwork/types.d.ts", diff --git a/src/common/constituents/foundation.js b/src/common/constituents/foundation.js index 4d06dfbfd..0a1376ba9 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/constituents/foundation.js @@ -9,7 +9,8 @@ import ProcessTracksOrchestrator from "@components/orchestrator/process-tracks/e import QueueAudioOrchestrator from "@components/orchestrator/queue-audio/element.js"; import RepeatShuffleEngine from "@components/engine/repeat-shuffle/element.js"; import SearchProcessor from "@components/processor/search/element.js"; -import SearchTracksOrchestrator from "@components/orchestrator/search-tracks/element.js"; +import ScopeEngine from "@components/engine/scope/element.js"; +import ScopedTracksOrchestrator from "@components/orchestrator/scoped-tracks/element.js"; import SourcesOrchestrator from "@components/orchestrator/sources/element.js"; /** @@ -36,6 +37,7 @@ export const config = { audio, queue, repeatShuffle, + scope, }, orchestrator: { autoQueue, @@ -43,7 +45,7 @@ export const config = { output, queueAudio, processTracks, - searchTracks, + scopedTracks, sources, }, processor: { @@ -62,11 +64,13 @@ function fillQueueAutomatically() { engine: { queue: queue(), repeatShuffle: repeatShuffle(), + scope: scope(), }, orchestrator: { autoQueue: autoQueue(), input: input(), output: output(), + scopedTracks: scopedTracks(), }, }; } @@ -98,9 +102,12 @@ function processInputs() { function searchThroughCollection() { return { + engine: { + scope: scope(), + }, orchestrator: { output: output(), - searchTracks: searchTracks(), + scopedTracks: scopedTracks(), }, processor: { search: search(), @@ -125,6 +132,20 @@ function queue() { return findExistingOrAdd(q); } +function repeatShuffle() { + const r = new RepeatShuffleEngine(); + r.setAttribute("group", GROUP); + + return findExistingOrAdd(r); +} + +function scope() { + const s = new ScopeEngine(); + s.setAttribute("group", GROUP); + + return findExistingOrAdd(s); +} + // Processors function artwork() { const a = new ArtworkProcessor(); @@ -149,17 +170,15 @@ function search() { // Orchestrators function autoQueue() { - const i = input(); - const o = output(); const q = queue(); const r = repeatShuffle(); + const t = scopedTracks(); const aqo = new AutoQueueOrchestrator(); aqo.setAttribute("group", GROUP); - aqo.setAttribute("input-selector", i.selector); - aqo.setAttribute("output-selector", o.selector); aqo.setAttribute("queue-engine-selector", q.selector); aqo.setAttribute("repeat-shuffle-engine-selector", r.selector); + aqo.setAttribute("tracks-selector", t.selector); return findExistingOrAdd(aqo); } @@ -211,25 +230,20 @@ function queueAudio() { return findExistingOrAdd(oqa); } -function repeatShuffle() { - const rse = new RepeatShuffleEngine(); - rse.setAttribute("group", GROUP); - - return findExistingOrAdd(rse); -} - -function searchTracks() { +function scopedTracks() { const i = input(); const o = output(); + const e = scope(); const s = search(); - const ost = new SearchTracksOrchestrator(); - ost.setAttribute("group", GROUP); - ost.setAttribute("input-selector", i.selector); - ost.setAttribute("output-selector", o.selector); - ost.setAttribute("search-processor-selector", s.selector); + const sto = new ScopedTracksOrchestrator(); + sto.setAttribute("group", GROUP); + sto.setAttribute("input-selector", i.selector); + sto.setAttribute("output-selector", o.selector); + sto.setAttribute("scope-engine-selector", e.selector); + sto.setAttribute("search-processor-selector", s.selector); - return findExistingOrAdd(ost); + return findExistingOrAdd(sto); } function sources() { diff --git a/src/common/element.js b/src/common/element.js index b94eb0711..8c1045ae1 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -518,10 +518,26 @@ export function query(parent, attribute) { /** @type {T | null} */ const element = document.querySelector(selector); if (!element) throw new Error(`Missing required '${selector}' element`); - return element; } +/** + * @template {HTMLElement} T + * @param {DiffuseElement} parent + * @param {string} attribute + */ +export function queryOptional(parent, attribute) { + const selector = parent.getAttribute(attribute); + + if (!selector) { + return null; + } + + /** @type {T | null} */ + const elementOrNull = document.querySelector(selector); + return elementOrNull; +} + /** * @param {Record} workers */ diff --git a/src/components/engine/scope/element.js b/src/components/engine/scope/element.js new file mode 100644 index 000000000..0a4f941b0 --- /dev/null +++ b/src/components/engine/scope/element.js @@ -0,0 +1,86 @@ +import { BroadcastableDiffuseElement } from "@common/element.js"; +import { signal } from "@common/signal.js"; + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class ScopeEngine extends BroadcastableDiffuseElement { + static NAME = "diffuse/engine/scope"; + + // SIGNALS + + #playlistId = signal(/** @type {string | undefined} */ (undefined)); + #searchTerm = signal(/** @type {string | undefined} */ (undefined)); + + playlistId = this.#playlistId.get; + searchTerm = this.#searchTerm.get; + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + const actions = this.broadcast(this.nameWithGroup, { + setPlaylistId: { strategy: "replicate", fn: this.setPlaylistId }, + setSearchTerm: { strategy: "replicate", fn: this.setSearchTerm }, + }); + + if (actions) { + this.setPlaylistId = actions.setPlaylistId; + this.setSearchTerm = actions.setSearchTerm; + } + } + + // Super + super.connectedCallback(); + + // Signals + const storagePrefix = + `${this.constructor.prototype.constructor.NAME}/${this.group}/`; + + this.#playlistId.value = + localStorage.getItem(`${storagePrefix}/playlistId`) ?? undefined; + this.#searchTerm.value = + localStorage.getItem(`${storagePrefix}/searchTerm`) ?? undefined; + + // Effects + this.effect(() => { + const key = `${storagePrefix}/playlistId`; + const val = this.#playlistId.value; + + if (val) localStorage.setItem(key, val); + else localStorage.removeItem(key); + }); + + this.effect(() => { + const key = `${storagePrefix}/searchTerm`; + const val = this.#searchTerm.value; + + if (val) localStorage.setItem(key, val); + else localStorage.removeItem(key); + }); + } + + // ACTIONS + + /** @param {string | undefined} val */ + setPlaylistId = async (val) => this.#playlistId.value = val; + + /** @param {string | undefined} val */ + setSearchTerm = async (val) => this.#searchTerm.value = val; +} + +export default ScopeEngine; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = ScopeEngine; +export const NAME = "de-scope"; + +customElements.define(NAME, CLASS); diff --git a/src/components/orchestrator/auto-queue/element.js b/src/components/orchestrator/auto-queue/element.js index fc2de39c6..fb83f001e 100644 --- a/src/components/orchestrator/auto-queue/element.js +++ b/src/components/orchestrator/auto-queue/element.js @@ -1,13 +1,10 @@ import { BroadcastableDiffuseElement, query } from "@common/element.js"; -import { untracked } from "@common/signal.js"; /** - * @import {ProxiedActions} from "@common/worker.d.ts" - * @import {InputElement} from "@components/input/types.d.ts" - * @import {OutputElement} from "@components/output/types.d.ts" + * @import {DiffuseElement} from "@common/element.js"; + * @import {SignalReader} from "@common/signal.d.ts"; + * @import {Track} from "@definitions/types.d.ts" * @import RepeatShuffleEngine from "@components/engine/repeat-shuffle/element.js" - * - * @import {Actions} from "./types.d.ts" */ //////////////////////////////////////////// @@ -17,26 +14,9 @@ import { untracked } from "@common/signal.js"; /** * Update the queue pool whenever tracks have been loaded, * or the tracks collection changes. - * - * At the same time, */ class AutoTracksOrchestrator extends BroadcastableDiffuseElement { static NAME = "diffuse/orchestrator/auto-queue"; - static WORKER_URL = "components/orchestrator/auto-queue/worker.js"; - - /** @type {ProxiedActions} */ - #proxy; - - constructor() { - super(); - this.#proxy = this.workerProxy({ - forceNew: { - dependencies: { - input: true, - }, - }, - }); - } // LIFECYCLE @@ -52,37 +32,27 @@ class AutoTracksOrchestrator extends BroadcastableDiffuseElement { // Super super.connectedCallback(); - /** @type {InputElement} */ - const input = query(this, "input-selector"); - - /** @type {OutputElement} */ - const output = query(this, "output-selector"); - /** @type {import("@components/engine/queue/element.js").CLASS} */ const queue = query(this, "queue-engine-selector"); /** @type {RepeatShuffleEngine} */ const repeatShuffle = query(this, "repeat-shuffle-engine-selector"); - // Assign to self - this.input = input; - this.output = output; - this.queue = queue; - this.repeatShuffle = repeatShuffle; + /** @type {DiffuseElement & { tracks: SignalReader }} */ + const tracksElement = query(this, "tracks-selector"); // When defined - await customElements.whenDefined(input.localName); - await customElements.whenDefined(output.localName); await customElements.whenDefined(queue.localName); await customElements.whenDefined(repeatShuffle.localName); + await customElements.whenDefined(tracksElement.localName); - // Watch tracks collection + // Watch tracks this.effect(() => { - const tracks = output.tracks.collection(); + const tracks = tracksElement.tracks(); this.isLeader().then((isLeader) => { if (!isLeader) return; - untracked(() => this.#proxy.poolAvailable({ tracks })); + queue.supply({ tracks }); }); }); @@ -111,21 +81,6 @@ class AutoTracksOrchestrator extends BroadcastableDiffuseElement { }); }); } - - // WORKERS - - /** - * @override - */ - dependencies() { - if (!this.input) throw new Error("Input element not defined yet"); - if (!this.queue) throw new Error("Queue element not defined yet"); - - return { - input: this.input, - queue: this.queue, - }; - } } export default AutoTracksOrchestrator; diff --git a/src/components/orchestrator/auto-queue/types.d.ts b/src/components/orchestrator/auto-queue/types.d.ts deleted file mode 100644 index 565e5e7ec..000000000 --- a/src/components/orchestrator/auto-queue/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { Track } from "@definitions/types.d.ts"; - -export type Actions = { - poolAvailable(_: { tracks: Track[] }): Promise; -}; diff --git a/src/components/orchestrator/auto-queue/worker.js b/src/components/orchestrator/auto-queue/worker.js deleted file mode 100644 index 2a538f815..000000000 --- a/src/components/orchestrator/auto-queue/worker.js +++ /dev/null @@ -1,51 +0,0 @@ -import { ostiary, rpc, workerProxy } from "@common/worker.js"; - -/** - * @import {Track} from "@definitions/types.d.ts" - * @import {ActionsWithTunnel, ProxiedActions} from "@common/worker.d.ts" - * @import {InputActions} from "@components/input/types.d.ts" - * @import {Actions as QueueEngineActions} from "@components/engine/queue/types.d.ts" - * @import {Actions} from "./types.d.ts" - */ - -//////////////////////////////////////////// -// ACTIONS -//////////////////////////////////////////// - -/** - * @type {ActionsWithTunnel["poolAvailable"]} - */ -export async function poolAvailable({ data, ports }) { - const cachedTracks = data.tracks.filter((t) => t.kind !== "placeholder"); - - /** @type {ProxiedActions} */ - const input = workerProxy(() => ports.input); - - /** @type {ProxiedActions} */ - const queue = workerProxy(() => ports.queue); - - ports.input.start(); - ports.queue.start(); - - // Consult input - const groups = await input.groupConsult(cachedTracks); - - /** @type {Track[]} */ - let availableTracks = []; - - Object.values(groups).forEach((value) => { - if (value.available === false) return; - availableTracks = availableTracks.concat(value.tracks); - }, []); - - // Set pool - await queue.supply({ tracks: availableTracks }); -} - -//////////////////////////////////////////// -// ⚡️ -//////////////////////////////////////////// - -ostiary((context) => { - rpc(context, { poolAvailable }); -}); diff --git a/src/components/orchestrator/scoped-tracks/element.js b/src/components/orchestrator/scoped-tracks/element.js new file mode 100644 index 000000000..74866dbd8 --- /dev/null +++ b/src/components/orchestrator/scoped-tracks/element.js @@ -0,0 +1,142 @@ +import { + BroadcastableDiffuseElement, + query, + queryOptional, +} from "@common/element.js"; +import { signal, untracked } from "@common/signal.js"; + +/** + * @import {Track} from "@definitions/types.d.ts" + * @import {ProxiedActions} from "@common/worker.d.ts" + * @import {InputElement} from "@components/input/types.d.ts" + * @import {OutputElement} from "@components/output/types.d.ts" + * + * @import {Actions} from "./types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +class ScopedTracksOrchestrator extends BroadcastableDiffuseElement { + static NAME = "diffuse/orchestrator/scoped-tracks"; + static WORKER_URL = "components/orchestrator/scoped-tracks/worker.js"; + + /** @type {ProxiedActions} */ + #proxy; + + constructor() { + super(); + this.#proxy = this.workerProxy({ + forceNew: { + dependencies: { + input: true, + }, + }, + }); + } + + // SIGNALS + + #input = signal(/** @type {InputElement | null} */ (null)); + #output = signal(/** @type {OutputElement | null} */ (null)); + + #search = signal( + /** @type {import("@components/processor/search/element.js").CLASS | null} */ (null), + ); + + #scope = signal( + /** @type {import("@components/engine/scope/element.js").CLASS | null} */ (null), + ); + + #tracks = signal(/** @type {Track[]} */ ([])); + + // STATE + + tracks = this.#tracks.get; + + // LIFECYCLE + + /** + * @override + */ + async connectedCallback() { + // Broadcast if needed + if (this.hasAttribute("group")) { + this.broadcast(this.nameWithGroup, {}); + } + + // Super + super.connectedCallback(); + + /** @type {InputElement} */ + const input = query(this, "input-selector"); + + /** @type {OutputElement} */ + const output = query(this, "output-selector"); + + /** @type {import("@components/processor/search/element.js").CLASS} */ + const search = query(this, "search-processor-selector"); + + /** @type {import("@components/engine/scope/element.js").CLASS | null} */ + const scope = queryOptional(this, "scope-engine-selector"); + + // Assign to self + this.#input.value = input; + this.#output.value = output; + this.#search.value = search; + if (scope) this.#scope.value = scope; + + // When defined + await customElements.whenDefined(output.localName); + if (scope) await customElements.whenDefined(scope.localName); + + // Watch tracks collection + this.effect(async () => { + const collection = output.tracks.collection(); + if ((await this.isLeader()) === false) return; + this.#proxy.supplyAvailable(collection); + }); + + // Watch search supply + this.effect(async () => { + const _trigger = search.supplyFingerprint(); + const searchTerm = this.#scope.value?.searchTerm(); + + if ((await this.isLeader()) === false) return; + + const searchResults = searchTerm + ? await this.#search.value?.search({ term: searchTerm }) + : untracked(() => output.tracks.collection()); + + // TODO: Playlist selection + this.#tracks.value = searchResults ?? []; + }); + } + + // WORKERS + + /** + * @override + */ + dependencies() { + if (!this.#input.value) throw new Error("Input element not defined yet"); + if (!this.#search.value) throw new Error("Search element not defined yet"); + + return { + input: this.#input.value, + search: this.#search.value, + }; + } +} + +export default ScopedTracksOrchestrator; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = ScopedTracksOrchestrator; +export const NAME = "do-scoped-tracks"; + +customElements.define(NAME, CLASS); diff --git a/src/components/orchestrator/search-tracks/types.d.ts b/src/components/orchestrator/scoped-tracks/types.d.ts similarity index 100% rename from src/components/orchestrator/search-tracks/types.d.ts rename to src/components/orchestrator/scoped-tracks/types.d.ts diff --git a/src/components/orchestrator/search-tracks/worker.js b/src/components/orchestrator/scoped-tracks/worker.js similarity index 100% rename from src/components/orchestrator/search-tracks/worker.js rename to src/components/orchestrator/scoped-tracks/worker.js diff --git a/src/components/orchestrator/search-tracks/element.js b/src/components/orchestrator/search-tracks/element.js deleted file mode 100644 index 58b7c4958..000000000 --- a/src/components/orchestrator/search-tracks/element.js +++ /dev/null @@ -1,103 +0,0 @@ -import { BroadcastableDiffuseElement, query } from "@common/element.js"; - -/** - * @import {Track} from "@definitions/types.d.ts" - * @import {ProxiedActions} from "@common/worker.d.ts" - * @import {InputElement} from "@components/input/types.d.ts" - * @import {OutputElement} from "@components/output/types.d.ts" - * - * @import {Actions} from "./types.d.ts" - */ - -//////////////////////////////////////////// -// ELEMENT -//////////////////////////////////////////// - -/** - * Fill the search supply automatically with - * tracks whenever they have been loaded, - * or the tracks collection changes. - */ -class SearchTracksOrchestrator extends BroadcastableDiffuseElement { - static NAME = "diffuse/orchestrator/search-tracks"; - static WORKER_URL = "components/orchestrator/search-tracks/worker.js"; - - /** @type {ProxiedActions} */ - #proxy; - - constructor() { - super(); - this.#proxy = this.workerProxy({ - forceNew: { - dependencies: { - input: true, - }, - }, - }); - } - - // LIFECYCLE - - /** - * @override - */ - async connectedCallback() { - // Broadcast if needed - if (this.hasAttribute("group")) { - this.broadcast(this.nameWithGroup, {}); - } - - // Super - super.connectedCallback(); - - /** @type {InputElement} */ - const input = query(this, "input-selector"); - - /** @type {OutputElement} */ - const output = query(this, "output-selector"); - - /** @type {import("@components/processor/search/element.js").CLASS} */ - const search = query(this, "search-processor-selector"); - - // Assign to self - this.input = input; - this.output = output; - this.search = search; - - // When defined - await customElements.whenDefined(this.output.localName); - - // Watch tracks collection - this.effect(async () => { - const collection = output.tracks.collection(); - if ((await this.isLeader()) === false) return; - this.#proxy.supplyAvailable(collection); - }); - } - - // WORKERS - - /** - * @override - */ - dependencies() { - if (!this.input) throw new Error("Input element not defined yet"); - if (!this.search) throw new Error("Search element not defined yet"); - - return { - input: this.input, - search: this.search, - }; - } -} - -export default SearchTracksOrchestrator; - -//////////////////////////////////////////// -// REGISTER -//////////////////////////////////////////// - -export const CLASS = SearchTracksOrchestrator; -export const NAME = "do-search-tracks"; - -customElements.define(NAME, SearchTracksOrchestrator); diff --git a/src/components/transformer/output/refiner/default/element.js b/src/components/transformer/output/refiner/default/element.js index 2bbd6eb7e..87532cd37 100644 --- a/src/components/transformer/output/refiner/default/element.js +++ b/src/components/transformer/output/refiner/default/element.js @@ -3,7 +3,6 @@ import { OutputTransformer } from "../../base.js"; /** * @import { OutputManagerDeputy } from "../../../../output/types.d.ts" - * @import { Track } from "@definitions/types.d.ts" */ /** diff --git a/src/index.vto b/src/index.vto index 09b77961d..bc11be646 100644 --- a/src/index.vto +++ b/src/index.vto @@ -75,6 +75,10 @@ engines: - url: "components/engine/repeat-shuffle/element.js" title: "Repeat & Shuffle" desc: "Signals synced with local storage (classified by group) that decide if audio should be repeated and if the queue should be shuffled when filling it." + - url: "components/engine/scope/element.js" + title: "Scope" + desc: > + Signals that could influence the scope of a set of tracks. input: - url: "components/input/opensubsonic/element.js" @@ -105,7 +109,7 @@ input: orchestrators: - url: "components/orchestrator/auto-queue/element.js" title: "Automatic queue" - desc: "Sets the given queue element pool whenever the tracks signal from the given output changes. Additionally it always fills the queue automatically based (shuffled or regular, based on repeat-shuffle engine)." + desc: > Fill the queue automatically with non-manual items (shuffled or regular, based on repeat-shuffle engine). - url: "components/orchestrator/input/element.js" title: "Input" desc: "**A default input configuration.** Contains all the inputs provided here." @@ -121,9 +125,9 @@ orchestrators: - url: "components/orchestrator/sources/element.js" title: "Sources" desc: "Monitor tracks from the given output to form a list of sources based on the input's sources return value." - - url: "components/orchestrator/search-tracks/element.js" - title: "Search ⭤ Tracks" - desc: "Supplies tracks to the given search processor whenever the tracks collection changes." + - url: "components/orchestrator/scoped-tracks/element.js" + title: "Scoped Tracks" + desc: "Supplies the tracks from the given output to the given search processor whenever the tracks collection changes. Additionally it can perform a search and other ways to reduce the scope of tracks based on the given scope engine. Provides a `tracks` signal similar to `output.tracks.collection`" output: - title: "Bytes / Automerge Repo" diff --git a/src/themes/loader/constituent/index.vto b/src/themes/loader/constituent/index.vto index 445c1aa45..5e6730f59 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/themes/loader/constituent/index.vto @@ -125,13 +125,14 @@ scripts: {{ echo -}}foundation.engine.audio(){{- /echo }} {{ echo -}}foundation.engine.queue(){{- /echo }} {{ echo -}}foundation.engine.repeatShuffle(){{- /echo }} +{{ echo -}}foundation.engine.scope(){{- /echo }} {{ echo -}}foundation.orchestrator.autoQueue(){{- /echo }} {{ echo -}}foundation.orchestrator.input(){{- /echo }} {{ echo -}}foundation.orchestrator.output(){{- /echo }} {{ echo -}}foundation.orchestrator.queueAudio(){{- /echo }} {{ echo -}}foundation.orchestrator.processTracks(){{- /echo }} -{{ echo -}}foundation.orchestrator.searchTracks(){{- /echo }} +{{ echo -}}foundation.orchestrator.scopedTracks(){{- /echo }} {{ echo -}}foundation.orchestrator.sources(){{- /echo }} {{ echo -}}foundation.processor.artwork(){{- /echo }} diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 7c63c5913..c3e12d6f5 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,19 +1,18 @@ import "@components/input/opensubsonic/element.js"; import "@components/input/s3/element.js"; -import "@components/orchestrator/auto-queue/element.js"; import "@components/orchestrator/input/element.js"; import "@components/orchestrator/output/element.js"; import "@components/orchestrator/process-tracks/element.js"; -import "@components/orchestrator/search-tracks/element.js"; import "@components/orchestrator/sources/element.js"; import "@components/processor/metadata/element.js"; import * as Input from "@components/configurator/input/element.js"; import * as Queue from "@components/engine/queue/element.js"; import * as Search from "@components/processor/search/element.js"; +import * as ScopedTracks from "@components/orchestrator/scoped-tracks/element.js"; import { component } from "@common/element.js"; -import { effect, signal, untracked } from "@common/signal.js"; +import { effect, untracked } from "@common/signal.js"; import "./browser/element.js"; import "./configurators/input/element.js"; @@ -31,6 +30,7 @@ import WebampElement from "./webamp/element.js"; const input = component(Input); const queue = component(Queue); const search = component(Search); +const scopedTracks = component(ScopedTracks); /** @type {OutputElement | null} */ const output = document.querySelector("#output"); @@ -126,6 +126,13 @@ effect(() => { } }); +/** + * Fill queue supply with available tracks. + */ +effect(() => { + queue.supply({ tracks: scopedTracks.tracks() }); +}); + /** * Keep note of when search is ready. */ diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index 2fb6ae789..0a0ec396e 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -171,17 +171,11 @@ styles: process-when-ready > - - - +> Date: Sun, 8 Feb 2026 23:39:21 +0100 Subject: [PATCH 238/244] fix: markdown typo --- src/index.vto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/index.vto b/src/index.vto index bc11be646..1f98a4c50 100644 --- a/src/index.vto +++ b/src/index.vto @@ -109,7 +109,8 @@ input: orchestrators: - url: "components/orchestrator/auto-queue/element.js" title: "Automatic queue" - desc: > Fill the queue automatically with non-manual items (shuffled or regular, based on repeat-shuffle engine). + desc: > + Fill the queue automatically with non-manual items (shuffled or regular, based on repeat-shuffle engine). - url: "components/orchestrator/input/element.js" title: "Input" desc: "**A default input configuration.** Contains all the inputs provided here." From 217b5e8630c4f28520ff81919e9b73455173303a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 9 Feb 2026 22:05:04 +0100 Subject: [PATCH 239/244] fix: type errors --- deno.jsonc | 2 +- .../output/bytes/automerge/constants.js | 25 ++++++- .../output/bytes/automerge/element.js | 46 +++++++++++-- .../output/bytes/automerge/types.d.ts | 10 ++- .../output/bytes/automerge/utils.js | 4 +- .../transformer/output/bytes/json/element.js | 65 ++++++++++++------- src/definitions/index.ts | 8 +-- src/definitions/types.d.ts | 2 + tasks/replace-gen-import-extensions.ts | 9 +++ 9 files changed, 132 insertions(+), 39 deletions(-) create mode 100644 tasks/replace-gen-import-extensions.ts diff --git a/deno.jsonc b/deno.jsonc index 3d41f42df..302fffd8f 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -149,7 +149,7 @@ }, "gen:defs:types": { "description": "Generate definition Typescript types", - "command": "deno run -A npm:@atcute/lex-cli generate -c ./lexicon.config.js", + "command": "deno run -A npm:@atcute/lex-cli generate -c ./lexicon.config.js && deno run -A ./tasks/replace-gen-import-extensions.ts", }, "lume": { "description": "Run Lume command", diff --git a/src/components/transformer/output/bytes/automerge/constants.js b/src/components/transformer/output/bytes/automerge/constants.js index ff91b4575..71fe1125a 100644 --- a/src/components/transformer/output/bytes/automerge/constants.js +++ b/src/components/transformer/output/bytes/automerge/constants.js @@ -2,12 +2,33 @@ import * as Automerge from "@automerge/automerge"; import { base64 } from "iso-base/rfc4648"; /** - * @import { TracksDocument } from "./types.d.ts"; + * @import { ConstituentsDocument, PlaylistsDocument, ThemesDocument, TracksDocument } from "./types.d.ts"; */ +/** @type {Automerge.Doc} */ +export const INITIAL_CONSTITUENTS_DOCUMENT = Automerge.load( + base64.decode( + "hW9Kg1fmLLcAeAEQZ2dnbV0O8AUftAeEXT1QVQHsmc9lhGh1ysz4ECa3pEUgzSZG2aF8hob78u7FqeybBQYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf8KTqcwGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", + ), +); + +/** @type {Automerge.Doc} */ +export const INITIAL_PLAYLISTS_DOCUMENT = Automerge.load( + base64.decode( + "hW9Kg5IPZcsAeAEQIyp0LRYp0l9bpZKWJXTPlgGtUD/lrIatFjiIwoUdtJhh/sBQFIcpPppxduoIp1ArXwYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf8eTqcwGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", + ), +); + +/** @type {Automerge.Doc} */ +export const INITIAL_THEMES_DOCUMENT = Automerge.load( + base64.decode( + "hW9Kgw5i4LcAeAEQzljXzJAwgqwMkIT3CseCywF4jHbKg9Q2XqVU26bSDj0GtjkQq1HyriZedXU+vUt5wAYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf8iTqcwGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", + ), +); + /** @type {Automerge.Doc} */ export const INITIAL_TRACKS_DOCUMENT = Automerge.load( base64.decode( - "hW9Kg3QEcPYAeAEQhsIBj6DgCDtXSHEiZhcqigHxj0/xVpP8KdUJQ8e6qVEgaz7v6CpLuCGB58iHmx4plQYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf9Xbz8sGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", + "hW9Kg+NQ56QAeAEQxkdUqSHSfh9+5TiM1gnDswH+Nh6PA98q+0oB013slgls/ARH8Fi5NvI9jhK2RZ1DTgYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf5eSqcwGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", ), ); diff --git a/src/components/transformer/output/bytes/automerge/element.js b/src/components/transformer/output/bytes/automerge/element.js index 8e0cdbb4f..9def536c0 100644 --- a/src/components/transformer/output/bytes/automerge/element.js +++ b/src/components/transformer/output/bytes/automerge/element.js @@ -2,15 +2,17 @@ import * as Automerge from "@automerge/automerge"; import { isUint8Array } from "iso-base/utils"; import { computed } from "@common/signal.js"; +import { recursivelyCloneRecords } from "@common/utils.js"; import { OutputTransformer } from "../../base.js"; -import { INITIAL_TRACKS_DOCUMENT } from "./constants.js"; -import { recursivelyCloneRecords } from "@toko/diffuse/common/utils.js"; +import { + INITIAL_CONSTITUENTS_DOCUMENT, + INITIAL_TRACKS_DOCUMENT, +} from "./constants.js"; /** * @import { SignalReader } from "@common/signal.d.ts"; * @import { OutputManagerDeputy } from "@components/output/types.d.ts" - * @import { Track } from "@definitions/types.d.ts" - * @import { TracksDocument } from "./types.d.ts" + * @import { ConstituentsDocument, PlaylistsDocument, ThemesDocument, TracksDocument } from "./types.d.ts" */ /** @@ -22,8 +24,22 @@ class AutomergeBytesOutputTransformer extends OutputTransformer { const base = this.base(); + /** @type {SignalReader>} */ + const constituentsDocument = computed(() => { + const value = base.constituents.collection(); + + if (isUint8Array(value)) { + return Automerge.load(value); + } else if (value == undefined) { + return INITIAL_CONSTITUENTS_DOCUMENT; + } else { + // TODO: Better error + throw new Error("Invalid data type"); + } + }); + /** @type {SignalReader>} */ - const document = computed(() => { + const tracksDocument = computed(() => { const value = base.tracks.collection(); if (isUint8Array(value)) { @@ -38,11 +54,27 @@ class AutomergeBytesOutputTransformer extends OutputTransformer { /** @type {OutputManagerDeputy} */ const manager = { + constituents: { + ...base.constituents, + collection: computed(() => constituentsDocument().collection), + save: async (newConstituents) => { + const doc = Automerge.change(constituentsDocument(), (d) => { + const clonedCollection = newConstituents.map((constituent) => { + return recursivelyCloneRecords(constituent); + }); + + d.collection = clonedCollection; + }); + + const bytes = Automerge.save(doc); + await base.constituents.save(bytes); + }, + }, tracks: { ...base.tracks, - collection: computed(() => document().collection), + collection: computed(() => tracksDocument().collection), save: async (newTracks) => { - const doc = Automerge.change(document(), (d) => { + const doc = Automerge.change(tracksDocument(), (d) => { const clonedCollection = newTracks.map((track) => { return recursivelyCloneRecords(track); }); diff --git a/src/components/transformer/output/bytes/automerge/types.d.ts b/src/components/transformer/output/bytes/automerge/types.d.ts index 36dc1a91a..50a65046b 100644 --- a/src/components/transformer/output/bytes/automerge/types.d.ts +++ b/src/components/transformer/output/bytes/automerge/types.d.ts @@ -1,3 +1,11 @@ -import type { Track } from "@definitions/types.d.ts"; +import type { + Constituent, + Playlist, + Theme, + Track, +} from "@definitions/types.d.ts"; +export type ConstituentsDocument = { collection: Constituent[] }; +export type PlaylistsDocument = { collection: Playlist[] }; +export type ThemesDocument = { collection: Theme[] }; export type TracksDocument = { collection: Track[] }; diff --git a/src/components/transformer/output/bytes/automerge/utils.js b/src/components/transformer/output/bytes/automerge/utils.js index f264ce9fc..6b1d080ac 100644 --- a/src/components/transformer/output/bytes/automerge/utils.js +++ b/src/components/transformer/output/bytes/automerge/utils.js @@ -2,9 +2,9 @@ import * as Automerge from "@automerge/automerge"; import { base64 } from "iso-base/rfc4648"; /** - * Generate a new tracks document to put in the `INITIAL_TRACKS_DOCUMENT` constant. + * Generate a new collection document. */ -export function initTracksDoc() { +export function initCollectionDoc() { const doc = Automerge.change(Automerge.init(), (doc) => { doc.collection = []; }); diff --git a/src/components/transformer/output/bytes/json/element.js b/src/components/transformer/output/bytes/json/element.js index ee4579068..b0ac1cbe9 100644 --- a/src/components/transformer/output/bytes/json/element.js +++ b/src/components/transformer/output/bytes/json/element.js @@ -3,7 +3,7 @@ import { OutputTransformer } from "../../base.js"; /** * @import { OutputManagerDeputy } from "@components/output/types.d.ts" - * @import { Track } from "@definitions/types.d.ts" + * @import { Constituent, Track } from "@definitions/types.d.ts" */ /** @@ -17,30 +17,28 @@ class JsonStringOutputTransformer extends OutputTransformer { /** @type {OutputManagerDeputy} */ const manager = { + constituents: { + ...base.constituents, + collection: computed(() => { + const data = base.constituents.collection(); + /** @type {Constituent[]} */ + const c = parseArray(data); + return c; + }), + save: async (newConstituents) => { + const json = JSON.stringify(newConstituents); + const encoder = new TextEncoder(); + const bytes = encoder.encode(json); + await base.constituents.save(bytes); + }, + }, tracks: { ...base.tracks, collection: computed(() => { - let data = base.tracks.collection(); - - let json; - - if (data instanceof Uint8Array) { - const decoder = new TextDecoder(); - json = decoder.decode(data); - } - - if (typeof data !== "string") json = "[]"; - else json = data; - - // Try parsing JSON - try { - return JSON.parse(json); - } catch (err) { - console.error( - "components/transformer/output/string/json: Failed to parse JSON", - ); - return []; - } + const data = base.tracks.collection(); + /** @type {Track[]} */ + const c = parseArray(data); + return c; }), save: async (newTracks) => { const json = JSON.stringify(newTracks); @@ -56,6 +54,29 @@ class JsonStringOutputTransformer extends OutputTransformer { } } +/** + * @param {Uint8Array | string | undefined} data + */ +function parseArray(data) { + let json; + + if (data instanceof Uint8Array) { + const decoder = new TextDecoder(); + json = decoder.decode(data); + } else if (data === undefined) { + return []; + } else { + json = data; + } + + try { + return JSON.parse(json); + } catch (err) { + console.error(err); + return []; + } +} + export default JsonStringOutputTransformer; //////////////////////////////////////////// diff --git a/src/definitions/index.ts b/src/definitions/index.ts index 4b0c53e9e..d9cc8c0e0 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,4 +1,4 @@ -export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.js"; -export * as ShDiffuseOutputPlaylist from "./types/sh/diffuse/output/playlist.js"; -export * as ShDiffuseOutputTheme from "./types/sh/diffuse/output/theme.js"; -export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.js"; +export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.ts"; +export * as ShDiffuseOutputPlaylist from "./types/sh/diffuse/output/playlist.ts"; +export * as ShDiffuseOutputTheme from "./types/sh/diffuse/output/theme.ts"; +export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.ts"; diff --git a/src/definitions/types.d.ts b/src/definitions/types.d.ts index a69c3e510..bbced8d15 100644 --- a/src/definitions/types.d.ts +++ b/src/definitions/types.d.ts @@ -10,6 +10,8 @@ export type { Transformation, } from "./types/sh/diffuse/output/playlist.ts"; +export type { Main as Theme } from "./types/sh/diffuse/output/theme.ts"; + export type { Main as Track, Stats as TrackStats, diff --git a/tasks/replace-gen-import-extensions.ts b/tasks/replace-gen-import-extensions.ts new file mode 100644 index 000000000..c57eccbf6 --- /dev/null +++ b/tasks/replace-gen-import-extensions.ts @@ -0,0 +1,9 @@ +import { readTextFileSync } from "@std/fs/unstable-read-text-file"; +import { writeTextFileSync } from "@std/fs/unstable-write-text-file"; + +const PATH = "./src/definitions/index.ts"; + +const text = readTextFileSync(PATH); +const withTsImports = text.replaceAll(/\.js";/g, '.ts";'); + +writeTextFileSync(PATH, withTsImports); From 3fc59a96b94dab25154348386ec834029052f4f8 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 9 Feb 2026 22:42:25 +0100 Subject: [PATCH 240/244] fix: process sources after adding a source --- src/common/constituents/foundation.js | 11 +++++++++-- .../orchestrator/process-tracks/element.js | 1 - src/components/orchestrator/sources/element.js | 1 - src/themes/webamp/configurators/input/index.js | 13 +++++++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/common/constituents/foundation.js b/src/common/constituents/foundation.js index 0a1376ba9..36b7ba78c 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/constituents/foundation.js @@ -199,7 +199,11 @@ function output() { return findExistingOrAdd(o); } -function processTracks() { +/** + * @param {Object} opts - Options + * @param {boolean} [opts.disableWhenReady] - Whether to disable processing when ready. + */ +function processTracks(opts = { disableWhenReady: false }) { const i = input(); const o = output(); const m = metadata(); @@ -209,7 +213,10 @@ function processTracks() { opt.setAttribute("input-selector", i.selector); opt.setAttribute("output-selector", o.selector); opt.setAttribute("metadata-processor-selector", m.selector); - opt.toggleAttribute("process-when-ready"); + + if (!opts.disableWhenReady) { + opt.toggleAttribute("process-when-ready"); + } return findExistingOrAdd(opt); } diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index 806d35772..e7744002b 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -2,7 +2,6 @@ import { BroadcastableDiffuseElement, query } from "@common/element.js"; import { signal, untracked } from "@common/signal.js"; /** - * @import {Track} from "@definitions/types.d.ts" * @import {ProxiedActions} from "@common/worker.d.ts" * @import {InputElement} from "@components/input/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" diff --git a/src/components/orchestrator/sources/element.js b/src/components/orchestrator/sources/element.js index 085be5470..41be7bb50 100644 --- a/src/components/orchestrator/sources/element.js +++ b/src/components/orchestrator/sources/element.js @@ -3,7 +3,6 @@ import { groupTracksPerScheme } from "@common/utils.js"; import { signal } from "@common/signal.js"; /** - * @import {Track} from "@definitions/types.d.ts" * @import {InputElement, Source} from "@components/input/types.d.ts" * @import {OutputElement} from "@components/output/types.d.ts" */ diff --git a/src/themes/webamp/configurators/input/index.js b/src/themes/webamp/configurators/input/index.js index 940e2e9fe..fb7c4ded4 100644 --- a/src/themes/webamp/configurators/input/index.js +++ b/src/themes/webamp/configurators/input/index.js @@ -1,8 +1,10 @@ import foundation from "@common/constituents/foundation.js"; import InputConfigElement from "@themes/webamp/configurators/input/element.js"; +import { effect } from "@common/signal.js"; const inp = foundation.orchestrator.input(); const out = foundation.orchestrator.output(); +const pro = foundation.orchestrator.processTracks({ disableWhenReady: true }); const sou = foundation.orchestrator.sources(); const el = new InputConfigElement(); @@ -11,3 +13,14 @@ el.setAttribute("output-selector", out.selector); el.setAttribute("sources-orchestrator-selector", sou.selector); document.querySelector("#placeholder")?.replaceWith(el); + +// EFFECTS + +let initEffect = false; + +effect(() => { + const _trigger = sou.sources(); + if (out.tracks.state() !== "loaded") return; + if (initEffect) pro.process(); + initEffect = true; +}); From 2d2cc31027d2eca628995e5533136c5f04c3be3b Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 9 Feb 2026 22:52:57 +0100 Subject: [PATCH 241/244] feat: constituents custom group --- src/common/constituents/foundation.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/constituents/foundation.js b/src/common/constituents/foundation.js index 36b7ba78c..c0f127f4c 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/constituents/foundation.js @@ -17,7 +17,8 @@ import SourcesOrchestrator from "@components/orchestrator/sources/element.js"; * @import { DiffuseElement } from "@toko/diffuse/common/element.js"; */ -export const GROUP = "constituents"; +const url = new URL(document.location.href); +export const GROUP = url.searchParams.get("group") ?? "constituents"; /** * Default config for constituents. From 45d5b9247cc8a1c5ca7e19ba2bf86ac5eb259bae Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 10 Feb 2026 18:44:39 +0100 Subject: [PATCH 242/244] chore: improve index page --- src/index.vto | 105 ++++++++----------- src/styles/diffuse/page.css | 13 +-- src/themes/blur/artwork-controller/index.js | 24 ----- src/themes/blur/artwork-controller/index.vto | 12 --- 4 files changed, 53 insertions(+), 101 deletions(-) delete mode 100644 src/themes/blur/artwork-controller/index.js delete mode 100644 src/themes/blur/artwork-controller/index.vto diff --git a/src/index.vto b/src/index.vto index 1f98a4c50..fadf70791 100644 --- a/src/index.vto +++ b/src/index.vto @@ -220,11 +220,10 @@ definitions:

        - Construct your audio player. + Your audio
        your data
        your rules

        - Diffuse is a collection of components and software that make it possible to listen to audio from various sources on your devices and the web, and to create the ideal digital - audio listening experience for you. + Diffuse is a collection of components and software that make it possible to listen to audio from various sources on your devices and the web, and to create the ideal digital audio listening experience for you.

        @@ -232,10 +231,9 @@ definitions:

        @@ -246,43 +244,37 @@ definitions:
        -
        - -
        -

        Usage

        - -

        - The easiest way to start is by exploring the software. If you prefer a traditional pre­packaged web application approach, you can check out themes. -

        - -

        - Alternatively, there's constituents which allows you to use any component from any theme interchange­ably, each in a separate browser tab. Each tab talks to each other, so you can for example browse audio in one tab and play it in another. -

        - -

        - The goal is for every user, no matter their experience with web software, to have agency over their software. One can start with making small changes and gradually progress to making big changes. -

        -
        + +
        +

        Usage

        - -
        -

        Demo

        +
        +
        +

        + The easiest way to start is by exploring the software. If you prefer a traditional pre­packaged application approach, you can check out themes. Themes can look and function entirely different from each other, so make sure to explore! +

        -

        Diffuse is not your typical streaming service, you have to add sources of audio. This button here adds a few sample audio files.

        +

        + Alternatively, there's constituents which allows you to use any component from any theme interchange­ably, among pieces that are not in themes; each in a separate browser tab. Each tab talks to each other, so you can for example browse audio in one tab and play it in another. +

        +
        -

        - -

        +
        +

        + Diffuse is not your typical streaming service though, you have to add sources of audio. To start you can try out the demo by clicking the button below, or, go to a theme or constituent that lets you add your audio input. +

        + +

        + +

        +
        +
        +
        -

        - Next, select any theme from below to play the audio. Or any of the other options suggested in the usage section. -

        -
        -
        +
        -

        Themes

        @@ -292,16 +284,10 @@ definitions:

        - - - Each theme is unique, not just a skin; each one might have a totally different feature set. - + Explore

        - - {{ await comp.list({ items: themes }) }}
        -

        Constituents

        @@ -310,36 +296,33 @@ definitions:

        - - - It also allows non-browser web environments, such as WebViews, to display UI components separately. For example, to enable moveable web views on the desktop. - + Explore

        - - {{ await comp.list({ items: constituents }) }}
        - +
        -

        Take control

        +

        Agency

        - Diffuse ranges from “eating out at a great restaurant” all the way to “making your favourite meal at home” + The goal is for every user, no matter their experience, to have agency over their data and their software. One can start with making small changes and gradually progress to making big changes.

        +

        Take control

        +
        • - Level 1: Pick your restaurant, food comes in all shapes and sizes. The equivalent of choosing a Diffuse theme. + Level 1: Pick your restaurant, food comes in all shapes and sizes. The equivalent of choosing a Diffuse theme.

        • - Level 2: Take out food from various places, eg. cheese shop + bakery. You choose how you combine the foods and from where you order them. That's constituents. + Level 2: Take out food from various places, eg. cheese shop + bakery. You choose how you combine the foods and from where you order them. That's constituents.

        • @@ -348,7 +331,7 @@ definitions: Level 3: Now that you know which food is good and how to make combinations, you might make a slight customization, add a little something of your own (eg. add some spice). However, you're not quite confident enough which spice to pick, so you hire some help.

          - This can be done using the constituents loader which allows you to build on top of a familiar preconfigured foundation and load custom constituents. People might share their own, or maybe you use an LLM to generate something for you (eg. an album art gallery). + This can be done using the constituents builder which allows you to build on top of a familiar preconfigured foundation and load custom constituents. People might share their own, or maybe you use an LLM to generate something for you (eg. an album art gallery).

          @@ -357,7 +340,7 @@ definitions: Level 4: You learned a bit from watching and talking to the help you hired, so you decide to take things in your own hands.

          - You continue to use the constituents loader but learn a bit of HTML, Javascript and CSS; so you're able to write your own constituent. + You continue to use the constituents builder but learn a bit of HTML, Javascript and CSS; so you're able to write your own constituent.

          @@ -368,7 +351,7 @@ definitions: Level 5: At this point you're confident enough to make a meal from scratch. You can start very simple, eg. just throwing a steak in the pan with some butter and some salt to it. Then later add some baked potatoes and go from there.

          - A similar tool comes into play here, the themes loader. Same concept as the constituents loader, but now you need to specify the foundation yourself. You can use the elements listed below to do so. The code for these is available from this website or through the Javascript package. + A similar tool comes into play here, the themes builder. Same concept as the constituents builder, but now you need to specify the foundation yourself. You can use the elements listed below to do so. The code for these is available from this website or through the Javascript package.

          @@ -377,7 +360,7 @@ definitions: Level 6: You open your own restaurant.

          - You can host the theme you made on any web server, it's only HTML after all. Only difference is that you'll have to create the entire HTML tree, not just the body element, as is the case with the theme loader. + You can host the theme you made on any web server, it's only HTML after all. Only difference is that you'll have to create the entire HTML tree, not just the body element, as is the case with the theme builder.

          @@ -401,6 +384,10 @@ definitions: The (web) components of the system. These custom elements are then recombined into an entire music player experience, or whatever you want to build.

          +

          + Consume these using the constituents builder, the Javascript package, or the linked Javascript files down below. +

          +
          {{ await comp.element({ title: "Configurators", diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 1392dd19c..7569c85a8 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -205,11 +205,6 @@ ul.columns { * Forms */ -/*select, -::picker(select) { - appearance: base-select; -}*/ - input, textarea { background: transparent; @@ -274,14 +269,20 @@ h2 + h3 { a { color: inherit; text-underline-offset: 6px; + + &.button { + text-decoration: none; + } } -button { +button, +a.button { background: var(--accent); border: 0; border-radius: var(--radius-md); color: var(--bg-color); cursor: pointer; + display: inline-block; font-family: inherit; font-weight: 500; line-height: var(--leading-tight); diff --git a/src/themes/blur/artwork-controller/index.js b/src/themes/blur/artwork-controller/index.js deleted file mode 100644 index 30bd84d66..000000000 --- a/src/themes/blur/artwork-controller/index.js +++ /dev/null @@ -1,24 +0,0 @@ -import foundation from "@common/constituents/foundation.js"; -import ArtworkController from "@themes/blur/artwork-controller/element.js"; - -// Setup the prerequisite elements -foundation.features.fillQueueAutomatically(); -foundation.features.playAudioFromQueue(); -foundation.features.processInputs(); - -const aud = foundation.engine.audio(); -const art = foundation.processor.artwork(); -const inp = foundation.orchestrator.input(); -const que = foundation.engine.queue(); -const rse = foundation.engine.repeatShuffle(); - -// Controller -const dac = new ArtworkController(); -dac.setAttribute("artwork-processor-selector", art.selector); -dac.setAttribute("audio-engine-selector", aud.selector); -dac.setAttribute("input-selector", inp.selector); -dac.setAttribute("queue-engine-selector", que.selector); -dac.setAttribute("repeat-shuffle-engine-selector", rse.selector); - -// Add to DOM -document.body.append(dac); diff --git a/src/themes/blur/artwork-controller/index.vto b/src/themes/blur/artwork-controller/index.vto deleted file mode 100644 index 8cf07026c..000000000 --- a/src/themes/blur/artwork-controller/index.vto +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: layouts/constituent.vto -base: ../../../ - -styles: - - styles/vendor/phosphor/bold/style.css - - styles/vendor/phosphor/fill/style.css - - styles/base.css - -scripts: - - themes/blur/artwork-controller/index.js ---- From 5e34d9815763476acf52c4e43c4a1183d363bd95 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 11 Feb 2026 00:10:23 +0100 Subject: [PATCH 243/244] refactor: constituents presentation + loader --- _config.ts | 3 +- src/_components/constituents.vto | 17 ++++ .../examples/generate-playlist.html.txt} | 0 .../examples/now-playing.html.txt} | 0 .../constituent => constituents}/index.js | 41 +++++----- .../constituent => constituents}/index.vto | 81 +++++++++++++------ .../constituent/s => constituents/l}/index.js | 25 +++++- .../s => constituents/l}/index.vto | 4 +- src/index.vto | 20 ----- src/styles/diffuse/page.css | 14 +++- .../artwork-controller/constituent.html.txt | 7 ++ .../blur/artwork-controller/constituent.js | 24 ++++++ src/themes/index.js | 0 src/themes/index.vto | 43 ++++++++++ .../{index.vto => constituent.html.txt} | 23 ++---- .../browser/{index.js => constituent.js} | 0 .../input/{index.vto => constituent.html.txt} | 23 ++---- .../input/{index.js => constituent.js} | 0 18 files changed, 224 insertions(+), 101 deletions(-) create mode 100644 src/_components/constituents.vto rename src/{themes/loader/constituent/examples/generate-playlist.txt => constituents/examples/generate-playlist.html.txt} (100%) rename src/{themes/loader/constituent/examples/now-playing.txt => constituents/examples/now-playing.html.txt} (100%) rename src/{themes/loader/constituent => constituents}/index.js (79%) rename src/{themes/loader/constituent => constituents}/index.vto (71%) rename src/{themes/loader/constituent/s => constituents/l}/index.js (71%) rename src/{themes/loader/constituent/s => constituents/l}/index.vto (56%) create mode 100644 src/themes/blur/artwork-controller/constituent.html.txt create mode 100644 src/themes/blur/artwork-controller/constituent.js create mode 100644 src/themes/index.js create mode 100644 src/themes/index.vto rename src/themes/webamp/browser/{index.vto => constituent.html.txt} (68%) rename src/themes/webamp/browser/{index.js => constituent.js} (100%) rename src/themes/webamp/configurators/input/{index.vto => constituent.html.txt} (67%) rename src/themes/webamp/configurators/input/{index.js => constituent.js} (100%) diff --git a/_config.ts b/_config.ts index 2a4717147..8593a24ef 100644 --- a/_config.ts +++ b/_config.ts @@ -123,7 +123,8 @@ phosphor("bold/Phosphor-Bold.woff2"); // MISC -site.add("/themes/loader/constituent/examples/"); +site.add([".htm"]); +site.add([".txt"]); site.use(sourceMaps()); site.script("copy-type-defs", () => { diff --git a/src/_components/constituents.vto b/src/_components/constituents.vto new file mode 100644 index 000000000..341a27149 --- /dev/null +++ b/src/_components/constituents.vto @@ -0,0 +1,17 @@ +
            + {{ for item of items }} +
          • + {{item.title}} +
            +
            + Try + + +
            +
            + {{item.desc |> md(true)}} +
            +
            +
          • + {{ /for }} +
          diff --git a/src/themes/loader/constituent/examples/generate-playlist.txt b/src/constituents/examples/generate-playlist.html.txt similarity index 100% rename from src/themes/loader/constituent/examples/generate-playlist.txt rename to src/constituents/examples/generate-playlist.html.txt diff --git a/src/themes/loader/constituent/examples/now-playing.txt b/src/constituents/examples/now-playing.html.txt similarity index 100% rename from src/themes/loader/constituent/examples/now-playing.txt rename to src/constituents/examples/now-playing.html.txt diff --git a/src/themes/loader/constituent/index.js b/src/constituents/index.js similarity index 79% rename from src/themes/loader/constituent/index.js rename to src/constituents/index.js index 3ab006cf4..a72b793b3 100644 --- a/src/themes/loader/constituent/index.js +++ b/src/constituents/index.js @@ -35,18 +35,23 @@ effect(() => { ${col.map((c) => html`
        • - - ${c.name} - -
          - - - Delete - - + ${c.name} +
          +
          + Open + + + +
          +
        • ` )} @@ -63,8 +68,7 @@ effect(() => { const emptyConstituentsList = html`

          - You have not added any constituents yet. Add - or create some using the tools below. + You have not saved any constituents yet.

          `; @@ -73,6 +77,9 @@ const emptyConstituentsList = html` */ function deleteConstituent({ cid, name }) { return () => { + const c = confirm("Are you sure you want to delete this constituent?"); + if (!c) return; + output.constituents.save( output.constituents.collection().filter((c) => !(c.name === name && c.cid === cid) @@ -161,9 +168,7 @@ async function onBuildSubmit(event) { const selected = document.body.querySelector("#example-select"); if (selected?.value) { - const text = await fetch( - `themes/loader/constituent/examples/${selected.value}`, - ).then((r) => r.text()); + const text = await fetch(selected.value).then((r) => r.text()); editor.dispatch({ changes: { from: 0, to: editor.state.doc.length, insert: text }, @@ -176,7 +181,7 @@ async function onBuildSubmit(event) { break; case "save+open": await saveConstituent(constituent); - window.open(`${location.href}s/?cid=${constituent.cid}`, "blank"); + window.open(`./constituents/l/?cid=${constituent.cid}`, "blank"); break; } } diff --git a/src/themes/loader/constituent/index.vto b/src/constituents/index.vto similarity index 71% rename from src/themes/loader/constituent/index.vto rename to src/constituents/index.vto index 5e6730f59..4bd149980 100644 --- a/src/themes/loader/constituent/index.vto +++ b/src/constituents/index.vto @@ -1,6 +1,6 @@ --- layout: layouts/constituent.vto -base: ../../../ +base: ../ styles: - styles/base.css @@ -9,7 +9,23 @@ styles: - styles/vendor/phosphor/fill/style.css scripts: - - themes/loader/constituent/index.js + - constituents/index.js + +# CONSTITUENTS + +constituents: + - url: "themes/blur/artwork-controller/constituent.html.txt" + title: "Blur / Artwork controller" + desc: > + Audio playback controller with an artwork display. + - url: "themes/webamp/browser/constituent.html.txt" + title: "Webamp / Browser" + desc: > + Collection browser + search in a retro, win98, look. + - url: "themes/webamp/configurators/input/constituent.html.txt" + title: "Webamp / Input Configurator" + desc: > + Windows 98 styled input configurator where you can add music sources. ---
          @@ -19,46 +35,61 @@ scripts: {{ await comp.diffuse.logo() }}
          -

          - Constituent loader ❈ +

          + Constituents

          - Missing a feature, or prefer a different user interface that is not part of Diffuse? Add it here. This tool allows you to load a custom constituent besides the existing ones. + Constituents are various interface components each loaded in their own web page. Every used component is configured so that it operates in broadcast mode, making all the pages communicate with each other.

          + +
          - -
          -
          - -
          -

          Yours

          -
          -
          -
          - - +
          -

          Generate

          -

          - On the todo list, the idea is to have AI generate a piece of UI for you; building on the logical blocks provided by Diffuse. -

          +

          Built-in

          + +
          + {{ await comp.constituents({ items: constituents }) }} +

          Community

          - +

          Nothing here yet, too early.

          + +
          +
          +

          Your collection

          +
          +
          + +
          +

          Examples

          +
          +
          + + +
          +

          Build

          @@ -75,7 +106,7 @@ scripts:

          - Your code here builds on the foundation listed below, it'll be injected into a <div id="container"> element in the body. + Your code here builds on the foundation listed below, it'll be injected into a <div id="container"> element in the body.

          @@ -93,8 +124,8 @@ scripts: - - + +

          diff --git a/src/themes/loader/constituent/s/index.js b/src/constituents/l/index.js similarity index 71% rename from src/themes/loader/constituent/s/index.js rename to src/constituents/l/index.js index 7f2b2a258..8f3efc189 100644 --- a/src/themes/loader/constituent/s/index.js +++ b/src/constituents/l/index.js @@ -1,3 +1,5 @@ +import * as CID from "@atcute/cid"; + import foundation from "@common/constituents/foundation.js"; import { effect } from "@common/signal.js"; @@ -15,10 +17,11 @@ const output = foundation.orchestrator.output(); // URL PARAMS //////////////////////////////////////////// -const url = new URL(document.location.href); +const docUrl = new URL(document.location.href); -const cid = url.searchParams.get("cid"); -const name = url.searchParams.get("name"); +const cid = docUrl.searchParams.get("cid"); +const name = docUrl.searchParams.get("name"); +const url = docUrl.searchParams.get("url"); //////////////////////////////////////////// // LOAD @@ -29,7 +32,7 @@ if (!containerNull) throw new Error("Container not found"); const container = /** @type {HTMLDivElement} */ (containerNull); -effect(() => { +effect(async () => { const collection = output.constituents.collection(); if (output.constituents.state() !== "loaded") return; @@ -39,6 +42,20 @@ effect(() => { constituent = collection.find((c) => c.cid === cid); } else if (name) { constituent = collection.find((c) => c.name === name); + } else if (url) { + const html = await fetch(url).then((res) => res.text()); + const cid = await CID.create(0x55, new TextEncoder().encode(html)); + const name = "tryout"; + + /** @type {Constituent} */ + const c = { + $type: "sh.diffuse.output.constituent", + cid: CID.toString(cid), + html, + name, + }; + + constituent = c; } // TODO: Message that constituent was not found diff --git a/src/themes/loader/constituent/s/index.vto b/src/constituents/l/index.vto similarity index 56% rename from src/themes/loader/constituent/s/index.vto rename to src/constituents/l/index.vto index ed2de573e..c8f9cf465 100644 --- a/src/themes/loader/constituent/s/index.vto +++ b/src/constituents/l/index.vto @@ -1,9 +1,9 @@ --- layout: layouts/constituent.vto -base: ../../../../ +base: ../../ scripts: - - themes/loader/constituent/s/index.js + - constituents/l/index.js ---

          diff --git a/src/index.vto b/src/index.vto index fadf70791..b1c32a983 100644 --- a/src/index.vto +++ b/src/index.vto @@ -27,26 +27,6 @@ themes: desc: > **Winamp 2 + Windows 98**. Uses Webamp as the audio player connected to various Diffuse elements. Also features a desktop-like Windows 98 environment in which you can open "programs" that control the used Diffuse elements. -# CONSTITUENTS - -constituents: - - url: "themes/blur/artwork-controller/" - title: "Blur / Artwork controller" - desc: > - Audio playback controller with artwork display. - - url: "themes/loader/constituent/" - title: "Loader" - desc: > - **Bring in other constituents!** Load a constituent from a code snippet, store it in your user data output, explore community creations, or generate one. - - url: "themes/webamp/browser/" - title: "Webamp / Browser" - desc: > - Collection browser + search in a retro, win98, look. - - url: "themes/webamp/configurators/input/" - title: "Webamp / Input Configurator" - desc: > - Windows 98 styled input configurator where you can add music sources. - # ELEMENTS configurators: diff --git a/src/styles/diffuse/page.css b/src/styles/diffuse/page.css index 7569c85a8..e7ad98305 100644 --- a/src/styles/diffuse/page.css +++ b/src/styles/diffuse/page.css @@ -344,18 +344,30 @@ ul li::marker { } .list-description { + color: oklch(from currentColor l c h / 0.6); font-size: var(--fs-xs); margin-bottom: var(--space-xs); margin-top: var(--space-2xs); - opacity: 0.6; a { text-underline-offset: 3px; } + button, + .button { + line-height: 1; + padding: var(--space-3xs); + border-radius: var(--radius-xs); + } + code { font-size: var(--fs-xs); } + + .button-row { + gap: var(--space-3xs); + margin: 0 0 var(--space-2xs); + } } .table-of-contents { diff --git a/src/themes/blur/artwork-controller/constituent.html.txt b/src/themes/blur/artwork-controller/constituent.html.txt new file mode 100644 index 000000000..dcb417d5f --- /dev/null +++ b/src/themes/blur/artwork-controller/constituent.html.txt @@ -0,0 +1,7 @@ + + + diff --git a/src/themes/blur/artwork-controller/constituent.js b/src/themes/blur/artwork-controller/constituent.js new file mode 100644 index 000000000..30bd84d66 --- /dev/null +++ b/src/themes/blur/artwork-controller/constituent.js @@ -0,0 +1,24 @@ +import foundation from "@common/constituents/foundation.js"; +import ArtworkController from "@themes/blur/artwork-controller/element.js"; + +// Setup the prerequisite elements +foundation.features.fillQueueAutomatically(); +foundation.features.playAudioFromQueue(); +foundation.features.processInputs(); + +const aud = foundation.engine.audio(); +const art = foundation.processor.artwork(); +const inp = foundation.orchestrator.input(); +const que = foundation.engine.queue(); +const rse = foundation.engine.repeatShuffle(); + +// Controller +const dac = new ArtworkController(); +dac.setAttribute("artwork-processor-selector", art.selector); +dac.setAttribute("audio-engine-selector", aud.selector); +dac.setAttribute("input-selector", inp.selector); +dac.setAttribute("queue-engine-selector", que.selector); +dac.setAttribute("repeat-shuffle-engine-selector", rse.selector); + +// Add to DOM +document.body.append(dac); diff --git a/src/themes/index.js b/src/themes/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/themes/index.vto b/src/themes/index.vto new file mode 100644 index 000000000..251326957 --- /dev/null +++ b/src/themes/index.vto @@ -0,0 +1,43 @@ +--- +layout: layouts/constituent.vto +base: ../ + +styles: + - styles/base.css + - styles/diffuse/page.css + - styles/vendor/phosphor/bold/style.css + - styles/vendor/phosphor/fill/style.css + +scripts: + - themes/index.js +--- + +
          +
          + +

          + Themes +

          +

          + Themes are element compositions and provide a traditional browser web application way of + using them. In other words, pretty much the whole thing, besides your data, lives inside a single browser tab. +

          + +

          + + + Each theme is unique, not just a skin; each one might have a totally different feature set. + +

          +
          +
          +
          +
          +

          + TODO +

          +
          diff --git a/src/themes/webamp/browser/index.vto b/src/themes/webamp/browser/constituent.html.txt similarity index 68% rename from src/themes/webamp/browser/index.vto rename to src/themes/webamp/browser/constituent.html.txt index dbf0ea4e0..0d5fcc7a4 100644 --- a/src/themes/webamp/browser/index.vto +++ b/src/themes/webamp/browser/constituent.html.txt @@ -1,18 +1,3 @@ ---- -layout: layouts/constituent.vto -base: ../../../ - -styles: - - styles/vendor/98.css - - themes/webamp/fonts.css - - themes/webamp/constituent.css - -scripts: - - themes/webamp/browser/index.js ---- - - -
          + + + + diff --git a/src/themes/webamp/browser/index.js b/src/themes/webamp/browser/constituent.js similarity index 100% rename from src/themes/webamp/browser/index.js rename to src/themes/webamp/browser/constituent.js diff --git a/src/themes/webamp/configurators/input/index.vto b/src/themes/webamp/configurators/input/constituent.html.txt similarity index 67% rename from src/themes/webamp/configurators/input/index.vto rename to src/themes/webamp/configurators/input/constituent.html.txt index 5cd474fd5..0629f3104 100644 --- a/src/themes/webamp/configurators/input/index.vto +++ b/src/themes/webamp/configurators/input/constituent.html.txt @@ -1,18 +1,3 @@ ---- -layout: layouts/constituent.vto -base: ../../../../ - -styles: - - styles/vendor/98.css - - themes/webamp/fonts.css - - themes/webamp/constituent.css - -scripts: - - themes/webamp/configurators/input/index.js ---- - - -
          + + + + diff --git a/src/themes/webamp/configurators/input/index.js b/src/themes/webamp/configurators/input/constituent.js similarity index 100% rename from src/themes/webamp/configurators/input/index.js rename to src/themes/webamp/configurators/input/constituent.js From abf35633116cd48959d5bb2a2ede8a758471f0d4 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Wed, 11 Feb 2026 14:31:19 +0100 Subject: [PATCH 244/244] chore: rename constituents to facets --- README.md | 4 +- deno.jsonc | 4 +- docs/ARCHITECTURE.md | 2 +- .../{constituents.vto => facets.vto} | 2 +- .../layouts/{constituent.vto => facet.vto} | 0 .../{constituents => facets}/foundation.js | 4 +- src/components/configurator/output/element.js | 30 +++++------ src/components/orchestrator/output/element.js | 4 +- src/components/output/common.js | 26 +++++----- .../output/polymorphic/indexed-db/element.js | 8 +-- src/components/output/types.d.ts | 18 +++---- src/components/transformer/output/base.js | 14 +++--- .../output/bytes/automerge/constants.js | 6 +-- .../output/bytes/automerge/element.js | 28 +++++------ .../output/bytes/automerge/types.d.ts | 9 +--- .../transformer/output/bytes/json/element.js | 16 +++--- .../output/refiner/default/element.js | 8 +-- .../transformer/output/string/json/element.js | 15 +++--- src/constituents/l/index.vto | 9 ---- src/definitions/index.ts | 2 +- .../output/{constituent.json => facet.json} | 6 +-- src/definitions/types.d.ts | 4 +- .../examples/generate-playlist.html.txt | 2 +- .../examples/now-playing.html.txt | 2 +- src/{constituents => facets}/index.js | 50 +++++++++---------- src/{constituents => facets}/index.vto | 44 ++++++++-------- src/{constituents => facets}/l/index.js | 32 ++++++------ src/facets/l/index.vto | 9 ++++ src/index.js | 2 +- src/index.vto | 32 ++++++------ .../{constituent.html.txt => facet.html.txt} | 2 +- .../{constituent.js => facet.js} | 2 +- src/themes/index.vto | 2 +- .../{constituent.html.txt => facet.html.txt} | 4 +- .../browser/{constituent.js => facet.js} | 2 +- .../{constituent.html.txt => facet.html.txt} | 4 +- .../input/{constituent.js => facet.js} | 2 +- .../webamp/{constituent.css => facet.css} | 0 38 files changed, 201 insertions(+), 209 deletions(-) rename src/_components/{constituents.vto => facets.vto} (82%) rename src/_includes/layouts/{constituent.vto => facet.vto} (100%) rename src/common/{constituents => facets}/foundation.js (98%) delete mode 100644 src/constituents/l/index.vto rename src/definitions/output/{constituent.json => facet.json} (79%) rename src/{constituents => facets}/examples/generate-playlist.html.txt (92%) rename src/{constituents => facets}/examples/now-playing.html.txt (94%) rename src/{constituents => facets}/index.js (75%) rename src/{constituents => facets}/index.vto (78%) rename src/{constituents => facets}/l/index.js (64%) create mode 100644 src/facets/l/index.vto rename src/themes/blur/artwork-controller/{constituent.html.txt => facet.html.txt} (63%) rename src/themes/blur/artwork-controller/{constituent.js => facet.js} (93%) rename src/themes/webamp/browser/{constituent.html.txt => facet.html.txt} (82%) rename src/themes/webamp/browser/{constituent.js => facet.js} (91%) rename src/themes/webamp/configurators/input/{constituent.html.txt => facet.html.txt} (81%) rename src/themes/webamp/configurators/input/{constituent.js => facet.js} (92%) rename src/themes/webamp/{constituent.css => facet.css} (100%) diff --git a/README.md b/README.md index 099295ee5..2cf31ac19 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Diffuse provides a range of custom elements: audio input, data output, metadata & artwork processing, audio playback, a queue system, and much more. -It is also aimed at consumers, providing themes and constituents, preconfigured component compositions; while simultaneously trying to be [malleable software](https://www.inkandswitch.com/essay/malleable-software/). +It is also aimed at consumers, providing themes and facets, preconfigured component compositions; while simultaneously trying to be [malleable software](https://www.inkandswitch.com/essay/malleable-software/). More information on the [website](https://elements.diffuse.sh/latest/). @@ -25,7 +25,7 @@ From there you can use the custom elements as with any other custom DOM element, import QueueEngine from "@toko/diffuse/components/engine/queue/element.js" const queue = new QueueEngine() -queue.setAttribute("group", "constituents") +queue.setAttribute("group", "facets") document.body.append(queue) ```` diff --git a/deno.jsonc b/deno.jsonc index 302fffd8f..8e8b681ad 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -68,7 +68,7 @@ }, "exports": { // .js - "./common/constituents/foundation.js": "./src/common/constituents/foundation.js", + "./common/facets/foundation.js": "./src/common/facets/foundation.js", "./common/element.js": "./src/common/element.js", "./common/signal.js": "./src/common/signal.js", "./common/worker.js": "./src/common/worker.js", @@ -137,7 +137,7 @@ "./definitions/types.d.ts": "./src/definitions/types.d.ts", // .ts - "./definitions/types/sh/diffuse/output/constituent.ts": "./src/definitions/types/sh/diffuse/output/constituent.ts", + "./definitions/types/sh/diffuse/output/facet.ts": "./src/definitions/types/sh/diffuse/output/facet.ts", "./definitions/types/sh/diffuse/output/playlist.ts": "./src/definitions/types/sh/diffuse/output/playlist.ts", "./definitions/types/sh/diffuse/output/theme.ts": "./src/definitions/types/sh/diffuse/output/theme.ts", "./definitions/types/sh/diffuse/output/track.ts": "./src/definitions/types/sh/diffuse/output/track.ts", diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 6fb56aa0a..6f9ff6504 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -33,6 +33,6 @@ Like orchestrator components, these are compositions of elements. Unlike orchest ## Other directories - `src/common`: Common Javascript code shared by various components and/or themes. -- `src/styles`: Common CSS shared by themes, the index page or constituents (part of themes). +- `src/styles`: Common CSS shared by themes, the index page or facets. - `src/favicons`, `src/fonts`, `src/images` are binary assets for themes and the index page (`src/index.vto`) - `src/_components` and `src/_includes` are templates used in `.vto` templates, again themes and index page. diff --git a/src/_components/constituents.vto b/src/_components/facets.vto similarity index 82% rename from src/_components/constituents.vto rename to src/_components/facets.vto index 341a27149..b9ceadd7f 100644 --- a/src/_components/constituents.vto +++ b/src/_components/facets.vto @@ -4,7 +4,7 @@ {{item.title}}
          - Try + Try
          diff --git a/src/_includes/layouts/constituent.vto b/src/_includes/layouts/facet.vto similarity index 100% rename from src/_includes/layouts/constituent.vto rename to src/_includes/layouts/facet.vto diff --git a/src/common/constituents/foundation.js b/src/common/facets/foundation.js similarity index 98% rename from src/common/constituents/foundation.js rename to src/common/facets/foundation.js index c0f127f4c..b0415d20d 100644 --- a/src/common/constituents/foundation.js +++ b/src/common/facets/foundation.js @@ -18,10 +18,10 @@ import SourcesOrchestrator from "@components/orchestrator/sources/element.js"; */ const url = new URL(document.location.href); -export const GROUP = url.searchParams.get("group") ?? "constituents"; +export const GROUP = url.searchParams.get("group") ?? "facets"; /** - * Default config for constituents. + * Default config for facets. */ export const config = { GROUP, diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 2340841f0..337e5b28c 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -2,7 +2,7 @@ import { DiffuseElement } from "@common/element.js"; import { batch, computed, signal } from "@common/signal.js"; /** - * @import {Constituent, Track} from "@definitions/types.d.ts" + * @import {Facet, Track} from "@definitions/types.d.ts" * @import {OutputManagerDeputy, OutputElement} from "@components/output/types.d.ts" */ @@ -27,40 +27,40 @@ class OutputConfigurator extends DiffuseElement { /** @type {OutputManagerDeputy} */ const manager = { - constituents: { + facets: { collection: computed(() => { const out = this.#selectedOutput.value; - if (out) return out.constituents.collection(); + if (out) return out.facets.collection(); const def = this.#defaultOutput.value; - if (def) return def.constituents.collection(); + if (def) return def.facets.collection(); - return this.#memory.constituents.value; + return this.#memory.facets.value; }), reload: () => { const def = this.#defaultOutput.value; - if (def) def.constituents.reload(); + if (def) def.facets.reload(); const out = this.#selectedOutput.value; - if (out) return out.constituents.reload(); + if (out) return out.facets.reload(); return Promise.resolve(); }, - save: async (newConstituents) => { + save: async (newFacets) => { const def = this.#defaultOutput.value; - if (def) await def.constituents.save(newConstituents); + if (def) await def.facets.save(newFacets); const out = this.#selectedOutput.value; - if (out) return await out.constituents.save(newConstituents); + if (out) return await out.facets.save(newFacets); - this.#memory.constituents.value = newConstituents; + this.#memory.facets.value = newFacets; }, state: computed(() => { const out = this.#selectedOutput.value; - if (out) return out.constituents.state(); + if (out) return out.facets.state(); const def = this.#defaultOutput.value; - if (def) return def.constituents.state(); + if (def) return def.facets.state(); return this.#setupFinished.value ? "loaded" : "sleeping"; }), @@ -106,7 +106,7 @@ class OutputConfigurator extends DiffuseElement { }; // Assign manager properties to class - this.constituents = manager.constituents; + this.facets = manager.facets; this.tracks = manager.tracks; } @@ -117,7 +117,7 @@ class OutputConfigurator extends DiffuseElement { ); #memory = { - constituents: signal(/** @type {Constituent[]} */ ([])), + facets: signal(/** @type {Facet[]} */ ([])), tracks: signal(/** @type {Track[]} */ ([])), }; diff --git a/src/components/orchestrator/output/element.js b/src/components/orchestrator/output/element.js index 0cd364dba..40c0ee2b3 100644 --- a/src/components/orchestrator/output/element.js +++ b/src/components/orchestrator/output/element.js @@ -35,8 +35,8 @@ class OutputOrchestrator extends DiffuseElement { // PROXY OUTPUT ACTIONS - get constituents() { - return this.output.constituents; + get facets() { + return this.output.facets; } get tracks() { diff --git a/src/components/output/common.js b/src/components/output/common.js index 5763b5efa..83b273351 100644 --- a/src/components/output/common.js +++ b/src/components/output/common.js @@ -1,7 +1,7 @@ import { computed, signal, untracked } from "@common/signal.js"; /** - * @import {Constituent, Track} from "@definitions/types.d.ts" + * @import {Facet, Track} from "@definitions/types.d.ts" * @import {OutputManager, OutputManagerProperties} from "./types.d.ts" */ @@ -10,9 +10,9 @@ import { computed, signal, untracked } from "@common/signal.js"; * @param {OutputManagerProperties} _ * @returns {OutputManager} */ -export function outputManager({ init, constituents, tracks }) { +export function outputManager({ init, facets, tracks }) { const c = signal( - /** @type {Encoding extends null ? Constituent[] : Encoding} */ (constituents + /** @type {Encoding extends null ? Facet[] : Encoding} */ (facets .empty()), ); const cs = signal( @@ -26,10 +26,10 @@ export function outputManager({ init, constituents, tracks }) { /** @type {"loading" | "loaded" | "sleeping"} */ ("sleeping"), ); - async function loadConstituents() { + async function loadFacets() { if (init && (await init()) === false) return; cs.value = "loading"; - c.value = await constituents.get(); + c.value = await facets.get(); cs.value = "loaded"; } @@ -41,16 +41,16 @@ export function outputManager({ init, constituents, tracks }) { } return { - constituents: { + facets: { collection: computed(() => { - if (untracked(() => cs.value === "sleeping")) loadConstituents(); + if (untracked(() => cs.value === "sleeping")) loadFacets(); return c.value; }), - reload: loadConstituents, - save: async (newConstituents) => { - if (untracked(() => cs.value === "sleeping")) loadConstituents(); - c.value = newConstituents; - await constituents.put(newConstituents); + reload: loadFacets, + save: async (newFacets) => { + if (untracked(() => cs.value === "sleeping")) loadFacets(); + c.value = newFacets; + await facets.put(newFacets); }, state: cs.get, }, @@ -68,7 +68,7 @@ export function outputManager({ init, constituents, tracks }) { state: ts.get, }, signals: { - constituents: c, + facets: c, tracks: t, }, }; diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index f8f1bb8fd..ba5ba9829 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -28,10 +28,10 @@ class IndexedDBOutput extends BroadcastableDiffuseElement { /** @type {OutputManager} */ this.#manager = outputManager({ - constituents: { + facets: { empty: () => undefined, - get: () => this.#get("constituents"), - put: (data) => this.#put("constituents", data), + get: () => this.#get("facets"), + put: (data) => this.#put("facets", data), }, init: () => this.whenConnected(), tracks: { @@ -41,7 +41,7 @@ class IndexedDBOutput extends BroadcastableDiffuseElement { }, }); - this.constituents = this.#manager.constituents; + this.facets = this.#manager.facets; this.tracks = this.#manager.tracks; } diff --git a/src/components/output/types.d.ts b/src/components/output/types.d.ts index ab25cbd0f..e79841b8e 100644 --- a/src/components/output/types.d.ts +++ b/src/components/output/types.d.ts @@ -1,6 +1,6 @@ import type { Signal, SignalReader } from "@common/signal.d.ts"; import type { DiffuseElement } from "@common/element.js"; -import type { Constituent, Track } from "@definitions/types.d.ts"; +import type { Facet, Track } from "@definitions/types.d.ts"; export type OutputElement = & DiffuseElement @@ -12,16 +12,16 @@ export type OutputManagerDeputy = Omit< >; export type OutputManager = { - constituents: { - collection: SignalReader; + facets: { + collection: SignalReader; reload: () => Promise; save: ( - constituents: Encoding extends null ? Constituent[] : Encoding, + facets: Encoding extends null ? Facet[] : Encoding, ) => Promise; state: SignalReader<"loading" | "loaded" | "sleeping">; }; signals: { - constituents: Signal; + facets: Signal; tracks: Signal; }; tracks: { @@ -33,11 +33,11 @@ export type OutputManager = { }; export type OutputManagerProperties = { - constituents: { - empty(): Encoding extends null ? Constituent[] : Encoding; - get(): Promise; + facets: { + empty(): Encoding extends null ? Facet[] : Encoding; + get(): Promise; put( - constituents: Encoding extends null ? Constituent[] : Encoding, + facets: Encoding extends null ? Facet[] : Encoding, ): Promise; }; init?: () => Promise; diff --git a/src/components/transformer/output/base.js b/src/components/transformer/output/base.js index ab2ecc840..ba07b2e03 100644 --- a/src/components/transformer/output/base.js +++ b/src/components/transformer/output/base.js @@ -42,21 +42,21 @@ export class OutputTransformer extends DiffuseElement { base() { /** @type {OutputManagerDeputy} */ const m = { - constituents: { + facets: { collection: computed(() => { - return this.output.signal()?.constituents?.collection(); + return this.output.signal()?.facets?.collection(); }), reload: () => { - return this.output.signal()?.constituents?.reload() ?? + return this.output.signal()?.facets?.reload() ?? Promise.resolve(); }, - save: async (newConstituents) => { - if (newConstituents === undefined) return; + save: async (newFacets) => { + if (newFacets === undefined) return; await this.output.whenDefined; - await this.output.signal()?.constituents.save(newConstituents); + await this.output.signal()?.facets.save(newFacets); }, state: computed(() => { - return this.output.signal()?.constituents.state() ?? "sleeping"; + return this.output.signal()?.facets.state() ?? "sleeping"; }), }, tracks: { diff --git a/src/components/transformer/output/bytes/automerge/constants.js b/src/components/transformer/output/bytes/automerge/constants.js index 71fe1125a..b44bd2710 100644 --- a/src/components/transformer/output/bytes/automerge/constants.js +++ b/src/components/transformer/output/bytes/automerge/constants.js @@ -2,11 +2,11 @@ import * as Automerge from "@automerge/automerge"; import { base64 } from "iso-base/rfc4648"; /** - * @import { ConstituentsDocument, PlaylistsDocument, ThemesDocument, TracksDocument } from "./types.d.ts"; + * @import { FacetsDocument, PlaylistsDocument, ThemesDocument, TracksDocument } from "./types.d.ts"; */ -/** @type {Automerge.Doc} */ -export const INITIAL_CONSTITUENTS_DOCUMENT = Automerge.load( +/** @type {Automerge.Doc} */ +export const INITIAL_FACETS_DOCUMENT = Automerge.load( base64.decode( "hW9Kg1fmLLcAeAEQZ2dnbV0O8AUftAeEXT1QVQHsmc9lhGh1ysz4ECa3pEUgzSZG2aF8hob78u7FqeybBQYBAgMCEwIjBkACVgIHFQwhAiMCNAFCAlYCgAECfwB/AX8Bf8KTqcwGfwB/B38KY29sbGVjdGlvbn8AfwEBfwJ/AH8AAA", ), diff --git a/src/components/transformer/output/bytes/automerge/element.js b/src/components/transformer/output/bytes/automerge/element.js index 9def536c0..dc6a99c06 100644 --- a/src/components/transformer/output/bytes/automerge/element.js +++ b/src/components/transformer/output/bytes/automerge/element.js @@ -5,14 +5,14 @@ import { computed } from "@common/signal.js"; import { recursivelyCloneRecords } from "@common/utils.js"; import { OutputTransformer } from "../../base.js"; import { - INITIAL_CONSTITUENTS_DOCUMENT, + INITIAL_FACETS_DOCUMENT, INITIAL_TRACKS_DOCUMENT, } from "./constants.js"; /** * @import { SignalReader } from "@common/signal.d.ts"; * @import { OutputManagerDeputy } from "@components/output/types.d.ts" - * @import { ConstituentsDocument, PlaylistsDocument, ThemesDocument, TracksDocument } from "./types.d.ts" + * @import { FacetsDocument, PlaylistsDocument, ThemesDocument, TracksDocument } from "./types.d.ts" */ /** @@ -24,14 +24,14 @@ class AutomergeBytesOutputTransformer extends OutputTransformer { const base = this.base(); - /** @type {SignalReader>} */ - const constituentsDocument = computed(() => { - const value = base.constituents.collection(); + /** @type {SignalReader>} */ + const facetsDocument = computed(() => { + const value = base.facets.collection(); if (isUint8Array(value)) { return Automerge.load(value); } else if (value == undefined) { - return INITIAL_CONSTITUENTS_DOCUMENT; + return INITIAL_FACETS_DOCUMENT; } else { // TODO: Better error throw new Error("Invalid data type"); @@ -54,20 +54,20 @@ class AutomergeBytesOutputTransformer extends OutputTransformer { /** @type {OutputManagerDeputy} */ const manager = { - constituents: { - ...base.constituents, - collection: computed(() => constituentsDocument().collection), - save: async (newConstituents) => { - const doc = Automerge.change(constituentsDocument(), (d) => { - const clonedCollection = newConstituents.map((constituent) => { - return recursivelyCloneRecords(constituent); + facets: { + ...base.facets, + collection: computed(() => facetsDocument().collection), + save: async (newFacets) => { + const doc = Automerge.change(facetsDocument(), (d) => { + const clonedCollection = newFacets.map((facet) => { + return recursivelyCloneRecords(facet); }); d.collection = clonedCollection; }); const bytes = Automerge.save(doc); - await base.constituents.save(bytes); + await base.facets.save(bytes); }, }, tracks: { diff --git a/src/components/transformer/output/bytes/automerge/types.d.ts b/src/components/transformer/output/bytes/automerge/types.d.ts index 50a65046b..4b6666377 100644 --- a/src/components/transformer/output/bytes/automerge/types.d.ts +++ b/src/components/transformer/output/bytes/automerge/types.d.ts @@ -1,11 +1,6 @@ -import type { - Constituent, - Playlist, - Theme, - Track, -} from "@definitions/types.d.ts"; +import type { Facet, Playlist, Theme, Track } from "@definitions/types.d.ts"; -export type ConstituentsDocument = { collection: Constituent[] }; +export type FacetsDocument = { collection: Facet[] }; export type PlaylistsDocument = { collection: Playlist[] }; export type ThemesDocument = { collection: Theme[] }; export type TracksDocument = { collection: Track[] }; diff --git a/src/components/transformer/output/bytes/json/element.js b/src/components/transformer/output/bytes/json/element.js index b0ac1cbe9..3a0cc9a64 100644 --- a/src/components/transformer/output/bytes/json/element.js +++ b/src/components/transformer/output/bytes/json/element.js @@ -3,7 +3,7 @@ import { OutputTransformer } from "../../base.js"; /** * @import { OutputManagerDeputy } from "@components/output/types.d.ts" - * @import { Constituent, Track } from "@definitions/types.d.ts" + * @import { Facet, Track } from "@definitions/types.d.ts" */ /** @@ -17,19 +17,19 @@ class JsonStringOutputTransformer extends OutputTransformer { /** @type {OutputManagerDeputy} */ const manager = { - constituents: { - ...base.constituents, + facets: { + ...base.facets, collection: computed(() => { - const data = base.constituents.collection(); - /** @type {Constituent[]} */ + const data = base.facets.collection(); + /** @type {Facet[]} */ const c = parseArray(data); return c; }), - save: async (newConstituents) => { - const json = JSON.stringify(newConstituents); + save: async (newFacets) => { + const json = JSON.stringify(newFacets); const encoder = new TextEncoder(); const bytes = encoder.encode(json); - await base.constituents.save(bytes); + await base.facets.save(bytes); }, }, tracks: { diff --git a/src/components/transformer/output/refiner/default/element.js b/src/components/transformer/output/refiner/default/element.js index 87532cd37..eb3a990b3 100644 --- a/src/components/transformer/output/refiner/default/element.js +++ b/src/components/transformer/output/refiner/default/element.js @@ -16,10 +16,10 @@ class DefaultOutputRefinerTransformer extends OutputTransformer { /** @type {OutputManagerDeputy} */ const manager = { - constituents: { - ...base.constituents, + facets: { + ...base.facets, collection: computed(() => { - return base.constituents.collection() ?? []; + return base.facets.collection() ?? []; }), }, tracks: { @@ -35,7 +35,7 @@ class DefaultOutputRefinerTransformer extends OutputTransformer { }; // Assign manager properties to class - this.constituents = manager.constituents; + this.facets = manager.facets; this.tracks = manager.tracks; } } diff --git a/src/components/transformer/output/string/json/element.js b/src/components/transformer/output/string/json/element.js index 356291947..703dc1914 100644 --- a/src/components/transformer/output/string/json/element.js +++ b/src/components/transformer/output/string/json/element.js @@ -3,7 +3,6 @@ import { OutputTransformer } from "../../base.js"; /** * @import { OutputManagerDeputy } from "@components/output/types.d.ts" - * @import { Track } from "@definitions/types.d.ts" */ /** @@ -17,15 +16,15 @@ class JsonStringOutputTransformer extends OutputTransformer { /** @type {OutputManagerDeputy} */ const manager = { - constituents: { - ...base.constituents, + facets: { + ...base.facets, collection: computed(() => { - const json = base.constituents.collection(); + const json = base.facets.collection(); return typeof json === "string" ? parseArray(json) : []; }), - save: async (newConstituents) => { - const json = JSON.stringify(newConstituents); - await base.constituents.save(json); + save: async (newFacets) => { + const json = JSON.stringify(newFacets); + await base.facets.save(json); }, }, tracks: { @@ -42,7 +41,7 @@ class JsonStringOutputTransformer extends OutputTransformer { }; // Assign manager properties to class - this.constituents = manager.constituents; + this.facets = manager.facets; this.tracks = manager.tracks; } } diff --git a/src/constituents/l/index.vto b/src/constituents/l/index.vto deleted file mode 100644 index c8f9cf465..000000000 --- a/src/constituents/l/index.vto +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: layouts/constituent.vto -base: ../../ - -scripts: - - constituents/l/index.js ---- - -
          diff --git a/src/definitions/index.ts b/src/definitions/index.ts index d9cc8c0e0..f9fa3ac60 100644 --- a/src/definitions/index.ts +++ b/src/definitions/index.ts @@ -1,4 +1,4 @@ -export * as ShDiffuseOutputConstituent from "./types/sh/diffuse/output/constituent.ts"; +export * as ShDiffuseOutputFacet from "./types/sh/diffuse/output/facet.ts"; export * as ShDiffuseOutputPlaylist from "./types/sh/diffuse/output/playlist.ts"; export * as ShDiffuseOutputTheme from "./types/sh/diffuse/output/theme.ts"; export * as ShDiffuseOutputTrack from "./types/sh/diffuse/output/track.ts"; diff --git a/src/definitions/output/constituent.json b/src/definitions/output/facet.json similarity index 79% rename from src/definitions/output/constituent.json rename to src/definitions/output/facet.json index 13446b015..39d2e4227 100644 --- a/src/definitions/output/constituent.json +++ b/src/definitions/output/facet.json @@ -1,6 +1,6 @@ { "lexicon": 1, - "id": "sh.diffuse.output.constituent", + "id": "sh.diffuse.output.facet", "defs": { "main": { "type": "record", @@ -15,12 +15,12 @@ "description": { "type": "string" }, "html": { "type": "string", - "description": "The UTF8 HTML string that makes up the constituent" + "description": "The UTF8 HTML string that makes up the facet" }, "name": { "type": "string" }, "url": { "type": "string", - "description": "An optional URL that points at the constituent; can be used to update this artifact" + "description": "An optional URL that points at the facet; can be used to update this artifact" } } } diff --git a/src/definitions/types.d.ts b/src/definitions/types.d.ts index bbced8d15..2fbf9916d 100644 --- a/src/definitions/types.d.ts +++ b/src/definitions/types.d.ts @@ -1,6 +1,4 @@ -export type { - Main as Constituent, -} from "./types/sh/diffuse/output/constituent.ts"; +export type { Main as Facet } from "./types/sh/diffuse/output/facet.ts"; export type { AutoGenerate as PlaylistAutoGeneration, diff --git a/src/constituents/examples/generate-playlist.html.txt b/src/facets/examples/generate-playlist.html.txt similarity index 92% rename from src/constituents/examples/generate-playlist.html.txt rename to src/facets/examples/generate-playlist.html.txt index ccbb7b48f..db83c264b 100644 --- a/src/constituents/examples/generate-playlist.html.txt +++ b/src/facets/examples/generate-playlist.html.txt @@ -10,7 +10,7 @@ + diff --git a/src/themes/blur/artwork-controller/constituent.js b/src/themes/blur/artwork-controller/facet.js similarity index 93% rename from src/themes/blur/artwork-controller/constituent.js rename to src/themes/blur/artwork-controller/facet.js index 30bd84d66..03a299575 100644 --- a/src/themes/blur/artwork-controller/constituent.js +++ b/src/themes/blur/artwork-controller/facet.js @@ -1,4 +1,4 @@ -import foundation from "@common/constituents/foundation.js"; +import foundation from "@common/facets/foundation.js"; import ArtworkController from "@themes/blur/artwork-controller/element.js"; // Setup the prerequisite elements diff --git a/src/themes/index.vto b/src/themes/index.vto index 251326957..176a3d58e 100644 --- a/src/themes/index.vto +++ b/src/themes/index.vto @@ -1,5 +1,5 @@ --- -layout: layouts/constituent.vto +layout: layouts/facet.vto base: ../ styles: diff --git a/src/themes/webamp/browser/constituent.html.txt b/src/themes/webamp/browser/facet.html.txt similarity index 82% rename from src/themes/webamp/browser/constituent.html.txt rename to src/themes/webamp/browser/facet.html.txt index 0d5fcc7a4..d151512d0 100644 --- a/src/themes/webamp/browser/constituent.html.txt +++ b/src/themes/webamp/browser/facet.html.txt @@ -20,7 +20,7 @@ - + diff --git a/src/themes/webamp/browser/constituent.js b/src/themes/webamp/browser/facet.js similarity index 91% rename from src/themes/webamp/browser/constituent.js rename to src/themes/webamp/browser/facet.js index 0a04d6016..6db280303 100644 --- a/src/themes/webamp/browser/constituent.js +++ b/src/themes/webamp/browser/facet.js @@ -1,4 +1,4 @@ -import foundation from "@common/constituents/foundation.js"; +import foundation from "@common/facets/foundation.js"; import BrowserElement from "@themes/webamp/browser/element.js"; foundation.features.fillQueueAutomatically(); diff --git a/src/themes/webamp/configurators/input/constituent.html.txt b/src/themes/webamp/configurators/input/facet.html.txt similarity index 81% rename from src/themes/webamp/configurators/input/constituent.html.txt rename to src/themes/webamp/configurators/input/facet.html.txt index 0629f3104..8b7262934 100644 --- a/src/themes/webamp/configurators/input/constituent.html.txt +++ b/src/themes/webamp/configurators/input/facet.html.txt @@ -20,7 +20,7 @@ - + diff --git a/src/themes/webamp/configurators/input/constituent.js b/src/themes/webamp/configurators/input/facet.js similarity index 92% rename from src/themes/webamp/configurators/input/constituent.js rename to src/themes/webamp/configurators/input/facet.js index fb7c4ded4..c707b733c 100644 --- a/src/themes/webamp/configurators/input/constituent.js +++ b/src/themes/webamp/configurators/input/facet.js @@ -1,4 +1,4 @@ -import foundation from "@common/constituents/foundation.js"; +import foundation from "@common/facets/foundation.js"; import InputConfigElement from "@themes/webamp/configurators/input/element.js"; import { effect } from "@common/signal.js"; diff --git a/src/themes/webamp/constituent.css b/src/themes/webamp/facet.css similarity index 100% rename from src/themes/webamp/constituent.css rename to src/themes/webamp/facet.css
        -
        +
        +
        + + + ${artwork} +
        @@ -372,18 +363,30 @@ class ArtworkController extends DiffuseElement {
        -
        +
        +
        - + + - ${this.$queue.value?.now()?.tags?.title || + ${activeQueueItem?.tags?.title || "Diffuse"}
        - + + ${activeQueueItem?.tags?.artist ?? + (activeQueueItem ? `Waiting on queue ...` : ``)} +
        - + +
        @@ -394,12 +397,14 @@ class ArtworkController extends DiffuseElement {
        - + +
      1. + +
      2. +
      3. +
      4. + + + +
        + +
        + +
        + +
        From 2d6a579b7443485047c8d14837746a077c47ccc4 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 7 Dec 2025 21:05:34 +0100 Subject: [PATCH 113/244] fix: perf issue with artwork signal --- src/themes/blur/artwork-controller/element.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 49ba5ba03..6484b13fa 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -46,7 +46,7 @@ class ArtworkController extends DiffuseElement { // SIGNALS - #artwork = signal(/** @type {Artwork[]} */ ([])); + #artwork = signal(/** @type {Artwork[]} */ ([]), { eager: true }); #artworkColor = signal(/** @type {string | undefined} */ (undefined)); #artworkLightMode = signal(false); #duration = signal("0:00"); @@ -150,6 +150,8 @@ class ArtworkController extends DiffuseElement { * @param {Track | null} track */ async #setArtwork(track) { + console.log("SET", track); + if (!track) { this.#artwork.value = []; return; From c4a632a19ea009995234fc240b88195ff9e72ccd Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 7 Dec 2025 21:06:08 +0100 Subject: [PATCH 114/244] chore: remove log --- src/themes/blur/artwork-controller/element.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 6484b13fa..ee58b460e 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -150,8 +150,6 @@ class ArtworkController extends DiffuseElement { * @param {Track | null} track */ async #setArtwork(track) { - console.log("SET", track); - if (!track) { this.#artwork.value = []; return; From 74dd21a4361dd206f269e50e5ec982240936561e Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 8 Dec 2025 12:12:21 +0100 Subject: [PATCH 115/244] fix: adjust audio volume effect --- src/components/engine/audio/element.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 8d5a223c4..4d1e717d7 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -94,11 +94,12 @@ class AudioEngine extends BroadcastableDiffuseElement { // Monitor volume signal this.effect(() => { - Array.from(this.querySelectorAll("de-audio-item audio")).forEach( + Array.from(this.querySelectorAll("de-audio-item")).forEach( (node) => { - const audio = /** @type {HTMLAudioElement} */ (node); - if (audio.hasAttribute("preload")) return; - audio.volume = this.#volume.value; + const item = /** @type {AudioEngineItem} */ (node); + if (item.hasAttribute("preload")) return; + const audio = item.querySelector("audio"); + if (audio) audio.volume = this.#volume.value; }, ); From ce7566edf7046dabe0225e9ae412043a429f4656 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 8 Dec 2025 12:40:20 +0100 Subject: [PATCH 116/244] fix: reset audio hasEnded --- src/components/engine/audio/element.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 4d1e717d7..2780b992f 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -453,8 +453,11 @@ class AudioEngineItem extends HTMLElement { playEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - engineItem(audio)?.$state.isPlaying.set(true); - engineItem(audio)?.engine?.$isPlaying.set(true); + const item = engineItem(audio); + item?.$state.hasEnded.set(false); + item?.$state.isPlaying.set(true); + item?.engine?.$hasEnded.set(false); + item?.engine?.$isPlaying.set(true); // In case audio was preloaded: if (audio.readyState === 4) finishedLoading(event); From 3df84dbe80013d845d46cd39a7d5f4bec9346a3a Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 9 Dec 2025 17:58:47 +0100 Subject: [PATCH 117/244] fix: do not import base css --- src/index.css | 2 -- src/index.vto | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.css b/src/index.css index 61645fa98..5984a6bc3 100644 --- a/src/index.css +++ b/src/index.css @@ -1,5 +1,3 @@ -@import "./styles/base.css"; - body { background-color: var(--bg-color); color: var(--text-color); diff --git a/src/index.vto b/src/index.vto index 8a8ad8adc..1422c339b 100644 --- a/src/index.vto +++ b/src/index.vto @@ -2,6 +2,7 @@ layout: layouts/diffuse.vto styles: + - styles/base.css - index.css # THEMES From 9341c99c520e0cede38bd862911f72c2a4333a75 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Fri, 12 Dec 2025 22:19:09 +0100 Subject: [PATCH 118/244] feat: force new worker for some input consumers --- src/common/element.d.ts | 7 ++++++ src/common/element.js | 23 +++++++++++++------ .../orchestrator/process-tracks/element.js | 6 ++++- .../orchestrator/search-tracks/element.js | 8 ++++++- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/common/element.d.ts b/src/common/element.d.ts index 5f5fcdb58..52f40d9e2 100644 --- a/src/common/element.d.ts +++ b/src/common/element.d.ts @@ -13,3 +13,10 @@ export type RenderArg = { html: HtmlTagFunction; state: State; }; + +export type WorkerOpts = { + forceNew?: boolean | { + self?: boolean; + dependencies?: Record; + }; +}; diff --git a/src/common/element.js b/src/common/element.js index 7750dfe6e..f0c1b823f 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -9,7 +9,7 @@ import { BrowserPostMessageIo } from "./worker/rpc.js"; export { keyed } from "lit-html/directives/keyed.js"; /** - * @import {BroadcastingStatus, ProvisionedWorker, ProvisionedWorkers} from "./element.d.ts" + * @import {BroadcastingStatus, ProvisionedWorker, ProvisionedWorkers, WorkerOpts} from "./element.d.ts" * @import {ProxiedActions, Tunnel} from "./worker.d.ts"; * @import {Signal} from "./signal.d.ts" */ @@ -166,21 +166,25 @@ export class DiffuseElement extends HTMLElement { /** * @template {Record any>} Actions + * @param {WorkerOpts} [opts] * @returns {ProxiedActions} */ - workerProxy() { + workerProxy(opts) { return workerProxy( - () => this.workerTunnel().port, + () => this.workerTunnel(opts).port, ); } /** - * @param {{ newWorker?: boolean }} [opts] + * @param {WorkerOpts} [opts] */ - workerTunnel({ newWorker } = {}) { + workerTunnel({ forceNew } = {}) { // Creates a MessagePort that is connected to the worker. // All the dependencies are added automatically. - const worker = newWorker ? this.createWorker() : this.worker(); + const worker = forceNew === true || + (typeof forceNew === "object" && forceNew.self === true) + ? this.createWorker() + : this.worker(); const deps = this.dependencies(); let toWorker; @@ -194,7 +198,12 @@ export class DiffuseElement extends HTMLElement { /** @type {Array<[string, Tunnel]>} */ const ports = Object.entries(deps).map( /** @param {[string, DiffuseElement]} _ */ - ([k, v]) => [k, v.workerTunnel()], + ([k, v]) => { + const n = typeof forceNew === "object" + ? forceNew.dependencies?.[k] ?? false + : false; + return [k, v.workerTunnel({ forceNew: n })]; + }, ); const decoded = await decodeMessage(msg); diff --git a/src/components/orchestrator/process-tracks/element.js b/src/components/orchestrator/process-tracks/element.js index 30bdd4f52..9c93762f5 100644 --- a/src/components/orchestrator/process-tracks/element.js +++ b/src/components/orchestrator/process-tracks/element.js @@ -28,7 +28,11 @@ class ProcessTracksOrchestrator extends DiffuseElement { constructor() { super(); - this.#proxy = this.workerProxy(); + this.#proxy = this.workerProxy({ + forceNew: { + dependencies: { input: true }, + }, + }); } // SIGNALS diff --git a/src/components/orchestrator/search-tracks/element.js b/src/components/orchestrator/search-tracks/element.js index 68a5b856f..5e244094c 100644 --- a/src/components/orchestrator/search-tracks/element.js +++ b/src/components/orchestrator/search-tracks/element.js @@ -27,7 +27,13 @@ class SearchTracksOrchestrator extends DiffuseElement { constructor() { super(); - this.#proxy = this.workerProxy(); + this.#proxy = this.workerProxy({ + forceNew: { + dependencies: { + input: true, + }, + }, + }); } // LIFECYCLE From 2eecea4fedcf78ed31bc1387c0311153fb06bb32 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 13 Dec 2025 00:22:24 +0100 Subject: [PATCH 119/244] feat: artwork controller improvements --- src/common/element.js | 6 +- src/components/engine/audio/element.js | 4 +- .../orchestrator/queue-tracks/element.js | 8 +- .../blur/artwork-controller/element.css | 5 +- src/themes/blur/artwork-controller/element.js | 91 ++++++++++++++----- 5 files changed, 86 insertions(+), 28 deletions(-) diff --git a/src/common/element.js b/src/common/element.js index f0c1b823f..e5c440875 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -6,14 +6,14 @@ import { effect, signal } from "@common/signal.js"; import { rpc, workerLink, workerProxy, workerTunnel } from "./worker.js"; import { BrowserPostMessageIo } from "./worker/rpc.js"; -export { keyed } from "lit-html/directives/keyed.js"; - /** * @import {BroadcastingStatus, ProvisionedWorker, ProvisionedWorkers, WorkerOpts} from "./element.d.ts" * @import {ProxiedActions, Tunnel} from "./worker.d.ts"; * @import {Signal} from "./signal.d.ts" */ +export const DEFAULT_GROUP = "default"; + /** * Base for custom elements, provides some utility functionality * around rendering and managing signals. @@ -25,7 +25,7 @@ export class DiffuseElement extends HTMLElement { constructor() { super(); - this.group = this.getAttribute("group") ?? "default"; + this.group = this.getAttribute("group") ?? DEFAULT_GROUP; this.worker = this.worker.bind(this); this.workerLink = this.workerLink.bind(this); diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 2780b992f..642f63e21 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -1,4 +1,6 @@ -import { BroadcastableDiffuseElement, keyed } from "@common/element.js"; +import { keyed } from "lit-html/directives/keyed.js"; + +import { BroadcastableDiffuseElement } from "@common/element.js"; import { computed, signal } from "@common/signal.js"; /** diff --git a/src/components/orchestrator/queue-tracks/element.js b/src/components/orchestrator/queue-tracks/element.js index b15edfe11..428f7196f 100644 --- a/src/components/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/queue-tracks/element.js @@ -28,7 +28,13 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { constructor() { super(); - this.#proxy = this.workerProxy(); + this.#proxy = this.workerProxy({ + forceNew: { + dependencies: { + input: true, + }, + }, + }); } // LIFECYCLE diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css index 86406b27b..018c00d23 100644 --- a/src/themes/blur/artwork-controller/element.css +++ b/src/themes/blur/artwork-controller/element.css @@ -1,5 +1,5 @@ :host { - --transition-durition: 500ms; + --transition-durition: 750ms; } main { @@ -47,8 +47,9 @@ main { left: var(--space-xs); letter-spacing: var(--tracking-wide); line-height: 1; - padding: 7px 6px 6px; + padding: 8px 6px; position: absolute; + text-box: trim-both cap alphabetic; text-transform: uppercase; top: var(--space-xs); transition: diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index ee58b460e..841951020 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -3,18 +3,22 @@ import { Temporal } from "@js-temporal/polyfill"; import { xxh32r } from "xxh32/dist/raw.js"; import { debounce } from "throttle-debounce"; +import { cache } from "lit-html/directives/cache.js"; +import { guard } from "lit-html/directives/guard.js"; +import { keyed } from "lit-html/directives/keyed.js"; + import { + DEFAULT_GROUP, DiffuseElement, - keyed, query, whenElementsDefined, } from "@common/element.js"; + import { trackArtworkCacheId } from "@common/index.js"; -import { computed, signal } from "@common/signal.js"; +import { computed, signal, untracked } from "@common/signal.js"; /** * @import {RenderArg} from "@common/element.d.ts" - * @import {Track} from "@definitions/types.d.ts" * * @import {InputElement} from "@components/input/types.d.ts" * @import {Artwork} from "@components/processor/artwork/types.d.ts" @@ -46,7 +50,14 @@ class ArtworkController extends DiffuseElement { // SIGNALS - #artwork = signal(/** @type {Artwork[]} */ ([]), { eager: true }); + #artwork = signal( + /** @type {{ current: Artwork | null; previous: Artwork | null }} */ ({ + current: null, + previous: null, + }), + { eager: true }, + ); + #artworkColor = signal(/** @type {string | undefined} */ (undefined)); #artworkLightMode = signal(false); #duration = signal("0:00"); @@ -105,7 +116,8 @@ class ArtworkController extends DiffuseElement { ); this.effect(() => { - debouncedChangeArtwork(queue.now()); + const _trigger = queue.now(); + debouncedChangeArtwork(); }); this.effect(() => this.#formatTimestamps()); @@ -146,12 +158,15 @@ class ArtworkController extends DiffuseElement { } else controller.classList.remove("controller__inner--light-mode"); } - /** - * @param {Track | null} track - */ - async #setArtwork(track) { + /** */ + async #setArtwork() { + const track = this.$queue.value?.now(); + const currArtwork = untracked(this.#artwork.get); + if (!track) { - this.#artwork.value = []; + if (currArtwork.current) { + this.#artwork.value = { current: null, previous: currArtwork.current }; + } return; } @@ -184,9 +199,23 @@ class ArtworkController extends DiffuseElement { }, }; + if (this.$queue.value?.now()?.id !== track.id) { + return; + } + const art = await this.$artwork.value?.artwork(request) ?? []; - const currCacheId = track ? await trackArtworkCacheId(track) : undefined; - if (cacheId === currCacheId) this.#artwork.set(art); + + const currTrack = this.$queue.value?.now(); + const currCacheId = currTrack + ? await trackArtworkCacheId(currTrack) + : undefined; + + if (cacheId === currCacheId) { + this.#artwork.set({ + previous: currArtwork.current, + current: art[0] ?? null, + }); + } } //////////////////////////////////////////// @@ -317,7 +346,20 @@ class ArtworkController extends DiffuseElement { const activeQueueItem = this.$queue.value?.now(); // Artwork - const artwork = this.#artwork.value.map((art) => { + const artworkArr = [ + { key: "previous", value: this.#artwork.value.previous }, + { key: "current", value: this.#artwork.value.current }, + ]; + + const artwork = artworkArr.map(({ key, value }) => { + const art = value; + + if (art === null) { + return html` + + `; + } + const hash = xxh32r(art.bytes).toString(); const blob = new Blob( [/** @type {ArrayBuffer} */ (art.bytes.buffer)], @@ -326,12 +368,18 @@ class ArtworkController extends DiffuseElement { const url = URL.createObjectURL(blob); - return keyed( - hash, - html` - - `, - ); + return guard([hash], () => + keyed( + hash, + html` + + `, + )); }); return html` @@ -343,8 +391,9 @@ class ArtworkController extends DiffuseElement { - - - - - - - - - - - - - - - - - - - - - - + + + Manage user data + + + + + + + + Browse collection + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + +
        + + + +
        -
        -
        +
        @@ -443,7 +441,6 @@ class ArtworkController extends DiffuseElement { ${activeQueueItem?.tags?.title || "Diffuse"} -
        From 1bf8226eec8e06fad3de8b491ad8e55d03707eb0 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 14 Dec 2025 00:00:18 +0100 Subject: [PATCH 124/244] fix: add missing $hasEnded action --- src/components/engine/audio/element.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 642f63e21..5dd601804 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -57,6 +57,7 @@ class AudioEngine extends BroadcastableDiffuseElement { seek: { strategy: "leaderOnly", fn: this.seek }, supply: { strategy: "replicate", fn: this.supply }, + setHasEnded: { strategy: "replicate", fn: this.$hasEnded.set }, setIsPlaying: { strategy: "replicate", fn: this.$isPlaying.set }, }, ); @@ -68,6 +69,7 @@ class AudioEngine extends BroadcastableDiffuseElement { this.seek = actions.seek; this.supply = actions.supply; + this.$hasEnded.set = actions.setHasEnded; this.$isPlaying.set = actions.setIsPlaying; } } From 3f0c795b5f0ec5660a0da772779065bd233a3a0c Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 14 Dec 2025 23:26:26 +0100 Subject: [PATCH 125/244] refactor: isPlaying + hasEnded audio signals --- src/components/engine/audio/element.js | 37 ++++++++----------- .../orchestrator/queue-audio/element.js | 7 +++- src/themes/blur/artwork-controller/element.js | 3 +- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 5dd601804..6165a2fb1 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -30,13 +30,8 @@ class AudioEngine extends BroadcastableDiffuseElement { #items = signal(/** @type {Audio[]} */ ([])); #volume = signal(0.5); - $hasEnded = signal(false); - $isPlaying = signal(false); - // STATE - hasEnded = this.$hasEnded.get; - isPlaying = this.$isPlaying.get; items = this.#items.get; volume = this.#volume.get; @@ -56,9 +51,6 @@ class AudioEngine extends BroadcastableDiffuseElement { play: { strategy: "leaderOnly", fn: this.play }, seek: { strategy: "leaderOnly", fn: this.seek }, supply: { strategy: "replicate", fn: this.supply }, - - setHasEnded: { strategy: "replicate", fn: this.$hasEnded.set }, - setIsPlaying: { strategy: "replicate", fn: this.$isPlaying.set }, }, ); @@ -68,9 +60,6 @@ class AudioEngine extends BroadcastableDiffuseElement { this.play = actions.play; this.seek = actions.seek; this.supply = actions.supply; - - this.$hasEnded.set = actions.setHasEnded; - this.$isPlaying.set = actions.setIsPlaying; } } @@ -269,6 +258,21 @@ class AudioEngine extends BroadcastableDiffuseElement { }); } + /** + * Convenience signal to track if something is, or was, playing. + */ + isPlaying() { + return computed(() => { + const item = this.items()?.[0]; + if (!item) return false; + + const state = this.state(item.id); + if (!state) return false; + + return state.isPlaying() || state.hasEnded() || state.progress() === 1; + }); + } + /** * Get the state of a single audio item. * @@ -321,7 +325,7 @@ class AudioEngineItem extends HTMLElement { this.$state = { duration: signal(0), hasEnded: signal(false), - isPlaying: signal(true), + isPlaying: signal(false), isPreload: signal(this.hasAttribute("preload")), loadingState: signal(/** @type {LoadingState} */ ("loading")), progress: signal(ip ? parseFloat(ip) : 0), @@ -422,7 +426,6 @@ class AudioEngineItem extends HTMLElement { audio.currentTime = 0; engineItem(audio)?.$state.hasEnded.set(true); - engineItem(audio)?.engine?.$hasEnded.set(true); } /** @@ -440,15 +443,9 @@ class AudioEngineItem extends HTMLElement { */ pauseEvent(event) { const audio = /** @type {HTMLAudioElement} */ (event.target); - const item = engineItem(audio); - const itemState = item?.$state; - const ended = itemState - ? itemState.hasEnded.value || itemState.progress.value === 1 - : false; item?.$state.isPlaying.set(false); - item?.engine?.$isPlaying.set(ended); } /** @@ -460,8 +457,6 @@ class AudioEngineItem extends HTMLElement { const item = engineItem(audio); item?.$state.hasEnded.set(false); item?.$state.isPlaying.set(true); - item?.engine?.$hasEnded.set(false); - item?.engine?.$isPlaying.set(true); // In case audio was preloaded: if (audio.readyState === 4) finishedLoading(event); diff --git a/src/components/orchestrator/queue-audio/element.js b/src/components/orchestrator/queue-audio/element.js index 3641d311f..59c89127e 100644 --- a/src/components/orchestrator/queue-audio/element.js +++ b/src/components/orchestrator/queue-audio/element.js @@ -50,7 +50,7 @@ class QueueAudioOrchestrator extends DiffuseElement { if (!this.queue) return; const activeTrack = this.queue.now(); - const isPlaying = untracked(this.audio.isPlaying); + const isPlaying = untracked(this.audio.isPlaying()); // Resolve URIs const resolvedUri = activeTrack @@ -86,7 +86,10 @@ class QueueAudioOrchestrator extends DiffuseElement { if (!this.audio) return; if (!this.queue) return; - if (this.audio.hasEnded()) await this.queue.shift(); + const now = this.queue.now(); + const aud = now ? this.audio.state(now.id) : undefined; + + if (aud?.hasEnded()) await this.queue.shift(); } } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index d72f625d5..1d43a1f44 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -76,8 +76,7 @@ class ArtworkController extends DiffuseElement { }); #isPlaying = computed(() => { - return !!this.$queue.value?.now() && - this.$audio.value?.isPlaying() === true; + return this.$audio.value?.isPlaying()(); }); // LIFECYCLE From de03e4cd95c74f6ab81da815cfffe757664cb730 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 14 Dec 2025 23:35:32 +0100 Subject: [PATCH 126/244] refactor: isPlaying --- src/components/engine/audio/element.js | 32 +++++++++++++------ .../orchestrator/queue-audio/element.js | 2 +- src/themes/blur/artwork-controller/element.js | 2 +- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 6165a2fb1..b9e3e6662 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -25,6 +25,13 @@ const SILENT_MP3 = class AudioEngine extends BroadcastableDiffuseElement { static NAME = "diffuse/engine/audio"; + constructor() { + super(); + + this.isPlaying = this.isPlaying.bind(this); + this.state = this.state.bind(this); + } + // SIGNALS #items = signal(/** @type {Audio[]} */ ([])); @@ -243,6 +250,21 @@ class AudioEngine extends BroadcastableDiffuseElement { // 🛠️ + /** + * Convenience signal to track if something is, or was, playing. + */ + _isPlaying() { + return computed(() => { + const item = this.items()?.[0]; + if (!item) return false; + + const state = this.state(item.id); + if (!state) return false; + + return state.isPlaying() || state.hasEnded() || state.progress() === 1; + }); + } + /** * Get the state of a single audio item. * @@ -262,15 +284,7 @@ class AudioEngine extends BroadcastableDiffuseElement { * Convenience signal to track if something is, or was, playing. */ isPlaying() { - return computed(() => { - const item = this.items()?.[0]; - if (!item) return false; - - const state = this.state(item.id); - if (!state) return false; - - return state.isPlaying() || state.hasEnded() || state.progress() === 1; - }); + return this._isPlaying()(); } /** diff --git a/src/components/orchestrator/queue-audio/element.js b/src/components/orchestrator/queue-audio/element.js index 59c89127e..4ed65b6c8 100644 --- a/src/components/orchestrator/queue-audio/element.js +++ b/src/components/orchestrator/queue-audio/element.js @@ -50,7 +50,7 @@ class QueueAudioOrchestrator extends DiffuseElement { if (!this.queue) return; const activeTrack = this.queue.now(); - const isPlaying = untracked(this.audio.isPlaying()); + const isPlaying = untracked(this.audio.isPlaying); // Resolve URIs const resolvedUri = activeTrack diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 1d43a1f44..0ee6eb2ab 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -76,7 +76,7 @@ class ArtworkController extends DiffuseElement { }); #isPlaying = computed(() => { - return this.$audio.value?.isPlaying()(); + return this.$audio.value?.isPlaying(); }); // LIFECYCLE From 5a8a355e0bc41a501e9bf87149d87dcb47e160f7 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 15 Dec 2025 15:46:06 +0100 Subject: [PATCH 127/244] feat: broadcasted audio --- src/common/element.js | 11 ++- src/components/engine/audio/element.js | 129 +++++++++++++++++++++---- 2 files changed, 119 insertions(+), 21 deletions(-) diff --git a/src/common/element.js b/src/common/element.js index e5c440875..711df6524 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -7,11 +7,12 @@ import { rpc, workerLink, workerProxy, workerTunnel } from "./worker.js"; import { BrowserPostMessageIo } from "./worker/rpc.js"; /** - * @import {BroadcastingStatus, ProvisionedWorker, ProvisionedWorkers, WorkerOpts} from "./element.d.ts" + * @import {BroadcastingStatus, WorkerOpts} from "./element.d.ts" * @import {ProxiedActions, Tunnel} from "./worker.d.ts"; * @import {Signal} from "./signal.d.ts" */ +export { nothing } from "lit-html"; export const DEFAULT_GROUP = "default"; /** @@ -22,11 +23,10 @@ export class DiffuseElement extends HTMLElement { #connected = Promise.withResolvers(); #disposables = /** @type {Array<() => void>} */ ([]); + /** */ constructor() { super(); - this.group = this.getAttribute("group") ?? DEFAULT_GROUP; - this.worker = this.worker.bind(this); this.workerLink = this.workerLink.bind(this); } @@ -55,6 +55,11 @@ export class DiffuseElement extends HTMLElement { return this.#render(); } + /** */ + get group() { + return this.getAttribute("group") ?? DEFAULT_GROUP; + } + /** */ nameWithGroup() { return `${this.constructor.prototype.constructor.NAME}/${this.group}`; diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index b9e3e6662..8017a5e48 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -1,7 +1,7 @@ import { keyed } from "lit-html/directives/keyed.js"; -import { BroadcastableDiffuseElement } from "@common/element.js"; -import { computed, signal } from "@common/signal.js"; +import { BroadcastableDiffuseElement, nothing } from "@common/element.js"; +import { computed, signal, untracked } from "@common/signal.js"; /** * @import {Actions, Audio, AudioState, AudioStateReadOnly, LoadingState} from "./types.d.ts" @@ -48,12 +48,12 @@ class AudioEngine extends BroadcastableDiffuseElement { * @override */ connectedCallback() { - // Setup leader election if shared + // Setup broadcasting if part of group if (this.hasAttribute("group")) { const actions = this.broadcast( this.nameWithGroup(), { - adjustVolume: { strategy: "leaderOnly", fn: this.adjustVolume }, + adjustVolume: { strategy: "replicate", fn: this.adjustVolume }, pause: { strategy: "leaderOnly", fn: this.pause }, play: { strategy: "leaderOnly", fn: this.play }, seek: { strategy: "leaderOnly", fn: this.seek }, @@ -86,9 +86,34 @@ class AudioEngine extends BroadcastableDiffuseElement { if (this.broadcasted) { this.effect(async () => { const status = await this.broadcastingStatus(); - if (status.leader && status.initialLeader === false) { - console.log("🧙 Leadership acquired (no actions performed)"); - } + untracked(() => { + if (!(status.leader && status.initialLeader === false)) return; + + console.log("🧙 Leadership acquired"); + this.items().forEach((item) => { + const el = this.#itemElement(item.id); + if (!el) return; + + el.removeAttribute("initial-progress"); + + if (!el.audio) return; + + const progress = el.$state.progress.value; + const canPlay = () => { + this.seek({ + audioId: item.id, + percentage: progress, + }); + + if (el.$state.isPlaying.value) this.play({ audioId: item.id }); + }; + + el.audio.addEventListener("canplay", canPlay, { once: true }); + + if (el.audio.readyState === 0) el.audio.load(); + else canPlay(); + }); + }); }); } @@ -211,6 +236,7 @@ class AudioEngine extends BroadcastableDiffuseElement { if (source) source.src = SILENT_MP3; }); + const group = this.group; const nodes = this.items().map((audio) => { const ip = audio.progress === undefined ? "0" @@ -220,11 +246,12 @@ class AudioEngine extends BroadcastableDiffuseElement { audio.id, html`
        diff --git a/src/index.css b/src/styles/diffuse/page.css similarity index 84% rename from src/index.css rename to src/styles/diffuse/page.css index 5984a6bc3..df6113748 100644 --- a/src/index.css +++ b/src/styles/diffuse/page.css @@ -14,13 +14,14 @@ a { } h1 { - margin: var(--space-lg) 0 var(--space-lg); + margin: var(--space-lg) 0 var(--space-xl); padding-top: var(--space-2xs); } h1 svg { fill: oklch(from var(--bg-color) calc(l - 0.5) c h); - opacity: 0.125; + opacity: 0.2; + width: 4.25em; @media (prefers-color-scheme: dark) { & { @@ -77,15 +78,21 @@ small { } .construct { - color: oklch(from currentColor l c h / 0.65); - font-size: var(--fs-2xl); + color: oklch(from currentColor l c h / 0.3); + font-size: var(--fs-3xl); font-weight: 900; letter-spacing: -0.0125em; line-height: 0.775em; - line-height: 1.05cap; + line-height: 0.9cap; margin-bottom: var(--space-md); max-width: var(--container-xl); text-transform: uppercase; + + @media (prefers-color-scheme: dark) { + & { + color: oklch(from var(--color-2) l c h / 0.75); + } + } } .element { From b92cbe95144ceb601c798ed2d32a0ef07f0fcaff Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sat, 20 Dec 2025 23:35:14 +0100 Subject: [PATCH 131/244] wip: output configurator --- src/components/configurator/output/element.js | 67 +++++++++++++++++++ .../output/polymorphic/indexed-db/element.js | 17 +++-- .../output/polymorphic/indexed-db/types.d.ts | 1 + .../output/polymorphic/indexed-db/worker.js | 40 +++-------- src/components/output/types.d.ts | 7 +- src/components/transformer/output/base.js | 65 ++++++++++++++++++ .../output/refiner/default/element.js | 51 ++++---------- .../transformer/output/string/json/element.js | 55 ++++----------- src/themes/webamp/index.js | 2 +- 9 files changed, 183 insertions(+), 122 deletions(-) create mode 100644 src/components/configurator/output/element.js create mode 100644 src/components/output/polymorphic/indexed-db/types.d.ts create mode 100644 src/components/transformer/output/base.js diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js new file mode 100644 index 000000000..70551c156 --- /dev/null +++ b/src/components/configurator/output/element.js @@ -0,0 +1,67 @@ +import { DiffuseElement } from "@common/element.js"; +import { computed, signal } from "@common/signal.js"; + +/** + * @import {ProxiedActions} from "@common/worker.d.ts" + * @import {Track} from "@definitions/types.d.ts" + * @import {OutputManager, OutputElement} from "@components/output/types.d.ts" + */ + +//////////////////////////////////////////// +// ELEMENT +//////////////////////////////////////////// + +/** + * @implements {OutputManager} + */ +class OutputConfigurator extends DiffuseElement { + static NAME = "diffuse/configurator/output"; + static WORKER_URL = "components/configurator/output/worker.js"; + + constructor() { + super(); + + /** @type {OutputManager} */ + const manager = { + tracks: { + collection: computed(() => { + return this.#memory.tracks.value; + }), + reload: async () => {}, + save: async (newTracks) => { + this.#memory.tracks.value = newTracks; + }, + state: () => "loaded", + }, + }; + + // Assign manager properties to class + this.tracks = manager.tracks; + } + + // SIGNALS + + #memory = { + tracks: signal(/** @type {Track[]} */ ([])), + }; + + // LIFECYCLE + + /** + * @override + */ + async connectedCallback() { + super.connectedCallback(); + } +} + +export default OutputConfigurator; + +//////////////////////////////////////////// +// REGISTER +//////////////////////////////////////////// + +export const CLASS = OutputConfigurator; +export const NAME = "dc-output"; + +customElements.define(NAME, CLASS); diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index 5c2c2128a..e99e2b3ea 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -4,6 +4,7 @@ import { outputManager } from "../../common.js"; /** * @import {ProxiedActions} from "@common/worker.d.ts" * @import {OutputManager, OutputWorkerActions} from "../../types.d.ts" + * @import {SupportedDataTypes} from "./types.d.ts" */ //////////////////////////////////////////// @@ -20,20 +21,26 @@ class IndexedDBOutput extends DiffuseElement { constructor() { super(); - /** @type {ProxiedActions} */ + /** @type {ProxiedActions>} */ const p = this.workerProxy(); - // Manager + /** @type {OutputManager} */ const manager = outputManager({ tracks: { - empty: () => [], - get: p.getTracks, - put: p.putTracks, + empty: () => undefined, + get: () => p.get({ name: this.#cat("tracks") }), + put: (data) => p.put({ name: this.#cat("tracks"), data }), }, }); this.tracks = manager.tracks; } + + /** @param {string} name */ + #cat(name) { + const key = this.hasAttribute("key") ? this.getAttribute("key") + "/" : ""; + return `${key}${name}`; + } } export default IndexedDBOutput; diff --git a/src/components/output/polymorphic/indexed-db/types.d.ts b/src/components/output/polymorphic/indexed-db/types.d.ts new file mode 100644 index 000000000..0c35ba7e5 --- /dev/null +++ b/src/components/output/polymorphic/indexed-db/types.d.ts @@ -0,0 +1 @@ +export type SupportedDataTypes = any; diff --git a/src/components/output/polymorphic/indexed-db/worker.js b/src/components/output/polymorphic/indexed-db/worker.js index e6b21440d..2c2b03865 100644 --- a/src/components/output/polymorphic/indexed-db/worker.js +++ b/src/components/output/polymorphic/indexed-db/worker.js @@ -4,7 +4,8 @@ import { IDB_PREFIX } from "./constants.js"; import { ostiary, rpc } from "@common/worker.js"; /** - * @import {Track} from "@definitions/types.d.ts"; + * @import {OutputWorkerActions} from "@components/output/types.d.ts"; + * @import {SupportedDataTypes} from "./types.d.ts" */ //////////////////////////////////////////// @@ -12,46 +13,25 @@ import { ostiary, rpc } from "@common/worker.js"; //////////////////////////////////////////// /** - * @returns {Promise} + * @type {OutputWorkerActions["get"]} */ -export async function getTracks() { - /** @type {Track[] | null} */ - const tracks = await get({ name: "tracks.json" }); - return tracks ?? []; +export async function get({ name }) { + return await IDB.get(`${IDB_PREFIX}/${name}`); } /** - * @param {Track[]} tracks + * @type {OutputWorkerActions["put"]} */ -export async function putTracks(tracks) { - await put({ name: "tracks.json", data: tracks }); +export async function put({ data, name }) { + return await IDB.set(`${IDB_PREFIX}/${name}`, data); } - //////////////////////////////////////////// // ⚡️ //////////////////////////////////////////// ostiary((context) => { rpc(context, { - getTracks, - putTracks, + get, + put, }); }); - -//////////////////////////////////////////// -// ⛔️ -//////////////////////////////////////////// - -/** - * @param {{ name: string }} _ - */ -async function get({ name }) { - return await IDB.get(`${IDB_PREFIX}/${name}`); -} - -/** - * @param {{ data: any; name: string }} _ - */ -async function put({ data, name }) { - return await IDB.set(`${IDB_PREFIX}/${name}`, data); -} diff --git a/src/components/output/types.d.ts b/src/components/output/types.d.ts index d46bb8ae3..5f7bf2795 100644 --- a/src/components/output/types.d.ts +++ b/src/components/output/types.d.ts @@ -1,5 +1,4 @@ import type { SignalReader } from "@common/signal.d.ts"; -import type { Track } from "@definitions/types.d.ts"; import type { DiffuseElement } from "@common/element.js"; export type OutputElement = DiffuseElement & OutputManager; @@ -22,7 +21,7 @@ export type OutputManagerProperties = { }; }; -export type OutputWorkerActions = { - getTracks(): Promise; - putTracks(tracks: Track[]): Promise; +export type OutputWorkerActions = { + get(args: { name: string }): Promise; + put(args: { data: DataType; name: string }): Promise; }; diff --git a/src/components/transformer/output/base.js b/src/components/transformer/output/base.js new file mode 100644 index 000000000..9de69c6a4 --- /dev/null +++ b/src/components/transformer/output/base.js @@ -0,0 +1,65 @@ +import { DiffuseElement, query } from "@common/element.js"; +import { computed, signal } from "@common/signal.js"; + +/** + * @import { OutputElement, OutputManager } from "../../output/types.d.ts" + */ + +/** + * @template T + */ +export class OutputTransformer extends DiffuseElement { + // SIGNALS + + #output = signal(/** @type {OutputElement | undefined} */ (undefined)); + #outputWhenDefined = Promise.withResolvers(); + + output = { + whenDefined: this.#outputWhenDefined.promise, + signal: this.#output.get, + }; + + // LIFECYCLE + + /** + * @override + */ + connectedCallback() { + super.connectedCallback(); + + /** @type {OutputElement} */ + const output = query(this, "output-selector"); + + // When defined + customElements.whenDefined(output.localName).then(() => { + this.#output.value = output; + this.#outputWhenDefined.resolve(null); + }); + } + + // MANAGER + + base() { + /** @type {OutputManager} */ + const m = { + tracks: { + collection: computed(() => { + return this.output.signal()?.tracks?.collection(); + }), + reload: () => { + return this.output.signal()?.tracks?.reload() ?? Promise.resolve(); + }, + save: async (newTracks) => { + if (newTracks === undefined) return; + await this.output.whenDefined; + await this.output.signal()?.tracks.save(newTracks); + }, + state: computed(() => + this.output.signal()?.tracks.state() ?? "loading" + ), + }, + }; + + return m; + } +} diff --git a/src/components/transformer/output/refiner/default/element.js b/src/components/transformer/output/refiner/default/element.js index b15012b86..716dc9416 100644 --- a/src/components/transformer/output/refiner/default/element.js +++ b/src/components/transformer/output/refiner/default/element.js @@ -1,64 +1,37 @@ -import { DiffuseElement, query } from "@common/element.js"; -import { computed, signal } from "@common/signal.js"; +import { computed } from "@common/signal.js"; +import { OutputTransformer } from "../../base.js"; /** - * @import { OutputElement, OutputManager } from "../../../../output/types.d.ts" + * @import { OutputManager } from "../../../../output/types.d.ts" * @import { Track } from "@definitions/types.d.ts" */ -class DefaultOutputRefinerTransformer extends DiffuseElement { +/** + * @extends {OutputTransformer} + */ +class DefaultOutputRefinerTransformer extends OutputTransformer { constructor() { super(); + const base = this.base(); + /** @type {OutputManager} */ const manager = { tracks: { + ...base.tracks, collection: computed(() => { - return this.#defined.value - ? this.output?.tracks?.collection() ?? [] - : []; + return base.tracks.collection() ?? []; }), - reload: () => this.output?.tracks?.reload() ?? Promise.resolve(), save: async (newTracks) => { const filtered = newTracks.filter((t) => !t.ephemeral); - - if (!this.output) return; - - await customElements.whenDefined(this.output.localName); - await this.output.tracks.save(filtered); + await base.tracks.save(filtered); }, - state: computed(() => this.output?.tracks.state() ?? "loading"), }, }; // Assign manager properties to class this.tracks = manager.tracks; } - - /** @type {OutputElement | undefined} */ - output = undefined; - - // SIGNALS - - #defined = signal(false); - - // LIFECYCLE - - /** - * @override - */ - connectedCallback() { - super.connectedCallback(); - - /** @type {OutputElement} */ - const output = query(this, "output-selector"); - this.output = output; - - // When defined - customElements.whenDefined(this.output.localName).then( - () => this.#defined.value = true, - ); - } } export default DefaultOutputRefinerTransformer; diff --git a/src/components/transformer/output/string/json/element.js b/src/components/transformer/output/string/json/element.js index 1356c7e51..7867d19b1 100644 --- a/src/components/transformer/output/string/json/element.js +++ b/src/components/transformer/output/string/json/element.js @@ -1,26 +1,26 @@ -import { DiffuseElement, query } from "@common/element.js"; -import { computed, signal } from "@common/signal.js"; +import { computed } from "@common/signal.js"; +import { OutputTransformer } from "../../base.js"; /** - * @import { OutputElement, OutputManager } from "../../../../output/types.d.ts" + * @import { OutputManager } from "../../../../output/types.d.ts" * @import { Track } from "@definitions/types.d.ts" */ -class JsonStringOutputTransformer extends DiffuseElement { +/** + * @extends {OutputTransformer} + */ +class JsonStringOutputTransformer extends OutputTransformer { constructor() { super(); + const base = this.base(); + /** @type {OutputManager} */ const manager = { tracks: { + ...base.tracks, collection: computed(() => { - const json = this.#defined.value - ? this.output?.tracks?.collection() ?? [] - : []; - - // In addition to the above, Some polymorphic outputs - // use an empty array as the default return value. - if (Array.isArray(json)) return json; + const json = base.tracks.collection() ?? "[]"; // Try parsing JSON try { @@ -32,47 +32,16 @@ class JsonStringOutputTransformer extends DiffuseElement { return []; } }), - reload: () => this.output?.tracks?.reload() ?? Promise.resolve(), save: async (newTracks) => { const json = JSON.stringify(newTracks); - - if (!this.output) return; - - await customElements.whenDefined(this.output.localName); - await this.output.tracks.save(json); + await base.tracks.save(json); }, - state: computed(() => this.output?.tracks?.state() ?? "loading"), }, }; // Assign manager properties to class this.tracks = manager.tracks; } - - /** @type {OutputElement | undefined} */ - output = undefined; - - // SIGNALS - - #defined = signal(false); - - // LIFECYCLE - - /** - * @override - */ - connectedCallback() { - super.connectedCallback(); - - /** @type {OutputElement} */ - const output = query(this, "output-selector"); - this.output = output; - - // When defined - customElements.whenDefined(this.output.localName).then( - () => this.#defined.value = true, - ); - } } export default JsonStringOutputTransformer; diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 1f906fa25..b154e1ebe 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,4 +1,4 @@ -// import "@components/orchestrator/process-tracks/element.js"; +import "@components/orchestrator/process-tracks/element.js"; import "@components/orchestrator/queue-tracks/element.js"; import "@components/input/opensubsonic/element.js"; import "@components/input/s3/element.js"; From abff4b7d1ca4cc4725eb7b46c85a9fa126b211ea Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 21 Dec 2025 23:32:27 +0100 Subject: [PATCH 132/244] feat: output configurator --- src/components/configurator/output/element.js | 90 ++++++++++++++++++- .../polymorphic/indexed-db/constants.js | 2 +- src/themes/webamp/index.js | 6 +- src/themes/webamp/index.vto | 15 ++-- 4 files changed, 101 insertions(+), 12 deletions(-) diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 70551c156..873306fef 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -2,11 +2,16 @@ import { DiffuseElement } from "@common/element.js"; import { computed, signal } from "@common/signal.js"; /** - * @import {ProxiedActions} from "@common/worker.d.ts" * @import {Track} from "@definitions/types.d.ts" * @import {OutputManager, OutputElement} from "@components/output/types.d.ts" */ +/** + * @typedef {OutputElement} Output + */ + +const STORAGE_PREFIX = "diffuse/configurator/output"; + //////////////////////////////////////////// // ELEMENT //////////////////////////////////////////// @@ -16,7 +21,6 @@ import { computed, signal } from "@common/signal.js"; */ class OutputConfigurator extends DiffuseElement { static NAME = "diffuse/configurator/output"; - static WORKER_URL = "components/configurator/output/worker.js"; constructor() { super(); @@ -25,13 +29,25 @@ class OutputConfigurator extends DiffuseElement { const manager = { tracks: { collection: computed(() => { + const out = this.#selectedOutput.value; + if (out) return out.tracks.collection(); return this.#memory.tracks.value; }), - reload: async () => {}, + reload: () => { + const out = this.#selectedOutput.value; + if (out) return out.tracks.reload(); + return Promise.resolve(); + }, save: async (newTracks) => { + const out = this.#selectedOutput.value; + if (out) return await out.tracks.save(newTracks); this.#memory.tracks.value = newTracks; }, - state: () => "loaded", + state: computed(() => { + const out = this.#selectedOutput.value; + if (out) return out.tracks.state(); + return out === undefined ? "loading" : "loaded"; + }), }, }; @@ -45,6 +61,10 @@ class OutputConfigurator extends DiffuseElement { tracks: signal(/** @type {Track[]} */ ([])), }; + #selectedOutput = signal( + /** @type {Output | null | undefined} */ (undefined), + ); + // LIFECYCLE /** @@ -52,6 +72,68 @@ class OutputConfigurator extends DiffuseElement { */ async connectedCallback() { super.connectedCallback(); + this.#selectedOutput.value = await this.#findSelectedOutput(); + + this.effect(() => { + console.log("selectedOutput changed", this.#selectedOutput.value); + }); + + this.effect(() => { + console.log("collection changed", this.tracks.collection()); + }); + + this.effect(() => { + console.log("state changed", this.tracks.state()); + }); + } + + // MISC + + async #findSelectedOutput() { + const id = localStorage.getItem(`${STORAGE_PREFIX}/selected/id`); + const el = id ? this.root().querySelector(`#${id}`) : null; + + if (!el) return null; + + await customElements.whenDefined(el.localName); + + if ( + "nameWithGroup" in el === false || + "tracks" in el === false + ) { + return null; + } + + return /** @type {Output} */ (/** @type {unknown} */ (el)); + } + + /** + * @override + */ + dependencies() { + return Object.fromEntries( + Array.from(this.children).flatMap((element) => { + if (element.hasAttribute("id") === false) { + console.warn( + "Missing `id` for output configurator child element with `localName` '" + + element.localName + "'", + ); + return []; + } + + const d = /** @type {DiffuseElement} */ (element); + return [[d.id, d]]; + }), + ); + } + + // ADDITIONAL ACTIONS + + /** + * @param {string} id + */ + selectOutput(id) { + localStorage.setItem(`${STORAGE_PREFIX}/selected/id`, id); } } diff --git a/src/components/output/polymorphic/indexed-db/constants.js b/src/components/output/polymorphic/indexed-db/constants.js index 6e78669bd..f40032dab 100644 --- a/src/components/output/polymorphic/indexed-db/constants.js +++ b/src/components/output/polymorphic/indexed-db/constants.js @@ -1 +1 @@ -export const IDB_PREFIX = "@components/output/polymorphic/indexed-db"; +export const IDB_PREFIX = "diffuse/output/polymorphic/indexed-db"; diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index b154e1ebe..601f2e9e1 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,7 +1,8 @@ -import "@components/orchestrator/process-tracks/element.js"; -import "@components/orchestrator/queue-tracks/element.js"; +import "@components/configurator/output/element.js"; import "@components/input/opensubsonic/element.js"; import "@components/input/s3/element.js"; +import "@components/orchestrator/process-tracks/element.js"; +import "@components/orchestrator/queue-tracks/element.js"; import "@components/output/polymorphic/indexed-db/element.js"; import "@components/processor/metadata/element.js"; import "@components/transformer/output/string/json/element.js"; @@ -22,6 +23,7 @@ const input = component(Input); const queue = component(Queue); globalThis.queue = queue; +globalThis.output = document.querySelector("#output"); //////////////////////////////////////////// // 📡 diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index 442c3218b..86c6e2b8b 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -77,18 +77,23 @@ --> - - + + - - - + + + + + + + + Date: Sun, 21 Dec 2025 23:35:00 +0100 Subject: [PATCH 133/244] chore: remove logs --- src/components/configurator/output/element.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 873306fef..36080c8f8 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -73,18 +73,6 @@ class OutputConfigurator extends DiffuseElement { async connectedCallback() { super.connectedCallback(); this.#selectedOutput.value = await this.#findSelectedOutput(); - - this.effect(() => { - console.log("selectedOutput changed", this.#selectedOutput.value); - }); - - this.effect(() => { - console.log("collection changed", this.tracks.collection()); - }); - - this.effect(() => { - console.log("state changed", this.tracks.state()); - }); } // MISC From 88d022f94f10a2fb95714dbb20ea892bc495c3b1 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Sun, 21 Dec 2025 23:50:52 +0100 Subject: [PATCH 134/244] feat: default output --- src/components/configurator/output/element.js | 11 +++++++++-- src/themes/webamp/index.vto | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 36080c8f8..4216638d9 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -78,7 +78,8 @@ class OutputConfigurator extends DiffuseElement { // MISC async #findSelectedOutput() { - const id = localStorage.getItem(`${STORAGE_PREFIX}/selected/id`); + const id = localStorage.getItem(`${STORAGE_PREFIX}/selected/id`) ?? + this.getAttribute("default"); const el = id ? this.root().querySelector(`#${id}`) : null; if (!el) return null; @@ -117,11 +118,17 @@ class OutputConfigurator extends DiffuseElement { // ADDITIONAL ACTIONS + async deselectOutput() { + localStorage.removeItem(`${STORAGE_PREFIX}/selected/id`); + this.#selectedOutput.value = await this.#findSelectedOutput(); + } + /** * @param {string} id */ - selectOutput(id) { + async selectOutput(id) { localStorage.setItem(`${STORAGE_PREFIX}/selected/id`, id); + this.#selectedOutput.value = await this.#findSelectedOutput(); } } diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index 86c6e2b8b..f8d49872d 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -89,7 +89,7 @@ - + From 483ebdc1131bb248c489d6c4a54fad964afd4b27 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 22 Dec 2025 18:52:08 +0100 Subject: [PATCH 135/244] feat: output configurator --- src/common/element.js | 9 +- src/components/configurator/output/element.js | 21 ++- src/components/engine/audio/element.js | 4 +- .../orchestrator/queue-tracks/element.js | 2 +- .../output/polymorphic/indexed-db/element.js | 6 +- src/index.vto | 5 +- src/themes/webamp/browser/element.js | 5 +- src/themes/webamp/index.css | 61 ------- src/themes/webamp/index.js | 18 +- src/themes/webamp/index.vto | 42 ++--- src/themes/webamp/window-manager/element.js | 158 +++++++++++++++--- src/themes/webamp/window/element.js | 3 +- 12 files changed, 204 insertions(+), 130 deletions(-) diff --git a/src/common/element.js b/src/common/element.js index 6ef7e24e1..cf2fc7012 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -61,7 +61,12 @@ export class DiffuseElement extends HTMLElement { } /** */ - nameWithGroup() { + get label() { + return this.getAttribute("label") ?? this.id ?? this.localName; + } + + /** */ + get nameWithGroup() { return `${this.constructor.prototype.constructor.NAME}/${this.group}`; } @@ -131,7 +136,7 @@ export class DiffuseElement extends HTMLElement { ); // Setup worker - const name = this.nameWithGroup(); + const name = this.nameWithGroup; const url = import.meta.resolve("./" + WORKER_URL) + `?${query}`; let worker; diff --git a/src/components/configurator/output/element.js b/src/components/configurator/output/element.js index 4216638d9..6e81ba6ec 100644 --- a/src/components/configurator/output/element.js +++ b/src/components/configurator/output/element.js @@ -118,15 +118,32 @@ class OutputConfigurator extends DiffuseElement { // ADDITIONAL ACTIONS - async deselectOutput() { + async deselect() { localStorage.removeItem(`${STORAGE_PREFIX}/selected/id`); this.#selectedOutput.value = await this.#findSelectedOutput(); } + async options() { + const deps = this.dependencies(); + const entries = Object.entries(deps); + + await Promise.all( + entries.map(([_k, v]) => customElements.whenDefined(v.localName)), + ); + + return entries.map(([k, v]) => { + return { + id: k, + label: v.label, + element: v, + }; + }); + } + /** * @param {string} id */ - async selectOutput(id) { + async select(id) { localStorage.setItem(`${STORAGE_PREFIX}/selected/id`, id); this.#selectedOutput.value = await this.#findSelectedOutput(); } diff --git a/src/components/engine/audio/element.js b/src/components/engine/audio/element.js index 8ebcaa0bd..7113b2755 100644 --- a/src/components/engine/audio/element.js +++ b/src/components/engine/audio/element.js @@ -51,7 +51,7 @@ class AudioEngine extends BroadcastableDiffuseElement { // Setup broadcasting if part of group if (this.hasAttribute("group")) { const actions = this.broadcast( - this.nameWithGroup(), + this.nameWithGroup, { adjustVolume: { strategy: "replicate", fn: this.adjustVolume }, pause: { strategy: "leaderOnly", fn: this.pause }, @@ -405,7 +405,7 @@ class AudioEngineItem extends BroadcastableDiffuseElement { // Setup broadcasting if part of group if (this.hasAttribute("group")) { const actions = this.broadcast( - this.nameWithGroup(), + this.nameWithGroup, { getDuration: { strategy: "leaderOnly", fn: this.$state.duration.get }, getHasEnded: { strategy: "leaderOnly", fn: this.$state.hasEnded.get }, diff --git a/src/components/orchestrator/queue-tracks/element.js b/src/components/orchestrator/queue-tracks/element.js index 428f7196f..32d0db583 100644 --- a/src/components/orchestrator/queue-tracks/element.js +++ b/src/components/orchestrator/queue-tracks/element.js @@ -45,7 +45,7 @@ class QueueTracksOrchestrator extends BroadcastableDiffuseElement { async connectedCallback() { // Broadcast if needed if (this.hasAttribute("group")) { - this.broadcast(this.nameWithGroup(), {}); + this.broadcast(this.nameWithGroup, {}); } // Super diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index e99e2b3ea..87f1e5da5 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -38,8 +38,10 @@ class IndexedDBOutput extends DiffuseElement { /** @param {string} name */ #cat(name) { - const key = this.hasAttribute("key") ? this.getAttribute("key") + "/" : ""; - return `${key}${name}`; + const namespace = this.hasAttribute("namespace") + ? this.getAttribute("namespace") + "/" + : ""; + return `${namespace}${name}`; } } diff --git a/src/index.vto b/src/index.vto index 8fa7754c6..46fd96dfc 100644 --- a/src/index.vto +++ b/src/index.vto @@ -23,11 +23,10 @@ themes: configurators: - url: "components/configurator/input/element.js" title: "Input" - desc: "Add multiple inputs." + desc: "Allows for multiple inputs to be used at once." - url: "components/configurator/output/element.js" title: "Output" - desc: "Allows the user to configure a specific output." - todo: true + desc: "Enables the user to configure a specific output. If no default output is set, it creates a temporary session by storing everything in memory." - url: "components/configurator/scrobbles/element.js" title: "Scrobbles" desc: "Configure multiple scrobblers (music trackers)." diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index 4389d1304..d8ea954e4 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -98,7 +98,6 @@ class Browser extends DiffuseElement { ***********************************/ .sunken-panel { - content-visibility: auto; height: 30dvh; min-height: 80px; resize: both; @@ -118,6 +117,10 @@ class Browser extends DiffuseElement { } } + table tbody tr { + content-visibility: auto; + } + table td { contain-intrinsic-size: auto 14px; overflow: hidden; diff --git a/src/themes/webamp/index.css b/src/themes/webamp/index.css index 85a7d5378..36dcfb149 100644 --- a/src/themes/webamp/index.css +++ b/src/themes/webamp/index.css @@ -82,64 +82,3 @@ main > section { } } } - -/*********************************** - * Windows - ***********************************/ - -.windows dtw-window { - left: 12px; - position: absolute; - top: 12px; - z-index: 999; - - /* Waiting on https://developer.mozilla.org/en-US/docs/Web/CSS/sibling-index#browser_compatibility */ - &:nth-child(1) { - left: 24px; - top: 24px; - } - - &:nth-child(2) { - left: 36px; - top: 36px; - } - - &:nth-child(3) { - left: 48px; - top: 48px; - } - - &:nth-child(4) { - left: 60px; - top: 60px; - } - - &:nth-child(5) { - left: 72px; - top: 72px; - } - - &:nth-child(6) { - left: 84px; - top: 84px; - } - - &:nth-child(7) { - left: 96px; - top: 96px; - } - - &:nth-child(8) { - left: 108px; - top: 108px; - } - - &:nth-child(9) { - left: 120px; - top: 120px; - } -} - -.windows section { - z-index: 999; -} diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index 601f2e9e1..fc8060f24 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,7 +1,7 @@ import "@components/configurator/output/element.js"; import "@components/input/opensubsonic/element.js"; import "@components/input/s3/element.js"; -import "@components/orchestrator/process-tracks/element.js"; +// import "@components/orchestrator/process-tracks/element.js"; import "@components/orchestrator/queue-tracks/element.js"; import "@components/output/polymorphic/indexed-db/element.js"; import "@components/processor/metadata/element.js"; @@ -16,7 +16,7 @@ import { effect, signal, untracked } from "@common/signal.js"; import "./browser/element.js"; import "./window/element.js"; -import "./window-manager/element.js"; +import WindowManager from "./window-manager/element.js"; import WebampElement from "./webamp/element.js"; const input = component(Input); @@ -157,9 +157,7 @@ document.body.querySelectorAll(".desktop__item").forEach((element) => { if (element instanceof HTMLElement) { element.addEventListener("dblclick", () => { const f = element.querySelector("label")?.getAttribute("for"); - if (f) { - document.body.querySelector(`dtw-window#${f}`)?.toggleAttribute("open"); - } + if (f) windowManager()?.toggleWindow(f); }); } }); @@ -182,3 +180,13 @@ amp.onClose(() => winampIsShown = false); // TODO: // amp.onMinimize(() => amp.close()); + +//////////////////////////////////////////// +// 🛠️ +//////////////////////////////////////////// + +function windowManager() { + const w = document.body.querySelector("dtw-window-manager"); + if (w instanceof WindowManager) return w; + return null; +} diff --git a/src/themes/webamp/index.vto b/src/themes/webamp/index.vto index f8d49872d..c4211bcea 100644 --- a/src/themes/webamp/index.vto +++ b/src/themes/webamp/index.vto @@ -10,38 +10,19 @@
        +
        - - - - - Manage audio inputs -

        👀

        -
        - - - - - Manage user data -

        👀

        -
        - - - - - Browse collection - - -
        +
        + + +
        @@ -67,12 +48,15 @@
        +
        @@ -87,7 +71,7 @@ - + diff --git a/src/themes/webamp/window-manager/element.js b/src/themes/webamp/window-manager/element.js index 3063718ce..e7cf9bb8b 100644 --- a/src/themes/webamp/window-manager/element.js +++ b/src/themes/webamp/window-manager/element.js @@ -2,9 +2,10 @@ import { DiffuseElement } from "@common/element.js"; import { signal } from "@common/signal.js"; import { debounceMicrotask } from "@vicary/debounce-microtask"; +import WindowElement from "../window/element.js" + /** * @import {RenderArg} from "@common/element.d.ts" - * @import WindowElement from "../window/element.js"; */ //////////////////////////////////////////// @@ -15,6 +16,9 @@ class WindowManager extends DiffuseElement { constructor() { super(); this.attachShadow({ mode: "open" }); + + this.focusOnWindow = this.focusOnWindow.bind(this) + this.windowMoveStart = this.windowMoveStart.bind(this) } // SIGNALS @@ -27,7 +31,7 @@ class WindowManager extends DiffuseElement { /** * @override */ - connectedCallback() { + async connectedCallback() { super.connectedCallback(); // Events @@ -85,7 +89,7 @@ class WindowManager extends DiffuseElement { if (win.id) this.$activeWindow.value = win.id; this.#lastZindex++; - win.style.zIndex = this.#lastZindex.toString(); + this.setWindowZindex(win.id, this.#lastZindex) } } @@ -94,18 +98,7 @@ class WindowManager extends DiffuseElement { */ async setWindowStatuses(activeId) { await customElements.whenDefined("dtw-window"); - - this.querySelectorAll("dtw-window").forEach( - (window) => { - const win = /** @type {WindowElement} */ (window); - - if (activeId && window.id === activeId) { - win.activate(); - } else { - win.deactivate(); - } - }, - ); + this.activateWindow(activeId) } /** @@ -119,7 +112,7 @@ class WindowManager extends DiffuseElement { if (event instanceof MouseEvent) { const x = event.x - ogEvent.detail.xElement; const y = event.y - ogEvent.detail.yElement; - const target = ogEvent.target; + const target = ogEvent.detail.element; if (target) { target.style.left = `${x}px`; @@ -131,18 +124,56 @@ class WindowManager extends DiffuseElement { }); const stopMove = () => { - this.removeEventListener("mousemove", moveFn); - + document.removeEventListener("mousemove", moveFn); document.removeEventListener("mouseup", stopMove); document.removeEventListener("mouseleave", stopMove); }; - this.addEventListener("mousemove", moveFn); - + document.addEventListener("mousemove", moveFn); document.addEventListener("mouseup", stopMove); document.addEventListener("mouseleave", stopMove); } + // ACTIONS + + /** + * @param {string} id + */ + activateWindow(id) { + this.querySelectorAll("dtw-window").forEach(w => { + if (w instanceof WindowElement === false) return + + if (activeId && w.id === activeId) { + w.activate(); + } else { + w.deactivate(); + } + }) + } + + /** + * @param {string} id + * @param {number} index + */ + setWindowZindex(id, index) { + const w = this.root().querySelector(`dtw-window#${id}`) + w.style.zIndex = index.toString(); + } + + /** + * @param {string} id + */ + toggleWindow(id) { + const w = this.root().querySelector(`dtw-window#${id}`) + if (w instanceof WindowElement === false) return + + w.toggleAttribute("open") + + if (w.hasAttribute("open")) { + this.activateWindow(id) + } + } + // RENDER /** @@ -150,13 +181,98 @@ class WindowManager extends DiffuseElement { */ render({ html }) { return html` + + - + + + + Manage audio inputs +

        👀

        +
        + + + + + Manage user data + +
        +

        Where do you want to keep your data?

        +
        + + +
        +
        +
        + + + + + Browse collection + + `; } } diff --git a/src/themes/webamp/window/element.js b/src/themes/webamp/window/element.js index 1650c317a..090d75f51 100644 --- a/src/themes/webamp/window/element.js +++ b/src/themes/webamp/window/element.js @@ -66,7 +66,7 @@ class WindowElement extends DiffuseElement {
        @@ -99,6 +99,7 @@ class WindowElement extends DiffuseElement { bubbles: true, composed: true, detail: { + element: this, x: mouse.x, xElement: mouse.layerX, y: mouse.y, From a63a972fe991024d67743242bcd7eab2e595ebcc Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Mon, 22 Dec 2025 18:56:41 +0100 Subject: [PATCH 136/244] fix: focus --- src/themes/webamp/window-manager/element.js | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/themes/webamp/window-manager/element.js b/src/themes/webamp/window-manager/element.js index e7cf9bb8b..8134a566c 100644 --- a/src/themes/webamp/window-manager/element.js +++ b/src/themes/webamp/window-manager/element.js @@ -35,8 +35,8 @@ class WindowManager extends DiffuseElement { super.connectedCallback(); // Events - this.addEventListener("mousedown", this.focusOnWindow); - this.addEventListener("dtw-window-start-move", this.windowMoveStart); + this.root().addEventListener("mousedown", this.focusOnWindow); + this.root().addEventListener("dtw-window-start-move", this.windowMoveStart); // Webamp stuff document.body.addEventListener( @@ -57,8 +57,8 @@ class WindowManager extends DiffuseElement { disconnectedCallback() { super.disconnectedCallback(); - this.removeEventListener("mousedown", this.focusOnWindow); - this.removeEventListener("dtw-window-start-move", this.windowMoveStart); + this.root().removeEventListener("mousedown", this.focusOnWindow); + this.root().removeEventListener("dtw-window-start-move", this.windowMoveStart); document.body.removeEventListener( "mousedown", @@ -89,7 +89,7 @@ class WindowManager extends DiffuseElement { if (win.id) this.$activeWindow.value = win.id; this.#lastZindex++; - this.setWindowZindex(win.id, this.#lastZindex) + win.style.zIndex = this.#lastZindex.toString(); } } @@ -151,15 +151,6 @@ class WindowManager extends DiffuseElement { }) } - /** - * @param {string} id - * @param {number} index - */ - setWindowZindex(id, index) { - const w = this.root().querySelector(`dtw-window#${id}`) - w.style.zIndex = index.toString(); - } - /** * @param {string} id */ @@ -171,6 +162,8 @@ class WindowManager extends DiffuseElement { if (w.hasAttribute("open")) { this.activateWindow(id) + this.#lastZindex++; + w.style.zIndex = this.#lastZindex.toString(); } } From 0e8770520c3ca95d9b7e10b9ba2951b6a594754e Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 23 Dec 2025 17:11:50 +0100 Subject: [PATCH 137/244] feat: use output configurator in constituents --- src/common/constituents/default.js | 16 +++++++++++++--- src/common/element.js | 4 ++++ src/components/output/common.js | 4 ++-- .../output/polymorphic/indexed-db/element.js | 12 ++++++++++-- src/components/transformer/output/base.js | 6 +++--- .../transformer/output/string/json/element.js | 3 ++- src/themes/blur/artwork-controller/element.css | 3 +++ src/themes/blur/artwork-controller/element.js | 7 ++----- src/themes/blur/artwork-controller/index.vto | 14 +++++++------- src/themes/webamp/index.js | 2 +- 10 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/common/constituents/default.js b/src/common/constituents/default.js index 956569d3a..6761aadf6 100644 --- a/src/common/constituents/default.js +++ b/src/common/constituents/default.js @@ -1,4 +1,5 @@ import InputConfigurator from "@components/configurator/input/element.js"; +import OutputConfigurator from "@components/configurator/output/element.js"; import Queue from "@components/engine/queue/element.js"; import OpenSubsonic from "@components/input/opensubsonic/element.js"; import S3 from "@components/input/s3/element.js"; @@ -32,14 +33,22 @@ export function config() { // Output const idb = new IndexedDBOutput(); + idb.setAttribute("id", "idb-json-output") + idb.setAttribute("namespace", "json") + const json = new JsonStringOutput(); - json.setAttribute("output-selector", idb.localName); + json.setAttribute("id", "idb-json") + json.setAttribute("output-selector", "#idb-json-output"); + + const output = new OutputConfigurator(); + output.setAttribute("default", "idb-json"); + output.append(json); const refiner = new DefaultRefiner(); refiner.setAttribute("id", "output"); - refiner.setAttribute("output-selector", json.localName); + refiner.setAttribute("output-selector", output.localName); - document.body.append(idb, json, refiner); + document.body.append(idb, output, refiner); // Orchestrators const oqt = new QueueTracksOrchestrator(); @@ -68,6 +77,7 @@ export function config() { configurator: { input, + output, }, engine: { queue, diff --git a/src/common/element.js b/src/common/element.js index cf2fc7012..7ec054bd5 100644 --- a/src/common/element.js +++ b/src/common/element.js @@ -20,6 +20,8 @@ export const DEFAULT_GROUP = "default"; * around rendering and managing signals. */ export class DiffuseElement extends HTMLElement { + $connected = signal(false) + #connected = Promise.withResolvers(); #disposables = /** @type {Array<() => void>} */ ([]); @@ -98,6 +100,7 @@ export class DiffuseElement extends HTMLElement { // LIFECYCLE connectedCallback() { + this.$connected.value = true this.#connected.resolve(null); if (!("render" in this && typeof this.render === "function")) return; @@ -109,6 +112,7 @@ export class DiffuseElement extends HTMLElement { } disconnectedCallback() { + this.$connected.value = false this.#teardown(); } diff --git a/src/components/output/common.js b/src/components/output/common.js index bfb8ac378..b522d0ff8 100644 --- a/src/components/output/common.js +++ b/src/components/output/common.js @@ -1,4 +1,4 @@ -import { signal } from "@common/signal.js"; +import { effect, signal } from "@common/signal.js"; /** * @import {OutputManager, OutputManagerProperties} from "./types.d.ts" @@ -19,7 +19,7 @@ export function outputManager({ init, tracks }) { ts.value = "loaded"; } - loadTracks(); + effect(loadTracks); return { tracks: { diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index 87f1e5da5..4552d5ae2 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -28,14 +28,22 @@ class IndexedDBOutput extends DiffuseElement { const manager = outputManager({ tracks: { empty: () => undefined, - get: () => p.get({ name: this.#cat("tracks") }), - put: (data) => p.put({ name: this.#cat("tracks"), data }), + get: () => { + if (!this.$connected.value) return undefined + return p.get({ name: this.#cat("tracks") }) + }, + put: (data) => { + if (!this.$connected.value) return + return p.put({ name: this.#cat("tracks"), data }) + }, }, }); this.tracks = manager.tracks; } + // 🛠️ + /** @param {string} name */ #cat(name) { const namespace = this.hasAttribute("namespace") diff --git a/src/components/transformer/output/base.js b/src/components/transformer/output/base.js index 9de69c6a4..5716e96bc 100644 --- a/src/components/transformer/output/base.js +++ b/src/components/transformer/output/base.js @@ -54,9 +54,9 @@ export class OutputTransformer extends DiffuseElement { await this.output.whenDefined; await this.output.signal()?.tracks.save(newTracks); }, - state: computed(() => - this.output.signal()?.tracks.state() ?? "loading" - ), + state: computed(() => { + return this.output.signal()?.tracks.state() ?? "loading" + }), }, }; diff --git a/src/components/transformer/output/string/json/element.js b/src/components/transformer/output/string/json/element.js index 7867d19b1..2d5d32f88 100644 --- a/src/components/transformer/output/string/json/element.js +++ b/src/components/transformer/output/string/json/element.js @@ -20,7 +20,8 @@ class JsonStringOutputTransformer extends OutputTransformer { tracks: { ...base.tracks, collection: computed(() => { - const json = base.tracks.collection() ?? "[]"; + let json = base.tracks.collection(); + if (typeof json !== "string") json = "[]" // Try parsing JSON try { diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css index eb8f3e377..cf007a28b 100644 --- a/src/themes/blur/artwork-controller/element.css +++ b/src/themes/blur/artwork-controller/element.css @@ -1,3 +1,6 @@ +@import "../../../styles/vendor/phosphor/fill/style.css"; +@import "../../../styles/animations.css"; + :host { --transition-durition: 750ms; } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 0ee6eb2ab..717bf7124 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -121,8 +121,7 @@ class ArtworkController extends DiffuseElement { this.effect(() => { const now = !!queue.now(); - const bool = !now || - (now && this.#audio()?.loadingState() !== "loaded"); + const bool = (now && this.#audio()?.loadingState() !== "loaded"); if (this.#isLoadingTimeout) { clearTimeout(this.#isLoadingTimeout); @@ -398,9 +397,7 @@ class ArtworkController extends DiffuseElement { return html`
        - import { config } from "../../../common/constituents/default.js" - import QueueAudioOrchestrator from "../../../components/orchestrator/queue-audio/element.js"; + import { config } from "./common/constituents/default.js" + import QueueAudioOrchestrator from "./components/orchestrator/queue-audio/element.js"; - import "../../../components/engine/audio/element.js" - import "../../../components/processor/artwork/element.js" + import "./components/engine/audio/element.js" + import "./components/processor/artwork/element.js" // Prepare default constituents setup const defaults = config() // Only then initiate artwork controller - import("./element.js") + import("./themes/blur/artwork-controller/element.js") // Orchestrators diff --git a/src/themes/webamp/index.js b/src/themes/webamp/index.js index fc8060f24..1551440c9 100644 --- a/src/themes/webamp/index.js +++ b/src/themes/webamp/index.js @@ -1,7 +1,7 @@ import "@components/configurator/output/element.js"; import "@components/input/opensubsonic/element.js"; import "@components/input/s3/element.js"; -// import "@components/orchestrator/process-tracks/element.js"; +import "@components/orchestrator/process-tracks/element.js"; import "@components/orchestrator/queue-tracks/element.js"; import "@components/output/polymorphic/indexed-db/element.js"; import "@components/processor/metadata/element.js"; From 6cea1561292f7c44204f63436426731a9578e11f Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Tue, 23 Dec 2025 17:23:21 +0100 Subject: [PATCH 138/244] fix: idb whenConnected --- .../output/polymorphic/indexed-db/element.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/components/output/polymorphic/indexed-db/element.js b/src/components/output/polymorphic/indexed-db/element.js index 4552d5ae2..650727e86 100644 --- a/src/components/output/polymorphic/indexed-db/element.js +++ b/src/components/output/polymorphic/indexed-db/element.js @@ -26,16 +26,11 @@ class IndexedDBOutput extends DiffuseElement { /** @type {OutputManager} */ const manager = outputManager({ + init: this.whenConnected.bind(this), tracks: { empty: () => undefined, - get: () => { - if (!this.$connected.value) return undefined - return p.get({ name: this.#cat("tracks") }) - }, - put: (data) => { - if (!this.$connected.value) return - return p.put({ name: this.#cat("tracks"), data }) - }, + get: () => p.get({ name: this.#cat("tracks") }), + put: (data) => p.put({ name: this.#cat("tracks"), data }), }, }); From 478fe7cfc0cd9644005c80b358c7f02bd7cb6275 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 25 Dec 2025 22:01:55 +0100 Subject: [PATCH 139/244] chore: optimise css & js --- _config.ts | 2 + deno.jsonc | 52 ++- deno.lock | 323 +++++++++++++++++- src/common/index.js | 4 +- .../blur/artwork-controller/element.css | 3 - src/themes/blur/artwork-controller/element.js | 12 +- src/themes/webamp/browser/element.js | 3 +- 7 files changed, 378 insertions(+), 21 deletions(-) diff --git a/_config.ts b/_config.ts index f144b535a..ba09ac45b 100644 --- a/_config.ts +++ b/_config.ts @@ -2,6 +2,7 @@ import lume from "lume/mod.ts"; import esbuild from "lume/plugins/esbuild.ts"; import postcss from "lume/plugins/postcss.ts"; +import purgecss from "lume/plugins/purgecss.ts"; import sourceMaps from "lume/plugins/source_maps.ts"; import * as path from "@std/path"; @@ -36,6 +37,7 @@ site.add([".js"]); // CSS site.use(postcss()); +site.use(purgecss()); site.add([".css"]); site.remoteFile( diff --git a/deno.jsonc b/deno.jsonc index 1fd56bb42..195adb6f2 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -21,12 +21,11 @@ "esbuild-plugins-node-modules-polyfill": "npm:esbuild-plugins-node-modules-polyfill@^1.7.1", "fast-average-color": "npm:fast-average-color@^9.5.0", "idb-keyval": "npm:idb-keyval@^6.2.2", + "iso-base": "npm:iso-base@^4.3.0", "lit-html": "npm:lit-html@^3.3.1", - "morphdom": "npm:morphdom@^2.7.7/dist/morphdom.js", "query-string": "npm:query-string@^9.3.1", "subsonic-api": "npm:subsonic-api@^3.2.0", "throttle-debounce": "npm:throttle-debounce@^5.0.2", - "uint8arrays": "npm:uint8arrays@^5.1.0", "uri-js": "npm:uri-js@^4.4.1", "xxh32": "npm:xxh32@^2.0.5", @@ -48,26 +47,40 @@ // Build "@std/fs": "jsr:@std/fs@^1.0.19", "@std/path": "jsr:@std/path@^1.1.2", - "lume/": "https://deno.land/x/lume@v3.0.11/", - "lume/jsx-runtime": "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts", + "lume/": "https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.2/", + "lume/jsx-runtime": "https://cdn.jsdelivr.net/gh/oscarotero/ssx@0.1.14/jsx-runtime.ts", }, "exports": { ".": "./src/mod.ts", }, "tasks": { - "build": "deno task lume", - "gen:defs:types": "deno run -A npm:@atcute/lex-cli generate -c ./lexicon.config.js", - "lume": "echo \"import 'lume/cli.ts'\" | deno run --config=./deno.jsonc --allow-read --allow-write --allow-env --allow-net --allow-run --allow-sys -", - "serve": "deno task lume -s", + "build": { + "description": "Build the site for production", + "command": "deno task lume", + }, + "gen:defs:types": { + "description": "Generate definition Typescript types", + "command": "deno run -A npm:@atcute/lex-cli generate -c ./lexicon.config.js", + }, + "lume": { + "description": "Run Lume command", + "command": "deno run -P=lume --allow-write --allow-read lume/cli.ts", + }, + "serve": { + "description": "Run and serve the site for development", + "command": "deno task lume -s", + }, }, "compilerOptions": { "checkJs": true, "lib": ["deno.ns", "dom", "esnext"], "types": ["lume/types.ts"], + "jsx": "react-jsx", + "jsxImportSource": "lume", }, "unstable": ["temporal", "fmt-component"], "lint": { - "plugins": ["https://deno.land/x/lume@v3.0.11/lint.ts"], + "plugins": ["https://cdn.jsdelivr.net/gh/lumeland/lume@3.1.2/lint.ts"], "rules": { "exclude": ["no-import-prefix"], }, @@ -75,4 +88,25 @@ "publish": { "include": ["LICENSE", "README.md", "src/**/*.js", "src/**/*.ts"], }, + "permissions": { + "lume": { + "read": true, + "write": ["./"], + "import": ["cdn.jsdelivr.net:443", "jsr.io:443", "deno.land:443", "esm.sh:443"], + "net": [ + "0.0.0.0", + "cdn.jsdelivr.net:443", + "data.jsdelivr.com:443", + "jsr.io:443", + "deno.land:443", + "esm.sh:443", + "registry.npmjs.org:443", + ], + "env": true, + "run": true, + "ffi": true, + "sys": true, + }, + }, + "lock": false, } diff --git a/deno.lock b/deno.lock index 01d76001c..395a73cea 100644 --- a/deno.lock +++ b/deno.lock @@ -58,6 +58,8 @@ "npm:morphdom@^2.7.7": "2.7.7", "npm:postcss-import@16.1.1": "16.1.1_postcss@8.5.6", "npm:postcss@8.5.6": "8.5.6", + "npm:purgecss-from-html@7.0.2": "7.0.2", + "npm:purgecss@7.0.2": "7.0.2", "npm:query-string@^9.3.1": "9.3.1", "npm:socket.io-client@^4.8.1": "4.8.1", "npm:subsonic-api@^3.2.0": "3.2.0", @@ -364,6 +366,26 @@ "os": ["win32"], "cpu": ["x64"] }, + "@isaacs/balanced-match@4.0.1": { + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" + }, + "@isaacs/brace-expansion@5.0.0": { + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dependencies": [ + "@isaacs/balanced-match" + ] + }, + "@isaacs/cliui@8.0.2": { + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": [ + "string-width@5.1.2", + "string-width-cjs@npm:string-width@4.2.3", + "strip-ansi@7.1.2", + "strip-ansi-cjs@npm:strip-ansi@6.0.1", + "wrap-ansi@8.1.0", + "wrap-ansi-cjs@npm:wrap-ansi@7.0.0" + ] + }, "@js-temporal/polyfill@0.5.1": { "integrity": "sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==", "dependencies": [ @@ -497,6 +519,21 @@ "riff-file" ] }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-regex@6.2.2": { + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert" + ] + }, + "ansi-styles@6.2.3": { + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" + }, "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, @@ -609,6 +646,18 @@ "classnames@2.5.1": { "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name" + ] + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander@12.1.0": { + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==" + }, "confbox@0.1.8": { "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" }, @@ -632,6 +681,18 @@ "core-util-is@1.0.3": { "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "cross-spawn@7.0.6": { + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": [ + "path-key", + "shebang-command", + "which" + ] + }, + "cssesc@3.0.0": { + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": true + }, "csstype@3.1.3": { "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, @@ -666,6 +727,15 @@ "object-keys" ] }, + "domelementtype@2.3.0": { + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler@5.0.3": { + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": [ + "domelementtype" + ] + }, "dunder-proto@1.0.1": { "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": [ @@ -674,6 +744,9 @@ "gopd" ] }, + "eastasianwidth@0.2.0": { + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "ecma-proposal-math-extensions@0.0.2": { "integrity": "sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q==" }, @@ -683,6 +756,12 @@ "electron-to-chromium@1.5.248": { "integrity": "sha512-zsur2yunphlyAO4gIubdJEXCK6KOVvtpiuDfCIqbM9FjcnMYiyn0ICa3hWfPr0nc41zcLWobgy1iL7VvoOyA2Q==" }, + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emoji-regex@9.2.2": { + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "endianness@8.0.2": { "integrity": "sha512-IU+77+jJ7lpw2qZ3NUuqBZFy3GuioNgXUdsL1L9tooDNTaw0TgOnwNuc+8Ns+haDaTifK97QLzmOANJtI/rGvw==" }, @@ -702,6 +781,9 @@ "entities@4.5.0": { "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" }, + "entities@6.0.1": { + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + }, "es-define-property@1.0.1": { "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, @@ -786,6 +868,13 @@ "filter-obj@5.1.0": { "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==" }, + "foreground-child@3.3.1": { + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": [ + "cross-spawn", + "signal-exit" + ] + }, "fraction.js@4.3.7": { "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, @@ -817,6 +906,18 @@ "es-object-atoms" ] }, + "glob@11.0.3": { + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dependencies": [ + "foreground-child", + "jackspeak", + "minimatch", + "minipass", + "package-json-from-dist", + "path-scurry" + ], + "bin": true + }, "glsl-optimizer-js@0.0.2": { "integrity": "sha512-SMkVILyc1LeBEBgiHOe+4Bh8MEqxLNyAns0NfgmxJTxZZdj7oCoZt+n846rbdB8OLGsg16f5C9nmhi9XEuM8SQ==" }, @@ -880,6 +981,9 @@ "hasown" ] }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "is-typedarray@1.0.0": { "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, @@ -889,6 +993,15 @@ "isarray@1.0.0": { "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jackspeak@4.1.1": { + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dependencies": [ + "@isaacs/cliui" + ] + }, "js-tokens@4.0.0": { "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, @@ -943,6 +1056,9 @@ ], "bin": true }, + "lru-cache@11.2.2": { + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==" + }, "markdown-it-attrs@4.3.1_markdown-it@14.1.0": { "integrity": "sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==", "dependencies": [ @@ -956,7 +1072,7 @@ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": [ "argparse", - "entities", + "entities@4.5.0", "linkify-it", "mdurl", "punycode.js", @@ -995,6 +1111,15 @@ "lodash" ] }, + "minimatch@10.1.1": { + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dependencies": [ + "@isaacs/brace-expansion" + ] + }, + "minipass@7.1.2": { + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, "mlly@1.8.0": { "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", "dependencies": [ @@ -1074,12 +1199,38 @@ "object-keys" ] }, + "package-json-from-dist@1.0.1": { + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "pako@1.0.11": { "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, + "parse5-htmlparser2-tree-adapter@7.1.0": { + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dependencies": [ + "domhandler", + "parse5" + ] + }, + "parse5@7.3.0": { + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dependencies": [ + "entities@6.0.1" + ] + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, "path-parse@1.0.7": { "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry@2.0.1": { + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dependencies": [ + "lru-cache", + "minipass" + ] + }, "pathe@2.0.3": { "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" }, @@ -1114,6 +1265,13 @@ "resolve" ] }, + "postcss-selector-parser@6.1.2": { + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": [ + "cssesc", + "util-deprecate" + ] + }, "postcss-value-parser@4.2.0": { "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, @@ -1138,6 +1296,23 @@ "punycode@2.3.1": { "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, + "purgecss-from-html@7.0.2": { + "integrity": "sha512-eJOLW9wIt30qvruvz+FCBmaW5XLt+bx0VCGKn+ZhEDzj69e834kt4pIWhIn0APFfwYu4t9x5rSkjyAvbI77xqg==", + "dependencies": [ + "parse5", + "parse5-htmlparser2-tree-adapter" + ] + }, + "purgecss@7.0.2": { + "integrity": "sha512-4Ku8KoxNhOWi9X1XJ73XY5fv+I+hhTRedKpGs/2gaBKU8ijUiIKF/uyyIyh7Wo713bELSICF5/NswjcuOqYouQ==", + "dependencies": [ + "commander", + "glob", + "postcss", + "postcss-selector-parser" + ], + "bin": true + }, "quansync@0.2.11": { "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==" }, @@ -1278,6 +1453,18 @@ "setimmediate@1.0.5": { "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit@4.1.0": { + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, "socket.io-client@4.8.1": { "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", "dependencies": [ @@ -1300,12 +1487,40 @@ "split-on-first@3.0.0": { "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==" }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": [ + "emoji-regex@8.0.0", + "is-fullwidth-code-point", + "strip-ansi@6.0.1" + ] + }, + "string-width@5.1.2": { + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": [ + "eastasianwidth", + "emoji-regex@9.2.2", + "strip-ansi@7.1.2" + ] + }, "string_decoder@1.1.1": { "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": [ "safe-buffer" ] }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex@5.0.1" + ] + }, + "strip-ansi@7.1.2": { + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dependencies": [ + "ansi-regex@6.2.2" + ] + }, "strtok3@10.3.4": { "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "dependencies": [ @@ -1444,9 +1659,32 @@ "winamp-eqf" ] }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": [ + "isexe" + ], + "bin": true + }, "winamp-eqf@1.0.0": { "integrity": "sha512-yUIb4+lTYBKP4L6nPXdDj1CQBXlJ+/PrNAkT1VbTAgeFjX8lPxAthsUE5NxQP4s8SO4YMJemsrErZ49Bh+/Veg==" }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": [ + "ansi-styles@4.3.0", + "string-width@4.2.3", + "strip-ansi@6.0.1" + ] + }, + "wrap-ansi@8.1.0": { + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": [ + "ansi-styles@6.2.3", + "string-width@5.1.2", + "strip-ansi@7.1.2" + ] + }, "ws@8.17.1": { "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==" }, @@ -1496,6 +1734,69 @@ "https://deno.land/std@0.170.0/path/posix.ts": "b859684bc4d80edfd4cad0a82371b50c716330bed51143d6dcdbe59e6278b30c", "https://deno.land/std@0.170.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", "https://deno.land/std@0.170.0/path/win32.ts": "7cebd2bda6657371adc00061a1d23fdd87bcdf64b4843bb148b0b24c11b40f69", + "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", + "https://deno.land/std@0.224.0/assert/assertion_error.ts": "ba8752bd27ebc51f723702fac2f54d3e94447598f54264a6653d6413738a8917", + "https://deno.land/std@0.224.0/cli/parse_args.ts": "5250832fb7c544d9111e8a41ad272c016f5a53f975ef84d5a9fe5fcb70566ece", + "https://deno.land/std@0.224.0/cli/spinner.ts": "cf873605771270b4324cc063b5031ab250d8efee8799e45e1a3bfdd333ff721d", + "https://deno.land/std@0.224.0/fmt/colors.ts": "508563c0659dd7198ba4bbf87e97f654af3c34eb56ba790260f252ad8012e1c5", + "https://deno.land/std@0.224.0/fs/_create_walk_entry.ts": "5d9d2aaec05bcf09a06748b1684224d33eba7a4de24cf4cf5599991ca6b5b412", + "https://deno.land/std@0.224.0/fs/_get_file_info_type.ts": "da7bec18a7661dba360a1db475b826b18977582ce6fc9b25f3d4ee0403fe8cbd", + "https://deno.land/std@0.224.0/fs/_to_path_string.ts": "29bfc9c6c112254961d75cbf6ba814d6de5349767818eb93090cecfa9665591e", + "https://deno.land/std@0.224.0/fs/ensure_dir.ts": "51a6279016c65d2985f8803c848e2888e206d1b510686a509fa7cc34ce59d29f", + "https://deno.land/std@0.224.0/fs/expand_glob.ts": "2e428d90acc6676b2aa7b5c78ef48f30641b13f1fe658e7976c9064fb4b05309", + "https://deno.land/std@0.224.0/fs/walk.ts": "cddf87d2705c0163bff5d7767291f05b0f46ba10b8b28f227c3849cace08d303", + "https://deno.land/std@0.224.0/jsonc/parse.ts": "06fbe10f0bb0cba684f7902bf7de5126b16eb0e5a82220c98a4b86675c7f9cff", + "https://deno.land/std@0.224.0/path/_common/assert_path.ts": "dbdd757a465b690b2cc72fc5fb7698c51507dec6bfafce4ca500c46b76ff7bd8", + "https://deno.land/std@0.224.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", + "https://deno.land/std@0.224.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", + "https://deno.land/std@0.224.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", + "https://deno.land/std@0.224.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", + "https://deno.land/std@0.224.0/path/_common/glob_to_reg_exp.ts": "6cac16d5c2dc23af7d66348a7ce430e5de4e70b0eede074bdbcf4903f4374d8d", + "https://deno.land/std@0.224.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", + "https://deno.land/std@0.224.0/path/_common/normalize_string.ts": "33edef773c2a8e242761f731adeb2bd6d683e9c69e4e3d0092985bede74f4ac3", + "https://deno.land/std@0.224.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", + "https://deno.land/std@0.224.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", + "https://deno.land/std@0.224.0/path/basename.ts": "7ee495c2d1ee516ffff48fb9a93267ba928b5a3486b550be73071bc14f8cc63e", + "https://deno.land/std@0.224.0/path/constants.ts": "0c206169ca104938ede9da48ac952de288f23343304a1c3cb6ec7625e7325f36", + "https://deno.land/std@0.224.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", + "https://deno.land/std@0.224.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", + "https://deno.land/std@0.224.0/path/glob_to_regexp.ts": "7f30f0a21439cadfdae1be1bf370880b415e676097fda584a63ce319053b5972", + "https://deno.land/std@0.224.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", + "https://deno.land/std@0.224.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", + "https://deno.land/std@0.224.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", + "https://deno.land/std@0.224.0/path/join_globs.ts": "5b3bf248b93247194f94fa6947b612ab9d3abd571ca8386cf7789038545e54a0", + "https://deno.land/std@0.224.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", + "https://deno.land/std@0.224.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", + "https://deno.land/std@0.224.0/path/posix/basename.ts": "d2fa5fbbb1c5a3ab8b9326458a8d4ceac77580961b3739cd5bfd1d3541a3e5f0", + "https://deno.land/std@0.224.0/path/posix/constants.ts": "93481efb98cdffa4c719c22a0182b994e5a6aed3047e1962f6c2c75b7592bef1", + "https://deno.land/std@0.224.0/path/posix/dirname.ts": "76cd348ffe92345711409f88d4d8561d8645353ac215c8e9c80140069bf42f00", + "https://deno.land/std@0.224.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", + "https://deno.land/std@0.224.0/path/posix/glob_to_regexp.ts": "76f012fcdb22c04b633f536c0b9644d100861bea36e9da56a94b9c589a742e8f", + "https://deno.land/std@0.224.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", + "https://deno.land/std@0.224.0/path/posix/join.ts": "7fc2cb3716aa1b863e990baf30b101d768db479e70b7313b4866a088db016f63", + "https://deno.land/std@0.224.0/path/posix/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", + "https://deno.land/std@0.224.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", + "https://deno.land/std@0.224.0/path/posix/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", + "https://deno.land/std@0.224.0/path/posix/resolve.ts": "08b699cfeee10cb6857ccab38fa4b2ec703b0ea33e8e69964f29d02a2d5257cf", + "https://deno.land/std@0.224.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", + "https://deno.land/std@0.224.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", + "https://deno.land/std@0.224.0/path/windows/basename.ts": "6bbc57bac9df2cec43288c8c5334919418d784243a00bc10de67d392ab36d660", + "https://deno.land/std@0.224.0/path/windows/constants.ts": "5afaac0a1f67b68b0a380a4ef391bf59feb55856aa8c60dfc01bd3b6abb813f5", + "https://deno.land/std@0.224.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", + "https://deno.land/std@0.224.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", + "https://deno.land/std@0.224.0/path/windows/glob_to_regexp.ts": "e45f1f89bf3fc36f94ab7b3b9d0026729829fabc486c77f414caebef3b7304f8", + "https://deno.land/std@0.224.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", + "https://deno.land/std@0.224.0/path/windows/join.ts": "8d03530ab89195185103b7da9dfc6327af13eabdcd44c7c63e42e27808f50ecf", + "https://deno.land/std@0.224.0/path/windows/join_globs.ts": "a9475b44645feddceb484ee0498e456f4add112e181cb94042cdc6d47d1cdd25", + "https://deno.land/std@0.224.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", + "https://deno.land/std@0.224.0/path/windows/normalize_glob.ts": "9c87a829b6c0f445d03b3ecadc14492e2864c3ebb966f4cea41e98326e4435c6", + "https://deno.land/std@0.224.0/path/windows/resolve.ts": "8dae1dadfed9d46ff46cc337c9525c0c7d959fb400a6308f34595c45bdca1972", + "https://deno.land/std@0.224.0/semver/_shared.ts": "5c53a675225cba9ad74ae2e17c124e333728fc2b551a13e8a32b99433b90c1c2", + "https://deno.land/std@0.224.0/semver/compare.ts": "7b5610c25ded57dc4aa41034ee02857d1a6fff609ab183afea17849284f86236", + "https://deno.land/std@0.224.0/semver/format.ts": "a4492b55a10210a10b9307491c0ec7f0c2475cc82af33de1c2565a15083b83df", + "https://deno.land/std@0.224.0/semver/less_than.ts": "890eb36e6294d245934a33dbe6818164c4ec6fddf3aa585a590031393f781719", + "https://deno.land/std@0.224.0/semver/parse.ts": "94c09f3486643853e7438e64f2c6741462fbeb84cf141ad5bfe88b73ec4cb0f3", + "https://deno.land/std@0.224.0/semver/types.ts": "9286e72b160e25856608f4bc5f08f8f5ccba54e6cdfc9aba8adee68a355c4b36", "https://deno.land/x/cliffy@v0.25.7/_utils/distance.ts": "02af166952c7c358ac83beae397aa2fbca4ad630aecfcd38d92edb1ea429f004", "https://deno.land/x/cliffy@v0.25.7/ansi/ansi.ts": "7f43d07d31dd7c24b721bb434c39cbb5132029fa4be3dd8938873065f65e5810", "https://deno.land/x/cliffy@v0.25.7/ansi/ansi_escapes.ts": "885f61f343223f27b8ec69cc138a54bea30542924eacd0f290cd84edcf691387", @@ -1684,6 +1985,7 @@ "https://deno.land/x/lume@v3.0.11/deps/markdown_it.ts": "24c1c0fd18c99b9067d9ff5d051f934cb7c3446e6afbad934f6268af8d1ceb4d", "https://deno.land/x/lume@v3.0.11/deps/path.ts": "f970dec772314a3ffbe672329eeb398e3eb66e875581c62af6db80c41d093aea", "https://deno.land/x/lume@v3.0.11/deps/postcss.ts": "7ad7485032d40a2bc7977eb71d9431df8d52b53d61153e60b38c29d1c98cb870", + "https://deno.land/x/lume@v3.0.11/deps/purgecss.ts": "524914d3311933aaeb8052c89c361efdc4656bf6fb8aeec9d1b3d7750dbf8d3f", "https://deno.land/x/lume@v3.0.11/deps/semver.ts": "f850a82a6cf8551e9b927d77f34218961027b1cbe44f3a88c387df62267e31f2", "https://deno.land/x/lume@v3.0.11/deps/toml.ts": "32830bda333eaf4f1c3d79e4306ba449c17a85b25f94aae9b327d3790a2d1dea", "https://deno.land/x/lume@v3.0.11/deps/vento.ts": "78db4022ee124fbcfd84caeb6c5a70f2c1e1706ec9f6415d0f1fe2e9aabcba2b", @@ -1704,12 +2006,31 @@ "https://deno.land/x/lume@v3.0.11/plugins/modules.ts": "4e177c0ffe972b9deef10db2bf0ae52b405418af4dbac03db9e7ffbd6a3ec6ae", "https://deno.land/x/lume@v3.0.11/plugins/paginate.ts": "6a1a9a24d0fabed2f722a6a6f29d98559219c69475685034181816e82d367f2e", "https://deno.land/x/lume@v3.0.11/plugins/postcss.ts": "5a45a017b1385bb6cc30832d7de21d7d7d146a6c6e037f48446b33e36deafbd3", + "https://deno.land/x/lume@v3.0.11/plugins/purgecss.ts": "c90d540903b589b3a700196bbc05c9a428c91abaea7238e41f6fcd8f38dcd2d4", "https://deno.land/x/lume@v3.0.11/plugins/search.ts": "5acb5be828bbbd012fb9226cb97ec3e370d43d05aa44d16e7e7d50bab368b442", "https://deno.land/x/lume@v3.0.11/plugins/source_maps.ts": "10afd5d8617003ed68db9895bc13e57d1742697fa55657e27efd535da6e52c34", "https://deno.land/x/lume@v3.0.11/plugins/toml.ts": "e5bf35ed4915587acd453f002b00ae9b88c1782cadc25c703d7642a390af43ea", "https://deno.land/x/lume@v3.0.11/plugins/url.ts": "15f2e80b6fcbf86f8795a3676b8d533bab003ac016ff127e58165a6ac3bffc1a", "https://deno.land/x/lume@v3.0.11/plugins/vento.ts": "fd60ee80435994bcf88b2cda9c51eaed0ba49a2363f42920675f2d5a0a4a6ab2", "https://deno.land/x/lume@v3.0.11/plugins/yaml.ts": "d0ebf37c38648172c6b95c502753a3edf60278ab4f6a063f3ca00f31e0dd90cc", + "https://deno.land/x/lume_init@v0.5.6/deps.ts": "49352263d13ebd8296f53470b177c0fd1e67f7642b84b8fe5e19248c3382c998", + "https://deno.land/x/lume_init@v0.5.6/init.ts": "8c530b8e1401e516e4b1f4c3d7e545a33cdb0fbc81f3539ef2bf14ade12eca90", + "https://deno.land/x/lume_init@v0.5.6/mod.ts": "33ef6609ada31cbd25ffa362176c906bc9184b2a03080cfaf04c5dd5b0061443", + "https://deno.land/x/lume_init@v0.5.6/steps/cms.ts": "97e37fef3b04122a512c37859f1f2c0ef58cde0557852f5da86de51acce7592d", + "https://deno.land/x/lume_init@v0.5.6/steps/git.ts": "e55e7857ed89685724555707b9cdc2897ec7bd535644be3f1935c2030331a316", + "https://deno.land/x/lume_init@v0.5.6/steps/load.ts": "82ce37a99d1fd182c355692c7ec91f72658e81172b11bca0829e4ae4da58cdfb", + "https://deno.land/x/lume_init@v0.5.6/steps/lume.ts": "24e23abb2680fa66023434936852f3b927c9d7f34b981a482dc77f5fa963c994", + "https://deno.land/x/lume_init@v0.5.6/steps/plugins.ts": "3b4ea954420c31ae1c07ee5a509aef5433a9b75d67f72661a38cb8f338f94006", + "https://deno.land/x/lume_init@v0.5.6/steps/save.ts": "91b033d3a07b1cef365ce27f5dd3925c90a3923290e2120eaec1c1c79bbc34c2", + "https://deno.land/x/lume_init@v0.5.6/steps/success.ts": "986a3cf2f1ac795f398cf04ea3fded39266fa169e87fae61b3377be1649f04be", + "https://deno.land/x/lume_init@v0.5.6/steps/themes.ts": "284da34d8bd4c7b184ef3f624475f8306b5eca63c3e4784fd268f5e64512dcd2", + "https://deno.land/x/lume_init@v0.5.6/steps/update.ts": "1271c0d6895dfb2acf1495a36676e4f1c454e9ba090a85bf88835e0756f26d3a", + "https://deno.land/x/lume_init@v0.5.6/steps/utils.ts": "6ab641763c6fec0c72ea97438f42f2a22a1c50f4124ecbdf7c20731a62d283df", + "https://deno.land/x/lume_init@v0.5.6/upgrade.ts": "0db7e96794f082391d42fd65ebe0c2cfbb5fce5d625866f1b83138909d7265e1", + "https://deno.land/x/nudd@v0.2.10/deps.ts": "3c605a52a62eefe9892b77e1b91f781562a6b8791c7c9b49ad62d0c761e18f70", + "https://deno.land/x/nudd@v0.2.10/registry/denoland.ts": "15783578eaf6a2edbf348aa1170de7ae4cc8b158ef57096263cd80c35d17ccd6", + "https://deno.land/x/nudd@v0.2.10/registry/jsdelivr.ts": "ceb3f75529a42ae1bc28564ebe13427704c572e1f8edc5bb7ef135779da2cbf0", + "https://deno.land/x/nudd@v0.2.10/registry/utils.ts": "b7aeec1113f0408a9339938662cb24b5404e1ab67ddbfd59b3f9fd60414ba1b2", "https://deno.land/x/ssx@v0.1.12/jsx-runtime.ts": "a334a1ee3a25de7f3b84b7b8d842bcae40e9116f6edb6ec76cb265712c8a2ab8", "https://deno.land/x/vento@v2.1.1/core/environment.ts": "36f3e145adfe1af3740cfcfc6ff237d6fe48225d3627123b17022251afbe3074", "https://deno.land/x/vento@v2.1.1/core/errors.ts": "8606b682b465d598a394feea135dd2f84033b5ef2a61a23d116ccb782a0a547a", diff --git a/src/common/index.js b/src/common/index.js index dfec745ce..d97cf302f 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -1,4 +1,4 @@ -import * as Uint8 from "uint8arrays"; +import { base64url } from "iso-base/rfc4648"; import { xxh32r } from "xxh32/dist/raw.js"; /** @@ -94,5 +94,5 @@ export function jsonEncode(a) { export async function trackArtworkCacheId(track) { return await crypto.subtle .digest("SHA-256", new TextEncoder().encode(track.uri)) - .then((a) => Uint8.toString(new Uint8Array(a), "base64url")); + .then((a) => base64url.encode(new Uint8Array(a))); } diff --git a/src/themes/blur/artwork-controller/element.css b/src/themes/blur/artwork-controller/element.css index cf007a28b..eb8f3e377 100644 --- a/src/themes/blur/artwork-controller/element.css +++ b/src/themes/blur/artwork-controller/element.css @@ -1,6 +1,3 @@ -@import "../../../styles/vendor/phosphor/fill/style.css"; -@import "../../../styles/animations.css"; - :host { --transition-durition: 750ms; } diff --git a/src/themes/blur/artwork-controller/element.js b/src/themes/blur/artwork-controller/element.js index 717bf7124..c8e260b6e 100644 --- a/src/themes/blur/artwork-controller/element.js +++ b/src/themes/blur/artwork-controller/element.js @@ -121,7 +121,7 @@ class ArtworkController extends DiffuseElement { this.effect(() => { const now = !!queue.now(); - const bool = (now && this.#audio()?.loadingState() !== "loaded"); + const bool = now && this.#audio()?.loadingState() !== "loaded"; if (this.#isLoadingTimeout) { clearTimeout(this.#isLoadingTimeout); @@ -396,9 +396,13 @@ class ArtworkController extends DiffuseElement { }); return html` - + + +
        diff --git a/src/themes/webamp/browser/element.js b/src/themes/webamp/browser/element.js index d8ea954e4..e58b319f2 100644 --- a/src/themes/webamp/browser/element.js +++ b/src/themes/webamp/browser/element.js @@ -77,10 +77,9 @@ class Browser extends DiffuseElement { return html` + + + - - - - + + + Manage audio inputs +

        👀

        +
        - - - - - - - - - - -
        - - -

        - - -

        Rfl(FTm|2J2BmaiA!Xe7{a1=H2 z&V31R-N^{%w5?PQ|Co{>!{Jhaa6~vl1zP0^{}q}fpI%^->O_=i?oxY+S7A*EeiZX# zSgnF{g(1DaxphPEvbF57SOfl*@S+&**c$e77F`2(k3(zu4~G_8K^B#rmew>HHPsJPQH0;NP@x8Ic}86HsL3WXZ{{g%@g@+FOFF zu%-mBz?_d&6&ysPfGKdnIFHtOb(=RD9B=YA{BB-cRs0i@|1yQ-AR@qqH>kOO)iqWunD zHM6Q*UTU$z#_k{TUjVb{x^;CG3BOtRJrU%~8pZzi(e6C31R)OgFj`_ym6sGtk*1Qu zigMdfcm9@3tuU*e6LF(sH|l*g#97@D)!#=fnoSys-d-c{p+GZHkAQ9X{R^BM{p@Mt z797aS;0^3aNdzS&~41Y)m`1Y0Pa9|VRH>#)K0inL~?;hwGVC-*1k;x z4Xf2YB0h<9zp#x(tGOU%0D%;&4ryU)T(!_LOd~O*Z&reDkf3zuJ1TmO(b|`9B2bk! zHss+V4eJ))Vhaba#p`Z`-n^qCD=G>-55$^aOKZE|w2kV7bmygO_9lO`cd2*bJlCZ)hDt+e;yfnUe&`Cp<|h9N&+N7H?rrox>F2=kk&y(? z#6uql%!CbZn;ZeOf{Fj4y34JDFLr z%IEtH(X&jk)n^b4VpF9nitAf{3ea}AugW3?+37ujaZFs@2 zTFUtc^E~D+^9lK>0TUmr;8NIEMVb<(>@wHhyu1LzTANv{C`!{B;l_4$vpjn&*10OC z>`qBXgHX)ZcpvPQe2j;g#m#nQf0vAt0eq4{20V$RQuM2%yl-bUsJ}ApLuqrWU0MSU zkyNv8P|&kM-03NSRe|wPyJOInH!o5KQ-FaRqzY77T*h^l2ck|5WY5Q7Juu_RhAB8kF_b#4T^b zIma@j3@I6gM;{2U zmU|yv@`GMh4k4gJdd6|)e2~{)xTpG2i4V+P`Q6!V+Uu-#sf*gza#FtD$1mQ-=nMMJ z*I&7$Kk~#%NukZS3m=r!<@dAk>74)8g+7L2EQaiVP*Vcyu$BfCfemSG_ zyc+h2$T3H{^ON~E_m^CRhM7ikTEGx|bS$W==S8XBgvXgC$T%or!S60N>3|vrZ(XpO z*B*TgGhP-^0DB18<@3HP>0~p}2!>MPkDn2gzULs^=7tPEyJEA&$({q9Z+rd|@hAhZ zDeUlr9GgLfP)2~*l1kDuw!M}a0sX%+$+GbySg~>+wI9Z~;HMmTOtrPQZ(w`>eY|D` z_`T&`%vJvwoJrNETN144KTrD=9K+%ScqT5BJbPoy`R6N|b^Y2UaN)NlHiRA=J?EPX z_umx@Pl_OpodS6co^=|2K=Couv9ORpS_2HK@3&FW5-k5sIH;Wb;LR(?3J8KmxAlm_ zX(x>lxM}miNBh%D2?6duD(IF74X;l-zoECocM(d7Qzk27s#}E~$Uhld)ra}Cu>~{t zUg!;#zaJtK%7?_^^gsZa=(A>Tm38Wp2Nf*B4{{3laNutswxcaHCwWJ4*WM*U8&LXm5K~>rw84YF92T34tH9Kjv7?f-xw7nVf>~$u6$J$dZI3jML$ikCvmsPvvJW9A@Es#3?m zhxfywa?jMMnU2joB>v^p5|8u;9Nwzw4;f4byIYC{HSO-b{Qm%S}K^xUxi>#A*s#!y}AuC#j1!6WB~b5$ z)13$IP;)Xa6`U<}F{Ai#zK9RjX14HlczLgI-NvL}_SwaC~)l$x&A!a{Z{;gXVwqx6=j7Bts z0SuEjecSCcv2|O>kHlf)A8-yxN~Ed8Syt@NNPg-)LR=vObYXiCHa`=Xn>g*CmtQsy zy6BO93NiTDnw)@%I^e#SN69-y;%`kI_H!Mhv|zVV#nS$b3&vJ~8X6{?(ng#{{$z!P zWE{AfDhZMrvzx>7?{xB|X-FAfBOe<`0qiWAPI@(w@dwEor!^=$ooGE&JggU=oudGx zo^6j!^+`Cnq?tEuSJQ;6{E7o47yPOP+V-sVQ~=<(K8GV>XT%o1Y|vX2N_!r zyD@qV7^LCfLfE!gOB7m$D_>K4FFz5f2lBiC!oP}ybCBx;#o;Xl$Lr8gW}2qHRsx`d zPkgm5sk4{L5v)YIJZ*T7(#Q`3z#-9UnTDGNc$~kuC3GYRSLjVO#b@e%^TIFFkU2)R zV^e946#t|7H-mqhK|_s!2UTHk(o`OC#U1V#N5deJ>q&PqbO_K%V3KD)va;lO;GXTC z-W3XaW^@xfE&;0>uDw+22i8#zm$qkvEc(iW2gbP45DlXZ7=m55p9F_6gKpKiC~IjH zDjm-M8Y~@CgYM!IFb41&Uu{YN5JGP?KcRFqfJgc(1h!S|m7%%=$X{H=*^z+7kKI*a z_&lyZO)87qB!BT42YIr2rVkFwQ(cxsqOHw~`hU20%(3r*|H2R&-(uRux{fz6qi|i#+DF-3oW|XjjVD zsAKfi2tW#xq&XjYwQ0Z&lTkk1=57x!<@yR()L@W>Nw*B?p>m{_fi1E5$fzL2vL_OMNE-Mv_a(srwzlMoC>VusR0}IT&!5t za%1%+zu0N~33nS>6Hs^n(Xp|RfRUSX^UU{(W@LB?hc&tZBKC*5(bD9#-xQxr%%yiZNyh2I$S%Zb62vq88Y!`x!0SBBcG-+>t~ zOei#jXDq2i;tGXp>`&wQ$DbHl^*EiC27ol-b_Vtr5(=muOJsWx2m822d?XHVqG%}Z z=iQ#R9MySR?4Y-56i0ZJVFF4C{Y zeS}9VGCH}JbP4R^%@4l4tfWp#Rpn_W;IB~g^8Dt7}W$(avz}}Sx z@WFVilcEzEJg|3RdHAl;eO0f%1#~ zXqDRFuWuqD3ex!l-@@#;Vux-FF#hi8Jg|B2=aJdntM=K?PV+&j5b z;>|I*dh^iR-gP6`tVMVr*YQ)-p`sy7UzY!%?V3Yw|HO}4b(en%J<1pHK{c5@kZCi% zeQ8?NE14_3hcTDeyg>XO8>mL4&pGkf>EE(YZ?&+S(LZS-zR6E^R}56uJ23p%NqJJW zFqXhOV{E^=dv$G21*0`);lY-pw`+eXz~`_DQwcpl5=I)?H$1n-A+S@xp;aE~g=)%zja_YVebbgAKzTg-og~Ge)d6{tb z=7jJM+)}~>;h9-gnt4*bfsrW>37eaFhI%*ybcrAP!V?GBCt@Wb-_iwM09Nq=(ZdnD z3Ofo3+^X+W|55v5)=S55s6jP#&78lNlB)jk$<)5wYsT6&`8(EKEOY67^>5t?EodF* zZ)rv)wOd50difP|@e93}R@DveuGnr|#huaEnCxRBQ!HD9_Cf-$67Uf>1(EtWLxZ;^ z9oX+eS4Jp8k7VK)$UN{r&oTb;;-&8P`JX+~V4IP=JFrLjG%#JUh`Bas7g>cy6HLhw z)aY0t1rmCB4mLKl>sEXDx;<#J04>*!FasYqaOdE4Oxv!0lUpjCcm`T-7-omNdY<<> zqCKX*Sq3RtBOtg)7D>t>vGjHxYIxI82`xEi1f6hSZGCBw2Q2KLGQCyW5$gG zVni6(D;wn9(WU=}XH)!Y9;DST0EI<`<-gKI=6KXpf#7yybBmQJiiC}mh52XkJr zfNO%xC$Mt-@;#vKPuJa z%{EYEkg5EKGh)Pb4_z5>z>-+!#R}#Gx<@M-%8|}bhgmDKHW;^~#x9^u?_qMQgkX#( z_zB~hhmqB(%nRJJ-CbQ$X&N41!MDoxlG`DzD0s=QYLD3F@?wK}SYFgKu>JU*%l=6) zUWgYNxZxWSl@e)+!1Z+R|r-5G%>fSL<~_G|WO~N5w*DQ7(yr ztWJR_aL;xxwM^;AjBa430^pc^H8|)8q#ZMiJ5)3OYpRoYVE$wVu43{Q?HT7B$%=RJD=uHe0R=d*qqtT- zI10bOsW5PX+ATCQ_5)106d0V)K2$t}Denw~jXdLrt-5{F=wYKE3aT0^g4E*sep7=T zb5Wlyt<_tA&|;B7gCLg&!W1`bR882A7riS%fq~lrk*t&h@fb0!**WvSZf?lMu!*1+ zk9Pxt(~YL$ba{%fb1Y=a5x7sc>>r25K5uiUVT3w8IJ_?C7`Z(c!+3P}eW9*B+I`u< z$1sHJxEJk#Z~(J_Xbpf(@KhS%?3ukTcS7vC4N?J*xj}^d4TxVQ;u7)xixIUAtuU}U zGU{k}I?#q-O%j7@vOkUpSdbx*Vo2s0RC0XPV*ElD^)}wOf!QgDS*b|p(0KEs#6T_? zE6%dDg?9B4Aj9Z5BGdO=_f8?FSAb&Pf;LEuJP)5`>CG4nqh#*Ltek;|`N zIp3+{k(M-W)%Ow-Lg^orH8w_-1q4M#1q4(?)k`980q9$2w_M$lYG7R;BU6c9QBsl& z+|4B6C$c0~FKQ=jZX8TtRJ8+lAwM5K4>*qhylUAADYK#sT!H7?9S=dlWP-%ZRp4X& z1c3PXx_t(fNWaA9SYl{Q)jD0>-(QmCGA{1qz|Eg;On0b^l`>n2>W~~A>@P)7C9gvQcvL~zm4eb+NFas zi@A9q)4T4f3QR-t(MXv55)g@_uI4Wj8%EqPF?wvCdx4)V*`XNwjlS$WlM#MfQuZI* zrVaR5LFo3}f}Pb4lvS-gFbTuXn=oIVi}~g|K5`+etf4z$OTLQSAm%Gx7Ge!#JFqGU zoGf^o3T3i?CtHG@>N#hXbh?_Jb^2(iWjx-TpVMLpW>2fv)YX4o+&kVP`TT5j{o>(8Mgt|UT ztK&B{1}_-vxl4!Sse_$H$B-(m7^lA!#@L}?t5Bh(Mt^2mG8;E26?P2E{dYE2xe_3{ zW23aqv5W4A6F|dEU6^K)m^u<-Y$uYPN}VegCo$y`af!gmg0Vg$j|g?-fFxP;0x~2- z$?g+?Ucp<8Jc;wL*<|Ivjb~|7$00ag+wxhUVV1>O0MwY=FMe92=F7rPU!X6*3wR2f z=#D+Un0gkNzeZZdq=?CsXHq@po;lf59o3-^g+{Gn<+1#GTd04Sj8rD1oa+!Qb5kfr|SgsF7Dc{P=O6_<5^R~5caE%Tn-hMgV`9hkVTaXMc=?SFZUhDhM7Ve(k(sT_PE ziL7LV_BD$gWwN#)Y^S)Xn{pL7CRC+zEEi7LRupCSa%44pjG>>Uuud?~B+lFp^L1g4 zEb(=zuqlf2j0#;x%^|XCEF}#rz~rEnPrDwW1SZv8DR)?V2l1-jSC_!NElO9kyXjZxI3`0+3xKqho}PG60a@0^w(PS)A}Dx zdpOV4VQ2ELDGB6ba(;WZi7>bIi_s1S@zjt3CKlKBo}mtEldQ@MRll$Lzt>OGs|fa` z7<`#%s0}n#jFt&+Q*Kn=X_o=~sx~AtQLHF^t7tHPDm15E@jK%^w|<)+o0pvP>{LUp z#gd@?Ue>58DuddH=;-xTI1dqTa!01>gz++tj8AdQ-grMIuA54fe4;%T2gY@0qkpM} zKV5%?tFilJ4?M3}O!c$1VijpjDnwsLHo1LY*e?v>BYjbR6;(!~#@&-R=~dJ?KGkc@ z(oWoSc@%=K{}<|BmUrrJA}KQ;B#_D{q3-`KLfJGOm~4~VEH%x9x-fdmZhEbH{r`_p zR1uZG@P5*xu$QVY`re_uE3>%pcBA3L(&_{_Onl>oYEF&- zz5a`ErKR0B24+)mQ(s@UM;n>8PY+*5H1X*jlH0$wYYG^E{%i`lI9O^{o#wxg$9OKU zP(M5U>r^nV#k0fZc>8J zraUL9uUMX}%)p3`zFq3ol`vv*AlU!-Z+OB0uXf8$MbObWNJ_eIdd%tkV#XUp$UYKz1>2o~k zgHIj;r-`gjfZsY-KtwM)n4j=^9=%V%N>bG{F|7E?wqqOY7DE{QL;QOh1v#82sDBRH z*Hdwl4Nt8mN`Np2GpNyCK1Fp5j#&?ZxDK~fM*+Q5Oo6LyO^ewq+>Y=e_CeE8HAcmI zHA1Qlr04n!kJSk8RD#e*F)b0Ek>a4_oy#lmUEN|XrQ@Emv|Ep>0)i~z3%O+L@;Fw{ zRUW&w<>r?0aHo#jA6@o;xp58Zw&=Xb4+(82pQxCP`3ft#s16Gk+uO7K z>hqqyX>!pTrQP=avg(J~{`)7_ODgH=7xqb4Mk>Ni6cZ#MUC}Ym((P`6+3#ctYwY;+TRz!(dF^=@JmfshlfNS*oJo0*3tr;nQjUhJ#Z7Qq2)D8Iag&T&4ZP)_q{}K|{0{whkK#2{gf0Xdqg6ab!*>#LoAlXXlXU?@PV$ z^H1LY*u7OJZY<63l0qhzyOv4MC~v&%k#5|!70>qX#U3{U!F3tMjMQ}bdf85G_G`1s zExpFB@{|^-F8<^ShGr1KEb4z!$^;vhy9hBkC8ec*-+M??{lXs`qTF#2FHWucz<>aQ zC9HH$H}jWwW$|txJ6q#cmiA%5fh_g0xo$;sjN7p0Kx%%EYpB>{{1tVBm{ivu0YiZ> z9qok#;;OD9vNMQ7V}!mL4BW6sCtZc`JsuZ$%rl+5Nbwu@wmAh{M(iaRvC8yl#3-+Y zB83XCW9&G87d@(hG75&h;YtK;W7ly0D3--=E5#-J;={3-%W`M~q+ibbbOM+wrXS9~ zc(#02@R>+g+=uTmcAU-r|9SgmYVJsaX03uVfp|jOfQ4WIf#mqy;^6Y!y0^Rac8O_7 zy78@niu1WtMgb3w-jnv=(`$rLt=Ue58&`*Z86Uu!de&D1VFUm%LhZ@b9Gl1;OnLa~ zw${^+g>TCl398`1sq)nyQmCZK4#%fA@A}23+nd6r!)>iiq$Fp4GuVVXqgLpeF!`y6 zKL_EZ6O|gkL{E+G%T{eF!E3x*W2e>(;AFRyZU6km@t?Lt5v!1Z7QQlnXstwXj z+PS9ixn3-&e&$wn_3eiTli7RRgi}HlVxH^M4#@4i0bdrMxXCQV2Eh;2;e@|zq z`4xtIlsHfiwruH`s>V&{J#F6Sme3r(U?&(4nn5!ee9B$^%bi^E1lS;4hU^=-g71Sy z9)C~GqL(!kG34&j|8>Qo5z1BCbD$Wj=ZaX0!^Tyd{dT~Y5n6NrqlDQJX){33R13F? zw=$Rg2`Wy7XUW^@A{QHNDdGli3Cv<_97k}_9TT|T$yR0Uf3wY_g!>0xex7rD$%}m` zVuzI1~j-Pi;d+=@MZ|8Cp6X4CO z!sy#ee{u!Z(c}pbqzdSRRQ<^`mWB}?@VG6|vCp#>M8s^rXYldcoCRq3H!*(W`MNKw zZaL=40X)&EMHZpKi1(0Y7tL<3oq%ub6Y`F+DFOy5AgKX#oc3UmgC#u9 z{`=QmroS)5etK?E5y9doT%QebdT{q7Za%N;h`MaSauI z##KyQhQ@KL05I~!m?9S-sYNt96`#0pc^c*;u4jG_Vz0OlfrPwP^sT20ElJRo0n%zs z-4jCAGkp}(n8BjUk7CK+ASYaGHq}C(jl-XO=p8!lue!Shc;$;%-#g+vp~~rZ{mSy& zPWU$ByAb~Q0d60#O9cUfA;CAGlof%RYZZ8xNCOV~H$^qot(EStF=E-TK0mBIeren2 zHBEnCnkOqT<+0V|7moo~GhjQ+QHrhDdXwL8Lt<)>1g|LJv4W@I*Px{smt? z(sWB?wnpS8rPyx2<>=E?M$R`1!_aDMZe?N$FCenW(>yFS@9;T4qrS6;se4t^4<#VI zB@Fnch9ROykKf9*{mJIi6oP=8B=r~k1%JVxnyCNe8%6EP&7=+r^ksN7_o$j20U$l9 zud`utbcGYO;&rJm1sUBrs@$`(C&-DBnw!9Q0*?v{pHc19*Dx#QPoRpQV8t&Rg(9)6 z_0_u|Ncc1K)8y^dN7OH}^%)KC9;Re1{oQ1dGc+7u#~ulG?r zy;|zv#e2=9I6@SPC!&6ZdvBdk9#P6aAUDESi@LKl9C#wqM>xuE@MT6s3`Wr!@mW@+IWn~2&b$`Y@jzQJrGV)k{w zI1zrd{4ga}%h5q!h}JJc+<(VFK$-;gm{x2 z5|arzqS`bP7$+bFQ;s8ifXP87z32wa=erMWzG&a&2-=N3?F+D5OeIW+xSMGt0K`F@`N?#_CoR^6#pI`?vhG6%LB0^B8`8nL*B%f zYLE8exUy(DvZbO|!$tGMMGII&CaKHGrRzJsx2Q94X2&pn~FLkko6<_vHy6^Ilx!DD}SpSUDnsM(&$Q2ku zF8%9V;9)>dNGM_KtrD$7@}LyL)14Do%`#P2TA5o#HZR^RzBu0(QTt!&wVKv)LBc4sELkQbVQPyy;o*@m1+sONl7vb z<@SaD3}*Z=IThF#{ys(+U$W5%rjxQTTn@AvaT}%N|8}qC9?1A~>XT|pmtp@?BS;yF z?hJ){fYmIHMpbGOx{JggG=W|tOIYafptMQ${Wlq73 zDW1gn5Wn4EywESEQN*k%dR$$h>@+zvJvd5*Md9SL!H*eCJ)LXCEtAW(K?)snz(~eO zDu{cU>&G(({*_U+(oE$PPAioPO2tK`EamZ_w4v1Z-z4?MAuQkjNhrN$8sf)9&OeL> zH$sFk{f*9zmz;~5Wi_E1c*>u^+H<|ekNlfK!t(mIe>zIb9MfEk9=Z}%ejnAy|4u>? ze{TB5S`n)hjLFUfXF81ZWgXMU=!Malvbold*$AiTq{})fM<=B?O6zppDUQRG=J@5@ zNGaJQr8)k!6y60C=^kl7kA;|5`MF(CS5p1VlGQTct-PlA{da+Ku*2Md;^u~m+>5^y z|7&lFq*IbRLdY97EiiPIX1K+T5 z5MAD6YDUvFbceORX3jF4XH`YyxS*+R9xi69)_`LQmA-1jO6pXct%LPk;epI`((6YB zjNZv+g}g36H=OC5g#loeINQxz4IfLW>-%`hF#I_>f~q3@!6K5(nHS58lS21k zCxs5e=-H#G&AKU+#3p=9v$ciUG z4%Hy@p8-RTUSrU!qte^ZD)wv&!%rZ0*&T%1;`3@P##?DyueL!gp&n~1@EaXr&vxl( z!L=%Jq^0xmbD>DK1J1Bj89;>)?zoDob+^#-)^w%|)$6!dHh1KU{0$?$2~(MiF`gr` zOps;ib(=S2vO!f=UeS#v#$xh-<@n-3Eg5}elxs|m_P&BOv#KJJE{sVK!C);d_T=-D zC^lyb4x6msu|6shGp+6DTF||0`wq%5t>W4MD_2Y+0rUf7$Z1d)qtiXsj)wMSL#@mY zZDuv8O6?SeZ@ihmi5>Et8pup+6*)iM$A|o}U1ZIY_|S=}A|d%(4q0o+6i0PFN-K1Aa{;*z!=4! zJ#6pl&Qxs@IO(UZ1CuN|im^KON1ZfcHTnmV2G}GtfUU;dBKI+}W&}Y-zbJiGYnewx zh{%YU^~Sdw^67K%QP>`%(*GrubSp~-I8ptFU4&4sMbD`YcjY{s32YUt;U_>AuE)bj z_;P}*p?FOOhguw;zX-M6Esi0layqPNV819aWqoWOut@}$ClFUR#Hx6ysO3f0Yjb1t zmNOj9y&h3VQyfjxW5^UAbri||NGvm_olWm&=aXyCxL51 z-SFgvlLrh4{qu(D4qz)J?vL>9bL`uBcx>V%-ce<@#X>YJV3Z6hduP$mengb)fW^QX zl*|^|-e(TxOv{F+#znZEPX6OW`ZPe|H0R}*NQjWgFG->TV!d#4bI%4aN25Qe4MizR zQHrhurH|=jf)>VjcKa7^uJrX{jnRDdVpfe33tL80OS;#(qh^M|7gZ66^+Dge7n>6y zh0UIJzc@KrQ-zUi9w+(rqkKk%lTU@5F2E{y{Fcci^$ilnq;;(u+`qS6k8|X#6v|}F zAU|ZwHi%^6zW+^;GdY1oe#kZ|XJy}$JzZYT;!n_MsiJo5(WNruYb28r{DaPoKi`u` zA-omdQV4I?0ijN)17LcKTdiGB47oPNf)y+}<` zcJfzTUBB;VblJ+~d?)d3xOYHv+B_jshFs)onboNeX3=p9qQ-8fAhWt_=->O z8Xb|EOK=1vAit2eu(`PteMw%&i3dFW|2Ne-*U9m``sx1|<{&38^?s`2rTOVKTMk z$j6-CwxE9rq4b~hpCnX%SaY{ZwUICmCglkwI_^44WjxI5d+Hwp<*$s%r`eqBKt&2) zBsn{WCp+Y)C;cRc(v;KE^rVZtxP9oX%lgO{VJGEBPz7CsS_~Y|WUX&Eb*~uJtKWjv zk9v4?_1!}ozgBE+y|pIa4>Opxh!S)9H752+Md?ZA%kR#`G$={kV|MXatvEb;hflyv z0Nakj#${@O{>_`zMh;%Pb|-e?D-xKJW*^Jk+8%iv{`Hp|wNUt8nSIEMt4cl`sj`v86%RKILjYHyu;YK zqzb<6g?l#pCn*G>%W8{H7jr%z%JyN0@z7+o@^t4+c(?4@%%rXV!)uHQw@~VD$zRpUbeMktBAAqdyL-(|r2;7Rf(Q^Y8k^iKo$xI{!Uaw?Uo`uZGH1dFm z8|>d(PiNEOY;!GOq_vmIo#YHzFn2?6wSIt;3RW*s02As%fCT zLD~jB73>6@CiUmYKI_mVn?4)Eu4av?qx)Ntgtz(XsiU}U73K&fqC#z|=jVD<@;?I( zx!v_Vi6E-?O6~D5t?*WuX$+&!1Es1O{SM1adx*G!AOkq3hn*W5%X5}0Oa74RcVF%p zaF-o3zx=2pk8%Vp-uwU_Bt9uhPINN) z$B=&SbTg+6KGd%Hg`NstrfRp)U)JuchRTev+dH)^Q>xH&w3OT=r52s&noSXg>=={& z1&kPmrGpFc!Vr2x1SWf^Z~Y?|C>eT%m0o{XaHbiGkN}}m2_rZWCqx(KYpJJqA}l#s z-{TE>M1g_R`4hF*HGacOIAyXPhr4(vgUK95ZSQryd&+ zW4QFw6@G#J8n?XV;z{LfUb;4%k8ygO{A51%=^=LK9(kLj1G7soj}S@D)O$zo@tXAX z2f%NUl8aTenTZzCDGnL`P6Z4jW|B_;j4|X15o|4{QvuF{xazS>GxifCm{jq&zcxoe zv2>*T{W`z+3XLPap^-J|Rs-novtF*>u*KD6O_wz-j$0uQ1(&_?q65qkb!&l+4ai%l zUX-baZC|>&R;^34pyYXct>gQr`~G0SMbcEc=D+>;yOM5$E>SAF;Y%ACI-&r= zmrW3vb6Jw2*mlt)Q@3jqzY_@Cg{u!jbNZfs;rAtp*TR4^3$NWwjO`q3xBlTHiPwUD z_6Lvk-Exa+w@cDtVs^56bkt_4NjmdX+?7G7$7cV?JGCBE0<2c)+m4HCK zfG$mAvfAaN{zx3%tcPR0D}VD4YXrvz4ylQT*V#jq;FxF2Il|GyQMy2b~hjKl*nCeg6{#tseD0+>Xy1Jx~;dAQs?Ed!hxPi3_? z5iNGL8+ln73R^E*YJ5H)F5TuH@r;GQs=SpLEk+AKF@Rj%^|(r9&nN8aO^31|H=OX5 z&86!E^$wX9(eju#!89~!#mn~lV#uLn=wRZ!@$Zy(6V^$Xyg_bw<>WVm2N;u8V@%*Y zXw2MTy$+X5QY6;)*>itu`VyvpEAhf^EcUF3n_srEx2^Zc!fkA=19m-muh;kmeibZ6 zeL(n~2HgSpAaO|?JCi;vR{&2yu)jl>t(EV+Q)_PANG&gZZ>YtWqmM3_2?(V_e zdOcZK_P)naw%);6!V61Xs~p>^#(UI!Sa`PRGu}ro_0s+9s?a`*0YU8a+*JcCe|8*( z4hvZV7%$R}qS8Xr_V6QUVC+`Jf@h+e8rQJ=AF*c_rsIZVA*@hNH9*tZkk>6JYJyj^ zHI-~>^`YdI^sIuSHWj6i2n4LU8H`89tKz~uhmE<#n*vArQ|NW@w%XtF0-V=+Sk&Z& z9`yYqms|ZgC+vbB^|&rF1EuqG31cziTw{|ZU>KpEI7LX{c6qMW=o4dm1ApGi` zMdqZr1udCEU+l_l5OxDL6J1(tT}sQ`LmuT?VRxat-W&ho+WF{z1xQsRZ|*x7a#VD1=~fy9$*|@!n)VOn;KV<{2%E8%t6xA zTU6hmad7eJUCVw(9-b`S%<^=rv;Pt)8^b~S5*|@d_IjEN*8q5(`LpugZx<8h&eVdI z1E6E8r6xW8B~l#*YY&Y*)(nE?j!Z9d(?5%%KA`Oye851Ka2-DD2wHTPj*Bor*zEyp zJqMtun&2wI%wU*B{UMTIg!BqUudMr?5WQ!sXVfzmqJ#V-ou>~DU_C-(C+3|{H9hUH z!O%{)Nm>IHO>r5=i;@DuzYIq+kZkh*joCN$x?-&!IAxu;fV?TW@c3Wlr%J;GxiT1d zGGdCt$K=givxhBmz_u(neS6b)~EM)S?0UB>*t9#K~Pr2W8lKX z3p3j+4vtDh*+G}de4H_6Y{bG5H_1awh3bNU`JmMg9({XE>)3VpZ5Sh9*I>-0s1dXAyw6KS$~$b<%C#im+UHUz2j5ejDSUQU~j6@vP3HaQ=h@ z>->UDB$opLnjMI)O!X-(;hnGA)$T|JtiT#+IAhg-Efg!Y1f@GJHL-lf06rV0RhH#o zqC#A*rjUmaeE!5i2!9qQ>;YY3#FG}BDh9}!K6Gdy zdp;G_)U<)HAZah4IoMpjIlns!F|9m4eEX!CVu3pzQe1;Y;!oo$dWNhlV2pvlB(ZHB z0oe&4F_iL^A3d|S3 zfZM^-X+0~^_J2s<-WJ?1YseuTC;d#|Me_^OId6dJFuKC+cLlrR4N+9*TV5Py0&Q7W zWbt~)Azub&w^6}bm99V`Amo#l=A&!Ki!W}3&)`*wbU0zwRsFRzqc&^S@=L#yJANy; zua5L5a<_h^4CiUC9q-~o1k8Ah9=NbZkcAf@ExuFx*$5n>W#;^$%%Cz_S5`JCKHDEvjUEE!DJhOL_%8qrt>|3zmvktzPSD6ct^SIYe7<@ zJq>gz_OakTL9hR2w}bV&;KB8YL;#Yj;X!OXMiwLN-y*&`n7G8tkt&{6bBk)5L<%C> zDV@*W^|_7RZkW96+pX+0eZVP|*Rm2RH=QOYg~3voJmR|lS$7RvC;N@2HWu)qg(Gdv z(wqZ{?zzO&b_}hsN{Z7aC!aq_ec!|Adw2&GA(YvaJ&=fWq%(=Zo~C7yLhC#-#n@Mo z;1NhYo?V&Wt2q=l7~WDywAY``BL?Z;Jj9tmXB033!Lqxk>z0{7hgybQ5xYw!JQeW0 zz73%;&YofPRedbv#-T+5flTK>BXk*vjB$5Z;IMJSIFQYSgMc5cEK(8-nF4H~Qg&fi z?|p1|H%X$-j(Y;Ge$4HGx~gY$`vZ_VsU4kxaff>C80{gtfJ+OY_>XlPnfBuP8Z4kS z&!>Np#Gonz#0aF#9d(qM+j)`d(x3f>gba`Qt~UNHMnp#}vLP1HjG9$>AQ2(r^~|!- z09Sf-LZ~?a=S602aa_eDs~Sj3SAcmcJDFBHeWX`lGnRl37<7UUPBd_+F&j-x*|Vk{ z`bL$z7m>dINuD5*RR(6T^QdjsWFp~>?L&_?i_HfSS@rw`PtCdE_rO<5gC5mffa@wy;tc^4s2ns z)xh`6t(Y`_x|z5-e-)oQ`Q>SmDDy)eVB3i_y-!&M-fQzHgMJd15(lhvlA<#MdxG8G zjG)x~XQD3M-5tTnNeh#Ncu4m0RFUU7*UEW@8V zzH2x>wNZOzrN>Gh>L8N95$R6ui^V~;w7ajYLo(+EP4>B0#9Aqfz^)1x@MS&3iYZWl7Kkfm#*CeYvw-c3^d$8_y#akj#ja>aL6W|bOb{os=B6SA=xVtL-o!kFFnQQZ3zXm?_U5t_Fho5*Zm&u%~+kT09%!z%%* z69DQU9!6v)1J@fMWm`GKY#L&KmwSg?KNGssv=axPnSehSAr&*tvk*II{bmj4vF!IO zNc8HmFm$fEc==>uFN5Qtoq&{qb-A6FVRi7tXUHO?X62)6ud(y!d{x3A8Sw_*>YxZD zXa=nRqE^&7rpaVqRt<)#V3U{h(u6CHefnQ;=DYeq;ze53aS4gwQYdQ0JxEz(*Tub& zOFw?&@QOZ9inqDpjCJk;^b={*%YS;MmFY#=NGz8_afUcYur>?%OZ<7Xxe?011_Del znBcRg_D6mIyV+`kHbhapmSU-r;qVs5b{-j9*!wFmaw@4?q6|Xq@>D06$~oR_Gy*$e z2W^vb_C|%ipdW(^2N@>ya$Nu0rzL zCU4ym{)UK2|Kk1fwtIaIe+jVX`*LOdApJ;ehw0|@W2=@Ql)b}$tS@_rupNQ%p#;yP z2^JJ_3~y4J{GT6p4RI`JCMya?c1);>Ma)SenIiQ}ej(p6k?9eY8}))1+-h`Ue)@Oh zvA-baV2_&RI`Z%uLLOqhIGbWDxMtil?m|dsp!#KdaAeN(cclfjSY8T~SEEn5y4^Pi z{&zN8o3ga@k1`tx16;9)7Ie|;{h;Uz_hzb=ildo$ruJw23%GKl6MNHty^cPG^;jbS zw2S&V`qIFH(66=kF&P&B$Ksp0V!aYv(e}X?yS| zimpY0L87jXSJbN8iHcFeU9PV1+_9nDmGqQz3wLb3lC27hrEElKaqO0^ZTdI|$F;`! zKJ_qrNF+RP(7oFR77X-x)Ncbb^$`{dOoP}=MM=}-jr5*OlKQKe0>!QXnsuZv0Jim4 zriP~YAEjE|G3<0QKGMqIw1PBZiihvvw&3Q<4iYWC7P_vnsn4e%6jyRA20 zPw_uXwc75m(-H7F9D}|oOj@WS;(y7&j^y+^L%xYD78QlAw?%{_;7aFF*PzK$!ZDh9 zDhem5U9ZSjZVY_{X|YyCPmr zagtPs&RtCXjH^}#;73761W>yIs|yLV4XscDT{JMf$fKkw7b{L?kUNKCrs8WiV|O1{ zO7?$9-`W;zeBy98D?j}>@bz8}{m)!|)}@M`o0jes7(RCD7z5xk4U^K_i>Z|dwRta| zFiDB=?(TalYR`SavL*jJ8aNh0MG0wQOdBGSIyXJ(DaV!y@a{*yJ^tznBL4>a?EOuT zDtrJ#^Ln%UScc5c<@&&(cakJ_N#FFXvhtYutJi)#{5Upq(gJrw@qGx9Y*%`4WWBsd zU%TC6N%>l^PxR%u0uTd4g_-{;)j;(M3~N}RBkCfaF$4@-iyU(#@Y_ouZdr6`>i+B+ zJo~ljvcLyszsHQvabe7Iq?xF=UEjzLKv{fvd6iL@k4c}sb)h6}%|Cw9Jqqof3e(`k zeeAd#csAdAt;H`6Y?ssxI+V1WuNDWsLCtML^>$#4`96ngKH)O$W3MnX!J!meB$;lf zJ0K;15;ExS#q==g7b)Vdm00t&=Wx`qL5f?qk4poT0^6iBt$8jDkmo^xEe>)>e#{O^ z5MV-$0J`hzpQJ29zn}HYZHg$}tjY8@ZQWY`XD`^9%;@syesVI#oGOkID%$Jc7o2ah zib@AZia+=i$p-VU)LE50s%ys<mr)OpVZ_cL=%)>z{9<4t$tA}I@p55SCJ zDKN-`_rQ0G+#6#JrJ;w>FjMrN5t55sTu~1UJE39zB5=6aK`c2KD<6HI$jPHI5uDvU z@8Dm6#cA2yl7u#a;g?oRE9WZ~GXsr66Vw1*_LcOnGsOeBLsGs3*zH7`4b5q!@zQOl zBL_X8HBXsF^V(o&srV8VvJ%%ocHtv{6|}LTSSL@^Y)W@4%<0ZD7_Iy&!m;2pv8s?A zWqE1I)dKwcpaLx*n_c3uF&S=Sz0V#@wk`Rl%!!zXSr~?bd5X zXxw;|^X&tdd0y93WmDHK$}gEOhqs)&+&%Q^z{yL))N$u``UTHI#}+c6n*)li}w)$QTK&H4C>S%IPwmJ-^Vn6hp& z3rHaaBpAR4VtgI5M?0|9xLaQtgYsj6(#?!9gCouCi3Zb&{UGQOqQeQ}_*1crWxynp zMFHz2cbrUYc4t$AKbSiFBfym5XnM#L!H6N#szcUp91SdB>luPNmQR`{oQ&U4W1p3V zW5kLXc~0ynJ?0GPPoU|<2Iz_V2P93nM>WG{!`raQ_R^h<%roB#HnYu;mSBX3r4*O@ z{jH3}>hb9H8P6ORj?VeD)ZeN2Nd(LJh1RVCi7^_zGccB3;$s-)F?VAhlaP9{udVc~ zlMwgA1MX%&<}__^X}LQFmU(-Z(_($wplpc zPA>~a`T>1PIy-ErUx#1QyG;q)keqLl!(ZUqxHt)Irg^ZQ_|qg3Kn{P_rvN<***Tyg zZ)vg5JFqGuG4tBBL?2&@kDx2uFnY^T5Ky&jd zh7k0&UI9S?4JdnwX~WoNYJ#^-rW&wMG+GH%;3uiJw!pAn0~n(P+i%bz zh$C2Ka}pXb^C6RaCJ=8H!=~R*eBcPM{|sgdUU6J=I3Iq7S2bEjtXSGeC;-e25kMcD z-|LjDN;11-U!TL1c7@6-IGO^I zi^jz1s8JO`KoUo|%4%kyL*nVe?EUT{MM=-&^696Yg(ORvSqejG)Ehd!y>eBoAzG5m znFlfyl^OcS0#oWgP7KaH>VLpRlr{cUewn@`&-Nt))BwM|j}2oUr&$0HKj11#29Q~| z5CGc+JQzT|?2Fv2LITdMUXe9RE=3*4u0h3b4byk~KpRuS>`8W!>KaruRots<^J7qO zB%&6RK4q3p;JTB{NDJMm=cHw7+ul;u_}m@5LI+%%-+Ae_Qx_)_%UhRYrx02RtVzHS zbK4YECu>{bBvoLbYa-TV4I!tfUd&K}`6?~zgJko%f3o{>h0CzgWuBqSH1~)1*)rYD zdtXk*zhGfM{M$55S+c0NQt`2%Ez^8`6&2cxJSR?i_}74KfV2E8f!0t38B~+YnD)$i zuhxzcdF8#-Qh)M^J?{W6&07tvIJqq(UOsuP{z50_?-VLMLcNvccbN(pkvgsBLjsQ@ zX9@11shus`<_TziJgH(U{U7jjS?@C2_v5UW7uPD!|G{>V^6FP8?~L&`eNUb?u*MXz zkfd<*D#Ru?q=rjPzb2KO#9UkCb zy9e}6DM#Pn*kpZb$`H^$#B(=O`3HaQDDM&(QBG#lOi%^~27Lx$DKsjdpr{{n(LANUNhCA%M_HX_CZuXn9*pYer}MEZ zmwo74ef8nP$Mfb0?tLJ%`?g|dcaL$`3+cDteKscei2g5Gt+iX$V!!+uheNCBcd}GR z*!17mhH=XbPC|&jPA!l8dz~Ip3sZZwbk+ycnd(vB%QKyrfUGVpU3qai%S&F@dtgVU z2wgV2@;_39C~VoW>;H9?Ir0CMKFI!UVen>e;gHMW?5LGY87C$ocW@V?P60l_Cd~z! z_M6;DIyVPW*%pK~>HhhXi^auDzn*n#P0fxuj~!b*!HvgmGPPMd*MYEhQ&=CP_B{*K z*3NAmKHhTG3lqwghO7S>aj=xLYEkZ355o$0w#zM_Wy`@BH z;i-Cfi3;6WKBaMpoj6(0)$_8W0rN-(eXAql!0NUuT$Drk?q8IuFwfGoh>bFdA#?=- zc&QpgPZ4mChvm;xTI3*+xhl6?xFk@J6jfitrl{qHr_iUp%+w z?cO8CC2w33^Kt=mirR)z>r}x_=5<0Cc)4Fkih23kcwsK74?s$BIm8W=rXh;Xt5BWF z>^%81oW}}{xV4xCP$W=&DWGc)SKIQZHwOq17E{V3=-nl4b=8D@g3}=XwG^4esm>qT z*Lc62$Wy8tL0#vl7>@+Gkk4?vmKUe`f2U4#M1C}&g@4x`L~2Ex5b1RL@2O!6FK|6Z zL|i;9ef7w@RvrW$aaG4i$KSHdzx(~p!JgYp`(Gwc3w^}oG}C@bD*yY8#ZM~4?sx6Q zDGci2(0dixK=aO>L^TbYqu4jh5`-v{g~GZKaRZ2WvWm)k(bwYVMC|o1WDI5P|4ZPM z=8tr5NG)fv_x^}>e|U#I3N!YR&?KPQ8H0jU@vt9Lo2*RJpCExBxa89sUNSpqH=W)I z^tfF$JxDgT3-&cFdwt^x?Y=Y*YkW0a{X ziSBxKEm1OUDao)A=u~if6l>`WC%Ur!LWKYSskxAOd@_FKch1W<$OPXxD%0nr)P>2o zaE;z0NpFb4&U_U>2G3nU+ij=d(5MTaux1hJoJhelman43R`&4Oq>uhugSOD&%!cK% zdN$_zioPhOsCNu!&PRo|(N2S5H!c^BFBnq;xn5cb%^HzU z1-vv3vjtuWlMLAMo{;e2*MBNh++eJ3xKS&*H7_w1z#EsFwS_ta57diYx0 zx%gAlzI)kVi4f{p%?*x;aU0m4v@}iYFe;mR#qhTzk|Z}EdZxbBC4Py(_>G*NnK`QI|sJ#sv6)S zUT|FXQ;1u88N)Im&0dh%6!bw=3!>nZl(MMhgOS(A{76CmlLv>7K4(F+@&o56ND~-|dtRO+`6x_N+`% za*nzq;Y2csMGHX~*t)?-!`cPbOb;juA-ce}StUq)7-p`xO4jZ7i-dB%D%AomBSFNI zI*t_;68qdEKL_6=bb*0=_z$;c`0m(I2v}lZtH3sfe^En_n8MfezfL|HK9g=`wq9#1 zV|#KYg9BexzNB?B-W@V`W1n6SkPti8ja*4Ah`e|l>qE)KmS-`xlV-R?XOb&N{Sz^) z2?pGh&c;0=FrE(3p00j7@>K#a;ljZZgzf8y?TvjkL`+WB)4G&-N%Ip~7Pk%2g{i&x zDR&O)J>LC3{Qp4kLP}{gad$sv-=w^Zk|x7dXF+IaH06W7(q_~&44b6UeumthrF$L8+8VxhNiuEa3khI3d!=mY)1ss& zEOwyR+>(&-^Sa^^Td~yRtfMvz7Mu6cWuh--44Yn|dg(+L)=4SG&rD_;<~1Wg<`#>o zJdE!__#@`(vjMZ@Jv&rC$fKYXg40}ej66U6b1`D6q>to1#6yi|D8)H$7Zr-yu)sfN z2?8THaR?^WLKsw&&i(p{x;EnhI)E*zx%QFyvE=oU2(qt^)|U0X0e#{C`qL4xM9~(eOAi?zLxfCvSoY(SQ^o(ZN!>CUhVX#pmuGC( z{R==gArUj#3=Nm@l{Sq_{GhE@9dnWAk?az`JNX3$&%bEAKag_DyW5So3l6c~I}rCn zff+ykrfN)M07g_b52zK*+?a#6<9L83-~OOTcD#Hpd4429T(xNfWIiK#2uCJd;KCig z`9Bjj)1E$IcBF6O09+aAdQ5PY}$Y z#%I0yKtvBpL62C$|4VvAk9_`_`($tzx(bCD3GPQRD2N$o7b%GT=-Pz%*Bz(PgTjeI z?9%8!4g3R#I(~ZabFDqG8RE3$LY%DsJYMvp5QrgBFNBB^@rjg2=t+4<4rEg#F)Ghl z)M4oXe(wYXB0v=&Oo2QgQzYIIUsL!A4E>yn*r`-_h-s5 zsp)Q)KnMK%hVrr`Ck|)qid(i=z}=dBS_772q5oZRbV^cFfP<4yXVJC<>@S^da4Uz) z>EGF4veSpKi%GhM0azIwoxF7(iGHy&Mc))G13Zb=?~0Izumu7N#EKYxf-nlGwoz+g z5O!tYIXG%>_>?T>ZBu_pD#DeyYPYxP(-mR8GuZY+COZL!GSMTlU{IQ*B$F!Einxob zBH#?M8K5k$Ti#4AF8@tcG9YL)Ii|Jesn#gLNk)k#;t7-$X^84q-eA4lYn6jm2e~n} zuD!pCH!qgg7MY?xa;}=5;ia<=T04W{8j?{&h|y2wr?Sy`JXX}R4d^Qme)LRB6lV5n zaO53K;HKo==&y=+C48GTv}SpB@r|DdIt0tqm!rb-!?DDe8)!2h>qihYtR%)MX#!Yb zddCD2>hfy-m$|z`5YcDyoa$r8D#a0|6d1z(bgM{&U-#oGc>xIxO5soYfmrczYC~Cp z#Sex4iU683)24!1sVCz((FvtG7gx4Ik-k=GhlXq?9LKNIq5kGGI|w}G;k&(m?B{)7MgEmXU%39C4y5Kqe?9!|0?m_BtIVc&U+G|gv`&aKoXdeW=H}KRJn97`%^Fu8$)CF| z$Q)qG@N{nXnM79@cA~voZP%&T^)j9J_4M$4Y%8mAp5hlZ+HyX%E^G18uMN89I+b7d zv3435kS%UdS83F6K6P~(P=1xjzw$b|0-~j`gHZx>LP>Axnlo)ucd%qLEVevGhBR=J z;~+4=(>GR~C_joBL1KkSxqtn{;f5l^_hxsq>>mq~rk^*-g{?lTP_1ADKx<@M@d_AC zFA3NC9+UhMZdRQF$`tzw^=7MDzwCyZd9R$y+J$>`W#zU+s>T(H=Vk30#ygv7t<}!# zg+{F!X1Pki{5;(iJ88G#n0BdowG-42u|W~5bR)Pcft~419S3sdxs!Y#BzneDhphKBD=!{=RRtB1+J> zJhU7o&|F@j$_50D-?KVV>R?n{MUw>U@ z+U98l;hwSERd#%RwSV<5@Kk6kZT~RxfP6RqfJitBy{n2G3OGwbQ6b6{HMB|Li?RVw z2~AGBcs8s;lVUumZJc)Q%hjr`#f0{%oSWkTQU^XE&Nf0VbxY3d4QFU<0sY{4qnvlABet zKI3A`4i1iHP_19wxPWN@6?4@e>40Z5$Q*Lc(ARF$vZ{mLywDqB;VgIZ?y9TL)oU@t z4$kmxMQ_sARs7nCql5-axcbYWzj{sa@AGx&?=lR?d(AiCS2s4CEj>=ks6VR|`(9&G z407Z3f|N~1BRG0(r#M?BZ4~p%4-}eapdc2R1N5Z+4GSEyq%02;@;Q z(h!DKqq!7lA~>7+UmBGYt2$Ny?G|j7t6&=nxqM+7Ux}xHWr(NXqdg7^N{XJ=PuryD zYEHo+hnREydnI3?doTOif=JVkVn1TP7Q@=^dbIQ_N&sj?Ck(f2rB2uj0(nKQKfMf9 zYv)7Kd}rBb;Aj@p!|@4GeJT+J2U1EWyqyMVziJxNh||O`wLl$;6%a>2zM~g!r$wl| zoEZi-EwwaM@o{Nn?%!0I&pE|;mib30{q^T7T@xBf&{v}7$>q>UtrFfq>86BeqcjY7 zW_qEJsgYhAC1Ckgr0b)N(%iqj_X!4_k@+R<{aJM*N>)sk=@@9N`ZM~Jr`Z`tR#MT| zgt8_}<@Ald_hILcwnX{m@nBd42W8h@(Tzxyy-;Ns?Ii9S1p>>jo$Nj14UD~{)h+vm z@0`Q%j&YtCDZgS5UL}FV zq%#@Pi)kbnsRsr_tZW3d$rSLe;+K45N#xS< zbaRc8MVi1;o~jkexEFBPF8KcMS8FyRR}AWRMA=ehHw^Vb+nkB4=@^$>*i$G1-@2I{ zE+53WshV9qemB%BM3f;Plwq);zad*lR1Oxc<8p>HjyoQeLCJB$45BjpmE>Gr>%us< zfvAqkq?X2IFt|3{OBtl6J+aUir-UoBH2tLedLXzj&Z6u zsSXrMv2F@J;0;(y2QRbF-(!A)FdvgHDk^9DLH!4%e;go9qt7bnPVI*u#3}uDBZw}# zQ|Td(<+QplX0Wp>RG5_WyY#sER56NF6KN`wD>)0Xrz^;?->8!2qXWGFku`J!k(QZ8 z9p|#-^>f%qYGGJh$8NfdIsG9@g%uQ{t&@m{ShJOFyMN`!`JSb0btSp?2zm1)wrxqJ zw%J48uEhE7a%|4ivKq}@#pn5WAiYn0@6Z<+d`eg;7rQX0#C2%Q%}aJ!mLa9 zN+)8w`5$Pw&=_pAmBCa(AiI^Jm-6N^R;K;LDn{ZEfSxsknD?GPCQ&bpH2?AY_3$(T z&M_cKCdmIz;$@jcHdz%J^viMr0c7`wAh~F3=&|f;{zOlNOYCUB8sKCB9k`TLcT{t1 z#)(66#WRt)x%A{@9nD}!kGf7abI^81jjU_T_};78o9V@c&7sxqD9k{8H^rz6=E3@I z%Ev>k-CoceKr87i*=|M(pFxgQo-=qiI4$VjVOv=C)#d> zi_qWO`0P5>vnyNHW4K~-ukw8DOka#udSwYBDE_a1?JlByoKz$a8G8&ZxlKTWR!Q8& zC0JZsP5u^OQw?+t8)Rp7*;xUxW5pN>W-;H(F1EW^6Ho56K9n;`a2l|5>+C+6QBIX7 zurbReb+x_|mFW^Z7xQb_T@_N^?8DJ7j#)tJ<8mj&8u0+2;GcXJ(m^xW}316j!GH1EdWU{PRgk==I3wgGb?@L z0re{`>Z9xhH_pG`wxQ3n`Yd9ONq{#f&8_AvGppOP$h%WOnYv;(#s3ua*!5XFoz>GS6IoGW*1>QNsu@Z3)Yia7A; zJg-1vU98{g^d9BfwB+d~O&!&J6{RaT`Nf22Jt5`!8hi=r(8E#MRuYw0_RFQiKBj{U z>}w2#KH+kd?eZS(`Fsgk$e|rK#>B7yVnWeOSwplYkLK48>jPt<6GW#2#PKRLwvl0J zJSWSLPe+s(|6{qWuVqb&{-=?e^eZMG&~h} zL&QpcjUmsv!_`czM_{#bvM_>$N7K-_Y8O4mg!)+@P)sz#O6>Y>yFt3(E49IOs=M8M zO10etU9k`#9BQI&s)NxBXZcGk20>Ij|k8}l(bd(dr7yRm>`r8zfri zr<@G#1rZuofOu@FH3H$(+e2g?(OYsrMyX$T&vgOI4z<60gA~^28}B1ZiL8kf-pdaa zss$`>QAahr?@|HaqKwKA>0Ddy@&7dBD(TOtpUc>m`m*UUw^{WP1s{ICsJvzHnt&YziiyVSh8xQVVwjSB zc|6sYRoJuQH&uC9H%_UB)U7D~`e_;S5iAPs29duKqxx$UmmdA0t=QW01+$fd-^JL?O7_y;Agudx#*uxzd_obk=S| z{x9X+Icn1zU4yJCJANLOAT-H)m)E+-Ys#`00F60;R zVeToJ+I!s~w9foL7OtE~$K66BlE>wK6hv$=j%VYDHA`6bq@S>WNHxzm*{+cz{^<~M z#d`#2C&GzV0&n8%2=Z+FvFB#`G811M<+g`8^hk8%V>xwY4 z=8S{}c$VhFHBJ0*xGk2xnexCLA1LTTEm;joK)@ejM0A4r9mQa( zw%qifyFXQs?&xVQSOo$f>W4Sj3t-`h+oH1-`w&C%`gmobc%(U|e_o*)=9t`9fjweZ zQb*uxWVYdGMQa3KYR`I#8rI)O#hlM`R2c+qr(bk}IUdZW(vf8c`GXU?>gVt*uf=PL zgdbu_d%MmW$6T;;F)j?PIldUNOTj!G>T=9{J;#Q7O=TjemV3#cpwIrVSu#r0NM^_i zYAn%VzLOuHwIAJ1|H|$rKVulXncEQ&<*`ryn&dhPI&euFf|VDXIF7N8RlRC41!52T zEQdG&gej0IL!%SSj0o+h7BUMUNd`$syuSW>|0{{>pWlF)P?D=0d%?}Jeyrg18x@g4 z$X4sm@@D5sAck)$GKoint9XX-C-&gw9z}&Q;T~R@D5IANX%$!P3Gwbobg>9?x7ZjI zxLOTVq1=U*R(kHn@=E+RRJsj$3H=c`JYCjHJ2K*9o@j<)a%9~4FzG&ZtT#BXk1Tz` zwQ9@B6sbwm zM2->+P)UBV*8?PL%>=p!d%G+vkVFu+YH#^{?*X3b5P(h4{+MY`FWjXcJ6p-ejRoFC z2V=U)tncTti1wOLl4>c$w*)jT01mhT38vxAga+0h2mvOk;QN&-ZZ)g^bhAet=_|yU z?jVu%U&EaPRus`_CdgXsSpAkg{?dj$RrzP(!19z8x|q-D%Wp4*4>$UFxI{>YTbdy6 z^#*A>Tzlm9oONJK(z81_>An9Cq&IG@P=;H03LUmrvamIrHSQ3xOTz4-=|DtbxX30F ziNbX&lM9<*jwSa{29~}<`vYN|D`v|wrJ7X&#N6axVB7^sUk{8C9Sw9x=1wFuH{Ct| z+l6K)l<0z3XBr%@SGY9gevl@Jt%8ti@Ek^GwlJ*z#1f((3;D@UDpZS`Si{_rpKm{8 zui>a;3wIdaU=!;NQ$($6W5miTvoGY)x$!g~B1f2!hXNCpI8qQCaW)CWxPU@DUX%cv z+&BQiqHKRo1gY1?B7tY^e#8IG-?E;yLaqr9(I$(Pn5dY}KbU`ei-MjzjUX6o2>trR zjT+SSYVWa9Omh%?u8X<)Md$lV3F!;{*$|Y2a#0x@o{v@!S)gR;-!8V~lycVIV@c^> zqpZoL{>6Rshd$GCX=G;D#Hv?5eC@np1G!ZlMQP+!UF(XD5O)z<|1}EZ6yQtnWnyfd z9APfL9rJa}66Y)!y6L_@c<*a2&xu2IilKf~F$pH#5*BBA1I}~mn#2R{4)Y_1+B%{Q z+70;I+^F;Ed&!j0@haCC3BSgZsMpXTN0Y?O#y=pPM9GF!GwhgoSL*4D)zNa`CtF(o z1b#a{-O%KB(urst;bjO=tZB(`{eVGP>sixuwb_f$uD^)2YYKt(r;uJOA8k%daXBPz zC#)6BluO)3YZ2zd6yWlOMG(EKHonpFCKFM6%QnaTg-q4GR91en;<>VLiNc$z}yu^I6U7 zTm1rEl?a3^X1KvPc!6aq33j3$=~c7bF9P!@gUEC1O0J*#jw4-4H1rdzt$fK)~RAUoud0dAG~*)JR|}> z#OatV1CF*^v}17ST230DIc8{OjD@BMgX%y;NVwK5>QnPVhhh(jmXjIsWzj?vq#i8GjymM{!B6ND7gS?}4~msBLj0 z0|v2=`4c??daVa@&Re^`m8fxInoA}S7)xr;xCvO6(LF|&ySI|6!T zE743QqHRfl;J~<{LKR0oaA00&S#F>W-0>1bir*0bE6GRH2%M($8@ZfO>PO(Q^HsS9DnS-sK;;f$Y&jDIpoe9cR?PJl zQnqtSj={)*(>nkF+!1A8^qg;StueB@gK3z2f-qbq99uoW7#Qh(>9$JKqR#$*67eq; zI1yZU?lgicrEjD6Oih_)J!_r*(H+u8uJQ3NQnuUnNX0!r%QWjJg zf01Ee5B1sgU0I4`R|N)J7@yu1zT#9SCQZ z%QfT72EtSSHGeb}?LziKB~(p6jG1RHY`>!*CQ+&z^^MBhNb+7muG>U1Mtg-a*qHZk z^ruw&kZejJB-OI3xc`T)ptI}gD%X9=^GXzLqvqw;wMl&-lB#E@8ROtZu}scpqW@vu^tt<_P zm_$AVQo}Ciy*qjk{(+7l2M()Ft~1m3wxbQ zR6)(%*rgqjfTRw8WRB_F7u(F*?LrY(F>$|QZ$1gT8_MJL6VzbF->B%p8nO{i@B^0c zlAVk^AV4V$SCy|Ep9&1gMkyJL6Fpk*gpSzoqTD3jlxxtEu^Kun=0eUf?TPr_wco5> zW29=07507US;J*yedpR-U)hK)G{_CKg`bdF1V9kZ2^vPx``Pz68xQm$;@j?J(ll)z z9ud>g#uk5N%{P|)z2RXl;^$eXPnk6m@ekSC&9|Le)+MtZ#(t$@mJ#M)4NP93m|0ZG zX4+-pUJWdKm!hK?&~$9ZJ-i8l8WBSqaGx%ag~Eq*h6>rriVAuTbyD~n`AHJ$q>#mm z0?`|aGZi8WB5mUv&?rRJgB}C2y2==(okOn-9CWHPJK-k|Wo2s0i4<(>HvwrF^c3)l zj5iyMAxJ_LOncFd#Pq&HNbAEl!mzR20-1@I&_fGIHHd4Pc{P!+LYTZ*CVoqiSFgB7 z^p6?rLGMKJK8d<|#2!!CbMsMY9a7ajN1RH`5i4q8&u4Y`^#SzfP`$t*H2HisqMFN} zRSn<+-xYSbLHWXq-iN7nvS;z4yw5af`z8AGETebZbmN8@$6QX;@&1NkO^e0(*Zbhk zKh27FlAV?TGp5NCZ>o&Dh#B>VA#)FbNu@pEB^FJzKVv#;&j}Ck)_b6vHM0c8+RMM- z7afl{fmFzjU|p^;-`}O8P#m>Dc+8LdoJU>_(7(wV@i~xe#w^yz?XNgy)bF=^q>W6D{csHs7`$g$l_EOkR2@RioHVtROK!K6%hy26fqhw+DC)n+VD}lUy5>-{3$_moqw3)h%RlIQ|axfLe?rwiWB4N zA#K?}0C`0A<97VgSG^sdU!yRtov-+Ca`zkIf^BB9E$}2KqPE&ZRa6-=nHB6@037pg zM>O~;o6A2StOD>Bt>Qkl_&$L)ZAg!V8|Ae&+MqCHzB76$sV%Ys&XO&u%Ui-J-OFE+xLmDhx#ku%tbNa_pbi!n60pm!4mDdH zug&042JXx(Xm_qOeMeIn?sM?O^G?&|Wq0;YI{8#4DKT}>6cQJAX5gb_(5o3*M$-9Q zcdBg~JyF^nKs4&jYt;(v*h)t&R~cCEcY#w9E3H8}5=$=s0!A4kYE`5FNbVEx#{bo& z%(Bi@-+1|=`dYs!OhXrHn1-sekZ7IY#lcFbIDsyDO&=!X11c2x%++YjBB!1x9aCp@{J+GEzE zJYDg^Tq(AIhP&%55S;J#K5fz5zxd`Dt^!I!>yPA3Np)FTeIGi%Exg^GF)Q@)4@|xn z>R&>CmD67OjCE@XLh8}%sH1c+){WDh({-?nO;DKCX-`d)ovV)+xDSqAXpVLPf$395s^>ZH-= zq;$FoY7qdnaS%-;+Koi%!%Noe6+jILC&W}PziRZ?g6r06H+AcyyBLJ2 z?9<_*vOWo&uD4Ia3E>hE7fd3yO3%A-0-XqAWqvv?Y?`mtUlh=}x zOUZ*S;C8VgdCr%#zBUKk$aS_f(H1y$6%jR9z#38)-6McSRO|+NPzgBtNg*NxJfeag z+(0E@YIj7`%mS99j@sd4%SNU2U8H>rN#0FuQE=upOr~`!?C!BB z#`;FMXX%%vqDa;F<%K!5SNpY94W_0HT$v#)PJed$3RmG(O%4NL+3TL{lgYV?jBTWu za7#od{%m4sK4?bfqw{?^`~D zK=Hcw0WEb0q}`^7(0jk677NjE4EQR08f)$hokj6yi9}{M z`$-lR=BQttMe!PmJvyndjJc$lf}UKF*kht;o52nWqr>E{ zq9|C&V)Bq5C0$J^k~B)vhu!Fr*bzp@uZ|rO?RD-kPOw7WG*0lAu>Lfx52J_henFkR z&-q}ENN~6|Y(m;bttN&rp$>PV)L$nQM#Rv1O1$LLp=#H4svhX4WCh2j_c9)+fL6wH zRD6`Ip=dWqDL9mb*$|}x$+q%>ko8wZ<-$r^e=&0kCh~Ls$;r!a9R8+V+NmV^{LOq@ zN6KdZy3l2je8(*c$YkTuuUqW408@n@r-f!TzKuz?%!TJGDB> zNuesv9`VXZT)kZamj}?XQ9pW(x#K!lPJ1 zlmK?k)$)R>nYcX2@@{^1 z1oe^r`P_vWj0>@w&>hHb_vJ`2z1=5KM~2XZgo!7BMSyniv`AvY7u?w|eSsEVgU%uy z^%<|KlJd$LL<~n}j*T=s@F}xD9!7fiwltpaDLhed%=N_~9{aX&`1@7h&|NHuP5|hV zX>_5U$%mwNJ+mC5X3;#Fo!A~uqm{x)pjMIxmLS)VqCi7zP=}cCYUbo{nTJz5@{wR0 z!&!X6&WZ!H$RAkz(YSrbFW8P+2~GL505r#mDaoej5d#il6k>f25myjGaZ@>Q839{! zZ8)1a6_${mJVMqx&>i>L6m)t z9ghv=J6@=umu3|Hm8`0B`3h+Q7CSztcrmUPeWtBqDyumGw_2J`oz2cV?eg>>pYMw? z`0S|;74bTYq-MJ+L&(!+` z+tA6+V2V!2cLdoCspYKrEC+#?C^}HdT4>m1_MlwF;b2E`-w(J2dZ!vP9Q}- z_RZ5Wg5ZKW0!g73Qq$bSqNCjB57{7g7zS<+srGRs?isDO)Wcu~WtIrS(7HY)9B)*! zr|dL+j>S*?Mb?&))GDz#$mmS^lVfXWWi@cjyB>ch++dxx`QWpFHy9 z0I*UJVL==zzK`%qMJ7B_TsikH=scLQ3oi(NxV!4)&at1guwX}?5r{6`4A`aEL0q{C zi!nM#NvK}qkW;ky2Q4EDK2g;h=FX%cJ32$0o4vms%_u1{`SrRFL zr4;?2Po7m%m8DZCKJo~4ggPhmcLgl_C|c}AYsumb+D1o{Ec-kv)|OFL<4sDPq;|_P2OpI=b*y^Pf5{#pp$PB0V*b(r ze1}0C{Jx{e*j9(6k|GeDhT*xEbP%!{EP+L&P_2!1fZcd9d#t-N67b?sxd0%NL81Sd zpKV~t-CBFWmos@h2KT(9LYX5y4lL(F$IEWPf>&lm07U^Ub#e}*kOEUoDuBMC;RRf}Ipu4*A^K z^s`Ma`dftP;fwMDKK_KF&2%t=54NkcsjKfi8) zUt5=~b-Hw{hd9IV3_S9vaGD2|6`5CacF_JDd|XQy^7htnYY5Vkb$Xd`$J#!6Ad1zD zL;G75k1+v)7LWe?>&VFz8Yiw;-;P8X&ylXE7vFfl#KqH^d-zwAAJaeI=2%VT9ac+_ zapBSu+Dq0Yce*>1$MeM;R6ihNd614Wasm#YgHd9^8J*^Q73n>IY8{@#*46Lxqp&&w z$Vi4z$~za=?J}3b)tD`fnwf9!gh-y>HP4ww3FdvyvPPPHvMM-OpWdW)U)>Hbb|PtrD;0UB(iSLd9`WpoRArNnZF$i*i~_^^Y4vlxvSW35o*iJg=} zDIjJ*lcwYo#8m9W?Zjjp$nr#?%0TyB&c=IYf$^3u5j9xwgw zh#~;}o%Z9;DsH6J74zu6PNjnVOrYCVu^a_X*(_->Viwk!bKh(FxpvuD%ex=BB zP<;Xz4;Pv`Z(kIen+)qe=<9m88UDfH`bFULQ{up}VoTb#G-#Wi&2nl8hRT9mm6XB7 zq(~HpS6&J6+mBnrkn9{3WAKMO!j5{tZ$+KDZK}+`*bGfD{>4M_dT=48>MLw|+;{dz zLpR>gK^+@JA|4bKiE~E>QA)9e9c@3Qg!8n9>Y8)@GZCD4aVot_?2g1}m#d?H1FfwE z0fKY;%Mj)4!V_7MgK4BO%dNud$uI3B*b`py3essBe$+3H#(7WO@ZIE|S_olf&Ld`| zXfUXHx{MemNU>szKw_sAE;Q!<;rW>>IGhyu^D?c>dyrMzNstg;S6RNiy*H?F9pf$VgTg2YK!vyC8UhGPQGfSO$S8>YD@#kKHun&Y5@Tix9cx z#*@g1$w=5?kP~VewX2k;FWTCFBJ{q0Bu>f5VSjTy@m;<>bSN{?22QVeTd3vk)@P9x z3#9!TV&Wn4kJeZ4Bw4QGF?d`$hr1}`h_o{P${&_^lCXT*8H~$;V9|~mF%E5A9H^WA z6>&>a#0@b9edV|iT!GD>YUeOneu2%Y=xEdX|CE5mOE(R9b7);;eN;na?q>1e5x?Tq z{)G>9oumYf$1Y9=-fImE1=sJ2r#$fEwSe_aAxeQRye(65Fd@f^!Dee#eMj|AjH0ml zGmc48Aczc6!1aglCW8h!#F>KP5|YzCAg%MdbfV!}2jmql0EnU5PaK(Mg0QnSK>);x zi)>)Bc!xVF6q5A?sm7{H%?&*jtqp42-oCnrSN{(rbUKtUWlwPkvqI(`QQ0~m<@r{) z;-+K^6!c#N(W(B38~zbJ-mjA7$Box&vaSoRv<+R|F40@+1qH{yNRx=xDre|E?V^X7 zR=BXv#meR@WAQZH8H{^r!efqEM1pHbnR&gUt4{5C3)E%%yYUJYNh~$c)Ufh(Vb)*= zbDW`YoH@Ys>U#vN3?6dVw1+VlN!FG(QU?UBSmU>RSHD`PwhYZKKxm{}tlMjbP}tkq zs3v^}LQ5c20FB)V&wC3`LgfSEP=%0rpv2a}<)ml?gQ&^RwRs_R{^?TANO1K!T>FMi zd#-HskzfSoqyll(Mdh{;?=sd?zq-B1orvpv(@ecPHv~nMdO3gj-+8g?P6UW^&fg~H zqX?&2@}?`_5FXJ{qH(^c!cg=$>L|kzd((+15du4l!_VbQFjaxv}nc3NGAJ`ot)?e$}DkA}7IP&LC20?@!ga9Y;@Y zpe@xPP`q+73$MbU^7Kz#@8g?W3?FdyVdfb-gRf1b*C?kJ&?P7Z$j!iSc8}yRChXCQ zAUAX8`!=~q>*?(21alh6RmE}i+#3mUH#`?x_Xc05$Esayd0b9R4o&2z7^^=bn_Q_C z{WbFRJ)*Ml14XlHNcya|36jKFMuQbc($fty1iQS@>LZ#O1A4ishP93;&Irb}p;$zL&Le zo^ZPMe~2kYZmR_d@L9{_GL481xfICyD_#@Tl^PE<53c5;c@)mY2rmu{mWL|*Y6U6H zXn0mveB>HJ#g(crL*e*?_aAM3t9pfegWM~IhaTg^9|*tG!l;2 z_(d_mt?#4;&{J)PIO1##BTG_PbTUi)^obPsFg|s$#jo-x#={Vo+XJJ^= z`6dI%e|SnDvr;wXR+#;qn>}>L{y9k1iJR2{#1YU>*)jkXO*>ibV8e&uQ)0tqQ~bgv z?%LX|9=If|;e3-JWE!yq<}mO2i6d<}CjSEUMyu8|;^H}VeLb$x#c;scclrDs<~=n| z4jsY4kZjKYCx4pL!zJ2_KPGv|2yni9cI!p>r4) z$yJLYtEUSfhwa-|-D;Wvg*wrP7Y-X>DN`J!SAOMb_D>?E6gYb0)D%onx-VB9<0v5x;SA5VAh zo}OZG`G5L9Zi^jG9L;@97l`YJGqDU{&j((rC?;=G-|a4h$>`GljX5zEd^7PIpI*^j zTk&+B(K18%II^*Q|Ak*R;6B{5R3s1m!#6;6<*I*~c>E5)rxOn=$fYG2KNyE3X z=LrD>VZZkelRVhR?iYS&uyh0Y*VE4}i!CDU%KsR}uAJocf=?;OYrlaRNNWOhvl<{k z=DgNXPp1rPM|fr6rz>9Ln@iQ?*a}VoqLgY=hzZeFFa{8&2PVj4$4-eH@=V-lRJ77Vyu>+`1D4+C4obbX)G}8HEtV@aBWkRkv)r)OEbot? z%$-9yZvP1^k_U+^*kNGNjyGtzEz!Qf~v7$;{#fgngpx$<=ZKg-dExNqK%{v`@^cfEm3sMVDW zOMyHc4QwP9I$q{U>J_l!j=aEHf)g=SZR!#C<(0=M^v{#Z5HRDXuNHYCzh( z1rb1@^tcFAQwk*eyeq}g5(pm+JI&F4B9k=BIb-Q2fqG};7(l^B#foL8V#?YjmPmFC z(?K-sV@;G4c5&Q(2eb307a~-7!m$3szhUwlu=*c5@*C_aI`f9KTMTEp*dd8A|Mk$6 z*D>glKmq)q^N@kKR1lQh#g_^z8H@+r07U&q`M^<40u`@( z&-l)>)q3zZ4T=PLWL}!{1yUm7z~3+^?#ZL`>N#Hs$L%8tw`N{LZ`swrEHG9>2Qsbp zORNN?B(;oMhC4;d&%6b?DI%%o`W~Tpk{NZJecPa(C)sOI$1Hf)DC0+oTW|Ziec&V0 zEIDxXjJd5|%q`^-HFGibM6IE+-rZq|@y4e20!bHSM~+ZL3WU^BI37&omld5Hnj5$< zG&gYKnpFz~L%@v$RPaX?Z>ob%f2dt*2bdEk^)9MzS;6xsLY zghOxpSzl656ibXHn+2MPn*Yx7ThdW!U~^p^{MY5K^rI}l00Vh)eaz=W*bq#GE%T7X z?Dq6x7D}EHmIKz<7EHwr5J?40WBF|jj6hGXoIgGtVpSqn+8uJ7-BK!Nv&95 z2;D~D`M_EX=IGi*x}})p<}ge2ZP$g?rJNGje)hie>}&IZdGAVx75|hz85N6o>fW|W zd-CTuy9T-ZA?LmvdbIIk7k_xl|JK!y-Iwb|86>Cb1g#Hvf`i-3jMm zl+!B2*xiEu2evotz+W#@sMrWuJ(_&q?WIB-I&h~D|IwdiA7X1h8sqfECM`k@aBY0= zGW#YfN`JwnnI|bAVjM3qelagz|IXinwTxO6ufvEt*CG4abC0w6srY-@@qx5}Ca()cDG?#2Twx`ElobnK)YM}hwu(^s_Z)d&^nY3A$ehvwCmbkO7tdOE$M1|5{cKzHwZ z=dR-aUO+2NIwojmGYIc1oX3~R{~t{?(UAY5J+Namk!>T2Yo^uU+og861!HiFJRSR@ zPA>|-@_#0D+VU5kkwPtNLpFBiF)JkJEX28gUGWZ>WT1euO?b_;8oNvLQY)bGz>c|Q zg!(V?0(}mHP$r+h&g=p0#xucNuhw`u8fgLySNO8~XGWuedh z`r3b0W+pAwAxR=sex9qwtCvbWYN%LzW@VIX+IfKXUKKDZ;+66|mrq24#|Nma1WuG~ z>&zb7V)6D=?chiK0Ty{rc5S@tXFSX8Bb%-#;vpod#=a}hvrOC{=O=or0=Dgo%Qc^| znG<0+F{9|sG~}j zs{eorKYu^v^gb6&J{$RVBrPSQ$U^fVGSg}7hq5Vms4;F*RU?tz6vooBXXCzwxiNbCLjS$)9Fzz-LW z;342KHM^_Kkj$U^o^qcLv$ZW+do9GieFVivLjV#Q*sM%mclrQO*O6red zZ~6oyeKof}v=&+&@AdrDTK)1$tDD1nUX0|m_%_d&wZE(;9lUt^mupreYC`-sDGiT# zZ597=W2wM9U|mCLpH;GKI$=RV)R6cXwYSPFCG_T#r7n4Gdp|adJ^!tO&_4Z&#|uM; zWJc5snGa%b{DTiRA2)i;V6nScyUpEGwObe~X^Dg1A!&7SlBED2sdDQ&HfUADbV5@Qw!p)rm*-n; zJg8Tbs@(|o?Eh4=u%6sj{#PP-$P9VV{QyqQ8yub^NY0kCLYM*45Xy<|jbYp%G#IYv zt`Qu~!a&+k9#HoO1|nwj<|hS~!4H*xRM2K_zsHUmhC@@s*7zLfI6?&l_{CrbUu=^H z>5%!5;c~xdqyDo(7xUJaZO%*lvk{OEryH@jIxh@(7^0*a+Q6Gcvc-HYIa?sMPoS-$ zp#BJtrW^7xf@i>tCt1wA$U*TJnKCjliycULkwo5YVe0 zv|gBr=JBJzyLLiS+)K)=7uhOvqpkjp_pEppWgo-`-H`AdwjJVWKMsoi`uLY`ghylV z_NO@@al(J}k`U)`QD|e?hE$OgB`Yjhm)TMbyAnSOnwm#a5VJoAa!ilY%Dk4E$8w^n z$6>Z>U1ljMIq&vPA8yQJNd&A*nwf8!7ms6BR5%@|_P&}7>*4?9e;aWUppq0KM!kob z$Z0t%IZxd=J3_}O^go_#gM^5QuLe%D^(t0jwIjbaSN9A1dk>hmT)+>jp4D7`G5H?| zPhXTHMiv#ku**+=voO$e=-rfOk>-d*9akklB=lS z)7I1yA{@;`=`doLf0Nnzz7q{DuPJrLuKKm22)g^tHF>YOz{8qo7_y3CBRdv1ynUTl zuf`8=6z+UjCp+M6+P9n&J9tBIKTE&QW60crX;+P5mJw=hIIR0!PBgPV!}2~0;C-KC z+HK$1By~)al22XU2ClB8Ap+RgK zlMNw#8X}G(aiJ*mUBQtP!g=!Nk-q~XVzNou>huuk+<-3mh`)^^L-+g0=|sKg{?*Q0 z0lb!=LoM#VqGzKLxhHhP)0J#L9A6i>J79Of+qLR@myv+*efUotz~qj6v#Wmz;!yqP z@#nzsR9i^9zXH!_iF=_5(#_n%taR>l*Z%-@@tP03vN|2p`az~EY@Gj(16GCd!-cs5 zyX4&4ZAfj^Xh2^fe~Y-lck_}Jo`&zxql4OYtqEQ?yplD8{Q6lD(d@Ti_J_lGb1;;1 z(>kQtH5+f&!U9^l=P1020LO^e8;z*|cJg>^m`8kPb8&|g=uW=P$~P|Vm~|^lj2ddP zl*=GK&t~Btj)Mz&!w^(08hCvX3G3;1lXnAZZ-3(+~;8{<4)gB*JS+MU>M@f zQu&^Eq2HuMf_bqsv~Ni3q-^iJD`R4AO3lAjt1{z|Z&|leT7*jZt2!&Gs-Z)#E5bj{ z%~;^dkg?CaI0H`iF0G>wqiQmk0d< zQ_t%)|G6Ef@36TKF=a`lOV>CB{MM0WS)Ply#N{=g1-&QDN={$q^|#OFL*WdDz~8vJ zGoC{<~)oP>;HF7Yasagc`P3k70a&d1?&Y;Ph7;bYv}jh&^@w2Q^Z@B15yUs-(3 zJH0a%@F5&v#BGg6&@MShY^B{~SHy+nwuWpH<`~dr=EP=SEuni%NB1uzEo7B2Wf!`M zSxXRyi|}M>DMJGZ_iHeqZ7$5%ca`;j0Q&n8XCqueDdm@?FwS%9@W_6hM-(978VX$Nh z{U6mW_4c24T^-zXXs*5G07o`v{8H&_zTfsWYN->mq4B!1^DPy6AUM|^ee{??`q@LI zH`QdZ`m5c)+^An}|IX2fodpA%qNLWIU7zB$aZshVx#oJaYV>D2U)S#6deHOQ^Jq5* zHwui*580&i86nKbJ0nPL9)IFns?xB2XkJ^su7}2{s%F9BjU$_pb)mg*e+5wL=Hrvl zI9Rrm+AgH1@#~mFaKJd3_mp56&QGz(ou2cfcIh zr}M#@GL_DlU-J>tiP8;lbSCyj|2*ZtPk&GFH+K*E-u(02oBIXJz+A{U{}Pgbs&0go z`8ev>(V->Tv*IxR_Hh_+&U4ec5Oy@K;DnMzb)gj!)?A-#e&{JJ(CVm9hl>pbc1K6^ z3SZyvEHJz85UtSB7i?}AUy(^^@!-+51w|3b?;m}GuFK?^JjaH2a#7A zHb`^q-ih?mTgTFS_Ukuyaqp8AfK!mx?MC!&AZ6s<4t2=PkvC@J;HO$~9uCaciyM_( zP6MF<*%FE>%;|s~4EwS3__6tnWE@S;Xdw$TgftBq8cUY|d5CIS^@E4(`0TRig;FdH zmT~bDg~1SXD)$;X|L(M}d!N&#~!S=j7Zh)~cS zaL8zVEbkxF0Z;6y;aW z5H}6uS0+W=Oy0{=HwQ3BCUijFF&eLQk5%0mwU9fN)+?^v_k^U z&ChAB-js0;bNUQgB(F5=OK!ofW49Cx7`|xfW4$YAn@zzx>FY6*UzLllp z;;;e-h<1b^WyB4iCmAF95h=@o=novPIBeLiYDj>o%5QJ4n#MF^$LPH2YG_fmL6Iu& z>M*-FbEd3j$E=Fe*E~uJP5C2K8IGEQ;@M9VeJJ14dL?Z8ws{q}<&rFkzyDTOXRA#| zs&bT*q?@~^!_XqKdBpmHU=LS|em$?2K2y+^axp=Eo2mcre@NaHmm#i2G51by>ev9?&%3`jYE?o6rYUDZeT;1}DN#+lf z|5ETr8X>|ddw+he2F>%p$kRdozNGWcN5J-Io>9BTVmghxhjR3lJN)gmox?sj>PV%u=92HKN5#kRb2)`#3&pu;oi|s!c!6rWPA?FC z8fbmmg8hVp!N-w$;Uoi@wECj&@~!J11Iwc~2Bj_rW!gQ2$ZiGg(F*uU*ns<+wd%Y8=-?|Z|2);G> zjX1mi!;5T$@prae{#H&_@5>9vj!C{JfmOJXsez8h{*^=Q8vzFr%Drp+2KUl(W#F!I~oLs?(2Fn>_QTYiGYbGoL% zVuSw&k?}moJT(3GDwX`k2QUaY7zjilFEJj(gMe2Aav)?g|b<# zVXqUz65$z+S5f7PM!zdVUK&p$d1}n*v0|gT3K$-7~$h z{$?yr@);tw2i(b{4Oxhwh%glS7$FWt{OSK!Xohc==y3d2wGI-o{g?cs(;*z+NU+hz zsi$@zHJbY0C6h1pCfImgf#dDke$N+pq9@`jrw^OpN*r$n z#wK&%QbOP)k=l2XV%xfH*#6m`08;+ytir;Os0D%W6C}#1oWrgYS2sfLhn&ehvjv=9 zKR98>$6WW@llB~nf8tA^*MRk}54__SdqhBkyTP_EhN0# zJwstcEt>P9ZfglaEle(Neh+xTU&roY%OVXxm8b%Na58&7L;6ou;D4fZFlOVp_O zPWDPtttPxXKX`YY{fQeA)oH$+y^@FC&(wXA!K=W!dZ}E^_t52V)VeN88!o_YoX4g+3h$`#P26!k}yV;MW;aRE=uTnVkm4q?pf z`vz@@)n>s5aqV1=v3K8b%=DK314tdIAQHTPjli-`kenUcS^9T;5i@T%7*}0 z&#i+VSWwH#?~&dzD5&z?Pau;r@fJTHF6*Fy?!HQTBs z@CPbepzr~!XZzwAEbKXmS&Xk71pI1uG;<@tHAMWecccBE1nqPwT8kT$>bUr%8m>?Q zoHbqyb|p}`xIxTLCRgt`HY9k-OMPao*!YRKk%q z4H>j_^|Ribe?fTXGkbyDPl1U$4haG7{5PvOvClGp0LSY|LF-OK5$Eh1kvp74Pz z>^YE`%)TRn&=c|Bn|?LH8jQ8p!)IbiRc%$tMEKaq_9vCBJT+H-rMN?0(%vpVHF?hI z+I-A8tW!gS?397D5L#li7O26=5VCCH;~#%qRkeHYfhotQ#ijN~9EQlA?jQ|BbFc9|F((3D>?>10 zrZz_W&Z=){B^0ise68d=f*`!Ko9(_wJ#f1)lCMe2d3G5uNdbNtg80o9EJz{vG9p<_ z*yC`(N7$SJo17W+ef#BO4OZ)nZ+})V>;z8@#jGe(>Gn!LRG#NFzE1Vi*{VDMO%}1jlfYgHcFc z5q`}ZyGwxMf$v)}f{1F@Zm!oEhIS9;YDExW?G6j=gPp;@Ck?j!lujiS$V)1^$2olu z0AOPf|7mZH{7K!QnpgEGv)pC!0~+h=rE%kJ42*X^Eo`=qPZp!Mwlg6R-KSsIcD)Sl z*LPjo8LES4bXfR}uEk|;4AwAFX2jQk={LcSt+X9n_TofpXNNQSge3d~5jTa4PVm4G z3^3UMljTqx>CB;Mv=krEk^6*Sk-07xfFW=*cZDVno)cK`RS-pbi*w?EQtFdLR#eBw zIRskuvWe!o8!hb1*%e5nX!IfM@mL;#=ORaQkX5)eV`AC%9TUG#{4qZM&54QeubsAA zsoNg!+CKLC*l%OoZ#}ln?%Vh02Y>z63t1GUgLJyb>CAc2RbGaT-0ko5R1T!XWW2@M zYz9>+IaqVus*$9{q~)ZYG{eNLz&@(W%ZaXJxk7ZNc129 z+Ti52GY^vK236KWh@?o;Z0eABR^p_rkbhlM{Eb}6YYL0D158+rMoif}9A&1BC1Wn{s0?J;&=AJQx*VeXb4` zysf$~`aN39Fn9$wXakzG!2sW`DrkcM%epF5qh2%#CiadLi=)BLEHPOQ#qEs|3yyy| z;ho+S^W>O{QFv+%A?gnf)#IdYk=hGcntE9$kwQrE|0_m1X?fj{4Gf_j8k_J=(Ck0t zByx14#JO@V66#v0i$CJEX2@86KH7@q-q^br?c7q(Bg`A}zh&-5t*L@i%(zOLix~S*Dei!DZI*^Pc%w zGojn{IggXT#M-C97UhY-<{6ZTwP*+y-87-_f&NPa$aoc zkKyt}p=X`P<$<65Y%bq&aJ!Iw4He^}|GL7yNL)5uQSIG<=H}RG1cve$rbX^8JYeJV zXcUBduXi5xiFCIMTst?%TFGFx{F4_c?Fb(Z%!sf!H~F*J3%Ng%Yy?m%{FB zqs!)?$xa@kKi{UO8?6QANXnp}uHDMkZ_$6L41RWB=>8j2x?!bO-=Rylu<^auPEL)Y z{=}z$WHj~KF5Gz>gDK8a-bju~ep)ng*6$bX=+`)3Au(;H#CCs-F);h(nM#V+$~OAE zl^c;gjO{)4zt6Lx-?anNHO+N0-ScbdGXryG?J0j(PRfHIQUCT*XF_5+&yv(Fvm{8Y zEOI(Ma=&nah;)jy#GP*mR#7`qtB)kr2PuubG?8R8VMNcM5w$zjuXY03AWXfQtc$h& z(6TU|6jn!~$m-J)>Zitj=&*v!?byd$(x`~&WF@gfd?s!6=q)KH8n7WARm@AH=}vV( zdL_6=is0t<2Zi?@G$OAsxw;~dxY{BHq9gIj5iTa)yzgAE#Mpt9hQq3%^18+c@|Ci% z%|V$Ta7#jaynqKeO-?Ju_QiJXHt8O~$qOxx`?xx-I@1p1 zaW*xTt`{o5%PyFNtp@G=~Zqd{QkQ7JqRc&fGx82R-A!;@;H%eCKB) zRvt&)aA+Z*21`vzn;ssP>`wrnXn&vvI{F7k1JFJN%VP`gE^k ze^hnTUjm|Ka9M1I@9%0-Rc&7^_^)X{c|(OX55%mD`uQ>|6y@+PUyG(0!N)9_E!p&;U{f5R@}{kcWjRxDf@LyeYEG%R|uk zllu2qG~E*GnB3S8f}tB7%^)L-Sry%apt%UTJtbf@{G`1H^MC#tQ(^(!EyV!k=f5tl z7q?sSEEB5lqHZ+Kf*xJVx>wn9U~tjGA>F^{lw15<=B!_T>J@mo>A#1_P=X%xwtmyH z7T=mYJRG#x!b>Ry3w?cj{iE~wck~K9S%#L0M(dDfjZwTH%-tHaDl46{y&fN>u165v zEGQzRNAee%+OH*_FbNunu^!X?yw>q^y%px^i_qinvRkYNA1ir=+_*J_{>VlP20`=3~z2J@z3{<2HSb> z;YSia*$Cs=J6-j1ywjl2I@OOrwRUgG(%nAS7ZnHeL-j6ZJg~3 z3#acIGmt&`T_O=%J-&N6<*aC0zp~lr-aj{b1xW+b(VAaTi$QYdEXyfn1R~yo*&W%kySb$1;tCiO7t5IxbdG#6Uraekxs_T^N*>IdY2r(|A zu5IOt!cy4l8k%s#IEl0Ldu)>1*Mbo$xav|9bNkK-6onU~#AKcwJ5x8_%+0@^3cK*9 zkrd^!0xx&jx8gjm;@3)tUwu0*@InC~0ET1e!?o0zKFB(aBY+*o;cPve zDAf*oli6n{OZPJ;b9M9}BDT=s6pyApo!LxdnAskGirEDPvP5-yjhRg<0Yb*kP7qIc z%KLmmlY}*WC`1f=GFT+n26+(Hw(wk1PT9a*!P4<@W@5{B(k|PrP3JAzX8pwzXDt|B z#Ut9lqNK?H7>x`X2=b;KYu>Rdt?5+Xxs^p5_C)>QU8OjeKe2PB8U&9%rZ9)2(8TnH z9jb*TwH+v{Z^*S!1R1harw$2$mhSJ)j(|hPV91_6Bs>asH=7g)awQ(P&BDPG*>lS` z+oHL#nXIkYb|5ArO1hq@iVI@xNO?@CXr>^fkh*jN0*{4HN<|SI8kNBF-O>gOQL|Y_ z3Tw97`R=r$4ISxe>-0cycD`4ZUS-XVms)R2{ZGj+3^$f<`uBWuFveJ6kI&@N*6!)+Yxl?Ime+TVp3N?; z?~JcrhGDAdvbQ1?xtJ8|;!xb%DO9{n#cH)X>AY1Nh00d0)~NH!1r3_D?$ms^_SU(a z8@Zb;=RC^uyvwKS9)8k|F1qRp_A_Sfdx2q5@$T>bP02jcSg0&ANs$ngK*~}VBd6nL z&0oIVS_6lU81u=gcCrckJfOFwJHS<*`~Ud=$LQ;i&-@?1%w!Lm>b-2g->yAh_se|0 z7`^$){e59?t$)2*6MUYqb79i5J%pgsJStS?v3InEYsOof#f;PKB)5a#0E#BLf)M^E zA5dO}!>e+XeE&JY^M7Z$ecD0hYrgC4i&i{UR3O0U{4y%F?3CSqz0z@!14=WfBA+LFM>@5z@K==X8}>&u4nrb z!HPsHQd-ZH+B3EGOyS>C@Ky?5O_f&@{WF=rgI9hlc&|`{fjh1>Llb%<@C>Dq@Vx0m zapw8j5zTMWH3AmWuF&y)ToOafPmH?vAs{!H%o*dvE2F!)7j%diebaKx*@45d?@m4r zYxz1jFP_XHFZ^FK|0EGhgua;|7RYkIfuchoFb+JD$WD{)tgXud7 z=Mx$jaw}8Au@G3i_2?i3?~tjUA$oc?i2@Ff1yJayQ@Kra|G{vI#l-2(bs9lF|So7F>6 zYwJShI(Zw3tp3x7Nv6sL33KA@XE9>`<|XC4&J&`w>{UofzBQr{u5Vi=XC_l>M5i(q zHn3T7XjKK<^vd|j%4Fe^D)Ue}CJ5nAB&|h$iF4jo!}6=M_`7O9-lg8)@{(O6Qg>l^ zxqU%POIVjPEO#ew?MF{;&>nh`btZ|f?!s-&|DWhgR^IXH_#|AM)d$MJ{pa^~ZEc$S zx4qX&F8{~iX2CH;p?ReXn8)a0e3H^vnIrXM4Dw~^uoeu^#5@wFvk~?y9dmX6aw(x3``K1Dr-^oLOAc;>(fjNy6 z?~q7p)3eFWf?FaJSkjXZ5Ll{Qdab@FKr1)9`%U9?F+;qrvy;|;_Q`G417>#BEuW8P zSM;Mch5_GC8u~Ngcu*SZ-478m0azO;Z+6?a`L?eSX;FNWc;&Ebi{i&JS4+l?c1V0X zD@&T)y=FD;qY)Sgr!dk4RDU%4b<7d|)Kbp>2Q$$vv9IU%N^TI!VG>k9B8SWIdIt_~ zXYvlNM#U|_@LmLL#;}9F-Bn(fda?w;*VP!A??kfS*n%;$N}t)U?T2>4uPYKCS$Jq~ zlE0ySPk?ZB<2?o#5Sx?9R~&tDX|^I1=rG&xC(2`hl-bMFxbDZr*PyY{zUs)CD zo)3#wmGRj+j8I3Aq@2~?=t)K7*q({Q9w4Kz^fOx+x4{?mp1&zgIvImyXKsjiQO_J={~$wYEI zQQ?{!j=jd?rT851-jtL5bYu;7zGBP|`-*nk9mQ~Xw96WtvTPW|gT>I4AjVX-xiw}~rqR&7Pmx#-I800VW;w9Y5)*Q}%?u4fWHj>7fV`#1oqA8CQNUEd2@+{qVM2Cqs zU~{(Uq#9JQp&5$7nd-|1{yy0Ughj=riskuh%MPvpJsGQ$W-k6A_TkIbLeu)q%=yQm zb;7B2iiS$w%9CX-I##l8-mum=ppBxomOBGE_GB!6HtNBE*W7%1^g?#t0yi*uzFZ(G2jy< zw<4N-c=%f`L&0X$6Qr9RIL1>r8=r-lJ}Fo?I4k`9*^Zce(?Oy-dlC`Jf((!{6`p&L z0{j&MfPafMV@UDZ>*&(qbWhv|2hzYtLR`ZuOoS8o$jokw9eyqEuE?>G1$hBW89zW`qjivZ3?3sYF zME0z7ktyT(^2~FsJ=M+2{f_iNY;O#HV(OR&!qC>R3N!iTCgo&v(gKMpW;?dcdIPq@ z7iK$OVHW1mxxqReiX_Q=u)y0>@R2zH6Qw!4xa9f$oc9Cwl7to_1M=3V;-w}%t?pmxYzB4*zTb+n1d6q}0wZwUF-%(tg+%i;ykW<^-c znIpoKCs^ncG^cJHDoQC%D_&(NH=*FB_(!|<9G^lV+GoL+2YTmpX+LdZzWZDOBdw^d z0O58Gce;-~AYU~5Zhs5yS7q#j&&-eHRz#@dI=r%ML(J3aja41w(hyv+&|aYE%wcOk9JqOE`ji6m_k za2xpPu45|ziCNuImY68lf+3W2C3y(lo$$Kk@gYzpXB&Ip6h`UM6NR3RNQ&~yNMoL$ zguq<6+K^ikq&-oX+1HBLnnPW?Z9q@5)gZ0}IE`x(K}NE0X&)k!DVZ^GhOa|=TyDIsZ?&P7O~&g}mj9TcoznLZErk z%JNVZVh?!T9n^J-Th2T@YVSpsL)wJP<>R_jsk@=AEd5$r!2B>B!0Vb40MEGWS`wip5$*0aMx~}Ur8t(G4DJ9 zH!2H;+YcyP!mQ(Z!Hlo>z{a0qfBWfxE}+Bzr=|np4nf6JQ-npUDaZS_!dW*0vJPy% zSfi~FQ5vVf^;6)uUbj@&T>I&RdJk`>ghTSEIf=}W7TS}A0fS9`uY$-UMkF^j)fUl- zKL65txD^sA49N6WOU$hMO2YBjj$>E>b8#T4F(l=~OCA$`+8u6nXK@?QGQXcsZ@(G) zxYypM(JJkhm}23f)#}6*@i}r^nh$%Yy^PpHeY-Rv`4_@`$ykQPk&(|ZL%WXVCvB?> z*CC(zTe+N=&FU&AL6UMwH2Xac@NzHVY~l_jumM$Jys;3JX?L%rZfsreK=~1L&iU3; zv;viu=rM^i^!}|m9j2ZW)8Gj^bXAIM#61S(CUVFXvnQ?b2QO;yDAhXIxs6rAEvH5T~wW zrOvmQ50&vz1t`u9cI#yAu-EjUeDj<>=U39r`?Yr!a=V5-ACe3b3iAWGUX1{+a=>BZ zz%NFdF6?O*M!;-_yx66h96HsWcL7? znjOys5t8Sr2$L@VG%|Mp#xyTFPtm3zA-MiFJ^Y*X*1+8LM5T4e9K2Zzd`c#D0_z-p zI{<1z{H9Wp&m;s?o3MYbGIuupnx18x})rzsTJ6aJtrbLqGvw4#8Avt-f4tXg! zY)A8^H8Lk&q}|wK{h$+gBjB`N$AXu^@f4}Zc@9o0usJd~UaeRoIwX1$ez@Y_TgZ)X z_PkPr`ULItH7n^7Fu~+%$udEn)2+!I(MdB(-VAq#zpTH!1I*#zB!)o9c--dm-W)B&jt*|wyqCvBX+zEQ@-~lqL*b#NLI@ygu zFGAjV$0+-2mR`PV)UFz?68#5Ykty72V2@uX1HBxj(o4~(IR@$4peK#|uXxHicDAVd z@N4hiAfY39*)q%7La!Ks)dal`D`0DA6=3REQYgr%k!_-9KFwIW-Mr-7Sj$#I}YQQL;I#U1gP=5Ijei(jF&N6~(xb(5Y#8;) zk%6KWhXZP3+ZyvASNaAO0-|6@)Wrq{{R1i`Er7veHdCbSFvc5*{;{OtA2E=H@zx&7 zm^r^K@`$#7hH|4XieVbZw!XUJbTP88>Lik02g4Nv(cepvuU* zc&D5Q;w8_!0Vbk+p115JiVY^G2I**mN;@zMtbVw*qbG+@vmEs*$OasE2i9%2D)2x%sRp%xc?oV%?rm|UAv{ylBtO4U;c&Ei+X+#nNX&SjM6 zeUS_$8A%c>A2tCdzlfE|rIK9<){8NQep?=1`golx=U6hma402W3srX zIHM#yIJf+apWR+2S*_pmFhusYtd@!}SZhVPP2w zIUfMgqWYobO8&=GDoA;KHn}IqF|Br28On=b6JiX9w>t;i$I{;p90GotQd@E#)xX0L zO7S3=exEAv`79LE<)ZAkbHzI4p>C5iMigj2zy9y#1Sg-A9q2x!e3QJIc9oVMIu-UX z*{&NK+aV!G>}o*vDPaDpc{P-OXktDG$)KlKn?kD!eye{3l~miCJj{0xI&JlQnUoVO zGLMW>Y(Y#3N(ttIAf7mdhAwVU9p10#h{>&aw^R`_m=619Ctn zU+K|2dtxMPhWE9pfL+vOG>0-6MKBLY3{UYsc&94#c#^%&tT}n&Zh_7Ax&_{J+hR98 zt~_0E=U9BHLLa^GgD*k_F13D#gNod^UA+?jRit;RZF&~(`t-G&h=AM=YT#X^fw zib0=jT1e*?Of!GZ^?cxmz~7jOm<_C5p-RF)czr{#&nNVwBww2nUpM+|B+#L#EUL{Z zmV*wx;p|wb9RlMG{aMXDl_s)qAZS&jPWA6oxgy4Sg_qrW7rkQ-0c8`44hAI05)S^Hq;t_@uacozip>|wB7YukVo*9R#q?2 zhiTOD`>b0m_UZAKeLvtC)Ly+98n&D2! zuPX#r$FyGkqOdsX*yW8=JzOT%mIZ#e=6XtV6UYOWL0{ab%*0W5Q{q}1w2D5B>_AI9 zN)I(0DfXywcPE=|vzH(HbmVViQGksB!^OQEHd@VvbDRUYm_5>e^af0%26ItkIr@#- z9TW$Ki+T&ux~|Fz4k>wvl+&4)eYWbTAjDg5ZQ4SYzdsgt3a=pRF%_{&8#s((YL!1^ zAc(@HLYW<(`~Yaos>sK2I+RoM$V9fq9+n1d2*T*Q5<0D;UD9%@rg6xpt1ZvF4{)>&3)i zv)xDCl#Fgb3;NzrCCq;Wa9WKUI{-mv?!iIEZnjJ~^bEm@K(589`>V3jARCDOy2woc!1lDs&8E}?+t;t*eTCMM~TiYB^R?h26x z+e0&+McuSOjb+tW3jnRaiQuNk7rD}k*UoaPYURSd-o=2kbvYKksqCE-5aQj+Lm)?G z44tq+5&Szr;$bOCC~!7Rw`|kFTsw6~369fzbuKktDDSV1Hjdajm`M=WycmjA3)8{b zyL3UGEndSQHcK(F1-mi~xi3(KZiPxFTYb`%d3Ree2#Yr36IPINKX53Pm_4y6<6r9{ z6tOY4Esws``IY!!*EBrjhyus_232uDAJDey3MX=@kJ^cE& z#;(DwwYBC_Us^pY6JWnAY{39pyda2@{{50r?H*Y$n(4N3Bq{C}qR^Bk9n6U&57?$-vZ zgMQG8q|>GW5~Xb?g^@n61>{4dC=#&h`r2f(+pzI>FI|f$a`0C)VV29;^m`wFe-Vsm z23;~CFJEy{_Tf85NC8ZS9DtaQJ5s>!y+1+fc`6^d;kAv~R}BMxSDS;32A?@JpYap3 z#z4;(-(Vub_^iXwm2-rH#!3C|^1F*g7K)LSFh0%b>(EBt_(W65np|`4+SYiS3A$nm z=7ogc#yGbxiBfisowlIqgy0NkUm)zi(iAh1H`jsXq;01a5qhTw=SXFwkOr(a28cXa z>pG8Z$I{%2fLq0oAtSK_@q^V#^w>%JSGy#~W&}qWMSsvi0Y!)%N0tYBo{r8(G>)#> zbRAzfoX@k?xYlpU_W@WPFY^8t!DhO=gdaUWNZ(iwRHKT?T;M?sv|L#7uPv9K`Z$zI zuB@e3%W??Yzc{g+`XlH#&ejb-z#xcfYYa=AO&eyyI+uZTn@R#w#TJ&)GPcL1YM`;; z;xDsDdFIC|fQqEr8j6PXA+PAQfc%H`lAXFj!0L@y+q$Mx%#~Mt048oL6#AiA^I++cCrw=T z>m&}Aa$c4>kKZ?rj~tscrgTyGgC z*D#_%)C+x>t(p>Mjq)X5(;v0p?O(&%)J%_g#E{akU;b(vSd`4r%I0_QeN7oX1gUeP z*X^qPZHDq>gEV>6{F)gmw1@ENJMGMpi-cpvzL`j|;HeVp59>n}biLtKU;6Q&Bd?mW zL$MCo!6*?xE0s+|4%LGOD~SEiQ;fxZo86`};3bm_?RqO?4GXr?sy0^|v051f6R7(k zl5t2^86RH2AFbWDZ|X43DmtM1V49Z`rl z8!d;mxuXW-pVJ?vB*i%N2>5fKopHlaGcV39^~FmDW@#WY$vhmo1D{fIa{-CX$v=b< zsnwCUC^GRLsydYP>r57AHHmEffq_PT=oi8ifwD63oqAAOu4j*w36DtQC;f+C1&#}> z$I6(SIuGNSjF779MvO@6f?#uF?y$+*f_c%Su)IV56j4`sKosMr>iY|gZBMA<3M4U7 zSy(~q~P>L2F_M{Xw~4y~-fJqZK9e zrK&RdyyMD7FDgPd#Bn@SWOI14wU9z%3+p zGAN~>@Ww|WjMMOaA$qaC7J#}~P2$_NIYzb()%zy2)1BtyI`rv=nC3bZ_J;WCCdu}S z>lP~cdIEpU<&`nNJ)(IUf2`(JlHV4)U?ugzBJ+!9H6~=1bGg);*>s79qkSuCi`8fB zZ%qFBvZ?4x&MILAJLMX@^~MDLZ5`h@Lh13(b&~%&{)NPik^eUSg+-2czCJ@!Qw-mX zgXZ78Hp4r%{kQCof!2=+f4_Py1M4*o!S8{YJKFUCHVQ}uAM{VGNDugtvsIct+sjX! zWd(~fLQtpD1>A9N`%0o=cpSTyN>j9$IT9wR#6%QjWqFa1QI!9b2FAuH|E-vrt(Pe) z)l`=Y^<&IU+$=3tOV+@0@+>06Y$3pP%@@_^x~sZ$tT$EHUhlh-J0pRlV3(mdnp+ih zm7amlp+(U&f~UGFp#n&@t^8cTAwou*{x&tkLPbYP0f9*nCQ7PSmzKuH=Jpg9H#K#2 z#m7fQWrfw%_4YN}&bp(t zg`ck7+D>|y=;!_Y>@AhTtjg;0949MVXM>w_z79AjScL!IUc?0rr{Fk+#XefH>N0a% zzD&?y;h~?5K!D#OQ`29U2NQFo z7kh}uGJ*L$JLlaRe3bDHz1^M2`MDgwzK3W)AE{~SXqYcVv=j5wvy*dEwjbMlZ$eHV z<#b!@te8XdUxBw?_bqO&mQPkW0SIyRn~Pt~iZ@QmHk{H9{=1b~uADPa;m23l0;ACX{m74=QML+4}u|D`}0JjCa!YAl;of z)u95n7%=O1yq<{{c^1G^oSfY;#rZp-qIG5tGg_9(q;eatPsmJ3Z1%bdEmu$UXi$#r zoN8UsYcNJ0R-Bp<20#C-HNCpkd4O&>c#`1kEt_-nm(`hf#FZ-HEWc8kCV#hoAMHUXWcjND(9ay;)?=RGcM~x1cZ;?21$Q;V(`4)}q zfXSroZfCJ_xiS+Vi&0tV+Y6&=pD7mms!!cb$Mhg0&JH0!cFbK=BBcATc`l)&id?hV z@F58$(tCA3jy9^$*mqRB7!2ge6`IAes^<7kTXY_Hk2*GevYJr+Y8L);DSw<>W-B9L z$^jQ~D$0-#9L{HmJl$Oki0{zMaF?s!VjY^`WA(oUj9dj#tblB3U4I=pJ;RT61bFZ1 z@a})SZqEKn51)9tSoG=;| z8|G1pb_dM#-iZcJ9oUH2(=?bf+wj8CoDLpXz?pqK8u6{dqUW@4acwNnHo8m%AM)4) zP^TC%PzD<%=PDzzALhf)3IC}h6b~e!Tiwr!`-`&*)5uZyaaTfk060DI%=mG$)?e4Z z4On@ksx57*R(Tq$w@G2Qb7`}jZZpP|3OV*de6}76F5%*I%5mrz z{1kABC7w3_vRKRWn3_3QuW=@^_@! z+{)BK^^i&aG)m`%$u36YH7l^Yv7B;ND&E7f&Uc> zAQVrAD^M(y%^^+`ty(I^QB{P)qQGQA?>jUf%*KD()j4yMcwBmaBGBmFTc->4D&aRk6U`}j_!Yf5`g6233wMg z`Svf}Jx&v&RxgYy|1k?C5b(dnvCn;7f+BFGPfynHg9L2025vh4CzQ}&&?8Bt5WEu& z%_c3kr{<0%`NO-fXfF4y$lZN&&~y$`{NAMaXUld;>z7Huv-fhK^Ji-(JYny4Z?deGor|D>(zg*-Cotq=@dX>!S>#> z-D>ao7T30M#&`Q>`FN+WW!2u^bLCI)IppF08W9q&LGUw^z8Lqc>22!BT;mGeWlODw z1*5?|?0BoU={6wa<>hoW!fpFCUo~D!k!yH?xgE53d7j5hus%-27N4yrgBa|yEYUkM zYmf}+5y`Sob3d@Z?A|GXhWU4P`hn($$yc-N^~-``I*i|TCE$K{_Zl0M#_+u-bh$lX7L1DdnDTrmG>gyk0ogD&!ZY*iJ(uA0cshcpT?Ns!~Os(<&EwFdNP&7HZ}Q zT6rTFi)OT$W<0uP*or1j4n4h}Z+L7LvxU?|Hl0s=Zm09vWDY}saZqp=3?`L!t!GrS zT3U6NYgW@qHI+fp<|Vbdfge2EYJMx7-E0a+Kt+S^N{!yHxCE|OGyA4>#Zlh1Y($QO z-`ZXI&Jgs`DY{`YAz5i^YLc^Z2-)AJ2h>s0Qq%v1cguxZkf_c2-?i*p2b4Jdfl>$Q zHEXph96iypAE{m8<>_tl_4tB&Ku{neg^ZjaQNkvFIr{`HA%TQBbzM+TZ_hKaXklr( z0}CT7Gr^i;C_Vu#R~qb6uh6A{S)~os>I?5 z2_3ZoO2?+Q-R^m8TL6nqgaz(&GV8ynL|gKLy7>%y_dY`iO^kAQPC_JJ7{+TOL}n1M zM3y;D82nSCRNncgND|fHf2-1d(fy+3+-V^ zjL&$0`@R^wwKvz*3&>~e??k?T2`{IwEFtipVGm>9Q?5(?c5PV+r&}+&3VU`#4i&_k>~1ioceV@l(OLk6@bG`kOcYKK=r~t3Wi3 zFk9oEz7*y#<|`w)V&iXMhnf~wem`br*-1>!;)9gfuOjdN_`3>_Dw!FT3mNit=ARA! zT9}$Js~<7yduXz(xJkIMTl_;GWVCQmzYRTw`ye>?Gz`>-?83DH7&LmkzuK<84c(O% zeHRG?QGAK!15&)3?nWDaWC(nXSH{dwkjk3EoDmMsdnp7%$E4lJ4Kk?T4kH{Y%HavN z*{r9kP1bDx@Cf{VAWw>&PdqOAyx0AwCeDwt@E?Oqh(;>$*v^0*1Z>4|NBn4UayFQDYE zJqSV5zg`3$lmV28jS5kZ^>2&!9@16ziV_i#mk+b+{dKh{A*a>1@b?*a{CPH#RaT04 zW*157XKFCu|2lZkA$>ZRIw6jWarK_e3?acD=57xqdw0RY=^9+dv}pkEMz*Y*3%>B)@z8#&;bN_IkrH8|X>C$5;X)=UQJ|NhY)ht-R6b%n%c7O>>luNyK z47EW=t4AeHBMm@bSbI9?d#Jnfy@M3^xf6wzJ61%+&%yaWCR@cmcv*dAMZ#kj1a)0k zGp8LMZ;&LhN+m0I$fWTV2rgfJUr6I-Fk?~rEG~WNqJPg( zz0a*rV0e5`RGDH@MAE$-slmt8S|67L%1`K#{41sW-W=}pAQ{A;OiZxid zlGPg&jyz^IDJd;QLs3;(eGvDcx=PQ{%Qr}oG(A(s%sFgvNZHIzu~JyWW%rhhnZ{|)40|X|S+wtrQ9YC0 z7)-5%3rSX{r8ZKHu`2F+Y*Mg(r&2I_1~}x;gcm{rg9;|BECJ(HIVxWe8Xp)L8XGK& ziBJ$sNQ}(nho-{j0u7JF>ett-Ry|zr#E<>x;53?$s>pRGPw;>%H9bb_L_G~O_&)Ur zXd#Fy(Ta5)JJ*4o4%(+&$2KMDj{w~u38P@x^(_`GK@y8jqf{%`4U<-@UeOdPQ_u5; z|HGzLr4^%Ychg(-na@edkiJv!nC#3c%hMS~Wh-M??qDpsO=GwmT5j?GyW-X5wu#;b|7L#edzN3GVHnVe z;2)12$(QVvARdBmFJnA;4+Sh%`Z z4Cw_YZ((P$QAIRko0E5ru+ZS}pt`C!SsT}XOpJ|xog6O?4^aP+kP??G2uq941rm{r zy_s^RHY!|u3=As9h#*vul(kIgWWpGHlKW2{lIeTh#AV4?sN_33aU(d+VbcbT|}>LTjYL_fE%O$ItE(`oibSA5M|>+9+`*=`-aw4;%J> zTl?+Kls4Gud1TTOA}xsOZwJ#W3*On~By;_DsZTvmSXLceypi1E*?ciflYG6c*gIvR zJ{wZMx~sYq)4GG}XVQ;Q=4KnpC|TC8^#&BRH$)^&Oe(uVaq|LUS?-!gGVgY3thbG+!_ssb>?`H`AAQ0t}Ew%S1 zH%$nX!0d?0ef;hD-L(quL1}pftVFP#le8MfmPznVs9h|9wN7{d@H#wKQs3sot^aY4Nnj=j5>s|<_q0rg(J>ImL*#| zlyCP&Syy2C?Lh~0u`r|#TOFTtSJ+L#@eYDqGE)HM2qBauq*$Ej=w8>SjRbdr*&~;I z0R>>lk;-7~U3x|!<3||4>On{u99V%X?|=b81n5YdBmHC`@{5&@Ib33-a)~URNVHxo zolcZ`uUTp_KC~oMJg(GeL(JEarY+BOUb^MEAV@VQ=yiCgTh?I44$l?ac%iTSRfBYU ztnDC4Hh0xWjqbWei<(h|kxDL;Oe5C|m(^-InJ7!O==24LL8nqrz6@UdZ(gmkZ@pYL z56gF7uLjJyKB}5*he{#xK35W$Otnztd!Ke<>U*EGa+vqL%=t9)XFf3rJi=(*FEPaU zf4Y47WC<<6VKbQzrIz+L&gZKP+OMH#Y3FsKXPmYi$mcLM;{g{3pJ55{!pDdyJzH5W z=XsD@akqFi%!ZDU(`PBCNE{{b{M$v}wMcIx6La!T(PKccmzMd)rn!t}!7{7SfNV1w zNvAE-CD+}|+S~xq((yi!qww!68j(-GQ+2hFMyOEmpznN|*OrP;f@&n&yikIURttzp zn;J8YWSVRCNPkPe2;ZGFbSC~Qp^;YlZ&dtZ*KRwu*MmS3$BffrOC*t(-HWWyvQ zNu5x~+S~+sd2=6xCcbp(K}8LZG(Om86Tp~ZV`V`r_cA;)dy^$|XlOC1H$NNa;#a&} zJ*(QroEM;=&UhGI`rkvbrp23FT^U&AEYAH}uC1r_@ihRY53aeLw634@mFWjdwr})= zhiT73#>=#WUoXL)mc7rPxM>x|I?t1CGr@oX?ma6sNag-EdWwcx$Fi|3UB`-zl9QB`mY12Do1C4#&*m`qnAM`Rei13aF8oo$ zRJ$6}m|Z{Qy>9Ptg_AdG$gqi1H|V({*sZPT?hR+~(czzxg3nlUezP#w(BS0g?C^9& z!QK{j1Pxjg*(twSY&--oIhC?p_QpDwCwQ2u%rwq?X--_;+V9&Rv`5Kai2uqG8%3#- zwKun)?Mjj7x`}O`g*r@#6_DyZp@%1<%jH8wcF(Mc`G2lC|0&R4>Bxs z{=F+2D2s6!&v4CjODhxr+66XY=J;QfacxjVQsF`jSZULapQ6*A5XpBN?3#T*P_`=* z+Q*R~mS0Qi1-Ds}D_Qu2Jq6M>6U`eK4qAYJ%-GL%7;<|*qx^?{OAX}4A^Phj2>!<) zYIgk{M={QF;0GFx!(ZY(Iz}@~bYFtxJq*jnI$+v=B&-&_dX3VcBGe2ybXTPco7;QpVMREWKNe z?0$tEhtQORn-bU41BXoF7DL{Yv}cWA0YOb<&YYKX925K3uf%ZOjpn`t5a;fra&}I)uO+h z%47Pq^7}@gg5q(spXeV_x>Gpat7fAugblDZj?i-ZfZ9{L*@KG zz1afO;%J5l5y2!88WgWZN(XAHFyil!PeXKAhM(aB#F4Rz$)(gE7td923Z${u z2PVWJ*qMk`BP3ysUnD1zl!=$3bN`4rfJ)15%grkzf7_1E-&(^k?c#=HN_1Sk_x21U zZkhd%hR1<^1ZR>)?~2xOSR$)c5Er;s^*h=Tht_IQTHSQFg+oz>}VZkXT(~U zNA;eLx;`vpe70z|BzT11ntR=RwQi=KwsztcKEp`lkPXu1M0~dpvkx<1E`F~L0sRZe zzl=&>(@7DWKa3LiLIVuNbn#Bd534r;I2U|IHjW8r2pLNY^6b6?cpD$^f$fw+-&lsX?0++-fINwzj)t&d%-+=tNjX8`YbwmX(sPq z{&whR+Nu9Jok)ioMT{v9rc;`q&T7qF!C_?jXtTb|>&JmyTi`gVlb6$9E9Z6*x$_rZ ziDz-?KeQw{-=qZntRM?OwnmQy{>ug>iwJ#OBt)saABn43VjTwoYUQktrYA~2){lo6KM6#2u9+zdwV$LYe~ zMr$J_0Dv1f39eTcf@ua>q886y`95$oqTa5G{i*KO&M+TUPXj;D4a;I%)IrUzt!P&_ zZ;Mv6zvkLp0{p#^oNihTW63#aO8e>3afZz8Y@XEHcj1`3K6kl6P)V@Jt#IuJ+-b7D z5UH2(Uvgn6Gib%ee8lmj87s*ARJ=0*6+4twZ>q?s%8m3afe~6pWtPY}I_D;$mTD?G zC#S2#=9-_ty^S-@fGhD?J=pbNk-Q6bKYKaY|J3xq8ssFHbq7Y$x`bI}I;h(tN5vB@_%Efc8gL@5@cpPHNm{YNRj#L zxB|}5oXHvPa-TG8`vU0B!=BWu&?nkh247W~rzi-^NSauPGTQ8#lTF0T)7@mfyVy|) zFemZz2z+lXF$-0;IUZs^r>`;0cSLd+xV3DUrt=Hz&lcCS3%v`(k6MsCOaBYp%6al^d~-jI}Hb#rxC`KEeZ-bePgM=^{tbiBI5 zbdua?K?E~?ceEMWKUrg%C}2Yfwv~;`TKh2zL?^taJoyZi-sM`ye2?m6 zZ3a7nPNYvr!&subUQy#sHvKg|dq+u=;FS*-JpD8Etn2T2Of|HB*<{?f1>5HsWreTmwJD}Rjc%9rhyKS`4u8-xG8DX*e11VG%H3+%GZ=T+t5iJ&|C zjsu+Ql?h8OeCC(C6((vCX8QU1TjE?jrB{h@U{qvZ@3TvbwBn55B?p;~>%&lPNEc#m zf08!EpT=+CUUN0uM#4&LOH8Jwu#O9J1unPC9-8n^>mdGP#nCEvE~UIP=%8;>R{U+w z5;@D(mcj+<9<=#s2k#dQHC<00vkObtg@E>`HUrt|J;&cePQ;B1D4jKlwN0}$&_-zl za;rR&pO_vJ#1wvy&%Q|RyW9tpPKY}{m#)wOX3qNKg&PJGB?i`e;o zc0^^Uear&zbo9dD)b@#=J?gU;$2aeRDayuPQMH#|FN%gPB5F}v7uPGNwjf>~g~qc# zP7_zDVSF^{R|O;Da%zr>X@f((F@pkBkzBhNr1!jU6QfrsAU*7F9_;e-5;43)^O@DW zZmlh45S&dl{TZ=z*nFq{GYskZh|_pdxMpm!MW#p+jZp*OGe5mjsHDWTbW5a-4Nb6P9u z%)X)Ff5>{rAkkuNYqV|Kwr$(CZQHhO+qP}nw!3#@x8J_!yzkZh>a9PkQk7)QWM+mLVMjDA z0HB+T(j`O6qM|*yA^xq@wY!LN$L6Cvm0(Uuuv;c8k;`Qa$yr;NCvA|4RSbDgTzyMP zk(U!aHiUIkwi6raN^vr|3IpE7?Di;{O0ID6w2P7V^q{Ijrg7QE6EmoA}zNMpwbM_WTtu z(qcDs%Tr|8Y?@Q$2y`{iv>W|(AonbM2JeLWsWRq3-rvw)`}MTGE^}KfsJ_HC9Y6Qe zF8V>}q&Uez56#KZ+AOtJWZ6RCw~2ZzW>PX~6el6q7@uNhQD?{y zOY-}tf3#VEQMxRP2o`^hmR1z_(MVj7Im!JU-HmR?vZ+95VS<`@4)oPPnFP=j!U-f7 z!pJ(~soPgES~1g0rAWmJ)#LPY&(N(RF)5Sn z`?7vgMwz^5cCAADu9Ta4R4qFuDD(PMe)v94jWI@0gJDc}4TiTFMr3vgw(4wJXtN)8 zrpPvvx;-_W2;%?b0ciOX`Ti*RkaePB=S$-_&98eJ?)ap$lMKXrnhSjek{ZO{2tWlh zpUwb)dzL^|h3dRYUTG57@)ZZR=h``iy$DN&x)iWNIX5(7=n)aRAbtOhWnzA$i?GAN z3tq3*Q3tIAVcuILQ4|LP_bk|*8WJN9@j~%F?VlBct;-Nolco^@-b-HXB5(u`sLs6zr2s_f?0U?0j8NS&*;uT$K zC$f7cRSTAGg*F1;KZpnMc|O8MVGlH$S&>i)vAvQZW~_91fCUjhD+SmS1i-&D@}$J3 zhIA7+A}GVU6p*)Z+c3aqG_xgn6A)<67Sv?`@1SgwQ?{@$VtZgzw^PsoOF|cSq!;Fk zDdu=ZU~&gNlrRS(RU7s6<56;ZF)^{rEq^k04~kjh2yBD?zUl%`6BxvdZLA z!ehG7IN^&;(zA~OQi6Q(sBXj=qTnE+wPPG2aE}~ad1&{<55yHKOSTX}a1f=nBpv{i zF-jOCg#D3tSd4r)X?Y-(lLp5}aIJ$jJqQ52Lxy~+|*ou6bM5)ROA~rjn&NrHx2}C-X_7G|K@e*L+2$ndDAlRwzO3k~k%4 z@qku$fy8!!yl_T3bw=AaPMUhN(5t@7kAKd3P#Msw3(4VBjVR)RgTr(!ms=5Ck3+eN zdl3bm%c(*iJfLe}4UcI~$)4;(&_L94t~nl%gMTJWz%;-h04!ZhUz zxD~0_j~g7>3Hf3?iBFIt9I=NW0080=I&h~qX!kzy$Hh5;6+lotxajI};)HSjbOEFq zSFX$`jPA+_m~)uNlDwtFahKpQ)t%~k7Ldb=0qV=nblKRA-nK2@cu(DH{kecl!ZWx_ z6ns&bXSzrnF-;=xI#c`kqL?e9b_e@7N(Eb? z(5uN#>sd7d>pd-bicJSrRlpj8@}|_MYx2-TLH0$l&NSriMB#1)PBit)1!5qbLVwB; zis9qKxni#daDvSKJ9B}<-&eHj%<*56Nh|k+TBvrzJM)=J3u6k)aC#pnB6OPrpZ8d)J7wtf*#eDq>I!GKD7zQ zMn4S@R=D;GT7qk7&*Eqh^0B<{S0Kl{juA{#Nf%`7GF~^Pg!&tv#K;sF9_B>iS(j-S zJM@0~sbxvI6@^h%t)^C%{cgo2W3qzXQo`iyD^+1jg;7(K$zHE@ml$3ACxpNNI3_NL z`p}WiCXuCm&sm$(4hd@X=hw&TRVnycR4#g`?Gq0G97Fm!ndSU$Y&@ISo2Uyw6@Db; zXxt7V`3OPOJ!!_k=UZzgd(u^9 zz!sJ4PHNo3=qma-2tnGmk9rQZnOrn2)YWm0v4cyk%l<+HQ*-u&?fKLTGMb|_?BR;j z7XE+wr0wSgrrHX$-dKAEuyA#9)S78s7H+1Qm#2bgbtGFeTQkZj#98Jq(~4%nWSPHK zC*Bdq4<-di`&ZDpEZ4%D0DUPST)w7G(N&MS zBea)E_e3f;L`_0Lcr3cT}@KHdz zXa_V}O|o^e8sD}<9yagC?v9mn`?nUtk@F{_chcpS)hi6LCnmNRTK7Sq;*p5^zjzr^+avD zig2i7*ZZKF*d4hDZ8F)pza0;3W zto&{#=5aySh!vKSVjIJRM-nl2zg#lK6<<7 zYN;fQPTlsB)yEyuBiDr^dL(VU;H`U=DG#4XY4lh=d;)1E9-vN*(*A9DYB_-SP75Nr zJiVl)kP1_3(7%ePCe5*>CR$>HGsz9L;p55V^olhxKXBSuJwq$1LU4{Q^5IImQ)!M|mD(;B2C%sqv&iVc^{z@{4f5Gb}{xsYV`v|#r%q>H-^BB&-g=)4JzNoyoU%0$^-)cAFRjOXUfG#~A_0 z2?D?w^U{(C9XCS}R}2{O?z_z5FI`sl=62@W;qUu6;TU<7aoyqqH0J=)`9K12NclXd zcrm!_5Ns|G@>0`)$z~_3iXTx>3lFC4OM!7UJgAcoQTJh@bZZMq&$c)KJ68bw57zgu zl76f~op(_E9c)w=eZ@7mV8uO|ue>crBa8QU#z93si2H8-O`E+(3{E=YFgsCGxR}U` zKndklAjH_mbzJGs8kigLzwAKi*Kp@baI@-aa%;$^hqNdDPpb&_xE=W0eH5E366W^J zq?x6!a%Qb{x#9>x+{8NSZDgaS&5>BHoZV8HMJ z1javsG?Mjg@tBA>1ZF8BwGbjV6ww`u=;!8d5Ka|vA|OqX@(CuQL{+(b4`nbgFeqS) z3b?-+W5G8U%(gA_Y>RxuBA+ryx6KeG@KSi#z*3OGM3S>8!o=ZmSFySW%xAMFMM4N` zCa*u8sFy{Burs(zPa?(1fN0K^*IAz>(95%e(aPuKxzIM?m@VDM-0CHS!L`0+Mmryu zcKZ3R@YBhOf*%+3z|nf<`5tvrleY&wwkuI1CJnV&@QG>~XilKLGiB|%i}?hy(n|kR zF};&ZT~edf^Y|uR{?x?o?`QBf12vk>@^g)ZA=ssHz#x-CwP_#X;ZkoV9hg)vLFMg; zRJ-h_qu(K<0;Cds{#mO?ZKgi1Wvj|9$wO$htV{fe!kL0K>GC-OxUD|&yt)}ks0`?pa%?!MHe z=n>%REC?Mu?a<<^neE9Cq_Org8J0%~zMdUP_j-(jRUH85P!k20NDB}|U`}9{f8Y*b zs1ac#!GfiQ2oW%o5UZ243nWK~s$5ACn6B7^Z-)JAgGN`%qBblgCy<(`qDE|tuM?Cc0!V|&CemrAPRWo2R(ssf$@fXZ5QesLj>R~m@_u~l z%k!)w+A{JcnE8(oTH|iag$EFF-4|#_FQWUHRlkHoo~4JNM~@5g%(?Rt^jd7qjw#uh z4uieC=CtRKQsU~fP6D1oCf@L>BuQ`r0Cdm|@D%{o4z46X2p|UlPzwMD0a;9iR`>xx zR{ z#1c0<9DVUblkksAfI68_b5j^?@Wp1|FOlupJ}4iMrY7>p$>I~#VR}WvTE~_fKoR-K zZ`FkBBVT6wkQ>r|aD;u#j1ynK8nY_X>P?V67_37l3Ql5URG?b+BU%Yrl}l0fD0Zkz zVUPHJ`fQeGi-Gh7y|2CO2_o(6;Nw|whaQREFyFJvR*U=CEC-7@cfXobL4g@1{4IeG zNgQHKz0Nc(J&)UODY6Si)qF2ov#LKxWV{KavBgj4U;p%X=Ugv)&S93BG8WmzWKQi9 zbtIcxFl?*dnsuSin(kPR+~PV~7^~FyerRa5#?OPAF`r_Fd!b$HjVJbAbHMtV_fDP$ ze^HEkx_~#Jps!W~ekxToX4X?KkjuQ05eP&`mp7Hp2{Eb;216@N>aXKUT3Zpf<<({3 zwx%jIr?alznysjUEYw7GZzx-v%1#?2I|MJ%GgPnC|dlQ~b2ls);4yb9Y0#a>EN z$Tl39I{+{CL@l}!S3(WLcxb-~c6n^L5x?%h;U>1}+Uk3m!e$HuTX_=)Y%O)5jB5G` zTu-?0j~EgaP~lS&oLc*g84$VS`$!qnY|({?MRIwV-s#EBk6%Dg8=-Wfj)sIwMYfd$ zJ4BgJegq~c{UyHjR4y-8m2&4=5f&1~%|I#()DdVDZ5olO`Fp6*nf(c-zQMnk`4dH- znp_x$k)!TEiy!b9+VPoJ+ixSI%Z(G<8*VQZs{Bc_&g3afpmCZB`C}=N$g+){%+vE{ zJ*Nw{^fWRraTiDD7s$4%sL(Inyad%lTSi zlJh^8jvx*8oUbaXT;_WGS`45`UUXg(7GF<5z`@HC|27a};Re4*b-ZlfY`~kUle1#qAeL0w0H-l^3lU8+2b+snC_}kSqqQjr!nSL{ zkXXUr0Y&D-a2bm(O3-swE34hM0HM6+pkUeSV%Oig4{!e2WAnn;OBJLC#HGVkN^XtT zd*QXI!r@8sAfvueUdJ>*IEaA&LAZN5z zUg3g9GD1QV($GZjpsuX--vJX%^^0>eIz7f6j>gA_%9ipgbe1<^X&9AW8dZ?x%4}q? zeb5CTtbXp(-#l9IS(4t}yuPzFLucd`cZ9Z)%lDgVB6$s|mBna%68gaRyHa$3Va0Vr z<9z)Jm=X`XR1T`FQ4NzcoN9|DzM57s1Xd6RS~e(cYk-Br3RhhqF1|lD3(jhR>6Pl6 z^iah_b4In%b&tL4*}6XA)^MBDJ=smquAfQmL#%5>sB7=I30oh(%MMP5+S!sfV74*f z)@#US*pNrUA%j=h*aA0hf0;bxUAHx+SJ*c&5P;PN+;4vxBhFeFGie}0n^KEwAz_$%vnvni4Oe*JR@xMm3`ip(lzX~?cNcWo!hS20`h*17?09N3_O$CbzBU|HSca%A zMGk6@*vH#R--OJ)?ZzPWQaA|b{z(~kKeM)fEpy+q|2{Z$lgptrV0V@`3>^9}%s>Dk z;m!&V$sZUPo8r4WI666%B6M!GCd2LGJFzp>4kj;Vy&aDL=g$*%co3K2^Lo4)h9Oll z5`&CGfkmZJ33?;l}s6sBgt*rZvfM$MP(z0Ss`{BD8i=HM= zxt4hcgUhP_P3SjU*BOcS(At|pz66~UfPTCDS%OX=n5Wgg-U|-ald;Foq(^ermq=Wn zA~jjTNKh3aRyvk?14yXVw5?2MY9}X|U!LKDDnWPm&=S_J3`EQjBviBn7+k7%B_eVQ zz8IBjmCi~S^TDYaWMM*gmjl-}ol~IH7Gi~bFFT20gyC)+rHEYaYS!*Q>XTs<0`~91uYnW-=AJYpRiU5( z$Y6m*LWPSf&7>l&{GOl|baKg95zAe$ykEu@uq2Bpyjal+MKGo7s>rpPNssDCLlUd8 zl(m>kgCm1*U>_7r*x1C_*v7~TXMOfpNLJ_Q z!dRK&{uONutZj^}Ozyd8v)$uAdY^0-7S0ySsHRC~5X?3VA{fuG1_PzE)ReP8T)e;+VuqZL3!W zGnZJCM(X1Q<$X#<;Lo$ba98!8UIowZ@PC&dojtjmj7u)Mc&^^`=S9qX{v48FpGxid znkl$maZ>AvHH&SNsfGG+65&T@Jvv;AqCWFYYdzYK4(3&q_i0)=FbjV_TmJpeJ+kI~AgWFHz`$bNffgLb*=*auYKz>8Jv9|T{Ni(H?y+FZb?3CPA5%G1? z#47F-%k5eJ0lGq9^3^?ud&>9g4GYWd)?((wGRS4$)?q`833O80W}cURIuaCo+SQ@W zr~{=%`!qrBpW})eetB5h!XYvfPLfk@kdZZCvy~N`=55mBwh^|g{#`Zh|5sh|v@>+H zRE4(wKIh2$Ia;9)^-&E|LyM9iHRdvkBD_Gv;p2HpI-Ha80O%!9i;n*gfPJD5%Zyk> z(=uP6BzL$jq-jiP+r8Xyl*#612#l)z%e+_0lTxIHN1~5e?1Nl}SqgtHc@Uci7Ns65 zI~r^~dMb7|R z?UkPl(b%M5n&K1J4V+e6`&eOS4k>)-C{4Da-NAlKQ6BQJm0omu=Q?D#RSKj$M# zusPiLcgX&loS2wbJwGN6Y2y!VXn)#o+t*X#&m=ww+2@utaTl#wUkT-Mf1zt34Z~g` zdL(@IJEa$49zfP1NZ5DvY}Iqb!xUN3vfnpS+^ODZ%RAk>*uTwd&SsZoTNyjC*<$BCjTG=9A$5 z%~2lJj1XJtV_DEm82!guda5iztg}&Jq%;Z|bSI9RS|ydD`}7UMl-xZ_3J9`x^JcMw zEOAjLn-oH)Q&~;_opjH{s?0lcd;RZGwVP(1uEA80W7X3qwmpVBxy%g|B`4}WK5dz< z_y_g)$$Pd~^smflq{?{srkOSx@!XVRS++Z% zQ5|{Cn3Uau75WC5GaLMe_eu-QYGGs2FUa#|WIiEqW%8*F#Rj1nX-OkPL6`gx3 zw(g-}e8(Ddo@4KMj$?2td&ji4&)j$43H$uV@bB{u`F*1VVEg@~1nk?*rAV8zedy-2 zH~p8}J#^sbLZ502{JlP}eYiJ`>6>R?v^T3i?G^D?b&345_)l?ZKa)_UKjT!#&#>m$ zo4;S;5nF~>u3b24#k6h%maL0=yk=)Q;@X{cQY?7J*c-v0ofAW(ohwDPj^Sflhjj8u z$M)(}4}san{qB-(7_!oY=3N`cRI_KZllY*`NJJru`%~* z%6q#v_ur0gJbQ;WRltjICou&IF(oAsOw6pDoRp)nl;O?l(ju`1h9xFr%*zdjo@XEr zMljWwB^jq04?7z8sPvHd82-w_IK?)|)U1XWafqTFqpu@wVx(e8N>wJMO0v$e*nOdn z6;%lJZY-x*?SnaRj{9>_zLnvUYGW@AaD6O+Ngl zLIMxzgLSw_&Kv$v*v0Xj1}JFD%OL~*iufO zsUdnOn*gFEX(|8Y)Kjb#(@_oH`kE%szK$%8dg_C1_IsL~x*H0iwa+MW1ClPlq@#WN z$Q1Z$(T83ktUyVLgr>4-_P;}Px+LGdg=#CaO zVjmvCxMx*ER1d}^74nJ688n3=Rh=x_Mmt`GP|c|W>Yp3l=B~4LLM2}Nrk>77k^s^X z7h+Nm_U~CWl#dQlIs3$KrQ}s@VoLqolSlnALTi&eLOY9|MD2S>i{!gvzDwMRaZSRm zF!Te#U}f%Lp7&nqXSfEuVZCAb=a5)3zD5ksl9N<-{3Liq6(v@hLUNu@7Z_ZBA%2s> zFT2@E?(3(!Swx&lDp$Y1?%ML^^Xm_XU-GR-dkH5T=faK0SK@8hslfuuBfNtzjC5** z?BSLukOY#hl=BkeU|PH8FCjc8!Fo=Tz~BcQqLfs|Jx%H_H_gS&=BylIvJ$VqC>)a1 zoFZ--kB35?6FRAbd|k-H4}MI@o6$|cAXj=`%qtCtcOlNe@`8;REHPl3F_7A7uM@Pv zWP_tPn3GQhJr(ev>nNzoNa82}?Abt93>uaY!w{E{+HN1z+s6k)Wy%}_qFmP03mP%& zX$r=U1wCmHJBlhYID*K%*}a3c%}bVGl#>Iq1W`Q;ec8YaSSeWGnR3ys0P7}&Mo~S- zzrErO1vpb5So4VF)7+()(ex5+HbfQKKv3j}qAvtZQ3{FPn8jg$gFDZ3 z1)Z35TFn5Il%|x@tT<}8)O4jpRYg%FR|=FWUt4drsx+$pmP7Q=y1!E?y8IQJE@!72HHVlm33=a)2*+! ztFl|L;(ZKn^D5F{wRWJQu)x?X)2cqA?!r%#?wVWMP0+QP>9y!TEhuSNkw=9l0OeH_ z=5at8ozNsT+TB=QV?`>C!tyUhM30?ewI=RBq{NQYV22EaLeD!~_|h8?S?Y}bAxX*3 zvwx!|2Ny*o42|C+ld%q&sfi7y5U3i#-S{aD-*$|(Gr98o{#mC`4HdIKbF2kQz5A1m zwCj^(>8cvJ|1c($%j{uuk+YNu*7tp`x+-@bi=Nmbv15BG#n9nRS8=qKX{pJY_{HQ9 zn?=3W#89&_JB%F0G?PRnx0rs;k6?Qenhtqp^S? z__MpA;4$^&u2f^UmF7W9XYTdsF3f@!lE;h7ahpVow4xqVD_iuf?0b*sz>*-!X_kln zYEfR4yG^097kV;sOg9-m8$p3xIeCtRvXmTHW}|!u?GNFzWmV+tkM84h60h<*S2X;C3ZIX7~&`j~DmcE*w*~KlT6*vDBSIJeq?ky_oC(V|N z?WD|=a#Mp`>IoJ7Ebes=6DhmQ-$ZvimTj-#D&FZ5drz%FxnPUw|1dT4*j<9MQPJ&G z_3}Q6j_=(@KKH_KicmGxN%5d)Tj#y9tFq-cCcVQ05$?knjWRZ`K#!qei$aND_gGqI z;R^r6#Ws>^+kASx=G*~&&90)|l0iP&K}OnrgHGaIAgc1Zh1$r6=+t-JTJQQmJJQDR z&z0O%h7TraytSrF%!Ey1jl5HI%E&31wIr!c1p-k-j9edk^dRy~x>tV4{wb?3VGB9# zC@G1p_*#(i!ChANDy0Z2npx2jkK=8#jROpS^dXCv076P&DK_NH-J^KPErOVmsdYWs zXzNT_GP(l@|NH(=G}T+2L{eZ04ik3zGWMkY5z4EE3=Uw@k{GBrOy&*?w~|nl z34@iSvRG6sScBN$#$)NQ2rvW8B?ER#1|QL)0h4AaiR}S$bF3gsN zG4eUDrS3LZ)nbWxhC`h)qkx=vu(ohHD1eMhkSJf*LearG%LcrTXQK*D|YXs(DzGKPbs2}Pu7;z)q#kzoW#saL27vS85^ zej_%1<81}-utf)RCUIQjs>@>FSZ5w5?ouj12vws}Y@xRWr@34qapx;8QqLPRBmr8f8k1W2Yl#{x(BCMOmd*6rMrhhjInXHNxl zJVViLG>>kMSIMOjL$~#eb&{qmb9;GoCO^IA7~ZrAKKnv_{g*HB_q#vupAltw9#cjG zfyI(p+Rd*RTi@X{_>HICDufjoi6|J+FrnfJ1rrJ>EG|OBbw=c&V$@Q=1%P=+fU|(t z8*G}XDYR-CBIS;i1$M%&8tmw4FIBruvP`m&H0mho{JfG(hETn>4#GwkXMM?fUdPgG zMC3?L1R0$Z=@XO44QjyS@`)ySjmRXGqI|N&`=kI~QAs@h=mU2d(TETPjdmfTH}U6V zVgo!6r6lnKybNN4C?|&y;Ph5R_zJ{M<{=fUQ5?4k zw7Rf3y>x6iv81bW_}}t8*IW8wKck^}c!l@#K}z9HXOP{Tpnt*;oCXcUOj2C1wpv-p z>0_q@wx;78%F?x~%3rEF1_xlyV4VK_7d zMAa?L4=Ybwo{*R}ZDm&}1C2}Lj<(H<41=ms_425*P59G7vrUKH`9K~ghYm!| z(_J+rSIcu(EL6%-v}>z8M1_Kyi$b5ZG2@w9S4JCbm78q>&QL9v zqO3IcJVd>oy9%95G#d)wi5_fWAbmkI=8Y0T^*I|2f-Z|#*8Zz*|FyYvw?0>ZE6T;8 z7+ckal&QE?z%P8NQB?|9=4=}%0?0dzOfiIzsWQ=Rd*8}_1Tt^rUh`Z%3iq+#Zz)MW zAI0**c4BRR`~Qq&xnVe>7(|}G%+d6=VrK0cl|5Ghj8r@6|jk<%8HRXsMh?PloGNIW7^WLY9Dr9nmh+UGsx(M|{@ z5O+btA|EYGOpIzG2H8n#HGbNbn|Ub_%ee_CY=m+}r3!R18Br+qIXGf(Pd0<91w2s% z?!qOR09h4JlLj>} zJ6L9AA(QNs^)drt|85Nuw4L2x8!w6U6^vZ!HN*r;2rbv21gr{RJ<NvJk8U zwFSyXXVV{Cf#IBXa$5|0I)~`u3{a+o7?*J~9FcXXnqzr~6hlO8dPFF$MiFzcGW04a zDT)gsP1>L*Gzd5*aR`-UC@XK0m*ucl<^9*JJjo;3Kr(l*(us+J9<)i&IIINK6+(`# zZjpg3(sMcrE;e$F_1V--urQzQu~1fSia=qL zq~aLL(zqLw9#R!-fS24h;|&6&QPV{0I~pl+}hyo zoGa!R;_(g)5{2;m{hJsTc^n&%5t9^_7nvHIEsv0J!Q?L^F-=KP{lDnGZh?Wf_!$)( zBrG^YP+Vwqe1wpksIc63z8`_**GQItQf(1Q7 z1I2|#2gas9oBWXyl@yl$H!WCsi~q06>cSc`3uALjqq|eCcq78RUIE=kb-6L*ghd9& z9z?_>h2=%224}}R($0QkKt)JPPEb=;SzKRYWoK%w@SHx(O)Y=0z#w7aA%fyUqr)Sl zTFuc#_$a5!Bg0kWgLvy3k12jZ* ztTagvo&F!rvi~(_`viG^n*4o*2Z;!Z4UasC3CM~|3eAm9BfK~Feg6H0AuTyUO<84e zeTkKwt8M<#aD$(BqQV1#hKGa+iwKSnjgpgao+>V{sfbPw%#2MA)1L^-D2Vr4|D3uuVwNU7;bstRk*FO1yis3B3eHM-}D zbE4oNVc}uILf@mXIP*F{a-z}#Gh>s(_b0$JN@C_m^{2j$N3TmtuMcdbhqmSxPw!9< z7$E2w%6jAJ(;*hm4e(oTjRe3BfL8DYGUDDfqs!b|`b5$r}CtM()h*bTeak*Q!9z5OKk=Cs~1^ z(fL>2faT8JNk~ppd4FZf@L&1{1sNU`DlddO%;eVyDM4YCy)|2mLV^Sbi5s4f;?(sC zZfa(F&eHw^^$G(S91s*3EH5I4y36Fx+V}?|N@9w#@*3l#sVQH&l3?C*m%oz31V#r) ziOLI2j?a+M(i3&|IZYJz|G3&8`2Vaz2=CvI*#8}ONy;j#GVYuGu>T#c&bcDiNHaQx z28c-u!<#+UI5r?7CMhg0GBr4RK7oMBQBt257j1b#O<85Jy@{2b>Gc6m`wuvX*HFLz zS3Exn3(kK6j*sxa&e$IHyz~eeF+o{%jitRgQv&}_Tzg0T{4Klw|K@#&=t!yQNvg{H zIH1tgmRA^=SsL4$eBEF`wA&{B!Ifn-1?9AaR0JT%X9u@7(sm3_=!YlA zW(KB3<%A^UqeJt&qSjeMKu${tg>Z6wW?))WUPu!CTA5pHnN?=_0R}~c!$QJw5uoSI z9QchLT@hqjA}kgV`gG(;K+j9@(2h+3ThYbIy`hzvjdgi#QAJ5TVcHSuwS`qB_0*(vL^K4{ zqjN(O16h-v9-SMS7?%~4GQo|<21bSSl?x)+5f~d71pZMYCb4{&h%yWmeRvS%{Z_H{mm3~hc^?B*_eVsx zwI&D4lW$e5>H|6cZvm%t+ll0?#`fR&ZfC$!^ips9P-ddQvmQ@})0IBi=`$IKi{(N| zS#<$Rlv2ho1#7VQuPTcnfUO@%=oeL0u>c(=39>v2A;26yLZa<%cr~-JkFBezCnhAK ze@?ZLdGZCT5TT}sQqyJ<;*mk|pm+!>uY+4N6YIjNymNE-OEnPz{I^pBvtknBkwNjG zaDZL~CPFSSkIXS7yE(WvwX-s@FRm=BDJaKi*-cQ=(sF1i|NN^YkIIhC}?7s$9XRPGH+1a^l*5RADhY=)mj z8?g{!tz7<2EJ)+G-PJpn9u~%Lhpz$RK9xmjyNwd~Ap8z}ElqeL?z7asu#eM1#N(JF zFf1Ax{a(~*);EzIkpT?$Yvz%XX_6Pr`E|2n21RLse{I9z8WzvZ@EF~k2a~97!DKeF zuVXkkFc^(X0|YQwUfm+^*9>G3^QlkY!JQBUk3<;znYT3tu+TTstwa6s?LfcBaS>AnEgRUulg&ti;wU%><97{7gDROig^KkoHy@`wBeGEq>*vPe z9QXx`#j0qbMzorZwMsMb%U!?QDm3jbKJoJ8#>&%UX_5IqWGRmim5K~`F+oXLX?cm6 zsky<)(c$>P$Y{82Z$b25Z*PF`SwYJOG)`8}Y0bxN#;9acNi?2PDwYdn;|Y+=X*L_q zM^nNR`tJ^Kq-*dpX=KWAKB7}9mC6rX=L@o~3Ii38{0ehHrq*n?8}85Rd^%d4F9*(@ zv=-=6f{oF7J4oqGE(Zd__tZepF1f3NAX!PK$+y_PpWJ(!b#CqDy?4M+3qudoH6>3~ zRn?7YTh~?XfnnH|J(XtJ_L9NEX7(NHhUB@fo3`=2co2{C#wOw1M~ZQNHOF|rA>^Fz zm2%!;%=x!D=bXQxcgIHQJu|*~k5uaYYp(VV$DduJwf64i-Fw4IoRSWym{t~*(1M5- zVK|99Qku&6F$0O0I*q>`RN3&9&uX8r7$*WkR2WKKF`7g|Q9!I*F&YiWL(^3MR)Sz5 zLWa>%vJi0*FvJ8w3`lB@x!`^iEb=y7F11RLPO8>FZQScM`_;OFkesHjy2jsA)z%kL zwAVN(x^AfVRO^%#yA2-0q?5`evxyv9^SrNAYc`m8>#R(DtlSJd3JCR8b~0yY`_4}4 zIyP=y|7A#m^BK=6%d&jSHO{j<`_ENAX|bSQ?&~0A0L7U->HBs;4EmOBSjSmvZ+}t< zTcI%NG`mn_N4}wcAyp`2D!L;O{Ef||OoJ#6XBdYdaTH)syWr4gDTY5Yr|ZHNq6ji2zVR2U>Lk1aqLW-Iby)) z3K5i5G2{S57{&B3l*C_7<5PRzkV2@zzm2E%F~EsjW*v#(cwG1z`Y3=_`a(8(T|)5X z#m{lXD2@s*bQnNWM;(9&q872)>Ax416MSCSixBL7hH=LNA#_|ZX-_)6u^i?IQlv1k{zK@X_ z8EKoyuUABsH_hMz$w0JUElZP^P&%Dt1PUNIn5b${{EP!Qka_SSC&`IdnS$Jmd~~K4 z7gaPgfixLT^N?~<$T~}ZH0S&oBrrHo0Ek|NK93Vye+?J=hz^gleMdA+9JxECUncN9fC&=iwefBPa=3h4ucL?Lk z&(LxoL2eKTi3pJqeFOJEM<96e<~T9`b;MSy!HG#JJE-ad1Qa`%sL04<4|Fsxi%HT5 z#a^@`;pg{PsD~i<%0r5rDr+ z=iZ*Ad95@(Nqp`?)tKBa*>_Q0?(zjPI*WT=P65X4m|pH~){Mi8rwtZBk7&l@{k90zsAhC6bmJCAZZj@}kH@sSutsj`1j zH@^d9lMqg@uJ)r`PO%K2*5u6;|K$B)c@tIF@8cBuSR0d~so* z2NE9EV2O}qc<(gzLt?bS}y1*7B1(t#e<{sjvzjp zK!8GAX|e*1b5g;TX2>eCU<)C0KNaE}W87vhqYCf1e@jQbz&Y=5L(wqdpZEVNpNAs6 zW~E2WTRRhVX*AHRZsu~dB^aveC1#@^; zVPi___FGdu_|A3teJZ1St+kb^w!T*0)4vP6-w#hrp}W)Lf9-b8J?o10i}}qND3hy( zOP*;MV5-*fO7pRef4hCle;)+&=d_V14nQ+OK@nNK^cgw-ZIzzm{zplX`yV?UMq`?fbIbhBg3?GFg>pC^DSY|o7g@6l6<26!?4C{Zpfyz+t22plwhVY8-n zw!1_$oz3~Ci9p}4U3q=$1giR`ThV6sT<-9l{F5uXg!_&x48I^seH5S|5YB6J&hO?g zrePK{&k%FZ5Vy~exzDit*Pwq1#RETjreS3EHd<4PM8!o0g$2gM|NHL4z#9Vyx9kOx zVuhgqF>gusC&M}G*6T~BharJs0kZM^yob3mx(*^^v4_62sf&_J!V$xfSonqf#WfxM4MRrb+ z7?$eBsdAdXRg-;{w84SnFiQ7jU}A#<$7!7A(@>iAvJ$elks_(rlS`^}{6A??s%^!IY#!t~yO3v3?4&WJ z)xHD>HH8=F7)HH&fB=k*7sD}@G0naYAc28GHnCxWp;2*>5dy{A+7X+h*&+qw*S2k6 zM%zB=H!%GRk7Y3|!@s>bZJ6^H(LJg@R!T|yNIY2=JfrtKrOsnlhp`j7cYlMca><1I1)VY!cHb$3CoI1dQ za{b}-7e*W-IB^0UN+Xh#uq)6$m7dw=*A`cUFR%jy4Ioh5a5%!105;Lf`J-2x6WE)@<&OB}3tz5J+WWQdkdq3-J0u()ZosU^FDrbkP6fPqeXolNA0I?+S?7}RKv(9FAPYQ=>mP4@bs5$V zo1TDM*9~{_(EV+tef)gC;!ZA5M`scF3sQ^cEDEd|(3*oE$#szF&`)7aQ;JOussr!x z7{ARfHo^;8Z^BdmL1w5zH59XNdBBDVNJQ7$+2vmJWa{RmRTNj!xff=h`d-psEv*`z zQ>Cd&3bN9H)1v@7r3tk+*Z3~Rlv+E{d}sqmV88VxDU8l>#i5|3uNwl{@1?F5O zBy$J2lt1ub@QbI{%&5%E504Xj2BpLol4>=Z4W}{Absp*M9X$uuf<@_*xJhOyoy6k{ zO7H@33-5}sTdMdP*WP<)FOjHD?Pu3X-2JS7djF8AA$Rs=5rj+~gSiEkFGym?6sl`{&QwzJHXN zMjX0`q?(E>yUes(z_qOpMu=hzQjVFYq8h8^R*LLj6_fYEoXYn{BGiDN;I(2{2~@%n z0qjMx7ED_~?L{_`!nXx~%SIOtFCJiGWM=5V)Y$(?!L!5DVtsz$hSZ{)uIi1oGC*j>V5M!Xz3e`Ikb?;rK%j!vFVP5$%^?MZOi0J7FYPib z`LfSk29~h`%!kU$%gW2msc1alL!``5*t5XLc71c1JBsUv*2v1tH28q->w2KH<3=_n z5A3?3v}rxx?@Fp0RudW~be&LN$2vktCg77FUpi`VfK)PtJ{qM88Lvzsp+kO11KyNl z%=lGRWp#y>rAuqn7w*!(Q*P;NdF{`1BC+OGEd9S(tyU}73lxz<&1kh!DSw@$ug`1O zKgWM>yN3rpl+uVKi>O$MW}E+7+q*fg(G`&*2geonTb`7-cJI;O20N_&g8U@_b96HEVOz1e&}8^E8?)_O1A(d1lrO@-T*Kri zOt5K+aZ~QdTXm8$<8>>CgER+QG$ zrG&gfU&+2fN4IH5`S5xF#N{}k|7xlBhlA5?MS@1_xkUk|!DzR#6Zt%ZkUhq}PlnpD zwh%?`Ho^csoWBMVqf@EHXO_!ripg!0L2V3aBcaC94X4y!7W+antfNQ=@(H*m z1m=o_)OI1^;>h4FbT_H)$IgN>v9amSFVp}0-pfccnxC#KUM*&cFqYGoC<%}WX zw8o&Q&Yc$fh6TWweA|cR!VnaFkVFxPOlC^Gb*^q)=Ly`&Njz%NvNjf(P!0+wOUei} zKcLBjh7)#WuYA2|Ip6S@Og1>DXErW)oczZ{IeU74TY)>Q%BG@r(_jHQ;j+O~@V#d) zg}s*Q3nF2S}m zyLcR4a1uF`&XbZH^FZxvH{U%EJ@Oda@h4(U{RyZ!r|5u`wQ;c<9yRW^+P(e+}HPebSW2p5HnHxnYhNPM5?tzyFb@oxr zflCkLO$SNJ`85kr@!0$AA%(H&AI2)Cj3%SO6F7JT%?0tAtjpm2_(gp9DE~!0Zw}$g zHF?z+RD*JO5F=w~DGBI1O1Jcl!1&c)5$4!Uq*jm!jgPHtW~dE-=)tD~Z!V_;%oL!!`L zIh!C>NCfX*QJe${5Qv3w_Fi^DVJ{xd50U4`P+W&xV*|%IOB3gb(0LvGvzU32&)CWr zd_j<}`JNCz5@Un}InG>HT=ZeCaqaHP9{&~%uG>?o?B%@~YG3Sa$opy^X0#ves}1%i zJqi1>IoX|{WzD)1T3*!M`frzdc4^Sdcvm!jJMRte9eg;Y_tM33`|Pn>eWfpTz3=zU zP(SJSO<4Wz47B#$6VJV;;Q2?Wc$~`j-!^sR7JGObg0(DW4FiH^v56sUVLKzefw2YN z`*?c6nE=afrm>epp2763&M<>>TwpGjxXc3oV3G5Pl?54nH4-vwuyI(2N0trr)6bT} zZ#uW~nCEozl5e*@LUJG!sXzc}!tj>206y@M9em<5yZFjiPVk*yPV&!xXH~!;(432$ z&6Rk0+)G@*V-Le|v;^lY%5ll57G8NbUXZsDvDGAz#Wanqq?UNuZ+?ENuxy32#kDeo zclKt9^YKahATHPLqqx(0dE#!H{1T7bE?+peQ!xytPl#N2chDaZ*kNVAbX@tb-Bg)l z6yY~zrQ|Q=CGo%V>$r*5dx+>U-IVGQ^*{tF{YYQ`{@%e(c5#$prU02HOoT^yjK_J3 zr+Jo_d4sojn@{E9cO2*&WLXj)l_^ zxc|4#%E!+p?F$ZHRjAjOsLq}9pGhg*b}&)pveczko6wHBAsAM6PHrbmtcJYZEW?P1 z_2Uj6;})o}g{6d$_3@4;wCQ2EzTOdN>j@nM!C|9=NeBc`c9k$xj?^!vWRhXdg(+tl z>|hBaHe#$Wf{P23>sK5!sz)^`M8RK{S5f1aQvd0cS4DlixOpo~zU;HgP^mhrPU(EE zCsnP}{m{2(20L_ewdwrz@7-7dA~D{;B`+OyUu=Gg5LD!VNb27H*45qEidMD?g6h6^ zsSok(jT5O&Ln0w4S%~r)1B!Mxbt$GkUYQO|aJQfVApk3w9ST-3JN_d;wC#ASNv}BL zjwg|29W6OIQ6?{?DcgA-!cYV@pv2-Rf{>#Ucw06gR6I8R8E7MdpQaiRxf@;i&7{Bx z0q_-qpl*kuK}wVW3IxIMGCY(4#@#NTY8( zg^Xv`VL-y*MKNKbJK9LoKHE-WxUh49GI~54^>_Xd2&K{s$h)cAsCuMFaWJLmv8!Bg zaQU6QdcEqp((4*K>$-9|SVV*qw1i=+28_6Uz)5!vr>qr5?G#Q6|99%%ZU^@B2Up{jF~lc3;;;TI@y{ ze!iO-;-NL2Q+1h-j`!CWX4j;79BtahH&$Xb#>Z-PY{Ay(*1xqT*|v?&vu9$n?VrMY zj;Wl_HG=^IGrCB`r#I28Z{IKavk#j3OG7&A@4l4q55FGUKO5DY!}}1|JTJKRtv|aP zpO16jBJU$5y4@0d&Tjkre!AOsyx+9w)D26kG%`}I<)tYlS_|?=uxO1gX?iI zJt3hdrS+7oo|e}$ih35I=a71ypchEmX`m%jEnDiWwN_lyIhQ)`x-Rf_(apN#R$cC* zE8TRphpzR~_5Ql?oNf-*t)aR-On2UHd*4XkZ8`bX{P)TLU8#GtE5*j%4Lu z(x;qtY;wecGk^jN;2;WOAPy2B2~r>pG9U|bAP)+l2ugqeWk7-osDc_8Q)U7anZ#tK zFqK|r1ox${_{4KL;jax}Mk?Wf+|V_mLIAiv&l|NdgXF4ntx)obMDt`B_m z7kamJXBWn%ebzVxe|4m8?T&66TY!tHHNk8T$khMt8q^JgGk}38z(E4EfCf~c)5u)r zFpmXXVZC)WxZZVMwcBg3R=j_WyY4#|yW%dP{N>sGV9)j1aroe{*J0O$u6@mG-8Xym zijF(JPu#LM~)u5Z0}q?ZSI3s!XqhIWo`IUZMXyNY(%ft8fNz@z7Kh%-El{LgKnREXMQg!jwtN~3l z_tKTC*KQErq_q8jdnB)((O0w%ajVbhF~L<<)$p2%xyRTZy}lx#`4wjD?w13 zG38+u)vtBr{l?0rXV5h*q^3vo(aq0!=Sg$O1aNv-{k5L+&`Vxv$x1ZPKOUpM5#Y|^ ztTD!!Nta7+)y}&7&h(n`U9h&6?EVIWiW}lr&fI+FHtW}4IiMnP#%a=7pygbHDIUs# z2m{31DCpS7H*k(-YCmPvXSQH&C8T^Oj>?Pte@}So^TEKzo$R7tJ6-)Pc%z@4iE437 zOF9}9C9S;>NV`8;G-Rd2)5@yIwzzjwr1#GXJ^x7qsd(DyP65dykK{-X6G)PjwV>ZC zj@HpU1b}StyYPN}znHoy8$T#CK!JNTm|J-*;pJW`5hEf&iKzmU!r+c$-R>VaRSZfC zzaFU$7rzN-9-ih(M>SgWP57P2AOymb=YH?lPdpJ$?E0v_3MWPbj&II|+{r~8kI4{= z(~16t4vdsMjt=O)<&YB`YsT@eQ&8wQ68?9ZB95&A9NRyv{$F2?V`Fgi%BOjDwCFwEr{($W8!|vl0f7bCLu=R#KD3ECsnG z0CIcA%gr%&1oqWI?yY=O?vE>(+hqGNM5r(=GiB>f|+KMJDHAi0#6^Q?K>y!pK2eCo6Xq)%rw(pUhbkw{}_JOCh# zHssC#U_IWAcaD?1nXylVj4v_1Q2W9cE^D88Q^fsLrSiE$-gSWS2lp?}+&_F6`&|!y z?#DMIPh8%_q)J(K1Sm&D!@IfYi(5hWjgjj{2b;6wULNX~7$?W$YiIJCJR2YJMs!+o zcKLXrIXA4X_)79wS|)q=HP`Ae!7Q`QF;BR+Z>Yz@10Ie4xBrAEXUQ%W0q^*L)2cGB z`m%_>L?}|#E(I1k**VR1{_LzYd!^N_16|c~_Q$d>6_;zKFqvu#`K-(k}RhfZ+#L`P0?^kk===RyisN_DMt*UNCH95>2M;Tg6m*(VY@?u7leJlbaFHxrB?>p`!dr&$@mBcD z6uz=WxKAQfo`~^N#Q7~=$QLgah*t{5YgJWsElpj`*B(m6BPn~hkW5&XRT=K2=WX#% zq|p&JH_H@UyCU&Mu}DxN63Io9Qjy#u3&$Kg#cScjdYMZrXbY}>RdNU-D$^vcWE2p>AD<$l79YCg#RSS z6o?Ff32E8M(~~*f)Smj)Km9XF>|z71mp6 zgH<+)SP}Y-h+IVMViIdf?R+WNq?}DESo7Vkc;A|F^PgekpXTLX-D`X*?!*V^y50=21P*8hF(x zx=r2)XGy|citvysJf#UQ??s>wB1o3-^I3%XA|ibiQL5`|8fu&B+Y~pcdNhg0l6t)L zy+XI0UI+b723-uh8TBykWzxsApIOoD0dodz-)hG;JD2P_#_nV7InLhW?c45FS#Fmt zq%}h85Y}4Zb&6=6$kvN$gSdLcizi-)r(TL@UI|BkM2f#6)qjz$tf;)CqO7u_p`#@` z#IuA4h5CI_&j1JlL!kLh;?Nv9bA{EtWhg8TPsl&=fcN`a1QL}-XE0eVu%c?ZVS0^F z{N3F1`0ilYP8Thf&RUt$f<;T7&A`k;VCAvZ00;s@pfIl?3JHsdiizvcM`OqoV-vZ; zPRS5}Kw_{sJb~!#s-#p)%gD-k(u7K*GngzNP*AH*QN0`8@-OS%`i$DzT_TVAa#X8iVM?XlpG1c~d2m3Jkt z^H?89_nXW^_|RwBetGX>hIf9gehyML9iaNa>m|q{iwuxMj&K-x zP(q0`h%(BAXHh|ga2#K#5>2R~Ms%Z&I%ypmXb}EE6HP(|Ewl)Kqm4Gvjt;tn=g>o+ z@Gk}!kZ!^dL(&ZxVMMwaV~hz$F~Nk`h$&`x0p^$!Em&YdbYh7mQNRi-(k862ChD=l zhI9y9?C^#?_CzZVI1n8;;z+dNgcE5C&Nw3jTyP;A!4+51blh+wO~oB|(qugFAob#j zC((s(d=q{6!4GK!zxXBQ@P|JVi+}vnoIjOj@CCk*-UC122bC7^2mVl<1py!c(mDtP zfsj6iAP@wpEd+xQNIpR*2!-??gn=+9WkEOyhw5;M01;4?0FfXP(q@PPQILFuXb=r) zH;4f-P*FfEcn+x*#DO@dltVnc1`T)vZ$JwYAOYq>A|%36NP-mD0I84)n;{J{;3CL` zOt=cNAPdn7cnfdA4ZMR-;0->*XQWpl8?qq=2Dy+6zaS6tpb@^oH$-dTJA6k3 z!w<+ubcX^cK=gw`C`62fA}B&khGLK-w4oGA5&G~4{vkHPfB28s3T04+D1ve*N1TNU zs6kwYTBt>O4eFo{aUbfT5fKYb(1eJGW@tuy0R<>fw~X(=19*Vb5C+14CLkPygG`73 z5kONA2_iujM1d%vD@226P!2I52IvQ|AQrTMI1mT)hZ=9N6bJ($h_(1I01~j07zRNS zHj=||sEMOmVI0)PT}l`asdz{W6QB;B(!)&1AV_8y16jDr4)Y<02)SVa)Fo10SP1z< zDF}<89?=TJawuYn;;T^^2u`CPFeT!n?)w1;?hs#MZ+I*dFGO?pRPIAo$;S~6g>plvn!N=Ti zDx3kQxw$8V`ZDx{uP}BdEQW81aW;GmexT29VIKTWxC`MK_>&d>3eCYqIQ|Yj;2(_q zD?7Xm|6w-@9e#wuz(XiZ_yY7R40_P~311#T|N~gy1)n(8E6{VK;moKPBQ0 zh_fOO7f_;ZjHAS&EdBnYBv5k5Nr{_Bt!P#CW_68bO-*L)WHq+VM$K)qT^lE;N>=;3&0>FXTl8cWJt(ByUD8@quosbQCPSxx8iT6bkvHGZyXRM&NVqt_jLyR`lYaN+UR$Mq%>nlpwDV2*RL=07E2XL_t9`R3rgQ3^*q=lDQ_(^vNkdf|oOd)PQDSm!AB2ivIP_3}AqNvoz(6Lxu0tH|)4OqHH zCMI6Cwl;O;isvRbnR&DygVEo)VgGcj|JrQXUMmjf>MMU+!It7EZw1?`rv&2E)ukF5 za!pOwY8j!Bcm{zWCK6@FCN42Gbsa@wCY3sp*>K9HO;^~mcu`T&jY>*hKpInVY?*A=F3g`8fJz8CBBTmqPK2nYlm}z#Ip-+| z8bpzoBx#go(TZY|RwTq%N;xy8hI8&hsFRY1QtGwlX^aMIc{!)edyXo0(@nZtZpn1l zU9x-b5n8p%vSv-Lb?bl)8zeSua@p8Ooj5UZb8F+_G4t|z#m8si=hrSEU?(W3Q&Q5Y zl$5?Xv*%QimNqIQ1HoX%;BbEetg4#PGzq%y^b8+f*EH!`7G2w>=Qwz-OW*VG=X;L< z19g%R4-_Dt&=&DRJ;WQ@AwDQXe4#z!ha$uuIv@ckMgpND5`_9lFmysfP=bU)XCw@z zNH}ysB2b1z!bBtry^v^_gv6jX5(|?N8Tug4VG0t5zDPVwMP8sE@)D*Yuh1WP4bzb~ z7=R?e3?vZ)ktEoTBx4qm0y~gY%tq4S6(k+kAQ|u~l8GHi7QBYM#kI&gcpZ6J;mPBo^jf~hgXeJ;6Vw`I#>yy!&-lydnL{KHDFoPz&X?y@j-)m7tGtr}BNF=5S`XV$HI zX~TxYHf=gcqdB6gD%-YgC+%dn8~$a_HHgtGVb@J%f8!BqYNpiHJz==6L_<@#j*c>2 zU6p_yioO9ni{&w!ZQ6kYPr-K8TAq;x2-3ml+aM4U!6G~a!4*q9H#YVF!<;oSaSF$s zBM7}RnJdKozx>-?|M6dE`k()~y#M>ZZ_R3@eFGdFm-z&6bX{+lo@i^ff~?v0*k*gS zgC0BV#4fvZyX|&{J@(jbZ}x%w&3^m+%K-=c$3chu!(oU0+tC~Y{S?O?H|8`YzXwN8 zmiZKL^gKK6h4VSTm$;w{dYOynVj%yWOW1xUF6olabt#v&XRe@(yMd!u-hLLY;wsK@ zRabTP++A6|29Dli$Axk4erV=fe0>ggxG|1!nr~g{N{d|GS7W1VTw}58TyKdR-DsJc z-E6sA++u&Xxy?Fvy2}dpxYsHVc))rOddQl2bV|Mf)MT6Agce%3d0H#!PEgZkv(c!k z8mCsRvC~cQ!=R?$=C@$B*$y|yT*sJaU%TvQp(C8=M8`S9*=}`?b3N!h7rN68Zt$=- zyzSokUMU|BYPI>bFuOts*G)#VuO8D|dtZDfi@FkTq~$?g#lZ z9>{|rYcvnp{3Sf%QO|iSkAtj^aYQ(u-d7s+YXvYcG4* zqh9ff!s}l5$b6t=EkM@~Oa2Pz`rRcf19WS8nhD5XLo2O(WR%g~H^vxW8E=x$EVkHt zmRaTE0I{Y1`O#B7-_Am4OFSEJr z+(q8{lzTyghuc#?EP(m^gT;Pf$n%>ppV@>7-UawNzymrWN?BJ47bwe8=HIGpv4p#n zVJq{A>G&f6Qg&949m?*Mu=k9xZ(jkQ^_bnEQ)VhWtaT|FX$G5U6hv*I#66-dh4@Xx znZ+95x3Lmfs0CM1!9xkMQh`dEDk%!prEn?BKh?vGWaDh4i7ymB$jECdj#03iJC$Q~ zyiMFw3CSSHrljlY9&~~7;jL^T=9jpiu+i*(y((WTbJ9f_im2t#vjo^Fu>~@X(SVO* znPg+Fo+2n6aNa9z%YSWx?aD^DJ^d_ z3?6a;pE+!z{u2QN55EqbyVI*m&f>>_N-rsJS@wp}Ti6_@Y>%{8DQlz59}vGUI#3Fl zWewUX8&SWk(GVS^HTJyUTY0%EC!TMts80DHY;k1=S2%!zoGBtRDL`lfxR49dj<=3`G~$9ghrj%V&HT6aRFW+bl<`v zuWe=)3u87v&C8G==b3F#JJY3v9Hlas(4^PMQ3-d6BHBU%q= ztkyCToY?5Il^DZ4M)PPa67Wp{KNRr|B4r%`=e{*ns|XlF)c}+}ahr5DT=%akhr&@_ zb0r^_^2BD&d#)-;(-K)iK2~pa#BmgEIhHdN9}LSLf=&`QN7}h8QFK`~wwvr2Jewj3 z_>r*8cJmAt!2#PI&t=E05zE+r_q5Z5zHIRj1+59YhBU4lu;y0Eh3%<{1smeIX0|P_ zGB#(noAiL4CWgh%j0=U1xCJe>ok1oCa1E+;)qiqyMD?xQGPtsujWzHNcmg$+{KvtJ zxOFN0jhs)3SOI)sDLQu*B{(3Qhy=kNfAyG?W{$H$PE$qQ*c)Rn{W#> zI>4bg8adps>iAY=5=9fS4zC2FRGEWX)f}?1(5W`n-C-UQVvo2`@*7b;x6~ z;gWQo&?&yT1T%}Sxr#!0yt02sX-TGH087 z3SIs&8!EHA7=hfhb%(>WeGDPZv$S&L-+%W(2I*Pn7$Iz)AMsHck`M!bfTI6vFXz` zP0fq?tk7{e&jl;n|~72#}giOd~l7f|%Q*k@!u)qe=`j1`?!v z&cRKpPbSzHez`9c91)2azv?#4{YtUdNJIBYrB4yQx7;g%_EQ={(o$DHoe_sk9f@hX z@>6m{$jp}Gz=oPi{KbQM*V9J-Uh8E#_ZPnN6$&{p3Dv(#4zslir)QHbbTjQww9q=X z$4~&UPl`W$NQ^h)z-fOlaYXi+s;_b(M2{$w6S+-a zk6@K&Y{8apdyn-8F@JZQBX}bM{Ap$%`2-_dG{lmIgM;@S!B7?k18u9!yG!n_uz&*W z=sKGjf*WMFh%iefVscBw%o}x9falDP(8+@o=diq{>`j8FM2cf}ypV^fnh{rq2MvRP z5876_J($g3#ZvDBpdICnIga(+Sy#!pBL9F224mrZKNYvfixUq35 zU&^1&4Uz53n(*>a!N85d9=9iv58tH{xg~sF`c!-hVg4KAIo4fbu;cckGfmWHGN?V% z?U94sNmb=wosR*RMPhicPl@lvL2MQ%8!B!8Gs@s0O-VLdvo4jI`|g|)OUakY{2sWc zET4n1YKmNvRhh?0#N!sQz{ z(Y(q=`|Ma*e>5dCc{H3~N8&#SNH14O3A-HGdGSCW% z>xBD^8UYDS`~UUZYk#(MGcP#O;TTC+!&=Yu;7sTbR(B&h6*gL!L`sdB$BIJnj${Vu3Qzy>%Ngr<@XQJFP|_Ezvxzu>TQ;Q%l*F`r4h@$Fq$%ztg0521LjB$*{l(Dp%}&lBtH_gd zQPW+6MU2*;RQj{dI(4qVM9W+o1GwFGA9|wsOkG426cOpDyxsH2L#S8Yfy)7x0jncm@YY2GR{z6&OgW|x+tP_2 z9vz9F)b5owz@r z6}}%2>Xle(=ilHum}dfy%IgtO7zA({00?Y+3r{lwg61r8Za_hgooHyia3rwg3c`S* zyhIA-vS-QWCvv#F?xuj|DWil%bCwEvS4a(Gw}ytRy-Tam{=o{y*Shp@TI9tmK4$(50F7}laU;*-uyfTw0_;Agn2iG3cBvHL;b#Q(6DV$(Q<7GV|li8v@Sgy z6xd3!Cw$Hq<7qthHb~|X@z%u0xQ1b zFRe=tXW1X2^{Fx7UYgkq>L>G_Lk%7Nkzt7c5b*ef6CYN{ zI}3z_f#vUA8CLih?&t^uNmGMH`&ELxrHN%JAKkcd`8DT4NZO4Oo=0!I=lI=I*2J;9 ztO2ye=US4uX&lcG4mdrrC(X106nD)$1=V3>vuimJ=j9Y8F@)l#8qF9)3%NX=#H~WD z)Vsw~LuuIg2aYLPeyQ;Z7=yB2?I6o^8*A8=#Z$g<`M;Lm;*c{4$Ugxu00Ck@5%V(3 zrM$Yyl1~{91WWnQKq%VbJbg|%&ryP-rP z-eqDoP-cBcZ8MHFVxLsmXt#@>QyD#kQ6rN3| zi5uSAaa4NG>R@#4^FCVoqPk%objO7II6x_pOHV82+6?1bZBm?)n^?Q9u{`Y|yKn3` zk;>2}yg8swLE6ck7DhFLjEYDp@Ve2(fTChG@BtUxfJbvAEpZTpIODil11XjH6fJ#P zQAVHku3nNGb@u^#!gEh5sdvrv)gV>$vZ3K_kVoqQ4RP-Gw5fK-c@fZ}wsni0+tT?+blYwb^-zA-m zf@WqgTa2>+jWKHouQ6&|VqQx7@rXUQpsP^6$;LOd$FjHa={R2Y#fCATEw=M9_IA*t z1;-)!tc*7e+p!-9nG!-LaJ_Y2W zsL}CQ!k8#g8DuLmn6o6&QzFq3*M$0rTJ;x9I#o?NTF01M7nAX1mAI&6{D4yiU}&wfRy?Q>eV%P* zAStXn%!;qE&RWbD(G1Ae!_*U;UZ9Ht@qpke81c|J*Xnet4ICotbd@ex?^FgO>6C3- SrKap#rD!5NKP^&Q1^@s8J(ec` diff --git a/src/Static/Fonts/Source Sans Pro/Variable/italic.woff2 b/src/Static/Fonts/Source Sans Pro/Variable/italic.woff2 deleted file mode 100644 index 13bcc865e392ae54da7eb4d20e18ed8cd7c78e9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113556 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 diff --git a/src/Static/Fonts/Source Sans Pro/Variable/roman.woff2 b/src/Static/Fonts/Source Sans Pro/Variable/roman.woff2 deleted file mode 100644 index b60988fe2e9dfa71c4e6acfc6c99ed9f6ff6b7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137664 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

        paq@#zn8_1Vnq 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 diff --git a/src/Static/Fonts/Playfair Display/bold.woff2 b/src/Static/Fonts/Playfair Display/bold.woff2 deleted file mode 100644 index 38ae598dd6703aeeae8636e479a7a76ca1b9f5d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11424 zcmV;REML=iPew8T0RR9104$&Y4gdfE0ApkT04zrU0RR9100000000000000000000 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 diff --git a/src/Static/Fonts/Source Sans Pro/Old/black.woff2 b/src/Static/Fonts/Source Sans Pro/Old/black.woff2 deleted file mode 100755 index a5618c0f6624d3739fdd811e15f1c230de0f3742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125248 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 diff --git a/src/Static/Fonts/Source Sans Pro/Old/bold-italic.woff2 b/src/Static/Fonts/Source Sans Pro/Old/bold-italic.woff2 deleted file mode 100755 index 9b659fef53257db78d72fb5927d9f27049d328be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102608 zcmV)gK%~ESPew9NR8&s@0g%uD4FCWD13iQQ0g!wE0|AKu00000000000000000000 z0000PMh%CK92$oh8-l1(9D&s=24Dd8A^|o6Bm=k%1O^4Q7zZF*ojkMAG{(HEg@*^C zA2irU7OJ4eWy3kOBWmuCHmQ^adymb7%ptozbUc74nM>3S83v-^+WuO9P{NMAC~ij@ zpnbiOv;Y79|NsC0|NsC0|L-RG@t9jPljO~xf8;0WaoUzvODTweimRL+)J0d=Oo z1vzr0<|R*{z?D=&R7q2C1P)N0YjO>>nRUF^9|%1f20;l$`{j+;h=6fNN|U}iKb_6T zt&-6TzMzF$u7o4E-td>NEc0w^Aq~fJE22M>6e3h5g$RgS0vUK1F4%yL63r)cygLyQ zDbb#*2oyJYDxSjoI_EPA2FQD{Y5}WD!kh5prd+*O8onDK82#7#=AH@2i zuIuJ67OVGBY}%Ak;-Na9iq`MvDW$|?b#98LCZ&|pElYGMfxLv`Nqk#45AT}TG(1-C zUeqpxVBA;lL2R}$#@Mo0y+<)2#&>&eRjOI|{N?LpSv&R(EUj4o>26L3c5A`C1MkNX zocn%69qPZ?lk}p{leoHatBG-66(^f~5WI3d(0##FzN_k3dOA_MOHlUti?U|v3>V(R zo)6*Fa|PyUU;8@H^gt)QE>a>RTshj43p>|46K=Ob9S2Pj*pEc&oZhKX@TVu9{LfZW z+AZ0N=Ev-zS-CXKCb+AS6CCx(F(@S^H&S~Y9C?t@q!tH#fL-?3PpKCm+)=X1IPt)a zn~1KP^99(Fz|~((qbEmuBb#|YQ}vqRY|x66DS>$thSaq^Ni((Nm?Lvwts}==XU6O( z8X0YRg0kFk*22j&Uhd;jA;2{o-Iqn_X#q_v9c z_(@vdh{FzS4VFQkXIHtYaUZn6hQ`u^mK6(Z3Ymk=uBEssiaRcV;k zT`1L0y;^;9wdB*9O7`-xPYO3oPj#F_e4kzm{Oy}$` zDgXv(ZT{W=-QV3uHu=Ew)DsaBt%O7>h$4b0VmC(5D2#}iF?G64ojTpIp&L~E82o1E zy}fUkCFvT9heYY3DN!P%N~ef9;SV%hQ37bD|H;>0Z=)%3Ng*jGg#-F`|MMotis1PPg~B1p zDIgGL>;_M`UpdLVED-%YBvM#a>C4Vmod#5DKj_kDX5~fFoN7or{{) zzN?_m#3L#bEQIPT{-3(|ygl#q&<9-5RZAtH8lZrs)_+au{ ze^((0rqqZi!GwwLV8nnip^uPE7b7Z$c@IMdbH)r}K=dI^h(Z&ahTPEfI^`~P4*Jz6 zNs^VM?YcHe_H}bf*L7XDk|fDWFUd-h_9IFAk*s7TD_O}(_e;|K#!8YTNybW&kt9iy zBuTO|R+1$7|IgdzKiB_Uvff&Y^%t`s^?{|e#Ie`dqGQJjHk!&@3!uT$eyHlhMros> z5`{RnFDiitwy}d{oS$d}1^0QLNwAd5guh2ZBfzFRRaYe|e1%+$F&x5S43^;gunW?o zmqp`yT{)ppVAP}~+3Qac@|8j0VDMn1D-ZvF-?M%08;3s)D~?7QwVA>+%OXsp#1hD` zsD5y0fQX9Q5?+)>83q3^wuJvYkqbnuD|s<5#5Di^dE4rTKmR%XU2EM5XF`wm0HzdL z5hWT329gLSQc|eGK#7XPC{iFfC@B~s}*hK9hvd&<}C`Rq@~tJ4TY+%%2VF4g9Pq+@FZgUkS{_hw0>SP1EJ`&iBpGiqDl z(_QwE*BEhOy3xsHh{}qJI-jq=l8bgSAb5@~4ouSNGWn&DdUlk56Nd_fBQH~@v3mo- z|DM+T(!Y6!`m;V=O{GW;6A^PJDo9j)BF;~UqdAwo>~ir=>zk`9@41rig{aHwWB4P2 z;e^ek7-ZR&1-6AI4mjit;1bbO=H{IuV=8Rh5p;y4r^MxR{r-rMfY=ih85&@^2nTRA zuZxPRuz(ewV8Qcc1GWVL6g9T_l90Q_Oj{+9@I-hp9V}&8^@xMJ=qVcKc?pQ3>3`4L z)_+l5x8JW`Ri}P&>NrT40yEQY}JRv(wBAK3uAz=o@IFJWJ$~cN%3DE!| zD29k57;;?adSGUXU#|aW>%Zov&U{VPyxN@pr<+w)4AF%UEao$lnT&{@5luoAB1qyy z1utBs`m(W|_UCCby+Wc(v3LGXE2m-(kk>lE>;2ihb+yDR7X~)cP$NP5H z7@fn6*-gmUhHPhVN0`yZ0b_)tlgJ}rQ@R;~I^Z~pYMW)dLREAeBYYo7r2g)Gei-+N zq@f|n^Eu0Oh&z3PAlBOL?)@W~M8XrEBoj@hYluuIMp`84bP|J4|3Byd%`khz?EKM5 zrwy~Sdqu4G_L^4p)o7j8p+XyKmnuaiK?5E<1U#q((~3fMozCveLlKq5>Y4%PftxPG z20X!rPgR|GLI>iCcpJWg|7b4%!O|q zQmO_>2T*PIka7pIqugmNxjZ4n#by>8y!!#-zxP23|ACS}K1d1pl&T2O@(`br8~Bpy zFi37mcJ)z(Q^(~_NmY|71_G3-NKh3Bs_K}aYibCpYR0rHQ57Yh8K+KhH6f)FnFR?As!dsj1y_3-qyu<5>ELgoUzU7KCWRRcbsnRE|HtJw{d3Rm z0u$&`41J{hB$;h_Tk|NTNF3d5Y4Rg+p8tQTpH$Cdt*x!rc9>RC0NK(CfB|IQz4PYj z&DBU>lD*%f`K@`o|F))?HzUnRvbVH~lFnLz399Arh0AgRU?3PNO-{8xTC)TOE(>22 zKw)@zy8)g0!&AExxU?<67GPWZu7PPKADSQh_nU9FIn2ALM6F%rhgum<1{GAZ_OA?G zgRI{-P3g{z{NDaK*K^95umD^dWZqdft=zP-okU8zODPSN3WGveP@|Ovh44_IlWBqj zp(d35Ybm1wF(Z-il)rGcGtWTQv4*5Vej(h+o`TB4(|2zl&nX(4Yj^O0{dTOO`ujGw zbmPWMAz@Mp*@CU$im%Y}5C406XY<~6|CxWO|2v-|ZD#0m=$A5KR2B*xE0$htBt>B~ zLa`!oU1*F(8@h%@YFQ}p`lr6jr{Vwyg3YMS;sf--KX&swxa}VV=E;L=JHVD`8ATpg z*0PQY?{6U!PB`RYXdM901J9-MjUSo|WD7)jEy`hVbAoxXY8A>AYOPiPEd{WMgX84G z69xuBJl|TZ`gu2WZ=xY3R}aG=T^3^l>hTvU^-}`otPNrYfH*~oJ~^pn6qbKj8&)6l zgMuk8gd$6KoWU?qbRxYqS2B1IEC6hDM6HF{E)m#YjAA4Kw>{q(rDk9hR7@?X!4oK;dQ#|!u)x*K)~9Yeyl)N0jO+vnF-_oADUdqD<~M#K{t+&nL& zW&0cl00U%A*u1p-7MrBuEeu{U*!jzbAryOZztIlZzA)e~@7q!VrcK zLJT|41%x%!cp#S^f|V0)zrmKnIusCwK}(fHY778bA-c0q=noa0DK} zA4Gt7kOp!=5hw?>pdIvrQ7{c~U>yiOtHR#*6{Vz*j$DYT7`gKmBtpD2c}i7jFjlu% z>GBjQht^@xgn6HAId<;W5B8FT&(Sh*@QKSkODls6GtD}uJPRnK=;lEY@u@k*Rc)HZ zw+gkcjLdBmba*sLbP$ng8NiJQW-Ot?$_#)eF$Hp+QPXhN?K*MYHf8-l6nbICqh{j4 zPq0V{(&Z>JO05Xsy3mb~)MRkMCbbZlyNQDy6r$}GQ{snF|Kfjmu4Sj_?ee3&ta0++@$U&oNRg#@uW3H3lS+LRMV1nn*cWCXI@;L zE?`PDytE$YK(pc^bWRg6?wq58hyj9Vk%Bq07Jo};gV1@GDpO~A)sWJ zLChmUdXWR-CrO!pz!0Ir#!Qk`Rw1LrPnI^jFcD+KO%#$Y$KF)?sL)>JnspnMw_CVW z*-mTJZ`Q+3x-M3>O6^81J9JvUN?~!6R_z^l@#@Q#Lp2=(Q=0-}4i!|jjVxU|7m`#^ z*E6+o>q0?YM`UDXVe58-vDeyD=8UY|VC1-|3zx0jX3J5N<}O<|dcw@%W#cTn7z~|F zPtXhWCVfO-(=S2MO;dA9+O&*F%q*yBAD@=ny1Gg;7z`mJ%cwE>j0NKe#u%IOWVY6D z0#~3gm=mq|GW7{4xG*YcqKgsc*zI8L0fR?uw8^*$Q>V?Gw{XQ4JKE`HLnh2vxOR6> znLo0ftM1PNG1AFmm~om#mRV(oJq|hJl82gg>IX-~HccyN*(5MFv$S1&PEEB3VPYvN ztE8p|nrrv=!4n@}x_0-;7eD**$mvTrA3T3|`s}5f_a47^JX3TI8eDNCmP%%_m5aRT zfk4BdU=om1GX(&LL&YJcV#ACjDi%H|HCYgqsh0YhX{$>;=-rkBaYu^Ib&Rb%bs;RJ zsG)CW>rO^dL)S>6w~?p5(30-1d+C9CnD)`*x-i8~4L>`atT9%xqjH$?3dBj3$jpO! z&rFP(#MEYKb~gjD!$P$^T3(-rl7)J2y1Bh5)H}oZcBM3ugVTUOj&kZ~lMd(rK{7!` z$0KFQIV(^YWGq4odM0qltU#Gu{3HUi}6u)-0K+JO;`lhSfaT6ESjBswXxpu8?RHYqc&xS~-1rp=|pm=$N- z^1}DMk?FaW&4csnrvu}2t2@V6Z=Ste-P%9BKJ}glL&sD^3FTE&R}-z*+F7&mbGdT8kb&B*%*_YRag<>NepKq;-r+N?03!V{5(z3#>EAmBtU8vDn&vc}|I?c4vrS9m_-Jyv`3(q$9PhWicd~ker zd2|2t`pwh1rR~>uA9)|2P=j?I2uI^cG>%xVHU+?ORE}7sms5vb7~wnz$uhCuXxVPq z*fw^@o($e(^ZCnHZ#rP~_EtO#^A!1!Xmrg;`rIveH`fwy?cD?ha4Q zKHECH`gCA+f|>G&yw!%NmK4SN;PxBmk%TOY7=p$T=O7l{Kc2@5EKh6%2% zuANRz#LO(LY$UQ2?TMKMk-e%n>&yOYB7Rso&NDH}r%y;Yyhfy?t+6L&mt*U>?d`s- z?b^dS;|8O+>Rod+Hx`?P4FK3g$WGA+y6`w^Cbc5iDmDr_g~bvknx!?sZDki6#3v-8dm~16?$e^C$Y9 zRWeU@DHij=Zx8-Nb-knpF1oB<3jaQr2sGAFoU9GZ^I82lo_sclgiOVgGx>AM%II&O zzqW*_i66o5{rL9>2XTWW_1AHG{TeZALC6+5tG4+Ei9LSH&z^uFlU(`L87-?vj$>HF zme+l|eNa+x+DKYaI}dUmBhutVUxMn>*galF_9C2>Val8(Yqq51luVhkjO+V68Qz6) zcntvV{6UY2EwDbP*_;j^R$<2klGsa>sccEfDVZ{78P|`lA>?sy&Oo0?UP})7iBPuZ zQ(lToW18|I^;0DP1jRq&f`P54!1SI!OHLea`eFm+c>lGHshP1;m7*-1yx%XmCkGtz z>tVi@EdsurrD?0^wBU_xg$c_(rtlkq<+{qar_5Qh_U)Sp$tBwfep8b63@JG!Q|5H% z?{n{t_d7qe6livLK3vn|91>jRZNMizN;FKf=g!JUr9e;!;W`1q2#UpWu>QoBl$`SH z^wXb(K8V{Hl2&$%Dhx*%jDDmB1~C)<*J2BHg~4hmYrF7SREk35z6Yy zxR6TQnFc_F2^Ugn%QiVp2tF6hXOoXl31ac4%xJi2fjVe2a(;6>{%>=u{|$0ZIoQ1n ztN8v?#^(g78la^Ja1V|nafTnL+K@{`^%;iba)Rm2j+R2* zZ^8%7qcw^3zHCs}0m0M4lv%IZiS);-HsA%uO)TOJq zbh(R5mtFqi;^N}s(iMm_Qob&Rr!HqXTer(buj}?il5SZd)hLuY- zZoByVNh9D~7?D|eRoK5v2pp(opwE|j)xlhcl5F_K*|)@nCc*`*jKDvc1j z$mARjNOsq5L5;z(%|3!iZUN%FkDzvgm2IlIOHW^F=X4@ji*Zw>+1rq1o0&0LCqj@) zTeitrYc)eEZP_Mgoz)7dv}K!|0tB}set-ZI%HnN+u_6pv6owGOLjdE1L=i$4vG`hc z7+?soIK~)bd^P}N2*)chUWp_jgq#tGR$(Zp^oQPn31#t)0f=yXn{b(x%@|{hIji{u zK(I}b24O;3T(8AV2zF7VNtjSJgof4dDL}yHL8p=w%IvFrkbKskCLAoDx8U31wVJr7hd!6aXSjDC0sZZP_Mg8C@P} z0%9W70;Do+KrGb-!EPWd(IF->>rfdW!h|v|q|%mcaw-53CX{g@m9}h?Qw4}Hp^OWu zv}Kz~33y;DK+L6vSUV7NjT}h1#9TTUqToMnce&derCv!ka8heaQ>_K-!p=i}bJ^9! zyc?p_tH`EKHoxFB2!)V2ab>|C;6zVIXHU=Zh7paalZn0P4xFw-c#$#J0}BXS2+^*5 zUWN{R5b<34rmDe(H-{G$ckGqM9eWk>&DO)6;L6}+FN@x^8YZ@;w{?q5?F|?Z6biSo z6G2cYTs2b$gOQP0H5h}DkqIm?n3z~#Fql|nhjWidiLVaPJaW<=*sO=X1gMvFELN#w z3rdiTPF(bkpS|vH^{gBxKNXGPf!X;8_Q#wm@0AX&|j0jYP+cQx9=)5YhP;p?U!2fveFH$X#}Og2GOG*c*4G}BC>&`dKe=^g55 zrbh7{h~wIHlmLKKP%i*MJwOEj)LZ^o1~B`;2hanD4xOU}0HlI?0SM{=DgdC~f@J`+ z4}5^({-5KG=)mzslH}a!KRIM_h0@N0%A+UGUc9R99UPsUU3~Y$FMjnKf?_zKA+^9y zS4u}StbaKk3VJtpgEwbMY-YATP(!fy9wPGgRQdn5}SZ z7;Kx9>zZ#*#gB?ky?wNy&-$_^A5J6{a2xa@BSK|r z)wJXHerUM+^P5mN?mkX8eqgK4xR46K(1|38l*kKmv_2Me*%x-vhzUPo6%hu(8*;*~ z8Kk~>6ppZ4;Uim5gbjTl`b}Z>PSa4S8f+-hjdXZTYc2lS3h3Wj3bd}oduZjm6dNgJ zKRSRQzRUiqFOqv>J)ayNgXp-A+(atNFB0zWE1ukfHHcDupCXsYBT3RX=pa;i>Qu{U zqR^fHd%Jl{xbRK;pq|!7(0w1NOq4>J&d}^)Xm%5--^5UAxya_Euqbn;nmT0GLa=IYc4KULcQt6MiX4+1^PZ;3i_CU5L zCqkHlM$pL+MiayoHA_}iUf3_EqZoSzgwc|;qO9q(_O*=z!qj%(U`OXd&;txXqc^%e zF@`xMc7oEDZE{M03BBwN$c^}~h(e(o#W`hCdgaO=QEixknEH(oSAbe`qaltOh zC1yYsn#z;rQV}T{n&o2{tu=(zRZ+{D9ktw1{n(I08@%H3!J64EWc^>C(OsTrCh)_?3E0Gt?!e->_x$YjNZ?KP z*L<7{TTw#GpjjAj-n781u0KYYM~3WH;C29Go1GLbI9AxLIJty96+g^Tj30ty*?%T9 z${jG8R@pfI{yctX#RkEbmaMVfHjnTcc_>C{v}7cg&_*(b8OBPGC#NQj!N$%CM=GSa zTFR>CXHW4t%ctqbDueZu+dXdusO9BRd`UNXI+jd4^24GJZXS!14g`kD-pw z-nL?GZ{lAkL1F0?wcVAJmX+VS@@1X=tn=^AADw(BZD=S6rImwxIbj9LD^!kVD{7he zCjYZ%(j>aA#$2J&+T0q9Br&8~dkm2-O|@y*JoY~&UGCil_5Pkju1IJ~8MSl)0EUW9 zNI^}`7MGBWnm!JPoO8oJ=I&eyDeGFfQP;AIz>Sk(iWLs{By<{?nqAP-Io~#8E)(Y5 z@i9C(zqWgFdHv+&()sldtnD06-k)^S*qBi*O>`bIX5!S@3%A<&7Q@F)o3m&SkE|jL zeB+FZ-k|tWl~Yqo5L|3apo3zymW~#OC~Y=@VdWo-eQPPtnMx`nnaNGGdYbj>YKyoFJuD#zAvG?^`wYdlEi2;>?ORVX-YK#0&| z8)pVE432Crb8LlU@DxT1fX-6GeePA7Ffd?^k6$S&G%(C?1saiI#g1K$RJ}`%3dx#DKIRy zc@_ub(^wiD5u27@QP+*;@ktpu1tn2>jHSQo{lbp@EY|w7XRn6FrXK&{L!qXyF|IDD z#mPq({Mk{~QPi>ReG#$j@-^LE;M81rsn(cwl427LNe5)CiD<=lw4a3=}ciy z#G)b98m1zMI$X{9cgO&X_w#qPbX)rL@B34hZx-Zq3GC50bjs@%*YFx3B!q{>sq(Q$ zxS>SzewEVZg>H4DR~|RFbKNfFl|TWXy3}fn~$cBLB8@sAxtkBPUGr^r4xpXYQX)Gm?xdss7&s_M$748Plc5xwwMTea9T!rfr znPLr_yD@1MNT=J6sU}M}IKOp)!MX4&HymHOAZnK2ymC`NI3YHC`aSc_A;1-3eN9@t z(}PN#Qv#zb^axNL>YKXv^ybF$oS2Kd!Y1#udYn+J)DVtv7nWR;3JUp&Gj(HYFv|9x zvOPqoV>J7^aVxl{tV?@rW9I8V-Goh6sdqKtVaG?}{w4%==R#UH-37LAe|GU1+`v`$ z^yrQO2+H<%fz7BkYQRJW7=7+aH08})bGJL$Ji}ACLDIoV5~G*!P)R4x2~UF$el_sH zpP*d@CP<%TyYJs!+&Cdp>?^4qqYYGr)a0#| zUA*p{vq5U{R?wPfb5MH{hyL#O_quebseLvDS6v|6{3}8gaF21d=sqe&=lsR!;!j;V zR>|l-Z@TfdI}CFlL-$>vQgN7lfho}`V}~J1|Ce+@EBj6G1{2N}2oEJA3!pU@QULNi zkbl`(EL}{O+qLYXtG(LSUY~v`X!mv$J}1s_T8q4nI`I9-qVf$N3euLh8tH5I6_)mz zb5CC+c4aoE6Macr>$KZENC)Q14vn=gT$}ZVTTMK>E!Qb$d&u22NEO(~RR4I-1hFo% zdDBmq)GDFWbhrRU?GL!BaoM}pI?I^v zLs_g{-q_YYdZPr~BPD~Wp`dd`^Joxt9RMSWdslnNm@+ar{Eu2$M8JDG0i1orb43L*h?_Ef6>BxYo^6%T_De$%@_xnBTh*R${*(~Fs zSYFs+26tog^}rqh!{5X0XB_<;qYL?Y3E6UdzV} zR+kF<)mu(JnzpD_E@c2+6ANvIMfDLjibL4&-(9KCBCKn*^fgXt|QS2U|j67XF!2nEUdKZbd4c zqZhJ{i1XyiH^NZB>*tWfQ+7)Y?CYDoh(AsTA0J+I6QKjoip$ni0;IwHMUITE9Mb;= z#JJj%!Q%80Os$A9W{)ALgmnkrE3L+C+xxahH-lGb`@+Q>DCr0i*gv|Iz0EY}cderi zy~|{=jRog1%j>o$39y0le?*K2=P(@pnH2FpOn>sRfV)1;vwd`x^!`*Xq;r%yEL;k2 z^3h3uyI-50FQL=xDPa>L;=y9~Bct?Db4Z)zrSozVgV^Lh$&q?-W7s!Zr2{G5zqM4C zmwT}`#3R7AieH0!K2Hbn61%aTJf&uL@ z*IWucsGF2+?e&(N0d{OSs!JjaW6A_rRlPZX54-*b4B-;GLp%>d6BnnQBD|fb9t*t573lZ^ zvf5A;W!M!~1$L zH!4fi*+YIfnvAjIcrFq00a0Y3$`i<;=!yX%dNXkYSTycYBD!W%9ebEI@Mpknrfbfg z<2duWNe8N#t{EC(ierV}W!c!hoZjjOWt$7!)(dd_R(h+mM2*7R{2*?m#6S~-j9|xZP~^}ik2s2 zTl=E}(NLtp+K7>oztf1MMjWa+#7ZON=? zr$SMOR_?bSH9?WRz`}6E5H~y`POQ$}D>u}; zkg&}!(3Fw}5ojqPE&}hpdmw`F$hBFrlT$vk=+E`O>$7nrrFKM}G6wdF4n%QXvqN}a zuDU25if-}_b(flSTRBGh9`BuH(r>fkdA!xxZAc+-MhjVWvYBe_5`q49ol3T?V>* zq>=^6_n^((nn4ZE37iFr48wILS4Z;W@65WF4!W{cE452%G1}`1u^m5baO5!zlfeW& zz&8xYkK@gT1fP8XALKn(9sd6oBHEDBR3E?=XwS z@9t%EEq>4J()5x##Ibil>M{O601mW`UPPvFR#>UqAujH(-uClX4TW*&v6Ule04dS3 zh_>2id`j9?@`RtURCFttsLiCl4sOg+_k*oOzcXr-7IV?Dq)Jy|S_ zhkh7=vKoA*=s+abHMqawGGf;;NKym<9mFpJ^JpN)@$+H6)?n7W{jOxT*9itR`Xk)* zj2GSd0OC#0*y6&L1j`MDcORQ~prDCgW1XRxIv zwCf>LM|DB+>Ab|jL|X#In=ElJ?B}1mg5!R2DU%^a2$n$7CmFd`8oeAR|BcfD3kNA^T}o z@A1NBevNe&|6z+19?{N7@?($z1POn2y;l7za_S~MffP*@jM*-WF-mmBa=D>@6VSU( z?g3Zm+u;P=iUcB+^ZFEuY=kFLOub8iJYfQsi=(dllv2^xRoXYm;K}E5Ds#icu=6NRrUa^V_ojkSy_pCKJa^(@pd@A%G=Zmc z4NIU#5XK>L?`Kkfa7UY>8lU~p+K{@}xCD<<7d#i1b|py>wZ5FPzR6O=Kg zg;dR%0_8>VL`i9I)vxuVhA9rC6vkU7mK?ZlGpkL`M?38hMlC_hmBEm~*MqXKw@ccF^Tak@=|y-RD#e*?sT`3-03u8&(kxn4r>4V-D!!OxG<_L$QNC6nnDNm zBz8zlYRacCPD6WhkElj#D^N?j*7NwMz{sw?SK2X5W}#lN_VZ&7no+{je%Fi^0#(`0 zxo(}j&82su&cHD(!UN|1%LdW@2pD@N74krIDf8TD(2-a7&|e+AWg!RYRb7b9_Onx; z`s9ormzO8*#(W+Jg~iZMNzH$X*?p#s#I*d(BnlMx|7_ z=(^BGdK4Pf&Pf@H!J>#||ELU6!vw@qu#$9TQlK|7^%bstDO202O%{AKb$wh`r|?lq zeH2}<6!Iqc(luHDkXq9Ug-;U7a(b zR*jEwi@Sr`!~2~Erkr4QmHozUBsDj-gVD9b>?%`ox<#s@h z!lRO1uMydCf5RyVg#b7P*_=0p;-M~dorhGgX0-14E(T*f&sM`2y?Mt(eDNIlJ%lTX z0LMd){Wf@kSpqx7Pz5A*OIqXww3xCFG1T9@@mmBM1E1Mc4m_K?GI-ct)@t^cagAV~ zBN!wrg&av!2Xwv8UUCzGKE~;S7ef_yaj=sT1LI9quc^H66uP5581~MT?ybWr4w-Heh0j;_{1kS3ZB{{Es z-%vOW$Jf~Lk^#+_ z6=_gB_~C>cgBUAJ+`45Hof+Z(p`c>Qy#lkev#Ykk>l9M2dtnyXj}zB-3H_6k;((Oq zbYueR5A^khb2GhM|9xk|6e%>=5m18y9QPCOoh z@hHb_gCNs?eIT%DX$E;^YJ%T)9LXGCO!EU%Y>9X?Y}Zk~-Z2;EOe~}Y=ThM?A(n## zZU|NUirv@)=AAWuU}@x<`7f>uZs)~e0w=?Q7d9@1`Tc641Ef~i2d zA$Tld3^?`9`+&&46iHyx8vDpmJ`SR(1_!GPfjULHQe>qk(TSUfrB~vkorSfK* zvBCBkdKlKHI>--B z-0+K=@L-Xi93z5#8DFiKzX?kUyOJ9l7MK zUAowQsm&8N>czr{=MPyJ%=LjBc497BMRj46WxTK?n-oEy?olpY-uym8rm%QrS|HeU z?cYaV4VhZJ(y~UmF0ofn78_C`7I<2qB}9_K0lZJOkB6YIn?7NOnBg674q-SsUXX$P z0uD%jjvGurQF9VtJ(`>GVx(w&42(OMOokywb5Nz1`imvuit}VcP)YG8EW_TNzkRs7 zIBZgAw6*H_&aEP@68uu?I~0cByHJ6oDPb@%}R!G5{W1E8s>` z<_b0m8Bha5AegCrI}wov#yGNEhNaE+ZT=1^=LAV31PxSfhk-Nc#z%&ulciRrx!|Kq z_aC))yJok(4|`b!8Rj`K*;8x#8C+IL1RS^~S9DSPZI@7gqKtgBozMP`JOm>*3VAEi z2qweQuUcRdTfZkV4oixM5DsGlAu~=TU~=qpDIZzmE90f)tsT60^HPbMl-EaaXpa}- zSJnh}+3TT=#5p6FS~2@`&4MM~j54nG zyypfpOwHv%Sa^*^{NnOah_^qb;U{DDK{)q(CKJQKluxt6l>`r91g4P~Sul^I?i8j{ zOf!(!EQuhcrc`**;PGcLdP8JiGQ946k{N%^WB}hr0fEre(Z+n^*-C*Z^MB%(+9@~x zIQ#Q?zX+U@B#H3XeSrH8*BjSacA~M~2o5Nx;7PxSZ30IprPZjyO{}sUd6OXA@gEG^ z@!_Cx=f9?u)&0#QnP4eOTb?R;kseA=s_#NM|2Fxbi&gpNS>)4Fpy-<;{U_vt*7~L% z)y>TxDUOBb1RgYnL}Rsz!^7aypDx4@7V<=wU?>Lxt| zy6}V1Tbl@@6gg+Sh`{pOZz;Q0t1ee56IcC@%V#v^2A}C7aI9A@=+iplqt_SKF8%v! zAPoNIM++i5%^$TvPhEQ^it$uIb0eAw1uzq<1i>s21R0SaWNO0^C7;U8mq3CTXj0PF zfu0IE(i<=k5yV4 z%)&=?V$&;Z7kI`A`uHLd6*pJQz+ zCQup$MUa7w3^4lLmT>1UT2ksIYP%$<(eA7bx-2fY!#)+A!HP>vec+|@)f2O^qD5ME z=j_Ycg%4^B2K)6T^3mH1+LnL$Ef6t(^1X$yJ&2AJYfU$h_hf^~%KicxlYGT9 zUJC^Mf{mPLdK(=EDR^%WSZw5TGJv+%cqx!HlLbR&=&9VYOY`=PfU3-DE&LJxbrUMu z7H2EE3GCD!5LmqSdgbl99OFgtmR@gk!FZSUF$dcaWO!KzLl8P`rtjDhp%|)6_gVCDi`Mb4>#J=4@Ge=nWqjefHEZjQu9NAMXrX_+0dlvRY)>QYtqOQu*Tl4 z%nH=8l0|ca%85FFZ}Fcj4f8qbfI2$cc>^Kv5$#1-qGwp7Ft*ia+RRN(KH5X>2BE~? z-w+kWm$EV&K}*+^nKJ3X=;ielm$kvfeJpWm7893b$AVp;0pn!Ek!YFl`7bHh|M(1DPk>sPesDv0Qz9m|LbFfS! zHi=iI^mB>Se58Cpu(rQg&iu(O#0q)j9)`yPe$Hx_T6!ogce=eep~mT#QWU^R8^n!p zwT8@=;tJT^;M($Xhi*k8VFizzGkk}XQ3+MmkuBQln)4b+R&pl73>TV>p0wzaA?(?c8uwnC_MuKAxtWY6!Lo$x=eo`=73%R6HE+@E$8NY0W41^I~4g(p#7Y`ftT_F-X-7-U)xTp=-MUeQAM2K z@4I&$K++u8Qkkh06wZfA7(udtq!yJ7XRe*V-kmK=Dh|2}W}ZqO;Ne*B=(z{8YfB?b zF<&n}QbX3b+lTc~$i2Q0a<3C>yD=(E6_x$k=fBt}uTKlFq5>Ux&)R6&5{{uf#imm@ z)a$}Jt)Be4g^*a4en&E{@F1ImctHl(JE}A`-jExveNVEA^8VS=B-pzv!DhC!9; zi(YD{&QUvfGG&OuNlnThytKQ4CksJ?6|~e2QUU=1Z^XZ`7xo19!{2Crz&^C_S+EGL zx!?fW_!#^H2ZQVehf(?)_z#W*xeES8na@*8(DMiQALSmLgkynIZ~_%R!BX@E%h1>7 zPJ=ZLI1ij5b_3_Y?yuqkI0{?@M_+IWT=jspumRV63^IYsgzLanaKkjNfg3&BSb;m- z#tm@SM~yqcP2#@bHn`vGcmUibo&)ZK=N9~i7e5BS?~x zd%>T0-*b2lK7H{QzVHyQffvL#z$@_0*QhLT0mudyUgUt^9qfcH_|vagO?kYJJpP5! z08Sr-|Gx!Czya_POau({0yZ!i3Re4~Djlp07FaaaLLNY%Ti!21A zK`OH7Dbz=P6FNd1s0+G-9>5HeK^>3=24JL({$LF9=X2>)17SO?p*kq=M|A=Ms`Cd} zOl=L8Q`>xk0YC!1L0{BA0#Z=_f+A2?J_GuoZVym_Nnj(agRLkbSMMB1{d4tRff3jN zyI>Rb0PsaU2&}*l^-#cisE7Iw=!tp+tfC%0U^DgDr__`h3up`i)4^<*5tsw>U>3}U z`84M5Gt6rg1t6dU=nPUoAJ8A9g7M%FSP5Go1CBx-@Cn}u9mo~(f+j#yp~cW|&^l-* zbP_rbU4?E#_h5h(us3XlW8f-q3%DCR2A&Gfgy+D&!Rz5ma0!_SiW5o*NPS`RL-&HAB}5T@Q4_&`m=( z7u`B^8R$--dxY*Ytqyu$^o`MXLq8V%2J~s@|3UvR`e*2~(U;I^VDQBdkD(ogz8Gd< z_)c$xF%V-lj2$r!!Z-!vEsQTP7GeBZys;-CL&Azg5Q!qm3ld9`K#~+B`ADWown^EM z8j>a>EkN3Ybe?pd^e-6&GC5@F$ZCMp+0cD3OLv5fT&|GLEv>!SPU4wpy z{v;H}3JRUg#`)hX3)YI150>bKN+)I-!e)PHH*Xd-D4Gy^nyG zncA3onYNfInH8BWnUk11nSZiyv%F=AWNBvEW+i9UWsPC&XFX?=Wbj~u(#FJGH5*!X3?i{fkRUBB3eNGaba86y$EG}YPlw9;&TwJPLAGln(qPPmUy0})j zZn;Ttb8#zk+i|CJ-}1cWao}<0N#e=mLGiTnZ1FPlzTvgu&Eak4UE)215rGN9G+^&w z_Ann<46GE^0vm!Yz^?cJh+yYa;Cs$z&R5E}%6H0l$M^dw=Toz%Nl&p)_xYLmmHD6Z z$MR3`uk)V^unQOpqzJSN?7~UFrQw=zBe)Gb5?%^#fcL?-;NJyl1O){(1?>e>1v>=i z1@{Ec1%C;B6e<>~5NZ(G6(%MuEo?7bBHS;0Awnr4DqW~_X8oQdG+NL^#x}Exl1`!Pv4M&ZN=Xjn=Jx_kVq4|*JD@`}e zT+J3OJ}qCZX>C^R587MWyE@NxW_9LuzUb2EzSG6(-s*|!`RWtV=g|M4k2Rn)NHw^8 zVe}&5#kZGAFMVE4ztVb@{_6B~)*FsDVQ+HY)V=v^NX+o1VT$41Tcx*-Z)=SnFmf>R zGKw_HFe)>`8Z8?g8T~V+FlINFGd3`OWo%;HVZ3PkrL%o|dp*3MQ z(K2y12{K7A88G?#UiiJm`|$U(ro>EDO-oG6OlwUCOxI2C%%EoCW)^0JW&>u|=3?ds z<{st+=ELR}7EBg;7XB9X7K@e)mU@z$AEK?GR+LusR$Nx{Rwhjl+UfNxUZJ4nXjL3qHnA3l<$h~tsf~rRzDFx9X~I>9KQ~~OMemn z*Z%STUH-cP_XUUtSOwq$^#ff4^8<$iFN0Wu^n&7pW`e1L<%0u)JA(H@7(;YJ(n3x{ zbwblZCqfrOS3{4&U}3UhreU>VSK;*G#^K4~wc%6YxbXGxFA+~7WFuZjxJ0ByJ$Typ8-P>Y*r(s5epWQRz{GQ5VtF(eUWk(GAfnG2}6PG0$TR zV&2Bs$7IHo$8^Ok$K1w}iRFzIij|Btij9t~jO~d%iX#@s8>bxiDlR*&CT=~RQ2f() z(RkT-%lPd0-uSHq&V&yM$q8u*-xKu`4HHchOOgmBX(YuaeN8q@MkluiTBg_$Ah%^KiF@l&wtRprNJBWS6G2$-Y zBi}o}Ab&moR{>jrWkFs+&qwNy!5>FHPJi4i)GB;YSW?(n*i$%N_^Ie=QAE*J(cj|x zip7fUiZR9gNHRzPq&>0#xq$pqqFLfoQe0A6a#r%ERJ}B@G`DoNbQeVc#gBrcWKeP_ z1=I_aB`N^*f0;v>bJ=3qa@koqv2vzzmU8ZL>+&xZG!?8BsuhkEE)~@k?Uk=9tt*k0 zTUA7=?yGuVRatdjtxz3Uy;Xf!L!c(0CcI{?W~1h!=5H-kZDAdWI;J|_I>kDRx~Tg5 z>L03qU5{>HZIElQZ^&xsZa8fC+sM$U(fF>hzHzeg4o#0%M{A;;(QfECbS1h5-H%>u zqH5x6devmuWYmOc+G{4${IuD)IjwoJ`LKntMX1H3#k3`|rMzXSWu=w6HN3U5b)oG) zZDMUMZO3h=Z9m$6wcED`wg5%JC=y=uP*wNV0(Q(yD)hX7+)Yad0&<(&b z@oxR@_uU@dUfosQHQjaHhdpdPnmsl>bv>g!xSo@qvtGtt=3drb(_UmRs<*HAckf>e z1O^|55Jn6mfsw+*U7xek;$tm`YHRV)~SW5t7&4>uxZ2TsOi$_f$6R3 z-!sxPelwl3LbJ(ptaE{L^YiixL>BrN85ZG-%8RcT?H7X=Qx{7XTNfu5*B8$h|KgxH zR-7>I8SWL%4(EqU#1-KhaRaz{+%E3_B|=M-OYBP`ODan*m#mh&mSUGsORYi?mv2`HtMLyenKG+c1aM~!? zDBif;B(iC<>Au;!C9-9_<+;_gwYLr1Mr@yMU+hTjAa<5_MR!woclU_xS?wYBj`!*I z1@_hVhY#ov3=UckP7clvs}3=TTZi9{$Q*GVA&!Y0haVrDz)spv=}t}0sLx8zRn99e zlrB~;{V&h1LavUlb*@p@*Ej4p$u}D}+c$eRhqnNHg58GQ)_>vrV)7;9OZS&wchB$q z?n>|G?*4q0_*(FF>wlX675*RnhVR?cZ?fM!zqNfE|F-*`z<2)d=HJu54}bshgYSp^ zkAxpBKPG={|0MI1{b%LR-JdtVi2P#zmGBzHb5*O1+Ww37|08FTH-)pIIteD8L$Vi zKX5W|F1+>dj>5YM-xYBf;vD$*5x64tK{|k-7-2oo08kpDmG0F?o&-sRIzfv(=mmS? zVI`Ceh>0$XM4k8DQ4U145Vb=zLdWYay`e9`g+K#=7X)EQM>(3&jk#EZBe;gAc#r=D z17Ij2e_zPI(6X$=(1x)I`(#IUM~JZKDNF@w(}*_oWEk_<&slErg1?6E4e@xmMTX7T&>oo&>_9NcI#--E_(5{Fp;| zQ=r&NsN_q#tjnts3tgDn?t3C|?6j`#!5(Q`Z};_pp&RaznD^s12~#ljGy4cdB>c=@ z+FO4=mvQCSd*c?hO*^$Gi8J_S4C}ugxxGE$kp<=;B*-|WXVO`7E}lOxSt$7$bFH}c zUMH@{*T<~bNc#^h?Lu1Gg|&3NS~~Tf(wVN(Iiu43Q%kpymTnO(-QrrhrL=TQYw4EL z(k-v0TS-f|>r=Yxrl+q}TGkq=X*@eMOrFo+rx}fAKBLrU==tBLG?-B1Si`c{B-ZFX zt?aM9PgID`AN#$;%`-ethryz?fB_c7v@~BU_<#O zKdM@^zw`Yij%Jjhu+Q$QQ7CN|51PnTk_6rDcRYNjL@T;qaW zQY|g)14_uThZi6wWFBJTSS76VEDs7rWqHJ4pr*p7S|=gK*@1qcCn-=HV=yy?MX?7a z%7t5-LA-@k^~pvRL;)phvt}j5SQka*tlgFu6P{k{tc- zvWui_Gsps6G`k_j=_g(n)$fhq^~N*|HhOEb>v0&d)&e&OqGyb*iUAsiuGGIttPA> zjDep+r=+A{vNzC!L{T3>TjCj}U=d`;!$ zdil*Np-hC8O)P5(ekEruEWRgc;>*IKqLBcUh3kR`inGmQg-hhmP%0W}mA!UGA*7!l zVWlmXZ+|w)YFIKshk2OA`Zn=9U*jYQ1j)Fo(tUt1d5Xlq`^CaL@Ql1o-iFk0K6{(lg5@C}a=x-ZO|ck& zAP7LM-obtPs3O#BG7dNozRUQrNX$kSISx2m=}vdioWkvc1)-Y=#W+^5hkWL;1AiDn zSt6Ps2RVonuVpsj7s!rM{sM30j)bo+=3Cq^z7PFNwhEJ6BQUW0*M_Z!9D%)N;nqEC z>h}F3m#bO7xAw#bk2`N=zM~X|->R~eVxp z&4G7ZwQ_F)1{rX5o#eMBWe)eQ!HCxMUNLKztWhzD0TAk5w^Pk7e&G6^{h3?0|Kjd@ zLo}_eZ4Y2%O?c-T%_>p1m@)Ot9J{=@xk7OC9g2tY&4OlG!bYeF8U&2iK#%NthFP2^ zD-HR{7wBp8uohbK@U&Tsi5&43wBNN#Hrct|6EhIo86VOSgV zu4Dv5(-&iRtwxFn0gM627J_8xa*uc*JPf_QMvL&pX2SI@5kiXAOR$uVVhOa)?H4ro z${QxsC<9l;PkWJ;U4X0*847?Da~12cdp^}4^&~CTK5#WTQFSXuJbO=0ua1o_5Y2_{ z)2qt$-axmH!l-*ryQ^e{bG#FdVAaNNx-?0^vX5WjNh+krRJYQhB$bxmPY*sH?TboG zwq?PqTuU0?h5TR_yzszI|EQ5E1ugBPbtSIi5ECzB)`$zu)G-CveCAlFhrdEk0WAi!5-$HVB8Um$y3N4Sh=oKu8D|zQH*N3;*)m z^nBxgBK_DE%r(iu^n>1Fp657z_WiQcWJ!m2`-c*lqLr5cA8lhboM57?YKo@uheRX9 zcR62W3<#8pZ(Ocd@cDBKXR{)Hav`uQR6cYb0(LsO$%BL88V}*Y5a?2j1iVPii5YTy z$_k_hbqlrhkiHbHqBYvg%GqxwH2IvmY0i6X9bLTf$ID9PLp+2zs;CLAGC)pCNeEbEa_A_;5$o${8xNmSgU^cRac_IY&r+^jr z2&%)hA%IaJ&qg5MR#VB%hUCOMhx4B%xz6)q4x0Nk&VEd)vH{4cCdBvky;t zIie}6@btaIg5pH4vL*mX=$IjArux}aX5*t)tPUi=lk%tCRyz)x;Gq2%7@;X-_Q;@lnBwjemAKykQHg6uB2< z7u|V+O(k}HO+H-ViK-gm5=^gndp=VwL}&R2g62*1gX2gs{ZkaTAV$O4h0&oAYb21z zxsE81vwzvte+7-T@F(q(?l+0VO>}Et`S_fcWTml(ByibL3w;2K5j?|KpvB{&1U3L& z@uHuxrfcthRYyp}gL4H$w9dB+EN~D&q(~2tk1^R=weY{MIo8MryPOZ4>;hrM3&-yN zha>XW%I8s~)Am(wB&CdgI=t1D+_j#EQT0@+zPR~ppGY^F7P|3M&UyAe@}(dx5)p29 ze-IA5CoWosJuFrC6w2BM+vgWQoO!QRbu!l0fCpnhkhW*&aU`asF7wShlY>tY z_W_QpwkOtS|Kl_j$rm?mZn??fOZ*XtIk|GgKghtz3tKNophoi)%^wf`k7=;_iQ0VW zSv$r+G%|qM8p51`ci`g%N&qWOi2%7Y7rGi98|rdz(NewGhn{yJu7=4y2I86X>A8R5 zsefDo)g{H3s-J0%1T%-tLgMV09)`kebZ8h!V4&c4I1WGGtX7Qr|1(ms_D?c zuz%e<$4U*Jk%5_qYBG{tvT7A%Y8FbNNZ>Hw9t^7ro7kh9j}`Ww&IFgMW7-eqKo2(} z|9Tg7L1j%+D%x_tn#uLd=`H|kkDG6p=}pI%iPu(}<;~zcTmyG4cS)8(oeqJ4po0~4 zh8jM8ajIza-`JsmF&;CTOyV&5h-BFZ#5CnZg1Au>Zw9i@C;mpczdgV*&Rg+#@{O2l zAVKr6Sp4hJA=McjHz>NS^RUKjUu3a6(ddh0>KnG`F2_AJ;66N*c9XDy z>$f35v#=BykowEr!>o~44vNZWX*HaOE?IGg?urD!3?X0Y>7)=FkCTBZ3eE@smv%}2rDxp0zpv9wtc}tJF&|sT-!F1;11(ny^yp^Y|y#}%7Y3ih2 zCQ~mDmuREe{vi&%!7@DIaDM4ycKq$p@oH}kr&NqG(N^6yYk?&TA<iEIV}GN0iYS@ZJwNcgSHFHjVi_O2~z^| z5TM>vj1Ms5!xl#)J~crLwCZlZ0tEPDa&oD$*6~ZkSwzh^`sX~5iNnl!e~N@*RBu z%|AjjQ12FVNZN^o;zspCWAS_V-z0WaXos5=oC7E;Dqi2A(ArN8fPsMmN6|jzLJba0{6t1@A9mL3`WfLF+4zLJS&+6BA%TD7qH(6z8o?T-U?#=tDo8M z!Q3LHNbnbzR$Jh+7nA%Lx9x(Uba2E2^P+uxTNn~I^o+LJlPAMn(6X+N7a)AMLf%tU z$O5-Bck~id2@GC)>f^Y%wOk!f0LN?ahkqRSFP)@{XEmp4(CgN2?42Gf6^q%(^Nxd# zHH8q&fNMO&5Ndg!Xq~#v<6ENAKYsk!!QD+HN^ELXT%VK9ck79Q3wEdXO31a*@{f1&QNR{F!|7l}eDGhdS)HCe2F|DKJ4IoL0DhWyQC&H4B`}rxx+@q?~yo zdAc3k9N+z7Y)2I(H7~}sQU_*%Yn}_?2i0*Th|{8)F?ZfenIG(QsN(CngM#3E*!b1x z&O0OLzwT;o@|qp2#$#rUodc;>iD~08GV&P$G90{LoVNsqa2W3PamzV0oN~TGe~plIcC>59V}>dIJ(OnRqgg`-1L79U7C4@@P62kI`X38a`p@_|C2XqwFs=2K)m9QApbGb zew5uV=SEoFWhNm%SvGQ(!>lwjrVLkW-+ucgdf}H$_O=%!U^f(<1l(0shFkPJG%&@* ztB5#>KJeQ!I3B-UzfOrNN3J?mUtl=%DA$xoI{XLW_b`Mw5YT8cQebuD;jm3sa-)1sm zf;N)tx&P{(XM%4QvbdFMW8Jk|l}GbqeA0#Z$))}^I@+_$K}`XhmhD_(Ip$2);??K) zT4ck_Z#lh%*3#NO=lkW%RF|iygG6MEBOMmHNQKLHl9O+`gI=areK$!x`k!-7e~7|G z9a~Jn3QHw5P=ikr`53REk_HaH<8nm!6ds~tEuhJgtXhx8uTjrjuD3QgSy)}z8G;rW zK31VDdS-`b=JhGD&uJu&)9-qUom^nJkbHIX)#)gFg&z_ z^d&7uHxxUr}ufWVV*g~cgA5_Bm*Vx=9z#F1AnzbQ=b^DDf zh&*!1G)D|vFj>H#+Wo}!kml0P7U7St*n`9V%C zgPE z7cCeXN>(P5vQhtI6}c=pSvSBUsw3BIo?q=>Mt+=3on&wtNH9?nn08{8{(xS}X!3*9 zNxmnN#9L#|dM2ElGKKeZ&8CxtC|_`GR?#nGz0)(#7MHHoF_J#IJ?>DF%f$FrH5xN0 z({62J`a8kBe0A=p({_D_crRs1o*K>Hr5Z^c+vI2RBBF|H50@J_wqAz;tqx2ZXhI!0 zdDXbr&1s@Adg!>yt7V$2EjrLe?=f0+`wfSQTR=Uz;gfgo9=dt-?<{|8AC6;-*(GC$ z*`XE860FZiu=XR?r=&833X@1%v8c_P_xPKF#C1XCM+_>N0b2qF6o7oCb_jBQ1KycX zlmlx43Z8(4sCSr#HA6GQSKP};llwqYDzzhjYO1o@-3yAKr)?Ujlgdy<1?N7TKY@(e zrB%XsJ1Dd%bMXlYr;5#H zKH<~k&Bk0VIXtO%9*c3eB-TrV`oCOz??t1K>cNkb9rZ#E6@c|oR*Vnuhe$wkkb&RE zFrDf6rr8b46u^9CJzZd|@G}fTKE)&Kpn*^-oA+?Vc*XiQN_vUUu979v#-|88!WSg?TwBl`&vxV9xQ-bpiuG z2&Fb_N3^YOksIAoi{+oNIxa=$m5Deuod<9(ARctW&(KWydEs$ zuR(a&yZ&e-%CW?fH7GR|bQpbw>^lrmfR}$$^hOH$`b1Yxlrzjz%P8~2oYDrYn`PIM zws1NYzO-7O(9;;FwujW+#)mr2GC);Nb%0q>8qzc;+R0RW8ot=&^vWV+c`lgs^^D#U z^S~LRv$F8Pk(@KVDzyLwIVL9nR!u!KnpSP&54<>cDI=)xaa#Y)v?O7jr>DFTF!szz28q-*Wn|az-M}+^exO%s6;8-z<4`%vVdSC&3pc|k z$o70k>9#JDOi~frwQ0oC9&cy-Lif1fqMeT*iAoLuVP&Vo>hJ>Q%ZWxAxj8{NYWODk zea#1;q1qZr58~hsFMW-d6UDu};cI2&0%bznsNf~w1{p1EmBt8i zp@J?Of8Y+K*-sbN5mka;I3bF+F&3@?A;#f+R;{=RY!NjhvL*AR zOXGW^`xPxwnH}?Yt4o-1bdU(OA9|kx$KgXTi3a_`DjFv7d0@E&G|s08vg4`<<58Qh z*|_8<7z^;MrFWbu5n+czCvEXDjp+Qh?KcerT7?SY3cQn%3$X&+i04F7#bqkm8I|6n ziQ{`|KM$Byb%wjv3sIEfKqF}Hs?E`s--g79g5N9@+YlnGiXi|ZOGHQ~ML#)L3B9Is zk!&IsHmgx&fkyN^J5f&?pG2Q8r!s9)ju2&tlt}4Jsuv&uk`a^eti@=p(ywqm#BSmM z{XUWi=@ihzi+>g;K5ILb5@3{(K#Dpwoo*#32t*!>iT9Izp(0AGVJNJQQ@4+P+5B|3 z96d*!X=hl;i6*E7315u%ei5NpZ*S6{injbwO)Nu18WFiqztlb8s!sK-Ro2CPDoS&d zi9IBkv>$gFvzBbN6ZgufFR$-)SvZq647=7Wa5HUn@03 zXV!2YGfwvb(J_PU$y$Hn4xl}U_ip?9Tqg=e_3Rjoe&smcT#>n@yHyq~3{qjVs(BL| zF)93zP(`oZqhh%rBc}KlvnWs*;zH&coUWyN0T|xpt1GM3pgoFrsE>*uJYNz10^}&z zI|@@st2=y+v;c|YbX$br1HF&O5Rp03D^D6pp^%qanXADc1MWt;EY2RGsuh#}BdPPc zU#g8{5WkMuWXDK*n3)*Q;Ip>Ubkc?Mp{5C4Pt7?z$(N|JCZS4>cg25YN8}hpLgm=kQ#z@ z0Wc7z4EV&_EGH(odpIWs@&;x_b$s$t$Z+gW!PfY4V*jUv>y(b&+b*}C{K1+ zujryENekp_YO*t_VvHoe0-ggY_j*xa!c0s+9B>i`ONya7NR}tH&_$@o(SHU&C~b8( z!*^r~Y$`~Q$WksOEgtM1`!crh00|m|H$T<`!U%8O_G7 z^IOc0o}qQ8M;DVVOSfDJ&cM>0#+wLKHAaRKjVU}~c|EjYW|}QSSbaFMq4pr8W8a4Q z;Q35sbvP!c5}CuD@0}0B!1*I{zy+6{t{_48Kd}kb^)u zJHWxA1dl|3?4y}^i=ftbY(s6pQdfc=1+{ttRAr$@bIR)@+>sKS`17a2^nXBkl;G@43AoIK_~v+xpUOf??0 z#Nd5uQKCl!ECd2l!=4A0DhE7w$xdQ4#}UXy>N`&%r2H72M)tA?c{@d)qRqFZ26MLi zRImsl?MWSDg9@`EU)ZXztR-G6&8z-s0B)Mn&Mhws2_TjS4tw${xj05H}4`{qeO>29Vy6OQgRClEi#^}JMIPK z2r6X+zIpphIfX-}Pzz>q?^;ThtFgpycPB<7 zHnp^0B#gPtSqv}BLlI<35EO@GnPcGtq|~2+{kA>_x7Si%@CShBF=9SGaYLoGYe}GFt@3 zvYSxRB(?>}3Kfw@qd=K}y-8sKXRh#NNA+@}R>KV^+O+6fxO1Z|=Ei z&U7f{(u%Mq+#DwOn}0*j=l1f)m`H{Sev>LJ7kl51o4HVoX?Uh?2n2i9d14I02~zVl zP>ibW+aRjc2=_v>2Ln5P8EW`K!`TqQ+k&V9TcrcS^_%1n`BDI^4^2PHm&PCa}?fXm&kIK$rj>RMy5++ITY*D3Ux)B8z(K{WbC=3vpDKIWD&$Ltm?)MV}WIKDaF- zrN|1L<5@~oM8EFSu(z3aXt~gF?4&)-+uNVxWxe2ls8l^ZIvd*SSu0W5IMY(B3spvV zAOf?KqrY=hI$YS;K8*OV*OK=4EY!=;;k9f`a*z}3fiCo(;3<$0z)yd_aYy^MN=54> zBMs6rR8v+;KfP7khpZEJeU(^7iI)Zo=yJj)S;aCGz}3f2xj zVL59&p!;cN(+3bC=ZL#yP&%01Q(y)}0X zU~Z&ZaiFekL#}W^$RzVmh)iZJl6rm`h`*QyQ@bqHLR0`l0(Qvda3D!YIJxOP0L5ac z;e;}Cu{jsEKa9(HLLB?Gd1{IwJ;tscNaql>Fa9_Rq+}^7-JYLYB+eHmi$;x9=@$z$FEN;>Lwo7>rp78! z3e$Jimu@l2$TVVGI-_w+$6@WNbM%MIuQq&7FY$oys%4y+n~ zE!b4BOf4J5MlR22)>r^V@|>3|wVeUSNfBGpXl-WAm)VI$NEYN&u10#F-@JxK=~#py9iT)`zbRI00Tzy7K+;>|R)x zRf92&;K%#0_SW~Ebl?VDB#L)Ons=|dWEs{Zt$0_9K~@HRs7ncn64r6!w!OJ6cuR{| zBZ6XKBtf1e;!LuYN+Uf8**JqJjSKX}+wl1|ug?G-`6InvoR!s=8o-@CTO-pd?P}BP zyn8vc3xK}9p1La9c5XbE4~@m%+G_k|_KzdoE)BBR$mdEPJRN#vxIE6d9Xr5r zC>Wtjt4593t6Sg$DG*s>jpHR;3*Nr7YXjXpEFCGC*M08LDeA%rY%?$N(FOrG`2H~( z(!LM9L={W4Y6q?dQxuK)&!DJD{={S{9>{+MR-Hq=U`!Wmgyhq^e+1}mmd zTt8mbkFWZeD84*4>)@95<-qv2w7H1C3=h`W2c#HzYXdHe%O}B0d4whaFqCkFE7$pL zR+qgRi*555C?W~??E@$TtQevqfA=qBq1qrMi*XO)t_%_|zAc(y_g(N_I9=xim2~>V zyg21V>+xH9H>4iu8T$7-8^>>xM(h>1;1el&Z=dTzc7|Kti}|dh=F(Kkm0%~-_5>xO z8HrM)FEFQ1s8A{45%i;3B`}6Cr0&8_S*Vhw-t5G;@Vf_c9*KbD#(n|^|zQ!n$AbD!jTf9ZYox98Mk<7 z{yhhN0`oYjbnw2~D^duQ;Vtd+LAe|DR>bXXWd%(|mv=dkHp((yC5y{cS^XT4*wqg` zg1+sX>~=Xl0SP9#ja~9faVXp5b8Bqg8Z3AYZVUFbeDn_4qcfQh!?L2&G;1-0clgkK z67!9$Kn}AT#!_&h%s$wk(DCEzq(NBdsF@-ZWO;xdB5d8J*`7TaKG(cMyroJiU#d!7 z2o9#G9OgZPq9*$i#1ZtSRoA;<-?h8yBIa<{k?Avd&s$Qa4{V>#f<)((6Xdu@?2IG; zfsZNpzxCIs)|m@CD-$yJunc{~xf$B(KZA3A$!}7mB?OJ^r{4#3=k1U=F5sWQ&z_Ua zeu}B=@$9L36=}3BVxm*BNgDIH&e;pZTEE-W1^en*c{FuRuk5H zDl?chy6kOETym5A`kh>hS7~-sv8yg-H(ykK<;2|6xFvf=o7(nd2UYa?;0`a(9trtf zNO+}eL+NwDD1Z+($h7Pl7I8+wHXh7v1LkUNpMw!=U_CBWIGfv)+mIgVu`LWW9K;9cMkze=!M@RJo3pw~^y0AUQ%HjB#M|ppg_0C* zB;H9fVMWMC@F#Jm=X5GiKW=0vIF{JJcM;n#R&dW`J1LEN;*YEe7#>Pte%+FXQtB1a0^Ef| zptz0!0b?X})i@>!tx*WELP#KXMwx6~got;nA^r)6KHkBAH_%ogFxBL_#Vi=z_}4jk zD&|3z3p0+}IMPXJvETY`VJf*)F2mvjexYnaA-DMxp}oM2%Wzws{HZj+mM{T?CO89X zy-kPrdVV;jYIuH@Dw!6t!pBNW{Z4L~*N<+l^LO!Z!j!!`R$Xa%^H6cZ_6WmP^;nPU zGq?sZxFa|bzjw8e+|Ol7mjb$gqhm-S#_VUAdcvrkNF)|BD89inp%y}zHy+s(Bn0~s z5U%7kBPQ*SRP;B@L}gAOFTn`1+c1$biKlpwr-&jxl}=zYZ#9(RwgmnJR&9!P#L`pj z+P=+A29MI*Xg2o2uIB14RoD{;$RkBpB>D%-B~GrhwqQF}ZUF1Nl&F$A>>`jj!cCaK zEqKr{){JW@Vk3Xd33utMC1ll(2t-gq#-CHnQ)FqU)6~f-mq0Vl7D~Oq!%WT zfI_&swUTEVjPp>4OAGdz08$c)KSF3A?r|JQ#F6}rc=7tMG$#xvf*2u#Ef>lP(ZLI= zy_lJ2tc#Cl_Y%@$I4q5BB5z5inH|{FTRB{2?jZY?lE6wPtYvi7Mp>^Q-(0h%(lU9A zsZ(Xr%7L$}Z${Zn`q=V}?Fyu)&BI5@Fec%*Lia@1QD0nYD;u9KeB!US0>8*#7^_l6 z=?KZ70japELdG4uA}a09nLody@-#A(F~1f1ZpqRSL^-dF$#`3Bp-Co>?1}@>_a{b^ zENtY2Pw>FO5V;z*cfE%zln@<=ousg?tf(kR#OP zi`2v0T<3ls&;DEttoiK+oID^J$`4%^G@FnXHQ=QU4>o+faDJuA9qL`==}NXrQvY-S zQEls9mMCp_G^{g2(X4W0PB>+^A2D0n7Z2={^rA)%@NQfa(g`*{RVc|qQ%&YycZRp) z4a7;-N=^a+qygPnd0o7WZ0`9!G#MsSI7b>}pV6LW_l9}dy^EU990Yr3ho|q(rYJKn zXZi=luxvM>umD8;6&w%Wby${=RyL!LgJ{%6!lGd5?eIXFLde$4yNvupTSGpU#+01U zeeVd)j2y6&P%?$fS|!#{Z)#5G0Fn+-Q5g#WQ%Jb6M-G|O<9p@}#ljHIW(oi#co}EO zWi10vsu0!eBzW*@WKvsB-pzjPNa$OyX!8hu!;>``0=g>-bhlAsHjA(@Odufm&DI^7 zB`B^#4!_cDsgq2^0XVTmo^vK`U#=oFRmIgZLhb{_F4{O-W}83ets5|AfZN*k%YE6UXP7G)qh9li7?{0rb_sKkQg% zuAajbt{>Mlz5VJqeCLZO+G_8*{G&SYJ52U%d}frh>#tOP<5WQXDIE0&oUkw+2sTu2 zUxuE8(^`1vW2Dih))BxQB*p`*;Fbc^P!DM^Di5RJGO)!FD1;hWVS`!<1qSJ*(}6Asa>F zZ{Vo?_CM+_$9(D()cwd?vRP334CoqE>K;mU#0sXinb-O$wVeKq;kTp?;W-=xtZni6 zSsF!DX8AemWTq`MS|b@!a?)+?+a&YF&X5b*hX)r>*b@}q9Uvts&?70EgvNCq-imht z6`TLU#FD@a4(fM|C&}tK+z4?tk}$XvPJH%a<+zHj$Y_pK&W6Z|V}OUZ z@EomVlx>@91i2z(cUwe_zX7&R%JXnC3<`W=-K6uin=uyWT$&v^$~)C#w5}c+ESB~c zR!n7En^GUbLlZF;3!gws$6AjC;iR2nDyWSGgY%>}DVCD(olhNZ)5bA)j~dyR!^z;T z^=q<}G~ift8r^dKL#TSZ()T17lS%dr2Sp3xA++%=bM>UMtcGX*3eji(MH2$|*pX2_ z#kLKFp9>iaaQf+C!Zx|}GN35C#l9EWi^$ZFUy0#mL(GaZXGX$f&E%Hc^EObL} zgRWT$6Ct7$f1Il1nTEtehJ0$0q%UHZp|nD39GhRk>vu_}``_CYIiKs)cT*;V}Rep&ON_QT+!H`!2b+9ZSds%05E zW%VZ9&^6w9)Q9z-mps-ig$96=N#K%a0RC6)=FnRpb*Ym&KY1+l*?rn`VTm)@GR3Qc z&b=afNjwD3_Qr90?RF!Hyp|uIUBm0U4zs*V|NGs1GC-g~Hn(5vx1quCnYmB$U&QaN zs1eGq#A;w>qogw#;+RmZ{2lK(O$gmh`ps`~=N=+Ape23q23g*w$crxhNNN97Yip)c?=ZZbuL6gNE_rzVo0m>e6uS?(5kn?|_u1ft(+ znk3@t@uA{76I>LNVmEA-0B~`z3SZusp4FF*x>89RiT9QE><GG18B7B{X~N0Q z@*ZF2=AUakR=fnJuJBBLgYY@X`Yk(gV;hGbOS6vDDWI8_e`H;h)E% zy#xNA{X{2%v=(qzz{LWyFv}yd)rd@%3d+TJp}SkR&_T^4=Q9ZW8hNqPSPW-*=3F?l zB!miOKH})8@uEszX;jL4g3mcy?1j>_v&>?OKJw}t%A}f#b+%j^csSa?)bz@D+sR|c zqRq+HR1sgM!#Wn=KZBYhoTPF4sz*QNxCTkPSO3ve#KfDT9X~W#KF=(}><%upP|w&< z*U*k5LdfbIzhe$_t6aL$P#Zn;89-ye*6fX?Zrm_uF zWEpP1JsQIk)hGNPtd|~f zlOPXOuJbv^1BwR_o=gXv&m;sq@$n8w)uE@EE(CsghH*qM->pHue}BTm%v@mJZo-Oq z4qYH3V?JVoDUGJapiQKZ_<)syZJ=b->|P1J*HJgwd$f;Vgz!`K8BR^F07+q&-3~)W zP>GQu_GpD_*h8zyo>HV*U7F#%{yPg8O{qhYBXbOj9Njet6zoxk1okOJdKCSMeF_)y zZrO1%dZ;LWC0{E;X;M;9froBuqq`1j_7u%&Cx%f6>W6CUIAr%PzrQCNaJfxoTSqOs ztiw4zAYYUXzY+(m>;j-F-)4mIyXKt|l;#?_albsafzdOksK-y%N*=WcrtV!rYx^Qw z3uR|G_d?CVmBOBuf`aID4_sWmOuvnMO=cH8DrX0#p_)B4MROZ;d0q#tqJi6>&LM9q zt3RRdut*UTqmJsRUndIdv~U991cnpnPVO>;M!DWv+&S_pOi`gHgoOQl)t%C3hkf=e z8r98M?v%jXE}6ZUq20x}z-AYtE)yY{*7!nDlNn(pBVl{wUbkZ#YbB(9rO(<<{_5!D zqt}{JIdZ$fa^*OnSr(s2WEF+SGsDS1Xc8RMcx(X{0R-oYt?D6nE=Zm3Q zrC;HQ+W9%<#SX~3spjg~U7f|l~!UZlk!nu$?RDX=Teq(kqp*`*auDZA@(8gDcDhG(arbG~H23$^I#dF}|F1?wB z9KEIqnaid%TI8(zMzd6L=0k;dIu(%S+sbf-)NMKbSffG|GE_h#sTe@jyQV)76{08; zc?GmLPu@+~)#HA+43Fc%vy1;JuKzO%S9;@D;aSl$7^=udj!i%EIB3HZM)l;q=sBm- zjWj4dio_)!V>Y5rq4wTI>s*C!CAP`I!u?>jq2$P~@dO#OkB!wb^6rcxC!=|!<(Ha* zNR%|dgP%70PZ@M&PHJ)eDSFJc5-)J%CymvJ0&gihGI}N5Wnq9s8{}J1TND;7TNPSg zZ|19G#*wMSKDFKJxo$RIuC){!N{N+Q9}?WJaPp*?BJyi>v_v_ODQBA%ehz zl6`24g|(IIH$U0A2lQeVDhGA%{UG2j=P)z2>u@NZy62u<+b(8Gdf+^T)t%bJWZ$km z2||4A2v(YtSI_AA14qJw+4OMaJ7$Bdbllv>%5fqic zliYDBb}JuNul!$}N;EmEVDx0x24y)wumhX6^ub@kF+X9=Dc<_4oDIo5A%k3@YAyZK zp%!D{Gs)1W1+XP&;B3&RMti&74OSnt9LH|DR?ZInbNyj~PqQ_jgyiAAKR%sc++vr9 z5lHq>dcyKZfH8|qWhKGlFXLV)?|w6Jx1v zEuc4<w}k>d7H6c_t|ZI;_8!{ zXRl%k+MN;FUOy{ObOD(izs3O%FWFrNH zH9H*aW!G34s|Y>no3%TCbP1-M8?h{tOF#C7!u84*uvx_&`D*hbok}4BiUq z2Zz}6sqj(?^k<->Liht42FZ1Q)Yh?2-&68OT;QZq&xq}3_9J0w zCrIoCSUd^EI4~Ddl6lyi3t;T#C@0JmRtWfm8K`R1DjZ z(r-Ky&MMn!Ixk<*V)EoXw{{u}OH6AT3{rU#snniZ1B3p$^c8*fT6WR6JdwtB;=WGo zQ3W&Ox4%%ES|w>P{z7TMZcowTl7q)y*Nud)CQjH1f|Sju1dt4Yhd>Ae z{)#1Sw|Msbiro6@{DlA7e!9icWX0@X(<@{EAwl8?_*QY@*+MOZC;okS7Z>co9LF4* zIS$d~6v48qMKwxj9htxWpHSpcjY#z_f7H`A)^-NE6d99~uFZce>GD$ft2tq?IlVd= zh9=xhDANUJm0vODj`|BX_J0%}mL>m0`VR^7i1(vknSam$gi(a~^O>^te%a`^ne7x0 zGGm$?aATYX{KwWjiovXrB!5@PZxP*XG=77txzUPa8K9sfCR2pE)dyr<_{z3aG#&jx zw(rfs-8mTMyT7Ug={pc+?pW%!Ct3dVq6~47BdR{Nxj-BSrHB`QEyzzCpnTl$VeNn#AeBCg`&zlrM6O`?9D<6B)(wUrSWLx0Ya4HI(sV=3~Gt^%r zzruzuud(!JGF)m8+o659_f#>f&@$F@f5TX@OQu&OBY4L!!UuO842WI@)lW>^l~qqI zr_8gcxG%%I#)}&ukA-viueELL(?v{umt$|IX&nVKaC$Rp{;E!`^1orcgs5-C*9hj& z{fm5%X`{!)(|vvO`N%2TL{^t;4qO`|2><${y8b+ z>g~(9pzvkFNO9R7cK-?M<#eTyC!hVBzpfeArn1+_pSp^efrO8>vEfzdt}3$Eij1E? zD&hrF1zA~#WaPp-CkjjzRrOF-J?Bi6iovRvcKt-5YX+%&sqDn1apEX$rre_jO1zm_>ShN#*Lh9VL8vID z*o4mB1LIi;GAEHnwBl~WW3bdyTNx6kMnKZQtM|LVwZx&plx zWOU+LJ-ab8y_l53<#F7=*eWf%?&saW@kp{Xt0W<# zU+pZG$MKKzb?{DS zUr5*WDB;2!HPy29(^kQ_U0J&LYEby=J(x=WnT7P^-it!2QIgxXA-u^5 zjq_a|%v@JMa0^;vLk$zy2cuD>LZY$@l&C^srd6&)In|6fDNaJ8RZ8JInZCG6GOF(| zVo$RW`zMfsM92veFhhO7oGX~#J|x&p5TR)ZB=cg$gY!SVk0Nq5*l#$s__I6dBfict z1s5LfEd40@O3YM?|Fq{p-;gn1jqF15xX>qW6|Ff;UPRsGDj&*rsd$nY_`g@cMsS~k zU#aU+=uen^rw2N+bd!cvgy9VU^{b`=Xop)+LSMem|7%7T3C?PIngky7Yc9o9(j2^& zF^lZxR!wB{GU6*7)pL@{XBIs7p^p|KM^JwH_Wm&e7s#a~z!x63Y}ml zBjCFZJ}1UD6XR~uh!gIBBQTTOpIbW)tJXiBld8#Z|4lh>v`LF{TMWF61;vzx#)ZgH z8YT_%%@i&}YR&-b4G|=I7u-dZq@`hdl0;vzh%}5E3nByUnam;)yZ%b*RIPNuITpaw`v4>rKRc+KwQX&hhy^cOvQ-2VZ`C1X7Y zvY|w>lG0CYBc9o`SR197(8OIq>Hd8%krMy3ME1?erZU`2>Jd|G9Vf($#C%{N(mDM;VC^4`EAF0BJbBDV!7JW?u-sTTVb>EuuDW zv;r4tO+|U#Qq@CH3H()ABNt_s7P4hMwI3!7>MU)hS2pPnhN+Qu0{krUo#F5_>ZXQe zP|oyB>?G<-x)7m10m(xboxFnel`0pqLw+p9Bw*)=G{BA0;}d^LW}b#1zH-}ac^kjDOXg-hALUtZnWk|p0nE=8 zU;^J%BP4)1lw5LLE*VhBg^9nQ(q9cC$qk<-${1~TtUu8bo@#2z9e2%fY>LAI{r5d} zA7K{HZ7xdwL(+zM{0qvh6Mte=h*HdoFS0L52Nw8{+M62;&JwbqeQHFpkoY$7kEm2Y ztkrK)z%#tkgIPm#RltIoS1H{`vdmpE@*)ye0cyMJl+UF6jK7uuH89ivo&@5pFre=h za*I^2D)-iGtCAoULUlU`Ostwnf0*j<*x%zKLZ0bvD_|ukv2lVVdtCsZh-WYG)th=; zYEPHau5M< zZ1Tu}>hEs}`!; z7}P1!emtGJ&N#PhH8!m?HhyO)-x$n8^qa~JdQe`Cbq30fUxrlV6cxb`;J#$3>R5plRi_1cB^cC>-6QiT~T)c;ypU6is5UJxRiBXXC0z6>jQnS zQc#kW@Gdh6P|U;+*~>N$8MhPNUsbnH(`5$oQ@&|8<-6kE0dxiM0#EO|&Co!kk*a@H z{GM34HtwtP)yBW8e9PLB_)DvjIfs@zGvp6Sky^&NjQ^a_R+evbpEvHMeuPL!C&7D9 zsf^MNT)-8a#%br$Br$UN3e}B|?m~NyGpuLJwG0-z(~KfhqDbPlf-J>n$|2A(t&9zj zJ^9ta!-sGdY>;`vhwG@{EjZ%{PCtLR7fBsAj4K_-(6~r_1tn+&O{1wsNr#ezPBPmk z3ARQ_HM=P8uc|dy0!~CMGvF-Y=w5?>87)|L^~`4(Y1Hy6 z8fxb3Is|^1oRscYpkV?t`p-Fd1OkW_dU8!;xQlL4JP~;}jsl8A`9t!HUkPkliQinx z0K!oDzL^0*-mquZUqO5O&|;#F6EGJ@8S8n5-TmDe zk@^-?N(oLPwQlx#*>KZ#&M*$CQ4@(rq4%kWQem3G925I2oZ5#L67J|~v0{DJ_fC4< z4Txk|q8wSu?9}~BumNb;0W{e_wnS{M2kTNkg77jm^Xsz0EAp2G=@b>-(5894@|M31 zN7bE*s#DaD6h)^@Fq^9IoKw6Kd=o^a7}x}+{t8Te*^8CO^`bb7C&}+J8vzL$n#f_q zmM5imYI^@9unMr+PG0{2p#1OL|KUL`Zqa?mW4tz7NL9+(6R608>|Oz_Sr_XOToVZJ z8qMaPEhLcfBzmFGf-lv7qK7$>>a@;b%S2W7n71^TmA}0ly*x9o&KRMwxqvn2w3R&Q z_wK+KN>MLRh~`&v>Nb=$DciN6POrvQ)iFx8?~FEy%cv(KPcM4B#Oc)49slMX;AZeE z5M~iIld@C`pHh?spVIPNe+5doO!rl(97b!Cl_eVyqf|53I@&Hj+2U*xEZ@1tFAepm z3i>h!s321W(6|XL^KwYfrFtU}t1^Cf-asO#|s!eNME=c^lykyo( zW>56Lr;x$wt>X^4ntJXYV=Jm>vDci}GVYWOGkmN%Nv&p7TVt2}l!sUH zAlNnMSP_!RR}l^NWb6O23tHG#eD&L#xWd|>g2yDY+BZIK-)C8<`4$MbK+haP1gW@Q zmC8s(DlGg-(?x0#@7vsN{Bvq)s~A?OdDJN4BRprJ+&!`GmAOPT4~RL`Pouz1CP=*e zE;YICg^A<_{qz~jhvWh8 z8HDnFu{3#r0OfE4%A?v+hdo&exO522xB&uiAfRJ0T3c-V%z3sGAvQXL3s_W1RF>S6 z@K^r19mLy&!h(#r(Vz#w=odqF?dBR1<5Mce%?^d_I;953f0_HrFH@(`&gQT(b(OkS zYhT8AQVGeQpk3llA?R$)MBy9qm) zKxv3W6m_A%Z2LwLHu>#v5A0>Q2S0aMMya^`?T`O8a-_3ACCpFTJr7VWa;bK>1EmtI zaN92o6a1ZVR`Nl1v2L{S1>MtU@?8yfdXHwN9yw`8h{p<5qWsnN<+>_pzBoidpmC9d zA0})peL!^9fv5YcW^RFktyW|S(#mXy@3yzwiWLnWD=|FnekU|3Oh40Nnr0QbshkD568wQr@_6*BP5q_HjO8L)6q1b@B zz{xEjpMcS*O=RDmoJ-Dq*Pj_yW}U#VcZif){Bp?x>5i^r7{=M6#4{_6bJsRBh$`A$ zL3i7CZJ*=F*SCjS%3b>k9>@qV@QLB)z%7)Ur%Y(xiU-~j;;rKKbeDH0qaa)-EtE&FM4a@UW70bmTrFe-6dv z4GqAD0zXB2w4Tjj)~@4Y?kVX*ERNxte{Dfr1_+2q+L6!+bigxbbT2=Pi&!3(Dogr| zGV}e zC?0Lyx{JB?c2WYH$>6Xv^BMyp(2MYw5h86%@n!EhN%HjK^AfDZVtqR<3Wzg}i|TZ6 zI9+l$;e5RNJ~+*T1G#%f2MdG=!NGe*i2(34EL+9&rdV6Io_Gl8#5|jrwTo z_|08W%5mNgC~CYD2kfSc#!EcBOK>YN>Mv{rK zg0V@*it<1JdKNebpMa<}#zAkFK!JE)@?Y8&BRM)^bcP^#;-|sXCI!b^`aR}7~ojd(bhI1`0@4XjMA#nZ+0{S8*mKdBn^7R zK_AewNn_5RdVmAQ*jYVxVdnb=g`RI-3#<;Sb^`oH9nSDA{raE#+odn4(~AdxHCiW@ zl4K|Th`g&Bo$fD}@6Z!h|BE%ydiG@Yb(=Fi6pw^0pta!#14>+}G`M!K^+q%-YmS+6 zLKx?sVvpc7coIf@pB}#EP0TJ~9M9i%oJVWpoU=piY@YV?lu7Xf4EB#=2 zio-Nltma@6eslse61+i4kR#%W7N*IpT1G#02gw0wbiL2`(PJP9YGbisMSMJn`(;}G zf}#gFvXMc=3#OVJ3cYyQyN2bK0elF1#WF!Pb=vo@Ep&NC?_HHF0T%E+UcUNn>oFDX zfe_?m3r1nKGT8r{ejP1hLsma6CiLj{;zTQFGM2MP$(GCcnFXv)0UM2_4rAUSA20OWMKiU_m;e4147tk#E z4D3+CXQWHKJ<^#*wvY8N=@FdtbV#I$$M(FvDZP zm}}NavP=wW{RdS3wnl|FV>-8Vrg>!MV7n)7=9c84u4=ipo6#!@K~+oHzO?F-F@jz- z3I$GabrCjXes=kEao%UW-+$3jJFA-NAmZz<2pf{r57akixJMtju$XVZoG-SSGdu z0Uf#_A|DDq$OI;47T&aCox1JNMHOhtVKXks(V~8ydei9}+}XP^W|iBYz<*Warirr@DAw4tK`7!I0jm-sr2Cr;8?wUbqxg zj#<`Lw;5juev|QbwZL8jnM19hYRH zcO&sA{xS3lYDAQx2c%>e+JN65<@@O#@(uMgJKz@Y)GM$^ zqHg`%SI%arHEeaUo{{((mK%b&(QDsE_qiHGYwjUYQLSd9jvodlY_1wpT5UxEXQ_)u z8@{@POs2;p*KE+iMTZv{vjtU!%f}gL(m`9WpD2T>yiy|K0xllt1O-|!v=pE;7b0`N z=63WTYL5>pJ38A@qrk8}fJgb11L_#vnfgq=O8%?!$8pDQn9!mc7OvJ(Y)2Q zOQi9gYIVtp)Y<=(?6L!Mg|8)eGa@jNx`ZWQ9b=ik-cgYKu4oatZ9i)AtwmM&HWAqF z4fq*=Km~mh2A!&`h%EDyxBUh;u#UP+ksHIBQ;V33zL7Pe%cW`OvrL~T6{iw^05%fT zT!)`1L~rIasNH$68dK2-liHlB&*XySp=TtY)J~)U0vipwS)QQLVnG_zN7OHubnk9QPgI()Yf}#=RF{~R)Pglrsl;s)Fag|2e$7+#c zx6H2XP;wyc&BNinpy62H1QNOR8wN1zeEYB3I@E33FHN+@TkG&Rjf>rO7fGZ#l2IfA z#G{>>d}C;HY7vFqofVnv5MpLg`aA}=UhCynD+$3=8VVI-rasBl0dFD4z7(A)k<8*i z`@uv5O9t;-f7S)564B!cY>cb&otD z)h80irYcP;uFOw&2#Pos1mZ%Dt+k7DONk+NVgiB0ZC<*bLL%J}ZP|yai=~<^I(|c{ zM*`tS9mL6V`XxYGhbYF#SVo0M6txbw5))JoE5M~28^WDdICrFivd+i*sNve2K)xp@ zOCbX9UuyBTd*XaOTUdM;!8TVNZo{Fu5sRpccm<0c+Ft+R`_-UyEgq!(nd4k>6;}~N z9Q&53xaap2)Ig4jbl=g9fWks=NsolU-BF8AjeAb(O@YI{7h6!fm)L#CSCi@)MSGwe ziDS8wUJQd+%5eo6P=_*9d*7LR&2w|yZ1KX1lX-`DaSj~TR;)se-rWgSj7YestV{7} zT5#qVhZleJh>X`@Q9)*z*C1s7CY8e?DCk;DpfduuN_}tW<9TeRb%OW&X3S6brTA*8 z?FRN{vid@jfU3c#bmT8RpKO*CK^w0SwPHNRWoM{B{I83Pd!xa^Cv?>&pIPM703qNI zW0Y(%is(#$Y*4LJLXgZ|^+Hb(7>CcjR#^}Ag#-MVhKe=+1|bGcQYihtvNVv+nu~2H zpHF3XJFw#QxH?l)gu@#MsjiN>% z1s}`kG6BxPrAoOjthsItm7up_0PO^t%=H#2j8Mwy=n1pKa1rk|FwcFI79DNn9NPlM37n|_lB^IPxAe9ej`-t0{U9XS5FrNofDla9(1cQ&B`fo%wE^TE zTP|N`mRGJb&JaT7fX-2PfCwSH0G?7AWLV=DD{Gj4Z@f4qBz0ym@92Fr#9bx!TviES*>9))-#D**53raCDeRCs3!04ZVYv{(_M2_{ zhn^K5#VTK_zc?xLa;^43W6OH>afM60zD#6ntP4i@_$S`Q`msx5T1*Sri}GVWgW2wu zW2)bevzngjaoRmT5#F@ANzWP`fcS=WI&UW=>;k+QaFPl=vY-hFL$ba(`}q3%2A^vP zvDfY6x9C9&|EVjO&v^GC5;EMiYY90xI1V&zhS?yRSX69+4S!$065TM_K@cGJ9vO%I9r2M<$j6FvBEQV~w z0_OueBtt9K?jo*%&RVV0Vq{T(8q__)jKL{>cBzH?%(a zs_m;k?T-xl(vfm8S&XY7fQ*B*7oy+;a&gs@gzWCI;JpJ^Y5`6Tj(Ff(7cl0e64xgl zDLz`6L1B~Bhq}cOf?p|VKN?>?TP0jZn<+c5bWuq?q>TB(kvyLrqx2DD#FV8Fih}qk zKCu!0_Tx!tCtuzneHmEvPxBTSbW zj-%+$wTCl+CMW3u_~wVWnVj56atFq!%t8ZA9`_3g1t)<0R1GI)k+?{MOHj|nDXIXkfFmW|TwDBFM@GQnM4={XL6J@i+b^5uq(=iidt;iJn#vlk4` zw0Gsvks((L_oybwkdd;Yq||de=wY!fA>F&7$$Tig zs-8;_XbbhRIsWOh&`88?Q=-j6V7xm2fCZJPe^F%nJy%xEcxIc;;y4^Yl3M5k241$j z@>$X%@>>^b@o~m7@WGe+J z0RtMaAPyMJh2ZS`07~Ro@I^!u@53R3n9bSe6EPZD*6_*DtIWL2EPvQXc8C{zX&s<8d7 zTRgp@m5skCZYA%nwIK+xuUM@^b%XE>F{eOwdUcaYgT+)kA%Hi&dk)}WNeOIePcWu3 zfB)tmc`xghGM`0`%X&+R`E|Af`FR%#yD+=4b2|wR-V&wMl|ggU@c0JawL?0Qb9YyV zS0D}VMIN<-cWH3(HsEPBHF+`TD=Bntk6qZ85yflM8J?hU!uIpP6nP|=zNjCFWxqp` zNI#l}+SLkqz;c=wWA?I&nK_+*r0T)rmc;<}iU6}^b%_A_u4W66*3pc zc$Ol5J3b4=EwP=gKPQObdE=i2m6+hekuJh^CeP|4=Jm|YZ3N_+^c!dwOsXB52SY#i zK5t=5YJ)muEssi$;JRZIzcR;T{=DRUbRoD~6vV&X3dWcmg&f`9fG3Xxd zuejHG;*L-yWU~bPx5Bq5_T`#mmeCEDltUrMFn<1)q_3UbDCl(Fm=Nbjxol(f*^b4l zn=xhk6R&R~ATs6k$)u|@?MKP1(2lI_?=OZu+fSj656NtHmfu6(gE7B&OM}mmFTRedQ;;$Y3BHDgH&mZK;^10nnr~G4iLZ zCOvIko)e%2tiwJTFA`8rl)0pjH7imTOOZX-RgApzGo;&P|8t{TKvfQPXCeL4$M9dJrlQa7m z$AapdRXqT)^7V*i=A3R9w9S(`tOOxOBWp~HaisZ}Okg((6#EeuWGUL`@e!B^k_v(5NPN->Y`G z%(#l8?fo{{=Vc*DXpO5$HvCGP_itbcMHEtOw@HfD^_3F$O~o#xg!n>uJ6(Ab^$A~I zxsni;wx?!Y)gAoKwC^a5XrNIK6qyn9m7TD+6+vA4AaP$7JXAr@@R|B3Im z=*Kh2IM$m4)${UxO6Fy8=m*n&c1=VJ9b$tcqid$RGy!`uJ>Q)o{+QV45f57wt=+Xh zpsqo+<)tKtL*8NDkk1=51u=_wLu`B>=oiOUIZU;v4MX@#oC#9#JpGfs2k8fft-4>%?QCHqbJX z=@>|E3>Y)V!KuAGX$d`n%f8^oWsBcoji?caRs6=V!5*jglK3^@530+w>#I9lf87Sbx4`bw!Fnh2>w8#z&~ZSD-n zUTQcEENf7i1x*;Jpzi@yHXUS~NiXD>#ZXu=X~;&S^Py+_ zUEdO=2vw8lL49>PHp#1rjouzTxQUVJ9&i*l6|3wfXA|czFZD~!1jQes&c>`hLK~wb zJioEFk+wGpL=WdqY(57Cgc;1Ni(kQzilj*^ksQ?G`eaUD+SljPI#Gf7eGj<~75~7q zcfkqp+AUNIbG9eL^)aW~q0yVh`56pn-MOsu^&4YumCZGe`RE@htFzjPg|)vPfZ!(o zm2S&0LOTwlaE=<36>T8FLx-f&S~#IA%43Cp)mgig61gbcXDjWoGggL)3L5$5P!}`x zgV+jZyIMt4rJ{i)>sWqE#h@kKW^jP+#j*y)F7;Q=9#V$)KQ~;$y9&9e{D66b5~yH- zaj#81*RU7n1xbnM6tfK_GdjgHZAkq|sa-`Bks?>m1X;#ybO2KABKDU ztZO;{juyaqQIj08q*Z8Y-VA_kE?JB@*kxIu(L%Q3IGo^K>(ZFm{b7-15RU1@R%V2H zcZkGj5pt|(2XGboAbU&2p<`*bbi(y*(nHctagg=QyBIrd0hs!aPq>rga>$E!$bAvq z%tqMpy5{AMw)OOfc!OLZi$Tp_E zrToyPmj+s;?Ui5t*;3p&=;p#{3D{c;>54NdT3cwNW)XHG6?QRcqyF4MHHsCut2?bqn@NY?T%$Z9dC)j-jGXTN2n6SGMT`j+uH2nD`Wz58wfBl4J3PXT zBqfC=EkJ6IiTO?>NOxjkN_*#KhwC@O7Mvx7=CDf=Rxt;%+lcZ9s*bn_(!WCew^9Ph zoPHG@DqV7nyVWOZf{01Y8PthEt&7qN?MlfI)h~-X>L_;i7aV?PX~m9lQ%|bS=n)yp z9G3G2(@V_T(s;`Gm5kCy7wZN>b!jWc>^gR?#H{I`bY)r;GHO?z4s~ve@DmFB?k845fS;B-f%fp%?RM|;NDQcGn zkdbB67s(Z6*pwVHsvYFUQwOUGYnA1qB^|o$lnxhsxM|9om7~iE_|o8yS~gTyX48=x zU#ol{X{Nc)`tP=JCSn5H|cPLb4bfsSGk9*zS8t?um@!e__w-;5Hm zwM%{tum^#@>mG4!c9)^cmO*}7Z`OeXPyRp?NWGt9n?QcI5)A^;ppH&|Q@a(enXB6D zid|mx%xlQ0qx4LE#Qs8bo1&CS+Wm1mPfc%2Y zGVIm2U+ln^O|vj=0{T+r9Nr#QEcYxZCcgS2^5o@%5Z`N4ld_IZVR%J&4hm%s3AW!3$ZTjf8G5dxnTycrN zP=5_@{pur@Ud!TA2 zc!%t)biUo7-XJsJCR#q=bKAe-KNH-BKA;Rj(bMD^A}<0h8K$D}J`hIEMaVQJAsflh z{(6=shR-pLu#s8p+J5Xikd}88>$OKdgCqf=hXpDSle=KP1O3}zxVw2yfGljCcicdZ zN*#l5mp;vq_>kk4LG_o#{Mt~Fkl{&aqqHM>MS~UIIG>xVF`zcA1iuZBrIYJ@Vc#!V zXpYpn1KM-qFV;L^p11i(0_|H_aKdCh-2r3LhW+!hzkYD54AK>cu+PLMFRtSSRKY7y zc8p*c7#_u7sx@}mK4MyOn4Jt`n>5&GhA>Cb(~7;Z^RkI;$4q;Rj)xGhU9Wy;2)EE9C|!H ztGd0eG$z3eVG5t$WiOxM;H)DT&QAo&zJwcZ=?LIH;1u8JFjucgd0_w1%Ogk}s` z4`PG~qU=B}RMP_9@w{EU!!=ve22615dMiZWHQ2zs{W#496~D(CsP@jIrx~ORK}%lH zi14ES-(ciyr2T*qNJY$Zzn-ND@)WY7i@+s)IE=Qv^$i{{jFTtx>2Mg6dh8EFCpeIJ zKeTr&b(DPtN`bid&9GY+1;7ojo{`9HNzK{mg2t`wc#hy((b-O!p&b*-7fYXte54_w z$w$nW711$aijNaeaAF?75R)j_iTe4|nL1B@?1824-JC3UqX+nIw=AjgSdn#XHTfwL z<{`B4%dG98iAU3r{vdEbhUT2z=okMFl;f4#z&r zv9CgH4?@&Zh6VV9OY5v9yuO=8`Eo^Tk4x53hpXG_)iaV4T61~(7ff-PNBMv@H16_3 z-miimM(PZtAp>#G{;IRJ$fdnG;1oI*0oa=nS+kAwAfJ2{d}9Faywks=cH#3sIb(fr zSo@XKxxU3(W;5F^>fVdGvs+c+-bE z-{TNhOhmX-{I!M?JjR|(pOPE})W{>xDoMKu&7ElN0JVE5+^REhJ0-Y1J?uWCGK(=| zW=>FyL#6HgPw@TrEd)tFzr3U@(~6{sY>HXi3M#%39$F1fKtV)^;?Ss)CQ6{$Vg+9! z=p&3b!YI9ErSAbLzLHT!kwlNKn;9KT5w452B~md*rVQ!{ASaignyx>Ckhe<|K_ zfSbNGPp|POJ@ABY{N(%ao}6lUSD5jbk26a=^j7LoYInZ{z;cZ&(1ybmC6=WHRjF1Y zQO;Rcu;8`8@oNGq;sU6^@t6qn?@x$U2c@21`H*;RtP#@jyOHy561UTFeCj~t_ITS) zpqs+H!QJ%i8~A0Jj*3fp$uOo)Hax+>QfOD)dL%#TbW8z`3}&A4s|`vI5xjP?VJV&& zcWc!a>AjX@%q;2*t*25G@c=*Y383ZwLTLo`;!R?n8CzH;ZtTow7*e^vu*pF6-rW7I z#R*MC;huG?&P=)~?$NY$QCeiw${f`M3FakPSQfG%Q7pqeU&dw)z#3s} zv|=AZzQm3NrZ|FqeuSTKox%vY8w=XBGW?W;;&KRuOdmIRn6eF9NkKe9p}3I?p}_^1 z5=*rv;zc6CsRGb{1$0o{sA5}H+VELP4t@$b^}L4!ZVB2}`7#nppI8eO+Uu3QcyRBK z_H`tTnD;soNg+CUzCv06asq`YD>nSwY@srw;>+XNl&@ziEKKJF67fv&qN9-HdAfbR zjv!$OPhgOX9>(?Yl(+hzIqteZVF{+q9(`qjCWx?m!@=vGI0I&!EM#OBkY9tls+`Bs z|M>T$CmJ&!|K4Rs^5YmCNTckK1e@hj0hbsLZjdg2SSZ`Jshu$Ro$OTwyK5bbIMcVJ;}GX+NZJ##xu$&v$RudbjqwB_fT9pNiZ zmilI|rsRs@`cw8#LdrfnJgajEszWMYLJe*e^zKzwh5>BwhqqnKk3VFhf_L<{ z;m)bIVk2EqMBx>M;;sK5-(eBC6K~Dn$4Ih12)OP;@vnY-TK{3&scnP+(t*G;k~}Gf zP^w1RD58Y7t$Baw^5b+#Y|4lZoNE7PHg)QYz2_1hz^LE?!8=(A+f<{0sOQuIBa|4y zX$^I2>|u(~GuDwpysyFUZ|hziB7MOmhS0b(1kw!N8t`bFOo!yzagyLxx7ecTcTi>bb+g?l7j|@%z*@`P9bp;km3sFl?@s zo>;tyHm{c`ZfeDuJⓈX}fzTO3?+fX-nJsf~zlQ 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%0DlR!nT67_sU>?>pC2!e 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 NEwgWVzfIqZ)g<7Z8b=}xD+#$8^F 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�L-v|^Yy>Y>C44+8CJTQ}GR-T65X=^kH4v4a#lVPz3;3ltjB)&r$OEnQ7hslMN6zcwnJ zCAp)>(h@*kdb9DA-uMpFE=(nyf289cUuG*(cUj0f)-h6H*MAkF>$?v|d+ zo|Z^>IOU8+9SoN2gcALf)8JzsXtgi!u}y}QwXTc! zo$^Odc)|e$U9=z!4!P9mIn?eH1S)WK&h!3(1IJqx$ME>xZ7Zm_rxt=}5n9s7Np$7B z@!Wg=ZMw++S|8KgZ1?aA01IvMO56ox$6HU>78wgM2XdbLQF&m0!b7q@mQw8*XNxR>zu^!&G%6kF=9(& zfdvhT?*1bWg%oj?jh)tSqQew5Xn+;|kbqva>GS22Rk(-;sgkiV1+s>boTrc9N~X3l zp*Q*F671cVXC7TdA!8WBI0Qi$fB9q!rr-(ea&<0WsU z>AJniW#yQ?1>+0@-TlQJ($?)XE`BxM_8ja2MR4Vlze3+rn-c

      5. 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 z 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