From 010b420d7f87168203726f18130b362013ccc664 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Sun, 15 Feb 2026 14:12:40 +0100 Subject: [PATCH] fresh repo --- .envrc | 1 - .eslintrc | 44 - .gitignore | 22 - .gitlint | 9 - .prettierrc | 16 - .storybook/main.ts | 21 - .storybook/preview.ts | 16 - .storybook/test-assets/test-profile-image.jpg | Bin 77763 -> 0 bytes .storybook/test-runner.ts | 31 - .vscode/extensions.json | 6 - .vscode/settings.json | 13 - .yarnrc.yml | 1 - README.md | 4 +- flake.lock | 82 - flake.nix | 64 - git_hooks/commit-msg | 35 - maintainers.yaml | 11 - netlify.toml | 7 - package-lock.json | 9685 ----------------- package.json | 65 - postcss.config.js | 6 - src/404.html | 21 - src/app.css | 3 - src/app.html | 21 - src/lib/components/AlertError.svelte | 19 - src/lib/components/AlertWarning.svelte | 18 - src/lib/components/Container.svelte | 13 - src/lib/components/CopyField.svelte | 77 - src/lib/components/InstallNgit.svelte | 33 - src/lib/components/Navbar.stories.svelte | 32 - src/lib/components/Navbar.svelte | 68 - .../components/RepoSummaryCard.stories.svelte | 28 - src/lib/components/RepoSummaryCard.svelte | 81 - .../ReposSummaryList.stories.svelte | 69 - src/lib/components/ReposSummaryList.svelte | 119 - src/lib/components/events/Compose.svelte | 49 - src/lib/components/events/EventWrapper.svelte | 157 - .../components/events/EventWrapperLite.svelte | 23 - .../components/events/ThreadWrapper.svelte | 48 - .../events/content/IssuePreview.svelte | 22 - .../events/content/ParsedContent.svelte | 51 - .../components/events/content/Patch.svelte | 252 - src/lib/components/events/content/Repo.svelte | 19 - .../components/events/content/Status.svelte | 14 - .../components/events/content/utils.spec.ts | 54 - src/lib/components/events/content/utils.ts | 318 - src/lib/components/events/type.ts | 12 - src/lib/components/icons.ts | 27 - src/lib/components/issues/icons.ts | 18 - src/lib/components/issues/type.ts | 60 - .../proposals/ProposalDetails.svelte | 50 - .../proposals/ProposalHeader.stories.svelte | 26 - .../proposals/ProposalHeader.svelte | 104 - .../proposals/ProposalsList.stories.svelte | 56 - .../components/proposals/ProposalsList.svelte | 47 - .../ProposalsListItem.stories.svelte | 34 - .../proposals/ProposalsListItem.svelte | 167 - .../proposals/Status.stories.svelte | 27 - src/lib/components/proposals/Status.svelte | 110 - .../proposals/StatusSelector.svelte | 141 - src/lib/components/proposals/icons.ts | 22 - src/lib/components/proposals/type.ts | 60 - src/lib/components/proposals/vectors.ts | 66 - .../repo/RepoDetails.stories.svelte | 55 - src/lib/components/repo/RepoDetails.svelte | 365 - .../components/repo/RepoHeader.stories.svelte | 24 - src/lib/components/repo/RepoHeader.svelte | 61 - src/lib/components/repo/type.ts | 129 - src/lib/components/repo/utils.spec.ts | 100 - src/lib/components/repo/utils.ts | 135 - src/lib/components/repo/vectors.ts | 127 - .../users/UserHeader.stories.svelte | 141 - src/lib/components/users/UserHeader.svelte | 166 - src/lib/components/users/type.ts | 38 - src/lib/components/users/vectors.ts | 39 - src/lib/kinds.ts | 29 - src/lib/stores/Issue.ts | 204 - src/lib/stores/Issues.ts | 203 - src/lib/stores/Proposal.ts | 210 - src/lib/stores/Proposals.ts | 251 - src/lib/stores/ReposIdentifier.ts | 56 - src/lib/stores/ReposPubkey.ts | 78 - src/lib/stores/ReposRecent.ts | 55 - src/lib/stores/ndk.ts | 21 - src/lib/stores/repo.ts | 128 - src/lib/stores/repos.ts | 367 - src/lib/stores/users.ts | 184 - src/lib/stores/utils.ts | 4 - src/lib/wrappers/ComposeIssue.svelte | 136 - src/lib/wrappers/ComposeReply.svelte | 159 - src/lib/wrappers/EventCard.svelte | 89 - src/lib/wrappers/EventPreview.svelte | 69 - src/lib/wrappers/Navbar.svelte | 23 - src/lib/wrappers/RepoDetails.svelte | 13 - src/lib/wrappers/RepoMenu.svelte | 76 - src/lib/wrappers/RepoPageWrapper.svelte | 70 - src/lib/wrappers/Thread.svelte | 24 - src/lib/wrappers/ThreadTree.svelte | 138 - src/lib/wrappers/thread_tree.spec.ts | 231 - src/lib/wrappers/thread_tree.ts | 70 - src/routes/+layout.svelte | 9 - src/routes/+layout.ts | 1 - src/routes/+page.svelte | 125 - src/routes/about/+page.svelte | 313 - src/routes/concept/+page.svelte | 28 - src/routes/e/[nostr_ref]/+page.svelte | 113 - src/routes/e/[nostr_ref]/+page.ts | 5 - src/routes/ngit/+page.svelte | 142 - src/routes/p/[npub]/+page.svelte | 58 - src/routes/p/[npub]/+page.ts | 5 - src/routes/quick-start/+page.svelte | 378 - src/routes/r/[repo_naddr]/+page.svelte | 45 - src/routes/r/[repo_naddr]/+page.ts | 5 - src/routes/r/[repo_naddr]/issues/+page.svelte | 93 - src/routes/r/[repo_naddr]/issues/+page.ts | 5 - .../issues/[issue_nip19]/+page.svelte | 104 - .../issues/[issue_nip19]/+page.ts | 10 - .../r/[repo_naddr]/issues/new/+page.svelte | 66 - src/routes/r/[repo_naddr]/issues/new/+page.ts | 5 - .../r/[repo_naddr]/proposals/+page.svelte | 121 - src/routes/r/[repo_naddr]/proposals/+page.ts | 5 - .../proposals/[proposal_nip19]/+page.svelte | 104 - .../proposals/[proposal_nip19]/+page.ts | 10 - .../repo/[repo_identifier]/+page.svelte | 20 - src/routes/repo/[repo_identifier]/+page.ts | 5 - .../issue/[event_id]/+page.ts | 5 - .../repo/[repo_identifier]/issues/+page.ts | 5 - .../proposal/[event_id]/+page.ts | 5 - .../repo/[repo_identifier]/proposals/+page.ts | 5 - src/routes/repos/+page.svelte | 26 - static/.well-known/nostr.json | 11 - static/favicon.ico | Bin 882 -> 0 bytes static/icons/GitCitadel_Logo/GitCitadel.ico | Bin 882 -> 0 bytes .../GitCitadel_Logo/GitCitadel_Icon_Black.svg | 3 - .../GitCitadel_Logo/GitCitadel_Icon_White.svg | 3 - .../icons/GitCitadel_Logo/GitCitadel_Logo.png | Bin 75094 -> 0 bytes .../GitCitadel_Logo/GitCitadel_PFP_Purple.png | Bin 8514 -> 0 bytes static/icons/icon-32x32.png | Bin 882 -> 0 bytes static/icons/icon.svg | 16 - static/manifest.json | 63 - svelte.config.js | 16 - tailwind.config.js | 18 - tsconfig.json | 15 - vite.config.ts | 6 - yarn.lock | 4416 -------- 145 files changed, 1 insertion(+), 23430 deletions(-) delete mode 100644 .envrc delete mode 100644 .eslintrc delete mode 100644 .gitlint delete mode 100644 .prettierrc delete mode 100644 .storybook/main.ts delete mode 100644 .storybook/preview.ts delete mode 100644 .storybook/test-assets/test-profile-image.jpg delete mode 100644 .storybook/test-runner.ts delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json delete mode 100644 .yarnrc.yml delete mode 100644 flake.lock delete mode 100644 flake.nix delete mode 100755 git_hooks/commit-msg delete mode 100644 maintainers.yaml delete mode 100644 netlify.toml delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 postcss.config.js delete mode 100644 src/404.html delete mode 100644 src/app.css delete mode 100644 src/app.html delete mode 100644 src/lib/components/AlertError.svelte delete mode 100644 src/lib/components/AlertWarning.svelte delete mode 100644 src/lib/components/Container.svelte delete mode 100644 src/lib/components/CopyField.svelte delete mode 100644 src/lib/components/InstallNgit.svelte delete mode 100644 src/lib/components/Navbar.stories.svelte delete mode 100644 src/lib/components/Navbar.svelte delete mode 100644 src/lib/components/RepoSummaryCard.stories.svelte delete mode 100644 src/lib/components/RepoSummaryCard.svelte delete mode 100644 src/lib/components/ReposSummaryList.stories.svelte delete mode 100644 src/lib/components/ReposSummaryList.svelte delete mode 100644 src/lib/components/events/Compose.svelte delete mode 100644 src/lib/components/events/EventWrapper.svelte delete mode 100644 src/lib/components/events/EventWrapperLite.svelte delete mode 100644 src/lib/components/events/ThreadWrapper.svelte delete mode 100644 src/lib/components/events/content/IssuePreview.svelte delete mode 100644 src/lib/components/events/content/ParsedContent.svelte delete mode 100644 src/lib/components/events/content/Patch.svelte delete mode 100644 src/lib/components/events/content/Repo.svelte delete mode 100644 src/lib/components/events/content/Status.svelte delete mode 100644 src/lib/components/events/content/utils.spec.ts delete mode 100644 src/lib/components/events/content/utils.ts delete mode 100644 src/lib/components/events/type.ts delete mode 100644 src/lib/components/icons.ts delete mode 100644 src/lib/components/issues/icons.ts delete mode 100644 src/lib/components/issues/type.ts delete mode 100644 src/lib/components/proposals/ProposalDetails.svelte delete mode 100644 src/lib/components/proposals/ProposalHeader.stories.svelte delete mode 100644 src/lib/components/proposals/ProposalHeader.svelte delete mode 100644 src/lib/components/proposals/ProposalsList.stories.svelte delete mode 100644 src/lib/components/proposals/ProposalsList.svelte delete mode 100644 src/lib/components/proposals/ProposalsListItem.stories.svelte delete mode 100644 src/lib/components/proposals/ProposalsListItem.svelte delete mode 100644 src/lib/components/proposals/Status.stories.svelte delete mode 100644 src/lib/components/proposals/Status.svelte delete mode 100644 src/lib/components/proposals/StatusSelector.svelte delete mode 100644 src/lib/components/proposals/icons.ts delete mode 100644 src/lib/components/proposals/type.ts delete mode 100644 src/lib/components/proposals/vectors.ts delete mode 100644 src/lib/components/repo/RepoDetails.stories.svelte delete mode 100644 src/lib/components/repo/RepoDetails.svelte delete mode 100644 src/lib/components/repo/RepoHeader.stories.svelte delete mode 100644 src/lib/components/repo/RepoHeader.svelte delete mode 100644 src/lib/components/repo/type.ts delete mode 100644 src/lib/components/repo/utils.spec.ts delete mode 100644 src/lib/components/repo/utils.ts delete mode 100644 src/lib/components/repo/vectors.ts delete mode 100644 src/lib/components/users/UserHeader.stories.svelte delete mode 100644 src/lib/components/users/UserHeader.svelte delete mode 100644 src/lib/components/users/type.ts delete mode 100644 src/lib/components/users/vectors.ts delete mode 100644 src/lib/kinds.ts delete mode 100644 src/lib/stores/Issue.ts delete mode 100644 src/lib/stores/Issues.ts delete mode 100644 src/lib/stores/Proposal.ts delete mode 100644 src/lib/stores/Proposals.ts delete mode 100644 src/lib/stores/ReposIdentifier.ts delete mode 100644 src/lib/stores/ReposPubkey.ts delete mode 100644 src/lib/stores/ReposRecent.ts delete mode 100644 src/lib/stores/ndk.ts delete mode 100644 src/lib/stores/repo.ts delete mode 100644 src/lib/stores/repos.ts delete mode 100644 src/lib/stores/users.ts delete mode 100644 src/lib/stores/utils.ts delete mode 100644 src/lib/wrappers/ComposeIssue.svelte delete mode 100644 src/lib/wrappers/ComposeReply.svelte delete mode 100644 src/lib/wrappers/EventCard.svelte delete mode 100644 src/lib/wrappers/EventPreview.svelte delete mode 100644 src/lib/wrappers/Navbar.svelte delete mode 100644 src/lib/wrappers/RepoDetails.svelte delete mode 100644 src/lib/wrappers/RepoMenu.svelte delete mode 100644 src/lib/wrappers/RepoPageWrapper.svelte delete mode 100644 src/lib/wrappers/Thread.svelte delete mode 100644 src/lib/wrappers/ThreadTree.svelte delete mode 100644 src/lib/wrappers/thread_tree.spec.ts delete mode 100644 src/lib/wrappers/thread_tree.ts delete mode 100644 src/routes/+layout.svelte delete mode 100644 src/routes/+layout.ts delete mode 100644 src/routes/+page.svelte delete mode 100644 src/routes/about/+page.svelte delete mode 100644 src/routes/concept/+page.svelte delete mode 100644 src/routes/e/[nostr_ref]/+page.svelte delete mode 100644 src/routes/e/[nostr_ref]/+page.ts delete mode 100644 src/routes/ngit/+page.svelte delete mode 100644 src/routes/p/[npub]/+page.svelte delete mode 100644 src/routes/p/[npub]/+page.ts delete mode 100644 src/routes/quick-start/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/+page.ts delete mode 100644 src/routes/r/[repo_naddr]/issues/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/issues/+page.ts delete mode 100644 src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.ts delete mode 100644 src/routes/r/[repo_naddr]/issues/new/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/issues/new/+page.ts delete mode 100644 src/routes/r/[repo_naddr]/proposals/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/proposals/+page.ts delete mode 100644 src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.svelte delete mode 100644 src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.ts delete mode 100644 src/routes/repo/[repo_identifier]/+page.svelte delete mode 100644 src/routes/repo/[repo_identifier]/+page.ts delete mode 100644 src/routes/repo/[repo_identifier]/issue/[event_id]/+page.ts delete mode 100644 src/routes/repo/[repo_identifier]/issues/+page.ts delete mode 100644 src/routes/repo/[repo_identifier]/proposal/[event_id]/+page.ts delete mode 100644 src/routes/repo/[repo_identifier]/proposals/+page.ts delete mode 100644 src/routes/repos/+page.svelte delete mode 100644 static/.well-known/nostr.json delete mode 100644 static/favicon.ico delete mode 100644 static/icons/GitCitadel_Logo/GitCitadel.ico delete mode 100644 static/icons/GitCitadel_Logo/GitCitadel_Icon_Black.svg delete mode 100644 static/icons/GitCitadel_Logo/GitCitadel_Icon_White.svg delete mode 100644 static/icons/GitCitadel_Logo/GitCitadel_Logo.png delete mode 100644 static/icons/GitCitadel_Logo/GitCitadel_PFP_Purple.png delete mode 100644 static/icons/icon-32x32.png delete mode 100644 static/icons/icon.svg delete mode 100644 static/manifest.json delete mode 100644 svelte.config.js delete mode 100644 tailwind.config.js delete mode 100644 tsconfig.json delete mode 100644 vite.config.ts delete mode 100644 yarn.lock diff --git a/.envrc b/.envrc deleted file mode 100644 index 8392d15..0000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index ce54b43..0000000 --- a/.eslintrc +++ /dev/null @@ -1,44 +0,0 @@ -// eslint-plugin-svelte -// https://sveltejs.github.io/eslint-plugin-svelte/user-guide/ -{ - "root": true, - "extends": [ - // add more generic rule sets here, such as: - // 'eslint:recommended', - "plugin:@typescript-eslint/recommended", - "prettier", - "plugin:svelte/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - // ... - "project": "./tsconfig.json", - "extraFileExtensions": [".svelte"] // This is a required setting in `@typescript-eslint/parser` v4.24.0. - }, - "plugins": ["@typescript-eslint", "prettier"], - "rules": { - "no-console": 1, - "prettier/prettier": 2, - "comma-dangle": [2, "always-multiline"], - "no-alert": "off", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_" - } - ] - // 'svelte/rule-name': 'error' - }, - "overrides": [ - { - "files": ["*.svelte"], - "parser": "svelte-eslint-parser", - // Parse the ` - -
- {#if no_wrap} - - {:else} -
- -
- {/if} -
diff --git a/src/lib/components/CopyField.svelte b/src/lib/components/CopyField.svelte deleted file mode 100644 index a994171..0000000 --- a/src/lib/components/CopyField.svelte +++ /dev/null @@ -1,77 +0,0 @@ - - - - - -
{ - try { - await navigator.clipboard.writeText(content) - copied = true - setTimeout(() => { - copied = false - }, 2000) - } catch {} - }} -> - {#if label.length > 0} - {label} - {#if copied} - (copied to clipboard){/if} - {/if} -
- {#if icon} - {#each icon as d} - - {/each} - {/if} -
- {truncatedContent()} -
- - {#each icons_misc.copy as d} - - {/each} - -
-
diff --git a/src/lib/components/InstallNgit.svelte b/src/lib/components/InstallNgit.svelte deleted file mode 100644 index 6bea05d..0000000 --- a/src/lib/components/InstallNgit.svelte +++ /dev/null @@ -1,33 +0,0 @@ - - -
-

- download binaries and add them to a directory from which they can be run - globally: -

-

- Linux - Mac - Windows - {version} -

-

- alternatively, if you have cargo installed runcargo install ngit -

-
diff --git a/src/lib/components/Navbar.stories.svelte b/src/lib/components/Navbar.stories.svelte deleted file mode 100644 index 89b5b4e..0000000 --- a/src/lib/components/Navbar.stories.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte deleted file mode 100644 index 8520129..0000000 --- a/src/lib/components/Navbar.svelte +++ /dev/null @@ -1,68 +0,0 @@ - - -
- - - -
diff --git a/src/lib/components/RepoSummaryCard.stories.svelte b/src/lib/components/RepoSummaryCard.stories.svelte deleted file mode 100644 index c0efa8e..0000000 --- a/src/lib/components/RepoSummaryCard.stories.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/lib/components/RepoSummaryCard.svelte b/src/lib/components/RepoSummaryCard.svelte deleted file mode 100644 index bf9376a..0000000 --- a/src/lib/components/RepoSummaryCard.svelte +++ /dev/null @@ -1,81 +0,0 @@ - - -
- {#if loading} -
-
- {:else} - {short_name} - {#if short_descrption.length > 0} -

- {short_descrption} -

- {/if} - -
- {#if author} -
0} - class:rounded-md={additional_maintainers.length > 0} - class:bg-base-400={additional_maintainers.length > 0} - class:text-white={additional_maintainers.length > 0} - > - -
- {#if additional_maintainers.length > 0} - with - -
    - {#each additional_maintainers as user} -
  • - -
  • - {/each} -
- {/if} - {/if} -
- {/if} -
- - diff --git a/src/lib/components/ReposSummaryList.stories.svelte b/src/lib/components/ReposSummaryList.stories.svelte deleted file mode 100644 index 6e10a00..0000000 --- a/src/lib/components/ReposSummaryList.stories.svelte +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/lib/components/ReposSummaryList.svelte b/src/lib/components/ReposSummaryList.svelte deleted file mode 100644 index bf9ae02..0000000 --- a/src/lib/components/ReposSummaryList.svelte +++ /dev/null @@ -1,119 +0,0 @@ - - -
- {#if title.length > 0} -
-

{title}

-
- {/if} - {#if repos.length == 0 && !loading} -

None

- {:else} -
- {#each grouped_repos as group} - {#if group.length === 0} - - {:else if group.length === 1} - {#each group as { name, description, identifier, maintainers, naddr }} - - {/each} - {:else if group_by} -
- - -
{ - selected_group = group[0][group_by] - }} - > -
-
{group[0][group_by]}
-
{group.length} Items
-
-
- {#each group as { name, description, identifier, maintainers, naddr }} -
- -
- {/each} -
- {/if} - {/each} - {#if loading} - - {#if repos.length == 0} - - - {/if} - {/if} -
- {/if} -
-{#if selected_group} - -{/if} diff --git a/src/lib/components/events/Compose.svelte b/src/lib/components/events/Compose.svelte deleted file mode 100644 index f853937..0000000 --- a/src/lib/components/events/Compose.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - -
-
- -
-
- {#if !submitting} - - {/if} -
-
- -
-
-
diff --git a/src/lib/components/events/EventWrapper.svelte b/src/lib/components/events/EventWrapper.svelte deleted file mode 100644 index 035453a..0000000 --- a/src/lib/components/events/EventWrapper.svelte +++ /dev/null @@ -1,157 +0,0 @@ - - -
-
-
- -
- {created_at_ago} -
- {#if event} -
- -
- {#if show_raw_json_modal} - - {/if} -
- -
- {#if show_share_modal} - - {/if} - {/if} - {#if !show_compose && $logged_in_user} -
- -
- {/if} -
-
-
- - {#if show_compose} -
-
-
- -
-
- replySent()} /> -
-
- {/if} -
-
diff --git a/src/lib/components/events/EventWrapperLite.svelte b/src/lib/components/events/EventWrapperLite.svelte deleted file mode 100644 index 501bbcd..0000000 --- a/src/lib/components/events/EventWrapperLite.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - -
-
-
-
-
- -
-
- {created_at_ago} -
-
diff --git a/src/lib/components/events/ThreadWrapper.svelte b/src/lib/components/events/ThreadWrapper.svelte deleted file mode 100644 index 6afa27c..0000000 --- a/src/lib/components/events/ThreadWrapper.svelte +++ /dev/null @@ -1,48 +0,0 @@ - - -
- {#if num_replies > 0} - {#if show_replies} -
- -
- {:else} - - {/if} - {/if} -
- -
-
diff --git a/src/lib/components/events/content/IssuePreview.svelte b/src/lib/components/events/content/IssuePreview.svelte deleted file mode 100644 index 57cbe7b..0000000 --- a/src/lib/components/events/content/IssuePreview.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - - Git Issue for {pointer?.identifier}: {extractIssueTitle(event)} by - diff --git a/src/lib/components/events/content/ParsedContent.svelte b/src/lib/components/events/content/ParsedContent.svelte deleted file mode 100644 index 6f1a155..0000000 --- a/src/lib/components/events/content/ParsedContent.svelte +++ /dev/null @@ -1,51 +0,0 @@ - - -
- {#each fullContent as part} - {#if isParsedNewLine(part)} - {#if part.value.length > 1} -
- {/if} -
- {:else if isParsedLink(part)} - {#if isImage(part.url)} - {part.imeta?.alt} - {:else} - - {part.url.replace(/https?:\/\/(www\.)?/, '')} - - {/if} - {:else if isParsedNpub(part) || isParsedNprofile(part)} -
- -
- {:else if isParsedNevent(part) || isParsedNote(part) || isParsedNaddr(part)} - - {:else if isParsedText(part)} - {part.value} - {/if} - {/each} -
diff --git a/src/lib/components/events/content/Patch.svelte b/src/lib/components/events/content/Patch.svelte deleted file mode 100644 index ef2e22f..0000000 --- a/src/lib/components/events/content/Patch.svelte +++ /dev/null @@ -1,252 +0,0 @@ - - -{#if preview} - - Git Patch for {pointer?.identifier}: {commit_title} by - -{:else} -
-
-
- -
-
commit
-
- -
-
Changes:
-
- {commit_id_shorthand} -
-
- - {#each files as file, index} -
-
- - - -
- {#if expand_files[index]} -
-
- {#each file.chunks as chunk, index} - {#if index !== 0} -
-
- ... -
-
- {/if} - {#each chunk.changes as change, i} -
-
- {isAddChange(change) && - i !== 0 && - isDeleteChange(chunk.changes[i - 1]) - ? ' ' - : extractChangeLine(change)} -
-
- {/each} - {/each} -
-
-
- {#each file.chunks as chunk, index} - {#if index !== 0} -
- {/if} - {#each chunk.changes as change, i} -
-
- {#if getFortmattedDiffHtml(change, (file.to || file.from) - ?.split('.') - .pop() || '')} - - {@html getFortmattedDiffHtml( - change, - (file.to || file.from)?.split('.').pop() || '' - )} - {:else} - {change.type == 'normal' - ? change.content - : change.content.substring(1)} - {/if} - {#if (change.type == 'normal' ? change.content : change.content.substring(1)).length === 0} - - - {/if} -
-
- {/each} - {/each} -
-
-
- {/if} -
- - {#if expand_full_files[index]} -
- - {#each file.chunks as chunk, index} - {#if index !== 0} - - {/if} - {#each chunk.changes as _, i} -   - - {/each} - {/each} -
- {/if} - {/each} -
-{/if} diff --git a/src/lib/components/events/content/Repo.svelte b/src/lib/components/events/content/Repo.svelte deleted file mode 100644 index f1877a7..0000000 --- a/src/lib/components/events/content/Repo.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - -{#if repo} - - Git Repository: {repo.name} by - -{/if} diff --git a/src/lib/components/events/content/Status.svelte b/src/lib/components/events/content/Status.svelte deleted file mode 100644 index 5f54d67..0000000 --- a/src/lib/components/events/content/Status.svelte +++ /dev/null @@ -1,14 +0,0 @@ - - -
- {#if status} - set status to - {:else} - set status incorrectly - {/if} -
diff --git a/src/lib/components/events/content/utils.spec.ts b/src/lib/components/events/content/utils.spec.ts deleted file mode 100644 index 4f9301c..0000000 --- a/src/lib/components/events/content/utils.spec.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { describe, expect, test } from 'vitest' -import { extractPatchMessage } from './utils' - -// const simple = -// const example = `From 35ef1fe53b5a460266a1666709d886560d99cd67 Mon Sep 17 00:00:00 2001\nFrom: fiatjaf \nDate: Mon, 29 Jan 2024 09:41:27 -0300\nSubject: [PATCH] fix multi-attempt password prompt.\n\nthe print was doing nothing\nand the continue was missing\n---\nfound this bug while copying these functions to be used in nak\n\n helpers.go | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/helpers.go b/helpers.go\nindex 0b3790d..9b5c3da 100644\n--- a/helpers.go\n+++ b/helpers.go\n@@ -176,7 +176,7 @@ func promptDecrypt(ncryptsec1 string) (string, error) {\n \t\t}\n \t\tsec, err := nip49.Decrypt(ncryptsec1, password)\n \t\tif err != nil {\n-\t\t\tfmt.Fprintf(os.Stderr, "failed to decrypt: %s", err)\n+\t\t\tcontinue\n \t\t}\n \t\treturn sec, nil\n \t}\n--\n2.43.0\n', tags: (3) […], kind: 1617, id: "fd5d1be541bf2d20c51ca63265cc893eecb4be8720db9b42abec21b9ca9747de", sig: "d4733b8b32c05d1fb33a76105926fc537e4060df25405521b3f74f91ed7d65f345386260e8a825c79d67c3dd67f5e7eea7d532cda48cb8d45f09f9be19775289", pubkey: "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d", … }` - -describe('extractPatchMessage', () => { - test('extractPatchMessage - normal message end', () => { - expect( - extractPatchMessage( - 'From 5ec8fb38b7e4d7b2081e276be456519e2dc76d46 Mon Sep 17 00:00:00 2001\nFrom: fiatjaf \nDate: Mon, 29 Jan 2024 09:49:32 -0300\nSubject: [PATCH] invert alias order for `git str send --to`\n\n---\n send.go | 6 +++---\n 1 file changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/send.go b/send.go\nindex bc81c00..d9017b6 100644\n--- a/send.go\n+++ b/send.go\n@@ -25,8 +25,8 @@ var send = &cli.Command{\n \t\t\tUsage: "if we should save the secret key to git config --local",\n \t\t},\n \t\t&cli.StringFlag{\n-\t\t\tName: "repository",\n-\t\t\tAliases: []string{"a", "to"},\n+\t\t\tName: "to",\n+\t\t\tAliases: []string{"a", "repository"},\n \t\t\tUsage: "repository reference, as an naddr1... code",\n \t\t},\n \t\t&cli.StringSliceFlag{\n@@ -170,7 +170,7 @@ func getAndApplyTargetRepository(\n \t\treturn nil, nil\n \t}\n \n-\ttarget := c.String("repository")\n+\ttarget := c.String("to")\n \tvar stored string\n \tif target == "" {\n \t\ttarget, _ = git("config", "--local", "str.upstream")\n-- \n2.43.0' - ) - ).toEqual('invert alias order for `git str send --to`') - }) - - test('extractPatchMessage - unusual message end', () => { - expect( - extractPatchMessage( - `From 35ef1fe53b5a460266a1666709d886560d99cd67 Mon Sep 17 00:00:00 2001\nFrom: fiatjaf \nDate: Mon, 29 Jan 2024 09:41:27 -0300\nSubject: [PATCH] fix multi-attempt password prompt.\n\nthe print was doing nothing\nand the continue was missing\n---\nfound this bug while copying these functions to be used in nak\n\n helpers.go | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/helpers.go b/helpers.go\nindex 0b3790d..9b5c3da 100644\n--- a/helpers.go\n+++ b/helpers.go\n@@ -176,7 +176,7 @@ func promptDecrypt(ncryptsec1 string) (string, error) {\n \t\t}\n \t\tsec, err := nip49.Decrypt(ncryptsec1, password)\n \t\tif err != nil {\n-\t\t\tfmt.Fprintf(os.Stderr, "failed to decrypt: %s", err)\n+\t\t\tcontinue\n \t\t}\n \t\treturn sec, nil\n \t}\n--\n2.43.0\n` - ) - ).toEqual( - 'fix multi-attempt password prompt.\n\nthe print was doing nothing\nand the continue was missing\n---\nfound this bug while copying these functions to be used in nak' - ) - }) - - test('cover letter', () => { - expect( - extractPatchMessage( - `From 8a45afcacd035de474e142e29cbdfa979d23f751 Mon Sep 17 00:00:00 2001\nSubject: [PATCH 0/2] testing multiple revisions of multi patch proposal with cover letter\n\nhere is the cover letter description` - ) - ).toEqual( - 'testing multiple revisions of multi patch proposal with cover letter\n\nhere is the cover letter description' - ) - }) - - test('extractPatchMessage - returns undefined if not parsed', () => { - expect( - extractPatchMessage( - `From 35ef1fe53b5a460266a1666709d886560d99cd67 Mon Sep 17 00:00:00 2001\nFrom: fiatjaf \nDate: Mon, 29 Jan 20` - ) - ).toBeUndefined() - }) - - // TODO make this pass - test.skip('extractPatchMessage - anotherunusual message end', () => { - expect( - extractPatchMessage( - `From 1263051aa4426937c5ef4f7616e06e9a8ea021e0 Mon Sep 17 00:00:00 2001\nFrom: William Casarin \nDate: Mon, 22 Jan 2024 14:41:54 -0800\nSubject: [PATCH] Revert "mention: fix broken mentions when there is text is\n directly after"\n\nThis reverts commit af75eed83a2a1dd0eb33a0a27ded71c9f44dacbd.\n---\n damus/Views/PostView.swift | 7 -------\n damusTests/PostViewTests.swift | 22 ----------------------\n 2 files changed, 29 deletions(-)\n\ndiff --git a/damus/Views/PostView.swift b/damus/Views/PostView.swift\nindex 21ca0498..934ed7de 100644\n--- a/damus/Views/PostView.swift\n+++ b/damus/Views/PostView.swift\n@@ -619,13 +619,6 @@ func load_draft_for_post(drafts: Drafts, action: PostAction) -> DraftArtifacts?\n func build_post(state: DamusState, post: NSMutableAttributedString, action: PostAction, uploadedMedias: [UploadedMedia], references: [RefId]) -> NostrPost {\n post.enumerateAttributes(in: NSRange(location: 0, length: post.length), options: []) { attributes, range, stop in\n if let link = attributes[.link] as? String {\n- let nextCharIndex = range.upperBound\n- if nextCharIndex < post.length,\n- let nextChar = post.attributedSubstring(from: NSRange(location: nextCharIndex, length: 1)).string.first,\n- !nextChar.isWhitespace {\n- post.insert(NSAttributedString(string: " "), at: nextCharIndex)\n- }\n-\n let normalized_link: String\n if link.hasPrefix("damus:nostr:") {\n // Replace damus:nostr: URI prefix with nostr: since the former is for internal navigation and not meant to be posted.\ndiff --git a/damusTests/PostViewTests.swift b/damusTests/PostViewTests.swift\nindex 51976cad..ae78c3e6 100644\n--- a/damusTests/PostViewTests.swift\n+++ b/damusTests/PostViewTests.swift\n@@ -142,28 +142,6 @@ final class PostViewTests: XCTestCase {\n checkMentionLinkEditorHandling(content: content, replacementText: "", replacementRange: NSRange(location: 5, length: 28), shouldBeAbleToChangeAutomatically: true)\n \n }\n- \n- func testMentionLinkEditorHandling_noWhitespaceAfterLink1_addsWhitespace() {\n- var content: NSMutableAttributedString\n-\n- content = NSMutableAttributedString(string: "Hello @user ")\n- content.addAttribute(.link, value: "damus:1234", range: NSRange(location: 6, length: 5))\n- checkMentionLinkEditorHandling(content: content, replacementText: "up", replacementRange: NSRange(location: 11, length: 1), shouldBeAbleToChangeAutomatically: true, expectedNewCursorIndex: 13, handleNewContent: { newManuallyEditedContent in\n- XCTAssertEqual(newManuallyEditedContent.string, "Hello @user up")\n- XCTAssertNil(newManuallyEditedContent.attribute(.link, at: 11, effectiveRange: nil))\n- })\n- }\n- \n- func testMentionLinkEditorHandling_noWhitespaceAfterLink2_addsWhitespace() {\n- var content: NSMutableAttributedString\n-\n- content = NSMutableAttributedString(string: "Hello @user test")\n- content.addAttribute(.link, value: "damus:1234", range: NSRange(location: 6, length: 5))\n- checkMentionLinkEditorHandling(content: content, replacementText: "up", replacementRange: NSRange(location: 11, length: 1), shouldBeAbleToChangeAutomatically: true, expectedNewCursorIndex: 13, handleNewContent: { newManuallyEditedContent in\n- XCTAssertEqual(newManuallyEditedContent.string, "Hello @user uptest")\n- XCTAssertNil(newManuallyEditedContent.attribute(.link, at: 11, effectiveRange: nil))\n- })\n- }\n }\n \n func checkMentionLinkEditorHandling(\n\nbase-commit: c67741983e3f07f2386eaa388cb8a1475e8e0471\n-- \n2.42.0\n\n` - ) - ).toEqual( - 'Revert "mention: fix broken mentions when there is text is\n directly after"\n\nThis reverts commit af75eed83a2a1dd0eb33a0a27ded71c9f44dacbd.' - ) - }) -}) diff --git a/src/lib/components/events/content/utils.ts b/src/lib/components/events/content/utils.ts deleted file mode 100644 index 94a0632..0000000 --- a/src/lib/components/events/content/utils.ts +++ /dev/null @@ -1,318 +0,0 @@ -import type { NDKEvent, NDKTag } from '@nostr-dev-kit/ndk' -import { nip19 } from 'nostr-tools' -import type { AddressPointer, EventPointer } from 'nostr-tools/nip19' -import last from 'ramda/src/last' - -export const TOPIC = 'topic' -export const LINKCOLLECTION = 'link[]' -export const HTML = 'html' -export const INVOICE = 'invoice' - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const first = (list: any) => (list ? list[0] : undefined) - -export const fromNostrURI = (s: string) => s.replace(/^[\w+]+:\/?\/?/, '') - -export const urlIsMedia = (url: string): boolean => - (!url.match(/\.(apk|docx|xlsx|csv|dmg)/) && - last(url.split('://'))?.includes('/')) || - false - -export const isImage = (url: string) => - url.match(/^.*\.(jpg|jpeg|png|webp|gif|avif|svg)/gi) -export const isVideo = (url: string) => - url.match(/^.*\.(mov|mkv|mp4|avi|m4v|webm)/gi) -export const isAudio = (url: string) => url.match(/^.*\.(ogg|mp3|wav)/gi) - -export const NEWLINE = 'newline' -type PartTypeNewLine = 'newline' -export type ParsedNewLine = { - type: PartTypeNewLine - value: string -} - -export const LINK = 'link' -type PartTypeLink = 'link' -export type ParsedLink = { - type: PartTypeLink - url: string - is_media: boolean - imeta: Imeta | undefined -} -type Imeta = { - url: string - m: string | undefined - alt: string | undefined - size: string | undefined - dim: string | undefined - x: string | undefined - fallback: string[] - blurhash: string | undefined -} - -export const NOSTR_NPUB = 'nostr:npub' -type PartTypeNpub = 'nostr:npub' -export type ParsedNpub = { - type: PartTypeNpub - hex: string -} -export const NOSTR_NPROFILE = 'nostr:nprofile' -type PartTypeNprofile = 'nostr:nprofile' -export type ParsedNprofile = { - type: PartTypeNprofile - hex: string - relays: string[] -} - -export const NOSTR_NOTE = 'nostr:note' -type PartTypeNote = 'nostr:note' -export type ParsedNote = { - type: PartTypeNote - data: EventPointer -} - -export const NOSTR_NEVENT = 'nostr:nevent' -type PartTypeNevent = 'nostr:nevent' -export type ParsedNevent = { - type: PartTypeNevent - data: EventPointer -} - -export const NOSTR_NADDR = 'nostr:naddr' -type PartTypeNaddr = 'nostr:naddr' -export type ParsedNaddr = { - type: PartTypeNaddr - data: AddressPointer -} - -export type ParsedNostrLink = - | ParsedNpub - | ParsedNprofile - | ParsedNevent - | ParsedNote - | ParsedNaddr - -export const TEXT = 'text' -type PartTypeText = 'text' -export type ParsedText = { - type: PartTypeText - value: string -} - -export type ParsedPart = - | ParsedNewLine - | ParsedText - | ParsedNostrLink - | ParsedLink - -export const isParsedNewLine = (part: ParsedPart): part is ParsedNewLine => - part.type == NEWLINE - -export const isParsedLink = (part: ParsedPart): part is ParsedLink => - part.type == LINK - -export const isParsedNostrLink = (part: ParsedPart): part is ParsedNostrLink => - part.type == NOSTR_NPUB || - part.type == NOSTR_NPROFILE || - part.type == NOSTR_NEVENT || - part.type == NOSTR_NOTE || - part.type == NOSTR_NADDR - -export const isParsedNpub = (part: ParsedPart): part is ParsedNpub => - part.type == NOSTR_NPUB - -export const isParsedNprofile = (part: ParsedPart): part is ParsedNprofile => - part.type == NOSTR_NPROFILE - -export const isParsedNevent = (part: ParsedPart): part is ParsedNevent => - part.type == NOSTR_NEVENT - -export const isParsedNote = (part: ParsedPart): part is ParsedNote => - part.type == NOSTR_NOTE - -export const isParsedNaddr = (part: ParsedPart): part is ParsedNaddr => - part.type == NOSTR_NADDR - -export const isParsedText = (part: ParsedPart): part is ParsedText => - part.type == TEXT - -export const parseContent = (content: string, tags: NDKTag[]): ParsedPart[] => { - const result: ParsedPart[] = [] - let text = content.trim() - let buffer = '' - - const getIMeta = (url: string): undefined | Imeta => { - const imeta_tag_for_url = tags.find( - (tag) => tag[0] === 'imeta' && tag.some((e) => e.includes(url)) - ) - if (!imeta_tag_for_url) return undefined - const pairs = imeta_tag_for_url.map((s) => [ - s.split(' ')[0], - s.substring(s.indexOf(' ') + 1), - ]) - return { - url, - m: pairs.find((p) => p[0] === 'm')?.[1], - alt: pairs.find((p) => p[0] === 'alt')?.[1], - x: pairs.find((p) => p[0] === 'x')?.[1], - size: pairs.find((p) => p[0] === 'size')?.[1], - dim: pairs.find((p) => p[0] === 'dim')?.[1], - blurhash: pairs.find((p) => p[0] === 'blurhash')?.[1], - fallback: pairs.filter((p) => p[0] === 'fallback')?.map((p) => p[1]), - } - } - - const parseNewline = (): undefined | [string, ParsedNewLine] => { - const newline: string = first(text.match(/^\n+/)) - - if (newline) { - return [newline, { type: NEWLINE, value: newline }] - } - } - - const parseUrl = (): undefined | [string, ParsedLink] => { - const raw: string = first( - text.match( - /^([a-z\+:]{2,30}:\/\/)?[^<>\(\)\s]+\.[a-z]{2,6}[^\s]*[^<>"'\.!?,:\s\)\(]/gi - ) - ) - - // Skip url if it's just the end of a filepath - if (!raw) { - return - } - - const prev = last(result) - - if (prev?.type === TEXT && prev.value.endsWith('/')) { - return - } - - let url = raw - - // Skip ellipses and very short non-urls - if (url.match(/\.\./)) { - return - } - - if (!url.match('://')) { - url = 'https://' + url - } - - return [ - raw, - { type: LINK, url, is_media: urlIsMedia(url), imeta: getIMeta(url) }, - ] - } - - const parseNostrLinks = (): undefined | [string, ParsedNostrLink] => { - const bech32: string = first( - text.match( - /^(web\+)?(nostr:)?\/?\/?n(event|ote|profile|pub|addr)1[\d\w]+/i - ) - ) - if (bech32) { - try { - const entity = fromNostrURI(bech32) - const decoded = nip19.decode(entity) - if (decoded.type === 'npub') { - return [bech32, { type: NOSTR_NPUB, hex: decoded.data }] - } - if (decoded.type === 'nprofile') { - return [bech32, { type: NOSTR_NPUB, hex: decoded.data.pubkey }] - } - if (decoded.type === 'note') { - return [bech32, { type: NOSTR_NOTE, data: { id: decoded.data } }] - } - if (decoded.type === 'nevent') { - return [bech32, { type: NOSTR_NEVENT, data: decoded.data }] - } - if (decoded.type === 'naddr') { - return [bech32, { type: NOSTR_NADDR, data: decoded.data }] - } - } catch {} - } - } - - while (text) { - // The order that this runs matters - const part = parseNewline() || parseUrl() || parseNostrLinks() - - if (part) { - if (buffer) { - result.push({ type: TEXT, value: buffer }) - buffer = '' - } - - const [raw, parsed] = part - - result.push(parsed) - text = text.slice(raw.length) - } else { - // Instead of going character by character and re-running all the above regular expressions - // a million times, try to match the next word and add it to the buffer - const match = first(text.match(/^[\w\d]+ ?/i)) || text[0] - - buffer += match - text = text.slice(match.length) - } - } - - if (buffer) { - result.push({ type: TEXT, value: buffer }) - } - - return result -} - -export const isCoverLetter = (s: string): boolean => { - return s.indexOf('PATCH 0/') > 0 -} - -export function extractTagContent( - name: string, - tags: NDKTag[] -): string | undefined { - const tag = tags.find((tag) => tag[0] === name) - return tag ? tag[1] : undefined -} - -/** this doesn't work for all patch formats and options */ -export const extractPatchMessage = (s: string): string | undefined => { - try { - if (isCoverLetter(s)) { - return s.substring(s.indexOf('] ') + 2) - } - const t = s.split('\nSubject: [')[1].split('] ')[1] - if (t.split('\n\n---\n ').length > 1) return t.split('\n\n---\n ')[0] - return t.split('\n\ndiff --git ')[0].split('\n\n ').slice(0, -1).join('') - } catch { - return undefined - } -} - -/** this doesn't work for all patch formats and options */ -export const extractPatchTitle = (s: string): string | undefined => { - const msg = extractPatchMessage(s) - if (!msg) return undefined - return s.split('\n')[0] -} - -/** patch message without first line */ -export const extractPatchDescription = (s: string): string | undefined => { - const msg = extractPatchMessage(s) - if (!msg) return '' - const i = msg.indexOf('\n') - if (i === -1) return '' - return msg.substring(i).trim() -} - -export const extractIssueTitle = (event: NDKEvent): string => { - return event.tagValue('subject') || event.content.split('\n')[0] || '' -} - -export const extractIssueDescription = (s: string): string => { - const split = s.split('\n') - if (split.length === 0) return '' - return s.substring(split[0].length) || '' -} diff --git a/src/lib/components/events/type.ts b/src/lib/components/events/type.ts deleted file mode 100644 index e3136b1..0000000 --- a/src/lib/components/events/type.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { NDKEvent } from '@nostr-dev-kit/ndk' -import type { User } from '../users/type' - -export interface Event { - author: User - content: unknown -} - -export interface ThreadTreeNode { - event: NDKEvent - child_nodes: ThreadTreeNode[] -} diff --git a/src/lib/components/icons.ts b/src/lib/components/icons.ts deleted file mode 100644 index 980fb90..0000000 --- a/src/lib/components/icons.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const icons_misc = { - chevron_down: [ - 'M6 8.825c-.2 0-.4-.1-.5-.2l-3.3-3.3c-.3-.3-.3-.8 0-1.1c.3-.3.8-.3 1.1 0l2.7 2.7l2.7-2.7c.3-.3.8-.3 1.1 0c.3.3.3.8 0 1.1l-3.2 3.2c-.2.2-.4.3-.6.3', - ], - chevron_up: [ - 'M6 4c-.2 0-.4.1-.5.2L2.2 7.5c-.3.3-.3.8 0 1.1c.3.3.8.3 1.1 0L6 5.9l2.7 2.7c.3.3.8.3 1.1 0c.3-.3.3-.8 0-1.1L6.6 4.3C6.4 4.1 6.2 4 6 4', - ], - // https://icon-sets.iconify.design/octicon/copy-16/ - copy: [ - 'M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z', - 'M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z', - ], - // https://icon-sets.iconify.design/octicon/key-16/ MIT licence - key: [ - 'M10.5 0a5.499 5.499 0 1 1-1.288 10.848l-.932.932a.75.75 0 0 1-.53.22H7v.75a.75.75 0 0 1-.22.53l-.5.5a.75.75 0 0 1-.53.22H5v.75a.75.75 0 0 1-.22.53l-.5.5a.75.75 0 0 1-.53.22h-2A1.75 1.75 0 0 1 0 14.25v-2c0-.199.079-.389.22-.53l4.932-4.932A5.5 5.5 0 0 1 10.5 0m-4 5.5c-.001.431.069.86.205 1.269a.75.75 0 0 1-.181.768L1.5 12.56v1.69c0 .138.112.25.25.25h1.69l.06-.06v-1.19a.75.75 0 0 1 .75-.75h1.19l.06-.06v-1.19a.75.75 0 0 1 .75-.75h1.19l1.023-1.025a.75.75 0 0 1 .768-.18A4 4 0 1 0 6.5 5.5M11 6a1 1 0 1 1 0-2a1 1 0 0 1 0 2', - ], - // https://icon-sets.iconify.design/clarity/lightning-solid/ MIT licence - lightning: [ - 'M5.52.359A.5.5 0 0 1 6 0h4a.5.5 0 0 1 .474.658L8.694 6H12.5a.5.5 0 0 1 .395.807l-7 9a.5.5 0 0 1-.873-.454L6.823 9.5H3.5a.5.5 0 0 1-.48-.641z', - ], - info: [ - 'M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8m8-6.5a6.5 6.5 0 1 0 0 13a6.5 6.5 0 0 0 0-13M6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75M8 6a1 1 0 1 1 0-2a1 1 0 0 1 0 2', - ], - link: [ - 'm7.775 3.275l1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0a.75.75 0 0 1 .018-1.042a.75.75 0 0 1 1.042-.018a2 2 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.75.75 0 0 1-1.042-.018a.75.75 0 0 1-.018-1.042m-4.69 9.64a2 2 0 0 0 2.83 0l1.25-1.25a.75.75 0 0 1 1.042.018a.75.75 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0a.75.75 0 0 1-.018 1.042a.75.75 0 0 1-1.042.018a2 2 0 0 0-2.83 0l-2.5 2.5a2 2 0 0 0 0 2.83', - ], -} diff --git a/src/lib/components/issues/icons.ts b/src/lib/components/issues/icons.ts deleted file mode 100644 index 0e76476..0000000 --- a/src/lib/components/issues/icons.ts +++ /dev/null @@ -1,18 +0,0 @@ -// icon are MIT licenced -export const issue_icon_path = { - // https://icon-sets.iconify.design/octicon/issue-opened-16/ - open: [ - 'M8 9.5a1.5 1.5 0 1 0 0-3a1.5 1.5 0 0 0 0 3', - 'M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0M1.5 8a6.5 6.5 0 1 0 13 0a6.5 6.5 0 0 0-13 0', - ], - // https://icon-sets.iconify.design/octicon/issue-closed-16/ - resolved: [ - 'M11.28 6.78a.75.75 0 0 0-1.06-1.06L7.25 8.69L5.78 7.22a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.06 0z', - 'M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-1.5 0a6.5 6.5 0 1 0-13 0a6.5 6.5 0 0 0 13 0', - ], - // https://icon-sets.iconify.design/octicon/no-entry-16/ - closed: [ - 'M4.25 7.25a.75.75 0 0 0 0 1.5h7.5a.75.75 0 0 0 0-1.5z', - 'M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-1.5 0a6.5 6.5 0 1 0-13 0a6.5 6.5 0 0 0 13 0', - ], -} diff --git a/src/lib/components/issues/type.ts b/src/lib/components/issues/type.ts deleted file mode 100644 index 6641c7c..0000000 --- a/src/lib/components/issues/type.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { User } from '../users/type' -import { defaults as user_defaults } from '../users/type' -import type { Event } from '../events/type' -import type { NDKEvent } from '@nostr-dev-kit/ndk' - -export interface IssueSummary { - type: 'issue' - title: string - descritpion: string - repo_a: string - id: string - comments: number - status: undefined | number - status_date: number - author: User - created_at: number | undefined - loading: boolean -} - -export const summary_defaults: IssueSummary = { - type: 'issue', - title: '', - descritpion: '', - repo_a: '', - id: '', - comments: 0, - status: undefined, - status_date: 0, - author: { ...user_defaults }, - created_at: 0, - loading: true, -} - -export interface IssueSummaries { - repo_a: string | undefined - summaries: IssueSummary[] - loading: boolean -} - -export const summaries_defaults: IssueSummaries = { - repo_a: '', - summaries: [], - loading: true, -} - -export interface IssueFull { - summary: IssueSummary - issue_event: NDKEvent | undefined - labels: string[] - events: Event[] - loading: boolean -} - -export const full_defaults: IssueFull = { - summary: { ...summary_defaults }, - issue_event: undefined, - labels: [], - events: [], - loading: true, -} diff --git a/src/lib/components/proposals/ProposalDetails.svelte b/src/lib/components/proposals/ProposalDetails.svelte deleted file mode 100644 index 00e74be..0000000 --- a/src/lib/components/proposals/ProposalDetails.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - -
-
- {#if loading} -
-
-
- {:else} -

Author

- - {/if} -
- -
- {#if loading} -
-
-
- {:else} -

Status

- - {/if} -
- -
- {#if loading} -
-
- {:else} -

Labels

- {#each labels as label} -
{label}
- {/each} - {/if} -
-
diff --git a/src/lib/components/proposals/ProposalHeader.stories.svelte b/src/lib/components/proposals/ProposalHeader.stories.svelte deleted file mode 100644 index 8638050..0000000 --- a/src/lib/components/proposals/ProposalHeader.stories.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/lib/components/proposals/ProposalHeader.svelte b/src/lib/components/proposals/ProposalHeader.svelte deleted file mode 100644 index 09294cb..0000000 --- a/src/lib/components/proposals/ProposalHeader.svelte +++ /dev/null @@ -1,104 +0,0 @@ - - - - -
- - {#if loading} -
-
-
-
-
-
-
-
- {:else} -
- {short_title} -
-
-
- {#if !$logged_in_user} - - {:else} - {/if} -
-
- opened {created_at_ago} -
-
- {#if author_object.loading} -
- {:else} - {author_name} - {/if} -
-
- {/if} -
-
diff --git a/src/lib/components/proposals/ProposalsList.stories.svelte b/src/lib/components/proposals/ProposalsList.stories.svelte deleted file mode 100644 index b34f2e3..0000000 --- a/src/lib/components/proposals/ProposalsList.stories.svelte +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - diff --git a/src/lib/components/proposals/ProposalsList.svelte b/src/lib/components/proposals/ProposalsList.svelte deleted file mode 100644 index 02a2653..0000000 --- a/src/lib/components/proposals/ProposalsList.svelte +++ /dev/null @@ -1,47 +0,0 @@ - - -
- {#if title.length > 0} -
-

{title}

-
- {/if} - {#if proposals_or_issues.length == 0 && !loading} -

None

- {/if} -
    - {#each sort_youngest_first ? proposals_or_issues.sort((a, b) => (b.created_at || 0) - (a.created_at || 0)) : proposals_or_issues as proposal, index} - {#if current_limit === 0 || index + 1 <= current_limit} - - {/if} - {/each} - {#if loading} - - {#if proposals_or_issues.length == 0} - - - {/if} - {:else if allow_more && limit !== 0 && proposals_or_issues.length > current_limit} - - {/if} -
-
diff --git a/src/lib/components/proposals/ProposalsListItem.stories.svelte b/src/lib/components/proposals/ProposalsListItem.stories.svelte deleted file mode 100644 index 136e3c5..0000000 --- a/src/lib/components/proposals/ProposalsListItem.stories.svelte +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/lib/components/proposals/ProposalsListItem.svelte b/src/lib/components/proposals/ProposalsListItem.svelte deleted file mode 100644 index fc62b2f..0000000 --- a/src/lib/components/proposals/ProposalsListItem.svelte +++ /dev/null @@ -1,167 +0,0 @@ - - - - -
  • - - - {#if loading || !status} -
    - {:else if status === proposal_status_open} - - {#if type === 'proposal'} - - {:else if type === 'issue'} - {#each issue_icon_path.open as p} - - {/each} - {/if} - - {:else if status === proposal_status_closed} - - {#if type === 'proposal'} - - {:else if type === 'issue'} - {#each issue_icon_path.closed as p} - - {/each} - {/if} - - {:else if status === proposal_status_draft} - - {:else if status === proposal_status_applied} - - {#if type === 'proposal'} - - {:else if type === 'issue'} - {#each issue_icon_path.resolved as p} - - {/each} - {/if} - - {/if} - - {#if loading} -
    -
    - {:else} -
    - {short_title} -
    - -
    - {/if} - - -
  • diff --git a/src/lib/components/proposals/Status.stories.svelte b/src/lib/components/proposals/Status.stories.svelte deleted file mode 100644 index cfd72f8..0000000 --- a/src/lib/components/proposals/Status.stories.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/lib/components/proposals/Status.svelte b/src/lib/components/proposals/Status.svelte deleted file mode 100644 index c07df11..0000000 --- a/src/lib/components/proposals/Status.svelte +++ /dev/null @@ -1,110 +0,0 @@ - - -{#if !status} -
    -{:else} -
    - {#if status === proposal_status_open} - - {#if type === 'proposal'} - - {:else if type === 'issue'} - {#each issue_icon_path.open as p} - - {/each} - {/if} - - {statusKindtoText(proposal_status_open, type)} - {:else if status === proposal_status_applied} - - {#if type === 'proposal'} - - {:else if type === 'issue'} - {#each issue_icon_path.resolved as p} - - {/each} - {/if} - - {statusKindtoText(proposal_status_applied, type)} - {:else if status === proposal_status_closed} - - {#if type === 'proposal'} - - {:else if type === 'issue'} - {#each issue_icon_path.closed as p} - - {/each} - {/if} - - {statusKindtoText(proposal_status_closed, type)} - {:else if status === proposal_status_draft} - - {statusKindtoText(proposal_status_draft, type)} - {:else} - {status} - {/if} - {#if edit_mode} - - {/if} -
    -{/if} diff --git a/src/lib/components/proposals/StatusSelector.svelte b/src/lib/components/proposals/StatusSelector.svelte deleted file mode 100644 index db7976f..0000000 --- a/src/lib/components/proposals/StatusSelector.svelte +++ /dev/null @@ -1,141 +0,0 @@ - - -{#if loading || !status} - -{:else} - -{/if} diff --git a/src/lib/components/proposals/icons.ts b/src/lib/components/proposals/icons.ts deleted file mode 100644 index b885c05..0000000 --- a/src/lib/components/proposals/icons.ts +++ /dev/null @@ -1,22 +0,0 @@ -// icon are MIT licenced -export const proposal_icon_path = { - // http://icon-sets.iconify.design/octicon/git-pull-request-16/ - open_pull: - 'M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25m5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354M3.75 2.5a.75.75 0 1 0 0 1.5a.75.75 0 0 0 0-1.5m0 9.5a.75.75 0 1 0 0 1.5a.75.75 0 0 0 0-1.5m8.25.75a.75.75 0 1 0 1.5 0a.75.75 0 0 0-1.5 0', - // https://icon-sets.iconify.design/octicon/git-pull-request-closed-16/ - open_patch: - 'M3.75 4.5a1.25 1.25 0 1 0 0-2.5a1.25 1.25 0 0 0 0 2.5M3 7.75a.75.75 0 0 1 1.5 0v2.878a2.251 2.251 0 1 1-1.5 0Zm.75 5.75a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m5-7.75a1.25 1.25 0 1 1-2.5 0a1.25 1.25 0 0 1 2.5 0m5.75 2.5a2.25 2.25 0 1 1-4.5 0a2.25 2.25 0 0 1 4.5 0m-1.5 0a.75.75 0 1 0-1.5 0a.75.75 0 0 0 1.5 0', - // https://icon-sets.iconify.design/octicon/git-pull-request-closed-16/ - close: - 'M3.25 1A2.25 2.25 0 0 1 4 5.372v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.251 2.251 0 0 1 3.25 1m9.5 5.5a.75.75 0 0 1 .75.75v3.378a2.251 2.251 0 1 1-1.5 0V7.25a.75.75 0 0 1 .75-.75m-2.03-5.273a.75.75 0 0 1 1.06 0l.97.97l.97-.97a.748.748 0 0 1 1.265.332a.75.75 0 0 1-.205.729l-.97.97l.97.97a.751.751 0 0 1-.018 1.042a.751.751 0 0 1-1.042.018l-.97-.97l-.97.97a.749.749 0 0 1-1.275-.326a.749.749 0 0 1 .215-.734l.97-.97l-.97-.97a.75.75 0 0 1 0-1.06ZM2.5 3.25a.75.75 0 1 0 1.5 0a.75.75 0 0 0-1.5 0M3.25 12a.75.75 0 1 0 0 1.5a.75.75 0 0 0 0-1.5m9.5 0a.75.75 0 1 0 0 1.5a.75.75 0 0 0 0-1.5', - // https://icon-sets.iconify.design/octicon/git-pull-request-draft-16/ - draft: - 'M3.25 1A2.25 2.25 0 0 1 4 5.372v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.251 2.251 0 0 1 3.25 1m9.5 14a2.25 2.25 0 1 1 0-4.5a2.25 2.25 0 0 1 0 4.5M2.5 3.25a.75.75 0 1 0 1.5 0a.75.75 0 0 0-1.5 0M3.25 12a.75.75 0 1 0 0 1.5a.75.75 0 0 0 0-1.5m9.5 0a.75.75 0 1 0 0 1.5a.75.75 0 0 0 0-1.5M14 7.5a1.25 1.25 0 1 1-2.5 0a1.25 1.25 0 0 1 2.5 0m0-4.25a1.25 1.25 0 1 1-2.5 0a1.25 1.25 0 0 1 2.5 0', - // https://icon-sets.iconify.design/octicon/git-merge-16/ - merge: - 'M5.45 5.154A4.25 4.25 0 0 0 9.25 7.5h1.378a2.251 2.251 0 1 1 0 1.5H9.25A5.734 5.734 0 0 1 5 7.123v3.505a2.25 2.25 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.95-.218M4.25 13.5a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5m8.5-4.5a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5M5 3.25a.75.75 0 1 0 0 .005z', - // adapted from https://icon-sets.iconify.design/octicon/git-pull-request-closed-16/ - // TODO: centre in icon frame - applied: - 'M 3.25 1 A 2.25 2.25 0 0 1 4 5.372 v 5.256 a 2.251 2.251 0 1 1 -1.5 0 V 5.372 A 2.251 2.251 0 0 1 3.25 1 Z M 2.5 3.25 a 0.75 0.75 0 1 0 1.5 0 a 0.75 0.75 0 0 0 -1.5 0 M 3.25 12 a 0.75 0.75 0 1 0 0 1.5 a 0.75 0.75 0 0 0 0 -1.5', -} diff --git a/src/lib/components/proposals/type.ts b/src/lib/components/proposals/type.ts deleted file mode 100644 index 713931a..0000000 --- a/src/lib/components/proposals/type.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { User } from '../users/type' -import { defaults as user_defaults } from '../users/type' -import type { Event } from '../events/type' -import type { NDKEvent } from '@nostr-dev-kit/ndk' - -export interface ProposalSummary { - type: 'proposal' - title: string - descritpion: string - repo_a: string - id: string - comments: number - status: undefined | number - status_date: number - author: User - created_at: number | undefined - loading: boolean -} - -export const summary_defaults: ProposalSummary = { - type: 'proposal', - title: '', - descritpion: '', - repo_a: '', - id: '', - comments: 0, - status: undefined, - status_date: 0, - author: { ...user_defaults }, - created_at: 0, - loading: true, -} - -export interface ProposalSummaries { - repo_a: string | undefined - summaries: ProposalSummary[] - loading: boolean -} - -export const summaries_defaults: ProposalSummaries = { - repo_a: '', - summaries: [], - loading: true, -} - -export interface ProposalFull { - summary: ProposalSummary - proposal_event: NDKEvent | undefined - labels: string[] - events: Event[] - loading: boolean -} - -export const full_defaults: ProposalFull = { - summary: { ...summary_defaults }, - proposal_event: undefined, - labels: [], - events: [], - loading: true, -} diff --git a/src/lib/components/proposals/vectors.ts b/src/lib/components/proposals/vectors.ts deleted file mode 100644 index 781002c..0000000 --- a/src/lib/components/proposals/vectors.ts +++ /dev/null @@ -1,66 +0,0 @@ -import dayjs from 'dayjs' -import relativeTime from 'dayjs/plugin/relativeTime' -import type { ProposalSummary } from './type' -import { UserVectors } from '../users/vectors' -import { - proposal_status_applied, - proposal_status_draft, - proposal_status_open, -} from '$lib/kinds' - -dayjs.extend(relativeTime) - -const Short = { - title: 'short title', - author: { ...UserVectors.default }, - created_at: dayjs().subtract(7, 'days').unix(), - comments: 2, - status: proposal_status_open, - loading: false, -} as ProposalSummary - -export const ProposalsListItemArgsVectors = { - Short, - Long: { - title: - 'rather long title that goes on and on and on and on and on and on and on and on and on and on and on and on and on and on and on', - author: { ...UserVectors.default }, - created_at: dayjs().subtract(1, 'minute').unix(), - comments: 0, - status: proposal_status_open, - loading: false, - } as ProposalSummary, - LongNoSpaces: { - title: - 'LongNameLongNameLongNameLongNameLongNameLongNameLongNameLongNameLongNameLongNameLongNameLongNameLongNameLongName', - author: { ...UserVectors.default }, - created_at: dayjs().subtract(3, 'month').subtract(3, 'days').unix(), - comments: 1, - status: proposal_status_open, - loading: false, - } as ProposalSummary, - AuthorLoading: { - title: 'short title', - author: { ...UserVectors.loading }, - created_at: dayjs().subtract(3, 'month').subtract(3, 'days').unix(), - comments: 1, - status: proposal_status_open, - loading: false, - } as ProposalSummary, - StatusLoading: { - ...Short, - status: undefined, - } as ProposalSummary, - StatusDraft: { - ...Short, - status: proposal_status_draft, - } as ProposalSummary, - StatusClosed: { - ...Short, - status: proposal_status_draft, - } as ProposalSummary, - StatusApplied: { - ...Short, - status: proposal_status_applied, - } as ProposalSummary, -} diff --git a/src/lib/components/repo/RepoDetails.stories.svelte b/src/lib/components/repo/RepoDetails.stories.svelte deleted file mode 100644 index abcd8bd..0000000 --- a/src/lib/components/repo/RepoDetails.stories.svelte +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/lib/components/repo/RepoDetails.svelte b/src/lib/components/repo/RepoDetails.svelte deleted file mode 100644 index 5a1cbe5..0000000 --- a/src/lib/components/repo/RepoDetails.svelte +++ /dev/null @@ -1,365 +0,0 @@ - - -
    - {#if event_not_found} -

    identifier

    -

    {identifier}

    - {:else} - {#if name == identifier} - {#if loading} -
    -
    -
    - {:else if !name || name.length == 0} -

    name / identifier

    -
    none
    - {:else} -

    name / identifier

    -

    {name}

    - {/if} - {:else} - {#if loading} -
    -
    -
    - {:else if !name || name.length == 0} -

    name

    -
    none
    - {:else} -

    name

    -

    {name}

    - {/if} - {#if loading} -
    -
    -
    - {:else if !identifier || identifier.length == 0} -

    identifier

    -
    none
    - {:else} -

    identifier

    -

    {identifier}

    - {/if} - {/if} - {#if !loading} - - {/if} - {#if loading} -
    -
    -
    - {:else if !short_descrption || description.length == 0} -

    description

    -
    none
    - {:else} -

    description

    -

    {short_descrption}

    - {/if} -
    - {#if loading} -
    -
    - {:else} - {#each tags as tag} -
    {tag}
    - {/each} - {/if} -
    -
    - {#if loading} -
    -
    - {:else if clone.length == 0} -
    - {:else} -

    - git servers {#if git_url_copied} - (copied to clipboard){/if} -

    - {#each clone as git_url} - - - -
    { - try { - await navigator.clipboard.writeText(git_url) - git_url_copied = git_url - setTimeout(() => { - git_url_copied = false - }, 2000) - } catch {} - }} - class="group my-2 mt-3 cursor-pointer break-words text-xs" - class:text-success={git_url_copied === git_url} - class:opacity-50={git_url_copied === git_url} - > - {git_url} - - {#each icons_misc.copy as d} - - {/each} - -
    - {/each} - {/if} -
    -
    - {#if loading} -
    -
    -
    - {:else if web.length == 0} -

    websites

    -
    none
    - {:else} -

    websites

    - {#each web as site} - - {site} - - {/each} - {/if} -
    - {/if} - -
    - {#if loading} -
    -
    -
    - {:else if maintainers.length == 0} -
    - {:else} -

    - {#if event_not_found}author{:else}maintainers{/if} - {#if maintainer_copied} - (copied to clipboard){/if} -

    - {#each maintainers as maintainer} -
    - -
    - {/each} - {/if} -
    - - {#if !event_not_found} -
    - {#if loading} -
    -
    -
    - {:else if relays.length == 0} -

    relays

    -
    none
    - {:else} -

    relays

    - {#each relays as relay} -
    {relay}
    - {/each} - {/if} -
    - - {#if loading} -
    -
    -
    - {:else if !unique_commit || unique_commit.length == 0} -

    earliest unique commit

    -

    not specified

    - {:else} -

    earliest unique commit

    -

    {unique_commit}

    - {/if} - {/if} - - {#if loading} -
    -
    -
    - {:else if naddr && naddr.length > 0} - - - -
    { - try { - await navigator.clipboard.writeText(naddr) - naddr_copied = true - setTimeout(() => { - naddr_copied = false - }, 2000) - } catch {} - }} - class="group -ml-3 mt-3 cursor-pointer rounded-md p-3 hover:bg-base-300" - > -

    - naddr - - {#each icons_misc.copy as d} - - {/each} - - - {#if naddr_copied} - (copied to clipboard){/if} -

    -

    {naddr}

    -
    - {/if} - {#if event_not_found} -
    - -
    missing repository details
    -
    cannot find referenced repository event
    -
    -
    - {/if} -
    diff --git a/src/lib/components/repo/RepoHeader.stories.svelte b/src/lib/components/repo/RepoHeader.stories.svelte deleted file mode 100644 index 192f53e..0000000 --- a/src/lib/components/repo/RepoHeader.stories.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - diff --git a/src/lib/components/repo/RepoHeader.svelte b/src/lib/components/repo/RepoHeader.svelte deleted file mode 100644 index da4529b..0000000 --- a/src/lib/components/repo/RepoHeader.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - -
    - - {#if loading} -
    -
    -
    - {:else} - {short_name} - {#if created_at === 0 && name.length === 0} - - cannot find referenced repository event by
    - -
    -
    - {/if} - {/if} - -
    -
    diff --git a/src/lib/components/repo/type.ts b/src/lib/components/repo/type.ts deleted file mode 100644 index 6da5de3..0000000 --- a/src/lib/components/repo/type.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { - defaults as user_defaults, - type User, - type UserObject, -} from '../users/type' - -export interface RepoEventBase { - event_id: string - naddr: string - author: string // pubkey - identifier: string - unique_commit: string | undefined - name: string - description: string - clone: string[] - web: string[] - tags: string[] - maintainers: string | User[] - relays: string[] - referenced_by: string[] - // this is unreliable as relays dont return youngest first - most_recent_reference_timestamp: number - created_at: number - loading: boolean -} -export interface RepoEvent extends RepoEventBase { - maintainers: string[] -} - -export interface RepoEventWithMaintainersMetadata extends RepoEventBase { - maintainers: UserObject[] -} - -export const event_defaults: RepoEvent = { - event_id: '', - naddr: '', - author: '', - identifier: '', - unique_commit: '', - name: '', - description: '', - clone: [], - web: [], - tags: [], - maintainers: [], - relays: [], - referenced_by: [], - most_recent_reference_timestamp: 0, - created_at: 0, - loading: true, -} - -export interface RepoCollectionBase { - selected_a: string // :: - most_recent_index: number - maintainers: string | User[] - events: RepoEvent[] - loading: boolean -} - -export interface RepoCollection extends RepoCollectionBase { - maintainers: string[] -} - -export interface RepoCollectionWithMaintainersMetadata - extends RepoCollectionBase { - maintainers: UserObject[] -} - -export const collection_defaults: RepoCollection = { - selected_a: '', - most_recent_index: -1, - maintainers: [], - events: [], - loading: true, -} - -export interface RepoSummary { - name: string - description: string - identifier: string - naddr: string - unique_commit: string | undefined - maintainers: User[] - loading?: boolean - created_at: number - most_recent_reference_timestamp: number -} -export const summary_defaults: RepoSummary = { - name: '', - identifier: '', - naddr: '', - unique_commit: undefined, - description: '', - maintainers: [{ ...user_defaults }], - loading: false, - created_at: 0, - most_recent_reference_timestamp: 0, -} - -export interface SelectedPubkeyRepoCollections { - pubkey: string - collections: RepoCollection[] -} - -export interface RepoDIdentiferCollection { - d: string - events: RepoEvent[] - loading: boolean -} - -export interface RepoRecentCollection { - events: RepoEvent[] - loading: boolean -} - -export type RepoPage = 'about' | 'issues' | 'proposals' - -export interface RepoReadme { - md: string - loading: boolean - failed: boolean -} - -export const readme_defaults: RepoReadme = { - md: '', - loading: true, - failed: false, -} diff --git a/src/lib/components/repo/utils.spec.ts b/src/lib/components/repo/utils.spec.ts deleted file mode 100644 index 8055d27..0000000 --- a/src/lib/components/repo/utils.spec.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { describe, expect, test } from 'vitest' -import { cloneArrayToReadMeUrls } from './utils' - -describe('cloneArrayToReadMeUrls', () => { - test('for each clone url returns url to /raw/HEAD/README.md and /raw/HEAD/readme.md', () => { - expect( - cloneArrayToReadMeUrls([ - 'https://gitea.com/orgname/reponame', - 'https://gitlab.com/orgname/reponame', - ]) - ).toEqual([ - 'https://gitea.com/orgname/reponame/raw/HEAD/README.md', - 'https://gitea.com/orgname/reponame/raw/HEAD/readme.md', - 'https://gitlab.com/orgname/reponame/raw/HEAD/README.md', - 'https://gitlab.com/orgname/reponame/raw/HEAD/readme.md', - ]) - }) - test('for github link use raw.githubusercontent.com/HEAD', () => { - expect( - cloneArrayToReadMeUrls(['https://github.com/orgname/reponame']) - ).toEqual([ - 'https://raw.githubusercontent.com/orgname/reponame/HEAD/README.md', - 'https://raw.githubusercontent.com/orgname/reponame/HEAD/readme.md', - ]) - }) - test('for sr.hr link to /blob/HEAD', () => { - expect(cloneArrayToReadMeUrls(['https://sr.ht/~orgname/reponame'])).toEqual( - [ - 'https://sr.ht/~orgname/reponame/blob/HEAD/README.md', - 'https://sr.ht/~orgname/reponame/blob/HEAD/readme.md', - ] - ) - }) - test('for git.launchpad.net link to /plain', () => { - expect( - cloneArrayToReadMeUrls(['https://git.launchpad.net/orgname/reponame']) - ).toEqual([ - 'https://git.launchpad.net/orgname/reponame/plain/README.md', - 'https://git.launchpad.net/orgname/reponame/plain/readme.md', - ]) - }) - test('for git.savannah.gnu.org link to /plain', () => { - expect( - cloneArrayToReadMeUrls(['https://git.savannah.gnu.org/orgname/reponame']) - ).toEqual([ - 'https://git.savannah.gnu.org/orgname/reponame/plain/README.md', - 'https://git.savannah.gnu.org/orgname/reponame/plain/readme.md', - ]) - }) - describe('transform clone address to url', () => { - test('strips trailing / from address', () => { - expect( - cloneArrayToReadMeUrls(['https://codeberg.org/orgname/reponame/']) - ).toEqual([ - 'https://codeberg.org/orgname/reponame/raw/HEAD/README.md', - 'https://codeberg.org/orgname/reponame/raw/HEAD/readme.md', - ]) - }) - test('strips .git from address', () => { - expect( - cloneArrayToReadMeUrls(['https://codeberg.org/orgname/reponame.git']) - ).toEqual([ - 'https://codeberg.org/orgname/reponame/raw/HEAD/README.md', - 'https://codeberg.org/orgname/reponame/raw/HEAD/readme.md', - ]) - }) - test('git@codeberg.org:orgname/reponame.git to address', () => { - expect( - cloneArrayToReadMeUrls(['git@codeberg.org:orgname/reponame.git']) - ).toEqual([ - 'https://codeberg.org/orgname/reponame/raw/HEAD/README.md', - 'https://codeberg.org/orgname/reponame/raw/HEAD/readme.md', - ]) - }) - test('ssh://codeberg.org/orgname/reponame to address', () => { - expect( - cloneArrayToReadMeUrls(['ssh://codeberg.org/orgname/reponame']) - ).toEqual([ - 'https://codeberg.org/orgname/reponame/raw/HEAD/README.md', - 'https://codeberg.org/orgname/reponame/raw/HEAD/readme.md', - ]) - }) - test('strips port eg ssh://git@git.v0l.io:2222/Kieran/snort.git to address', () => { - expect( - cloneArrayToReadMeUrls(['ssh://git@git.v0l.io:2222/Kieran/snort.git']) - ).toEqual([ - 'https://git.v0l.io/Kieran/snort/raw/HEAD/README.md', - 'https://git.v0l.io/Kieran/snort/raw/HEAD/readme.md', - ]) - }) - test('https://custom.com/deep/deeper/deeper to address', () => { - expect( - cloneArrayToReadMeUrls(['https://custom.com/deep/deeper/deeper']) - ).toEqual([ - 'https://custom.com/deep/deeper/deeper/raw/HEAD/README.md', - 'https://custom.com/deep/deeper/deeper/raw/HEAD/readme.md', - ]) - }) - }) -}) diff --git a/src/lib/components/repo/utils.ts b/src/lib/components/repo/utils.ts deleted file mode 100644 index b277bcb..0000000 --- a/src/lib/components/repo/utils.ts +++ /dev/null @@ -1,135 +0,0 @@ -import type { RepoCollection, RepoEvent } from './type' -import { nip19 } from 'nostr-tools' -import { repo_kind } from '$lib/kinds' -import type { NDKEvent } from '@nostr-dev-kit/ndk' -import type { AddressPointer } from 'nostr-tools/nip19' - -export const selectRepoFromCollection = ( - collection: RepoCollection -): RepoEvent | undefined => { - return collection.events[collection.most_recent_index] -} - -/** most servers will produce a CORS error so a proxy should be used */ -export const cloneArrayToReadMeUrls = (clone: string[]): string[] => { - const addresses = clone.map(extractRepoAddress) - /** - * at the time of this commit these urls work for: - * self-hosted gitea (or forgejo), gitlab - * github.com - * bitbucket.org - * gitlab.org - * gitea.com - * codeberg.org (forgejo instance) - * sourcehut (git.sr.ht) - * launchpad.net - * It doesnt work for: - * self-hosted gogs (requires branch name repo/raw/master/README.md) - * sourceforge.net (https://sourceforge.net/p/mingw/catgets/ci/master/tree/README?format=raw) - * notabug.org (requires branch name notabug.org/org/repo/raw/master/README.md) - */ - return [ - ...addresses.flatMap((address) => { - let prefix = 'raw/HEAD' - if (address.includes('sr.ht')) prefix = 'blob/HEAD' - if ( - address.includes('git.launchpad.net') || - address.includes('git.savannah.gnu.org') - ) - prefix = 'plain' - if (address.includes('github.com')) { - // raw.githubusercontent.com can be used without CORS error - address = address.replace('github.com', 'raw.githubusercontent.com') - prefix = 'HEAD' - } - return ['README.md', 'readme.md'].map( - (filename) => `https://${address}/${prefix}/${filename}` - ) - }), - ] -} - -const extractRepoAddress = (clone_string: string): string => { - let s = clone_string - // remove trailing slash - if (s.endsWith('/')) s = s.substring(0, s.length - 1) - // remove trailing .git - if (s.endsWith('.git')) s = s.substring(0, s.length - 4) - // remove :// and anything before - if (s.includes('://')) s = s.split('://')[1] - // remove @ and anything before - if (s.includes('@')) s = s.split('@')[1] - // replace : with / - s = s.replace(/\s|:[0-9]+/g, '') - s = s.replace(':', '/') - return s -} - -export const naddrToPointer = (s: string): AddressPointer | undefined => { - const decoded = nip19.decode(s) - if ( - typeof decoded.data === 'string' || - !Object.keys(decoded.data).includes('identifier') - ) - return undefined - return decoded.data as AddressPointer -} - -export const extractAReference = (a: string): AddressPointer | undefined => { - if (a.split(':').length !== 3) return undefined - const [k, pubkey, identifier] = a.split(':') - return { kind: Number(k), pubkey, identifier } -} - -export const naddrToRepoA = (s: string): string | undefined => { - const pointer = naddrToPointer(s) - if (pointer && pointer.kind === repo_kind) - return `${repo_kind}:${pointer.pubkey}:${pointer.identifier}` - return undefined -} - -export const aToNaddr = ( - a: string | AddressPointer -): `naddr1${string}` | undefined => { - const a_ref = typeof a === 'string' ? extractAReference(a) : a - if (!a_ref) return undefined - return nip19.naddrEncode(a_ref) -} - -export const neventOrNoteToHexId = (s: string): string | undefined => { - try { - const decoded = nip19.decode(s) - if (decoded.type === 'note') return decoded.data - else if (decoded.type === 'nevent') return decoded.data.id - } catch {} - return undefined -} - -/** this functoin can be removed when ndk.encode includes kind in nevent */ -export const ndkEventToNeventOrNaddr = ( - event: NDKEvent -): string | undefined => { - let relays: string[] = [] - if (event.onRelays.length > 0) { - relays = event.onRelays.map((relay) => relay.url) - } else if (event.relay) { - relays = [event.relay.url] - } - if (event.kind && event.isParamReplaceable()) { - return nip19.naddrEncode({ - kind: event.kind, - pubkey: event.pubkey, - identifier: event.replaceableDTag(), - relays, - }) - } else if (relays.length > 0) { - return nip19.neventEncode({ - kind: event.kind, - id: event.tagId(), - relays, - author: event.pubkey, - }) - } else { - return nip19.noteEncode(event.tagId()) - } -} diff --git a/src/lib/components/repo/vectors.ts b/src/lib/components/repo/vectors.ts deleted file mode 100644 index 667ac95..0000000 --- a/src/lib/components/repo/vectors.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { UserVectors, withName } from '../users/vectors' -import type { RepoEventWithMaintainersMetadata, RepoSummary } from './type' - -export const RepoSummaryCardArgsVectors = { - Short: { - name: 'Short Name', - description: 'short description', - maintainers: [withName(UserVectors.default, 'Will')], - } as RepoSummary, - Long: { - name: 'Long Name that goes on and on and on and on and on and on and on and on and on', - description: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis quis nisl eget turpis congue molestie. Nulla vitae purus nec augue accumsan facilisis sed sed ligula. Vestibulum sed risus lacinia risus lacinia molestie. Ut lorem quam, consequat eget tempus in, rhoncus vel nunc. Duis efficitur a leo vel sodales. Nam id fermentum lacus. Etiam nec placerat velit. Praesent ac consectetur est. Aenean iaculis commodo enim.', - maintainers: [withName(UserVectors.default, 'Rather Long Display Name')], - } as RepoSummary, - LongNoSpaces: { - name: 'LongNameLongNameLongNameLongNameLongNameLongNameLongNameLongName', - description: - 'LoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsum>', - maintainers: [ - { - ...UserVectors.default, - }, - ], - } as RepoSummary, - MulipleMaintainers: { - name: 'Short Name', - description: 'short description', - maintainers: [ - withName(UserVectors.default, 'Will'), - withName(UserVectors.default, 'DanConwayDev'), - withName(UserVectors.default, 'sectore'), - ], - } as RepoSummary, -} -const base: RepoEventWithMaintainersMetadata = { - identifier: '9ee507fc4357d7ee16a5d8901bedcd103f23c17d', - unique_commit: '9ee507fc4357d7ee16a5d8901bedcd103f23c17d', - author: '', - name: 'Short Name', - description: 'short description', - clone: ['github.com/example/example'], - tags: ['svelte', 'nostr', 'code-collaboration', 'git'], - relays: ['relay.damus.io', 'relay.snort.social', 'relayable.org'], - maintainers: [ - withName(UserVectors.default, 'carole'), - withName(UserVectors.default, 'bob'), - withName(UserVectors.default, 'steve'), - ], - loading: false, - event_id: '', - naddr: '', - web: ['https://gitcitadel.eu/repo/example', 'https://example.com'], - referenced_by: [], - most_recent_reference_timestamp: 0, - created_at: 0, -} - -export const RepoDetailsArgsVectors = { - Short: { ...base } as RepoEventWithMaintainersMetadata, - Long: { - ...base, - name: 'Long Name that goes on and on and on and on and on and on and on and on and on', - description: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis quis nisl eget turpis congue molestie. Nulla vitae purus nec augue accumsan facilisis sed sed ligula. Vestibulum sed risus lacinia risus lacinia molestie. Ut lorem quam, consequat eget tempus in, rhoncus vel nunc. Duis efficitur a leo vel sodales. Nam id fermentum lacus. Etiam nec placerat velit. Praesent ac consectetur est. Aenean iaculis commodo enim.\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis quis nisl eget turpis congue molestie.', - } as RepoEventWithMaintainersMetadata, - LongNoSpaces: { - ...base, - name: 'LongNameLongNameLongNameLongNameLongNameLongNameLongNameLongName', - description: - 'LoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsumLoremipsum', - } as RepoEventWithMaintainersMetadata, - NoNameOrDescription: { - ...base, - name: '', - description: '', - } as RepoEventWithMaintainersMetadata, - NoDescription: { - ...base, - description: '', - } as RepoEventWithMaintainersMetadata, - NoTags: { ...base, tags: [] } as RepoEventWithMaintainersMetadata, - NoGitServer: { ...base, clone: [''] } as RepoEventWithMaintainersMetadata, - NoWeb: { ...base, web: [] } as RepoEventWithMaintainersMetadata, - MaintainersOneProfileNotLoaded: { - ...base, - maintainers: [ - { ...base.maintainers[0] }, - { ...UserVectors.loading }, - { ...base.maintainers[2] }, - ], - } as RepoEventWithMaintainersMetadata, - MaintainersOneProfileDisplayNameWithoutName: { - ...base, - maintainers: [ - { ...base.maintainers[0] }, - { ...UserVectors.display_name_only }, - { ...base.maintainers[2] }, - ], - } as RepoEventWithMaintainersMetadata, - MaintainersOneProfileNameAndDisplayNamePresent: { - ...base, - maintainers: [ - { ...base.maintainers[0] }, - { ...UserVectors.display_name_and_name }, - { ...base.maintainers[2] }, - ], - } as RepoEventWithMaintainersMetadata, - MaintainersOneProfileNoNameOrDisplayNameBeingPresent: { - ...base, - maintainers: [ - { ...base.maintainers[0] }, - { ...UserVectors.no_profile }, - { ...base.maintainers[2] }, - ], - } as RepoEventWithMaintainersMetadata, - NoMaintainers: { - ...base, - maintainers: [], - } as RepoEventWithMaintainersMetadata, - NoRelays: { ...base, relays: [] } as RepoEventWithMaintainersMetadata, - NoMaintainersOrRelays: { - ...base, - maintainers: [], - relays: [], - } as RepoEventWithMaintainersMetadata, -} diff --git a/src/lib/components/users/UserHeader.stories.svelte b/src/lib/components/users/UserHeader.stories.svelte deleted file mode 100644 index d5f9f25..0000000 --- a/src/lib/components/users/UserHeader.stories.svelte +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/lib/components/users/UserHeader.svelte b/src/lib/components/users/UserHeader.svelte deleted file mode 100644 index 4492d81..0000000 --- a/src/lib/components/users/UserHeader.svelte +++ /dev/null @@ -1,166 +0,0 @@ - - - - -
    { - if (link_to_profile) goto(`/p/${user_object.npub}`) - }} -> -
    -
    -
    - {#if profile && profile?.image} - {display_name} - {/if} -
    -
    -
    - {#if loading} -
    - {:else} - {display_name} - {/if} - {#if size === 'full'} - - {#if profile && profile.lud16} - - {/if} - {#if profile && profile.website} - - - {#each icons_misc.link as d} - - {/each} - - - - {/if} - {#if size === 'full' && profile && profile.about} -
    - - {#each icons_misc.info as d} - - {/each} - - - {#if loading} -
    - {:else} -
    - -
    - {/if} -
    - {/if} - {/if} -
    -
    -
    diff --git a/src/lib/components/users/type.ts b/src/lib/components/users/type.ts deleted file mode 100644 index e609b76..0000000 --- a/src/lib/components/users/type.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { NDKUserProfile } from '@nostr-dev-kit/ndk' - -export interface UserObject { - loading: boolean - hexpubkey: string - npub: string - profile?: NDKUserProfile -} - -export const defaults: UserObject = { - loading: true, - hexpubkey: '', - npub: '', -} - -export type User = UserObject | string - -export function getName(user: UserObject, truncate_above = 25): string { - return truncate( - user.profile - ? user.profile.name - ? user.profile.name - : user.profile.displayName - ? user.profile.displayName - : truncateNpub(user.npub) - : truncateNpub(user.npub), - truncate_above - ) -} - -function truncateNpub(npub: string): string { - return `${npub.substring(0, 9)}...` -} - -function truncate(s: string, truncate_above = 20): string { - if (s.length < truncate_above || truncate_above < 5) return s - return `${s.substring(0, truncate_above - 3)}...` -} diff --git a/src/lib/components/users/vectors.ts b/src/lib/components/users/vectors.ts deleted file mode 100644 index 0b10c78..0000000 --- a/src/lib/components/users/vectors.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { UserObject } from './type' - -// nsec1rg53qfv09az39dlw6j64ange3cx8sh5p8np29qcxtythplvplktsv93tnr -const base: UserObject = { - hexpubkey: '3eb45c6f15752d796fa5465d0530a5a5feb79fb6f08c0a4176be9d73cc28c40d', - npub: 'npub18669cmc4w5khjma9gews2v995hlt08ak7zxq5stkh6wh8npgcsxslt2xjn', - loading: false, -} - -const image = '../test-profile-image.jpg' - -export const UserVectors = { - loading: { ...base, loading: true } as UserObject, - default: { ...base, profile: { name: 'DanConwayDev', image } } as UserObject, - display_name_only: { - ...base, - profile: { displayName: 'DanConwayDev', image }, - } as UserObject, - display_name_and_name: { - ...base, - profile: { name: 'Dan', displayName: 'DanConwayDev', image }, - } as UserObject, - no_image: { ...base, profile: { name: 'DanConwayDev' } } as UserObject, - no_profile: { ...base } as UserObject, - long_name: { - ...base, - profile: { name: 'Really Really Long Long Name', image }, - } as UserObject, -} - -export function withName(base: UserObject, name: string): UserObject { - return { - ...base, - profile: { - ...base.profile, - name, - }, - } as UserObject -} diff --git a/src/lib/kinds.ts b/src/lib/kinds.ts deleted file mode 100644 index fd65cf2..0000000 --- a/src/lib/kinds.ts +++ /dev/null @@ -1,29 +0,0 @@ -export const reply_kind: number = 1 - -export const proposal_status_open: number = 1630 -export const proposal_status_applied: number = 1631 -export const proposal_status_closed: number = 1632 -export const proposal_status_draft: number = 1633 -export const proposal_status_kinds: number[] = [ - proposal_status_open, - proposal_status_applied, - proposal_status_closed, - proposal_status_draft, -] - -export function statusKindtoText( - kind: number, - type: 'proposal' | 'issue' -): string { - if (kind === proposal_status_open) return 'Open' - if (type === 'proposal' && kind === proposal_status_applied) return 'Applied' - if (type === 'issue' && kind === proposal_status_applied) return 'Resolved' - if (kind === proposal_status_closed) return 'Closed' - return 'Draft' -} - -export const repo_kind: number = 30617 - -export const patch_kind: number = 1617 - -export const issue_kind: number = 1621 diff --git a/src/lib/stores/Issue.ts b/src/lib/stores/Issue.ts deleted file mode 100644 index eb83684..0000000 --- a/src/lib/stores/Issue.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { NDKRelaySet, NDKEvent, NDKSubscription } from '@nostr-dev-kit/ndk' -import { writable, type Writable } from 'svelte/store' -import { base_relays, ndk } from './ndk' -import { type IssueFull, full_defaults } from '$lib/components/issues/type' -import { proposal_status_kinds, proposal_status_open } from '$lib/kinds' -import { awaitSelectedRepoCollection } from './repo' -import { - extractIssueDescription, - extractIssueTitle, -} from '$lib/components/events/content/utils' -import { selectRepoFromCollection } from '$lib/components/repo/utils' -import { ignore_kinds } from './utils' - -export const selected_issue_full: Writable = writable({ - ...full_defaults, -}) - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -let selected_issue_repo_a: string = '' -let selected_issue_id: string = '' - -export const selected_issue_replies: Writable = writable([]) - -let selected_issue_status_date = 0 - -let sub: NDKSubscription - -let sub_replies: NDKSubscription - -const sub_replies_to_replies: NDKSubscription[] = [] - -export const ensureIssueFull = ( - repo_a: string, - issue_id_or_event: string | NDKEvent -) => { - const issue_id = - typeof issue_id_or_event === 'string' - ? issue_id_or_event - : issue_id_or_event.id - if (selected_issue_id == issue_id) return - if (issue_id == '') { - selected_issue_full.set({ ...full_defaults }) - selected_issue_replies.set([]) - return - } - - if (sub) sub.stop() - if (sub_replies) sub_replies.stop() - sub_replies_to_replies.forEach((sub) => sub.stop()) - - selected_issue_repo_a = repo_a - selected_issue_id = issue_id - selected_issue_status_date = 0 - selected_issue_replies.set([]) - - selected_issue_full.set({ - ...full_defaults, - summary: { - ...full_defaults.summary, - id: issue_id, - repo_a, - loading: true, - }, - loading: true, - }) - - new Promise(async (r) => { - const repo_collection = await awaitSelectedRepoCollection(repo_a) - const repo = selectRepoFromCollection(repo_collection) - const relays_to_use = - repo && repo.relays.length > 3 - ? repo.relays - : [...base_relays].concat(repo ? repo.relays : []) - - const setEvent = (event: NDKEvent) => { - try { - selected_issue_full.update((full) => { - return { - ...full, - issue_event: event, - summary: { - ...full.summary, - title: extractIssueTitle(event), - descritpion: extractIssueDescription(event.content), - created_at: event.created_at, - comments: 0, - author: event.pubkey, - loading: false, - }, - } - }) - } catch {} - } - if (typeof issue_id_or_event !== 'string') { - setEvent(issue_id_or_event) - } else { - sub = ndk.subscribe( - { - ids: [issue_id], - limit: 100, - }, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - - sub.on('event', (event: NDKEvent) => { - if (event.id == issue_id) setEvent(event) - }) - - sub.on('eose', () => { - selected_issue_full.update((full) => { - const updated = { - ...full, - summary: { - ...full.summary, - loading: false, - }, - } - if (full.loading === false) { - r({ ...updated }) - } - return updated - }) - }) - } - - sub_replies = ndk.subscribe( - { - '#e': [issue_id], - }, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - - const process_replies = (event: NDKEvent) => { - if (event.kind && ignore_kinds.includes(event.kind)) return false - if ( - event.kind && - proposal_status_kinds.includes(event.kind) && - event.created_at && - selected_issue_status_date < event.created_at - ) { - selected_issue_status_date = event.created_at - selected_issue_full.update((full) => { - return { - ...full, - summary: { - ...full.summary, - status: event.kind, - // this wont be 0 as we are ensuring it is not undefined above - status_date: event.created_at || 0, - }, - } - }) - } - selected_issue_replies.update((replies) => { - if (!replies.some((e) => e.id === event.id)) { - const sub_replies_to_reply = ndk.subscribe( - { - '#e': [event.id], - }, - { - groupable: true, - groupableDelay: 300, - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - sub_replies_to_reply.on('event', (event: NDKEvent) => { - process_replies(event) - }) - sub_replies_to_replies.push(sub_replies_to_reply) - return [...replies, event] - } - return [...replies] - }) - } - - sub_replies.on('event', (event: NDKEvent) => { - process_replies(event) - }) - - sub_replies.on('eose', () => { - selected_issue_full.update((full) => { - const updated = { - ...full, - summary: { - ...full.summary, - status: full.summary.status || proposal_status_open, - }, - loading: false, - } - if (full.summary.loading === false) { - r({ ...updated }) - } - return updated - }) - }) - }) -} diff --git a/src/lib/stores/Issues.ts b/src/lib/stores/Issues.ts deleted file mode 100644 index 8f47704..0000000 --- a/src/lib/stores/Issues.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { - NDKRelaySet, - type NDKEvent, - NDKSubscription, - type NDKFilter, -} from '@nostr-dev-kit/ndk' -import { writable, type Writable } from 'svelte/store' -import { base_relays, ndk } from './ndk' -import { awaitSelectedRepoCollection } from './repo' -import { - issue_kind, - proposal_status_kinds, - proposal_status_open, - repo_kind, -} from '$lib/kinds' -import { - extractIssueDescription, - extractIssueTitle, -} from '$lib/components/events/content/utils' -import { selectRepoFromCollection } from '$lib/components/repo/utils' -import { - summary_defaults, - type IssueSummaries, -} from '$lib/components/issues/type' - -export const issue_summaries: Writable = writable({ - repo_a: '', - summaries: [], - loading: false, -}) - -let selected_repo_a: string | undefined = '' - -let sub: NDKSubscription - -export const ensureIssueSummaries = async (repo_a: string | undefined) => { - if (selected_repo_a == repo_a) return - issue_summaries.set({ - repo_a, - summaries: [], - loading: repo_a !== '', - }) - - if (sub) sub.stop() - if (sub_statuses) sub_statuses.stop() - - selected_repo_a = repo_a - - setTimeout(() => { - issue_summaries.update((summaries) => { - return { - ...summaries, - loading: false, - } - }) - }, 6000) - - let relays_to_use = [...base_relays] - let filter: NDKFilter = { - kinds: [issue_kind], - limit: 100, - } - - if (repo_a) { - const repo_collection = await awaitSelectedRepoCollection(repo_a) - - const repo = selectRepoFromCollection(repo_collection) - if (!repo) { - // TODO: display error info bar - return - } - - relays_to_use = - repo.relays.length > 3 - ? repo.relays - : [...base_relays].concat(repo.relays) - - filter = { - kinds: [issue_kind], - '#a': repo.maintainers.map((m) => `${repo_kind}:${m}:${repo.identifier}`), - limit: 100, - } - } - - sub = ndk.subscribe( - filter, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - - sub.on('event', (event: NDKEvent) => { - try { - if (event.kind == issue_kind) { - if (!extractRepoIdentiferFromIssueEvent(event) && !repo_a) { - // link to issue will not work as it requires an identifier - return - } - issue_summaries.update((issues) => { - return { - ...issues, - summaries: [ - ...issues.summaries, - { - ...summary_defaults, - id: event.id, - repo_a: - extractRepoIdentiferFromIssueEvent(event) || repo_a || '', - title: extractIssueTitle(event), - descritpion: extractIssueDescription(event.content), - created_at: event.created_at, - comments: 0, - author: event.pubkey, - loading: false, - }, - ], - } - }) - } - } catch {} - }) - sub.on('eose', () => { - issue_summaries.update((issues) => { - getAndUpdateIssueStatus(issues, relays_to_use) - return { - ...issues, - loading: false, - } - }) - }) -} - -let sub_statuses: NDKSubscription - -function getAndUpdateIssueStatus( - issues: IssueSummaries, - relays: string[] -): void { - if (sub_statuses) sub_statuses.stop() - sub_statuses = ndk.subscribe( - { - kinds: proposal_status_kinds, - '#e': issues.summaries.map((issue) => issue.id), - }, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays, ndk) - ) - sub_statuses.on('event', (event: NDKEvent) => { - const tagged_issue_event = event.tagValue('e') - if ( - event.kind && - proposal_status_kinds.includes(event.kind) && - tagged_issue_event && - event.created_at - ) { - issue_summaries.update((issues) => { - return { - ...issues, - summaries: issues.summaries.map((o) => { - if ( - o.id === tagged_issue_event && - event.created_at && - o.status_date < event.created_at - ) { - return { - ...o, - status: event.kind as number, - status_date: event.created_at, - } - } - - return o - }), - } - }) - } - }) - - sub_statuses.on('eose', () => { - issue_summaries.update((issues) => { - return { - ...issues, - summaries: issues.summaries.map((o) => ({ - ...o, - status: o.status || proposal_status_open, - })), - } - }) - }) -} - -export const extractRepoIdentiferFromIssueEvent = ( - event: NDKEvent -): string | undefined => { - const value = event.tagValue('a') - if (!value) return undefined - const split = value.split(':') - if (split.length < 3) return undefined - return value -} diff --git a/src/lib/stores/Proposal.ts b/src/lib/stores/Proposal.ts deleted file mode 100644 index 55e6b00..0000000 --- a/src/lib/stores/Proposal.ts +++ /dev/null @@ -1,210 +0,0 @@ -import { NDKRelaySet, type NDKEvent, NDKSubscription } from '@nostr-dev-kit/ndk' -import { writable, type Writable } from 'svelte/store' -import { base_relays, ndk } from './ndk' -import { - type ProposalFull, - full_defaults, -} from '$lib/components/proposals/type' -import { proposal_status_kinds, proposal_status_open } from '$lib/kinds' -import { awaitSelectedRepoCollection } from './repo' -import { extractPatchMessage } from '$lib/components/events/content/utils' -import { selectRepoFromCollection } from '$lib/components/repo/utils' -import { ignore_kinds } from './utils' - -export const selected_proposal_full: Writable = writable({ - ...full_defaults, -}) - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -let selected_proposal_repo_a: string = '' -let selected_proposal_id: string = '' - -export const selected_proposal_replies: Writable = writable([]) - -let selected_proposal_status_date = 0 - -let sub: NDKSubscription - -let sub_replies: NDKSubscription - -const sub_replies_to_replies: NDKSubscription[] = [] - -export const ensureProposalFull = ( - repo_a: string, - proposal_id_or_event: string | NDKEvent -) => { - const proposal_id = - typeof proposal_id_or_event === 'string' - ? proposal_id_or_event - : proposal_id_or_event.id - if (selected_proposal_id == proposal_id) return - if (proposal_id == '') { - selected_proposal_full.set({ ...full_defaults }) - selected_proposal_replies.set([]) - return - } - - if (sub) sub.stop() - if (sub_replies) sub_replies.stop() - sub_replies_to_replies.forEach((sub) => sub.stop()) - - selected_proposal_repo_a = repo_a - selected_proposal_id = proposal_id - selected_proposal_status_date = 0 - selected_proposal_replies.set([]) - - selected_proposal_full.set({ - ...full_defaults, - summary: { - ...full_defaults.summary, - id: proposal_id, - repo_a, - loading: true, - }, - loading: true, - }) - - new Promise(async (r) => { - const repo_collection = await awaitSelectedRepoCollection(repo_a) - const repo = selectRepoFromCollection(repo_collection) - const relays_to_use = - repo && repo.relays.length > 3 - ? repo.relays - : [...base_relays].concat(repo ? repo.relays : []) - - const setEvent = (event: NDKEvent) => { - try { - selected_proposal_full.update((full) => { - return { - ...full, - proposal_event: event, - summary: { - ...full.summary, - title: ( - event.tagValue('name') || - event.tagValue('description') || - extractPatchMessage(event.content) || - '' - ).split('\n')[0], - descritpion: event.tagValue('description') || '', - created_at: event.created_at, - comments: 0, - author: event.pubkey, - loading: false, - }, - } - }) - } catch {} - } - - if (typeof proposal_id_or_event !== 'string') { - setEvent(proposal_id_or_event) - } else { - sub = ndk.subscribe( - { - ids: [proposal_id], - limit: 100, - }, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - - sub.on('event', (event: NDKEvent) => { - if (event.id == proposal_id) setEvent(event) - }) - - sub.on('eose', () => { - selected_proposal_full.update((full) => { - const updated = { - ...full, - summary: { - ...full.summary, - loading: false, - }, - } - if (full.loading === false) { - r({ ...updated }) - } - return updated - }) - }) - } - - sub_replies = ndk.subscribe( - { - '#e': [proposal_id], - }, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - - const process_replies = (event: NDKEvent) => { - if (event.kind && ignore_kinds.includes(event.kind)) return false - if ( - event.kind && - proposal_status_kinds.includes(event.kind) && - event.created_at && - selected_proposal_status_date < event.created_at - ) { - selected_proposal_status_date = event.created_at - selected_proposal_full.update((full) => { - return { - ...full, - summary: { - ...full.summary, - status: event.kind, - // this wont be 0 as we are ensuring it is not undefined above - status_date: event.created_at || 0, - }, - } - }) - } - selected_proposal_replies.update((replies) => { - if (!replies.some((e) => e.id === event.id)) { - const sub_replies_to_reply = ndk.subscribe( - { - '#e': [event.id], - }, - { - groupable: true, - groupableDelay: 300, - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - sub_replies_to_reply.on('event', (event: NDKEvent) => { - process_replies(event) - }) - sub_replies_to_replies.push(sub_replies_to_reply) - return [...replies, event] - } - return [...replies] - }) - } - - sub_replies.on('event', (event: NDKEvent) => { - process_replies(event) - }) - - sub_replies.on('eose', () => { - selected_proposal_full.update((full) => { - const updated = { - ...full, - summary: { - ...full.summary, - status: full.summary.status || proposal_status_open, - }, - loading: false, - } - if (full.summary.loading === false) { - r({ ...updated }) - } - return updated - }) - }) - }) -} diff --git a/src/lib/stores/Proposals.ts b/src/lib/stores/Proposals.ts deleted file mode 100644 index 2aa6909..0000000 --- a/src/lib/stores/Proposals.ts +++ /dev/null @@ -1,251 +0,0 @@ -import { - NDKRelaySet, - type NDKEvent, - NDKSubscription, - type NDKFilter, -} from '@nostr-dev-kit/ndk' -import { writable, type Writable } from 'svelte/store' -import { base_relays, ndk } from './ndk' -import { summary_defaults } from '$lib/components/proposals/type' -import type { ProposalSummaries } from '$lib/components/proposals/type' -import { awaitSelectedRepoCollection } from './repo' -import { - patch_kind, - proposal_status_kinds, - proposal_status_open, - repo_kind, -} from '$lib/kinds' -import { extractPatchMessage } from '$lib/components/events/content/utils' -import { selectRepoFromCollection } from '$lib/components/repo/utils' -import { returnRepoCollection } from './repos' - -export const proposal_summaries: Writable = writable({ - repo_a: '', - summaries: [], - loading: false, -}) - -let selected_a: string | undefined = '' - -let sub: NDKSubscription - -export const ensureProposalSummaries = async (repo_a: string | undefined) => { - if (selected_a == repo_a) return - proposal_summaries.set({ - repo_a, - summaries: [], - loading: repo_a !== '', - }) - - if (sub) sub.stop() - if (sub_statuses) sub_statuses.stop() - - selected_a = repo_a - - setTimeout(() => { - proposal_summaries.update((summaries) => { - return { - ...summaries, - loading: false, - } - }) - }, 6000) - - let relays_to_use = [...base_relays] - let filter: NDKFilter = { - kinds: [patch_kind], - limit: 100, - } - - if (repo_a) { - const repo_collection = await awaitSelectedRepoCollection(repo_a) - - const repo = selectRepoFromCollection(repo_collection) - if (!repo) { - // TODO: display error info bar - return - } - - relays_to_use = - repo.relays.length > 3 - ? repo.relays - : [...base_relays].concat(repo.relays) - - const without_root_tag = !repo.unique_commit - - if (without_root_tag) { - filter = { - kinds: [patch_kind], - '#a': repo.maintainers.map( - (m) => `${repo_kind}:${m}:${repo.identifier}` - ), - limit: 100, - } - } else { - filter = { - kinds: [patch_kind], - '#a': repo.maintainers.map( - (m) => `${repo_kind}:${m}:${repo.identifier}` - ), - '#t': ['root'], - limit: 100, - } - } - } - - sub = ndk.subscribe( - filter, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - - sub.on('event', async (event: NDKEvent) => { - try { - if ( - event.kind == patch_kind && - event.content.length > 0 && - !event.tags.some((t) => t.length > 1 && t[1] === 'revision-root') - ) { - if (!extractRepoAFromProposalEvent(event) && !repo_a) { - // link to proposal will not work as it requires an identifier - return - } - - proposal_summaries.update((proposals) => { - return { - ...proposals, - summaries: [ - ...proposals.summaries, - { - ...summary_defaults, - id: event.id, - repo_a: extractRepoAFromProposalEvent(event) || repo_a || '', - title: ( - event.tagValue('name') || - event.tagValue('description') || - extractPatchMessage(event.content) || - '' - ).split('\n')[0], - descritpion: event.tagValue('description') || '', - created_at: event.created_at, - comments: 0, - author: event.pubkey, - loading: false, - }, - ], - } - }) - - // filter out non root proposals if repo event supports nip34+ features - if (repo_a && repo_a.length > 0) { - const repo_collection = await returnRepoCollection(repo_a) - if ( - selected_a === repo_a && - repo_collection.events[repo_collection.most_recent_index] - .unique_commit - ) { - proposal_summaries.update((proposals) => { - return { - ...proposals, - summaries: [ - ...proposals.summaries.filter( - (summary) => - (event.tags.some( - (t) => t.length > 1 && t[1] === 'root' - ) && - !event.tags.some( - (t) => t.length > 1 && t[1] === 'revision-root' - )) || - event.id !== summary.id - ), - ], - } - }) - } - } - } - } catch {} - }) - sub.on('eose', () => { - proposal_summaries.update((proposals) => { - getAndUpdateProposalStatus(proposals, relays_to_use) - return { - ...proposals, - loading: false, - } - }) - }) -} - -let sub_statuses: NDKSubscription - -function getAndUpdateProposalStatus( - proposals: ProposalSummaries, - relays: string[] -): void { - if (sub_statuses) sub_statuses.stop() - sub_statuses = ndk.subscribe( - { - kinds: proposal_status_kinds, - '#e': proposals.summaries.map((proposal) => proposal.id), - }, - { - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls(relays, ndk) - ) - sub_statuses.on('event', (event: NDKEvent) => { - const tagged_proposal_event = event.tagValue('e') - if ( - event.kind && - proposal_status_kinds.includes(event.kind) && - tagged_proposal_event && - event.created_at - ) { - proposal_summaries.update((proposals) => { - return { - ...proposals, - summaries: proposals.summaries.map((o) => { - if ( - o.id === tagged_proposal_event && - event.created_at && - o.status_date < event.created_at - ) { - return { - ...o, - status: event.kind as number, - status_date: event.created_at, - } - } - - return o - }), - } - }) - } - }) - - sub_statuses.on('eose', () => { - proposal_summaries.update((proposals) => { - return { - ...proposals, - summaries: proposals.summaries.map((o) => ({ - ...o, - status: o.status || proposal_status_open, - })), - } - }) - }) -} - -export const extractRepoAFromProposalEvent = ( - event: NDKEvent -): string | undefined => { - const value = event.tagValue('a') - if (!value) return undefined - const split = value.split(':') - if (split.length < 3) return undefined - return value -} diff --git a/src/lib/stores/ReposIdentifier.ts b/src/lib/stores/ReposIdentifier.ts deleted file mode 100644 index 4cb101d..0000000 --- a/src/lib/stores/ReposIdentifier.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { RepoDIdentiferCollection } from '$lib/components/repo/type' -import { writable, type Writable } from 'svelte/store' -import { ensureRepo, eventToRepoEvent } from './repos' -import { base_relays, ndk } from './ndk' -import { repo_kind } from '$lib/kinds' -import { NDKEvent, NDKRelaySet } from '@nostr-dev-kit/ndk' - -export const repos_identifer: { - [d: string]: Writable -} = {} - -export const ensureIdentifierRepoCollection = ( - identifier: string -): Writable => { - if (!Object.keys(repos_identifer).includes(identifier)) { - repos_identifer[identifier] = writable({ - d: '', - events: [], - loading: true, - }) - const sub = ndk.subscribe( - { kinds: [repo_kind], '#d': [identifier] }, - { closeOnEose: true }, - NDKRelaySet.fromRelayUrls(base_relays, ndk) - ) - sub.on('event', (event: NDKEvent) => { - const repo_event = eventToRepoEvent(event) - if (repo_event && repo_event.identifier === identifier) { - ensureRepo(event).subscribe((repo_event) => { - repos_identifer[identifier].update((collection) => { - let events = collection.events - let exists = false - events.map((e) => { - if (e.author === repo_event.author) { - exists = true - return repo_event - } else return e - }) - if (!exists) events = [...events, repo_event] - return { - ...collection, - events, - } - }) - }) - } - }) - sub.on('eose', () => { - repos_identifer[identifier].update((collection) => ({ - ...collection, - loading: false, - })) - }) - } - return repos_identifer[identifier] -} diff --git a/src/lib/stores/ReposPubkey.ts b/src/lib/stores/ReposPubkey.ts deleted file mode 100644 index 898940a..0000000 --- a/src/lib/stores/ReposPubkey.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { SelectedPubkeyRepoCollections } from '$lib/components/repo/type' -import { get, writable, type Unsubscriber, type Writable } from 'svelte/store' -import { ensureRepoCollection, eventToRepoEvent } from './repos' -import { base_relays, ndk } from './ndk' -import { repo_kind } from '$lib/kinds' -import { NDKEvent, NDKRelaySet } from '@nostr-dev-kit/ndk' -import { extractAReference } from '$lib/components/repo/utils' - -export const selected_npub_repo_collections: Writable = - writable({ - pubkey: '', - collections: [], - }) - -const unsubscribers: Unsubscriber[] = [] - -export const ensureSelectedPubkeyRepoCollection = ( - pubkey: string -): Writable => { - const collections = get(selected_npub_repo_collections) - if (collections.pubkey === pubkey) return selected_npub_repo_collections - // TODO call unsubscribers - selected_npub_repo_collections.set({ - pubkey, - collections: [], - }) - - const sub = ndk.subscribe( - { kinds: [repo_kind], authors: [pubkey] }, - { closeOnEose: true }, - NDKRelaySet.fromRelayUrls(base_relays, ndk) - ) - const identifiers: string[] = [] - sub.on('event', (event: NDKEvent) => { - const repo_event = eventToRepoEvent(event) - if ( - repo_event && - repo_event.author === pubkey && - !identifiers.includes(repo_event.identifier) - ) - identifiers.push(repo_event.identifier) - }) - sub.on('eose', () => { - identifiers.forEach((identifier) => { - unsubscribers.push( - ensureRepoCollection(`${repo_kind}:${pubkey}:${identifier}`).subscribe( - (c) => { - if (!c.maintainers.includes(pubkey)) return - - selected_npub_repo_collections.update((selected_collections) => { - if (selected_collections.pubkey !== pubkey) - return { ...selected_collections } - let collection_in_selected_collections = false - const collections = selected_collections.collections.map( - (old_c) => { - const ref = extractAReference(old_c.selected_a) - if (ref && ref.identifier === identifier) { - collection_in_selected_collections = true - return { - ...c, - } - } - return { ...old_c } - } - ) - if (!collection_in_selected_collections) collections.push(c) - return { - ...selected_collections, - collections, - } - }) - } - ) - ) - }) - }) - return selected_npub_repo_collections -} diff --git a/src/lib/stores/ReposRecent.ts b/src/lib/stores/ReposRecent.ts deleted file mode 100644 index b7ed981..0000000 --- a/src/lib/stores/ReposRecent.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { RepoRecentCollection } from '$lib/components/repo/type' -import { writable, type Writable } from 'svelte/store' -import { ensureRepo, eventToRepoEvent } from './repos' -import { base_relays, ndk } from './ndk' -import { repo_kind } from '$lib/kinds' -import { NDKEvent, NDKRelaySet } from '@nostr-dev-kit/ndk' - -export const recent_repos: Writable = writable({ - events: [], - loading: true, -}) - -let started = false - -export const ensureRecentRepos = (): Writable => { - if (started) return recent_repos - started = true - const sub = ndk.subscribe( - { kinds: [repo_kind] }, - { closeOnEose: true }, - NDKRelaySet.fromRelayUrls(base_relays, ndk) - ) - sub.on('event', (event: NDKEvent) => { - const repo_event = eventToRepoEvent(event) - if (repo_event) { - ensureRepo(event).subscribe((repo_event) => { - recent_repos.update((collection) => { - let events = collection.events - let exists = false - events.map((e) => { - if ( - e.author === repo_event.author && - e.identifier === repo_event.identifier - ) { - exists = true - return repo_event - } else return e - }) - if (!exists) events = [...events, repo_event] - return { - ...collection, - events, - } - }) - }) - } - }) - sub.on('eose', () => { - recent_repos.update((collection) => ({ - ...collection, - loading: false, - })) - }) - return recent_repos -} diff --git a/src/lib/stores/ndk.ts b/src/lib/stores/ndk.ts deleted file mode 100644 index 6e8d50a..0000000 --- a/src/lib/stores/ndk.ts +++ /dev/null @@ -1,21 +0,0 @@ -import NDKSvelte from '@nostr-dev-kit/ndk-svelte' - -// export let base_relays = import.meta.env.DEV -// ? ["ws://localhost:8080"] -// : [ - -export const base_relays = [ - 'wss://relay.damus.io', - 'wss://nos.lol', - 'wss://relay.nostr.band', - 'wss://purplerelay.com', // reliability untested - // 'wss://relayable.org', // free but not so reliable -] - -// TODO: fallback_relays for if profile cannot be found - -export const ndk = new NDKSvelte({ - explicitRelayUrls: [...base_relays], -}) - -ndk.connect(5000) diff --git a/src/lib/stores/repo.ts b/src/lib/stores/repo.ts deleted file mode 100644 index 1b0b424..0000000 --- a/src/lib/stores/repo.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { writable, type Unsubscriber, type Writable } from 'svelte/store' -import type { - RepoCollection, - RepoEvent, - RepoReadme, -} from '$lib/components/repo/type' -import { - collection_defaults, - event_defaults, - readme_defaults, -} from '$lib/components/repo/type' -import { ensureRepoCollection } from './repos' -import { - cloneArrayToReadMeUrls, - selectRepoFromCollection, -} from '$lib/components/repo/utils' -import { get } from 'svelte/store' - -export const selected_repo_collection: Writable = writable({ - ...collection_defaults, -}) - -export const selected_repo_event: Writable = writable({ - ...event_defaults, -}) - -selected_repo_collection.subscribe((collection) => { - const selected_from_collection = selectRepoFromCollection(collection) - if (selected_from_collection) - selected_repo_event.set({ ...selected_from_collection }) -}) - -let selected_repo_a: string = '' - -let selected_unsubscriber: Unsubscriber - -export const ensureSelectedRepoCollection = ( - a: string, - naddr_relays: string[] | undefined = undefined -): Writable => { - if (selected_repo_a !== a) { - let loading = true - selected_repo_a = a - if (selected_unsubscriber) selected_unsubscriber() - selected_unsubscriber = ensureRepoCollection(a, naddr_relays).subscribe( - (repo_collection) => { - selected_repo_collection.set({ ...repo_collection }) - if (loading && !repo_collection.loading) { - loading = false - const repo_event = selectRepoFromCollection(repo_collection) - if (repo_event) - ensureRepoReadme(repo_event.clone, repo_collection.selected_a) - } - } - ) - } - return selected_repo_collection -} - -export const awaitSelectedRepoCollection = async ( - a: string -): Promise => { - return new Promise((r) => { - const unsubscriber = ensureSelectedRepoCollection(a).subscribe( - (repo_collection) => { - if (selected_repo_a === a && !repo_collection.loading) { - setTimeout(() => { - if (unsubscriber) unsubscriber() - }, 5) - r({ ...repo_collection }) - } - } - ) - }) -} - -export const selected_repo_readme: Writable = writable({ - ...readme_defaults, -}) - -const ensureRepoReadme = async (clone: string[], a: string): Promise => { - selected_repo_readme.set({ ...readme_defaults }) - - /** update writable unless selected readme has changed */ - const update = (md: string | undefined = undefined): void => { - const latest_collection = get(selected_repo_collection) - if ( - [latest_collection.selected_a, latest_collection.selected_a].includes(a) - ) { - selected_repo_readme.set({ - md: md || '', - loading: false, - failed: !md, - }) - } - } - let text: string | undefined - try { - let readme_urls = cloneArrayToReadMeUrls(clone) - // prioritise using github as it doesn't require a proxy - readme_urls = [ - ...readme_urls.filter((url) => url.includes('raw.githubusercontent.com')), - ...readme_urls.filter( - (url) => !url.includes('raw.githubusercontent.com') - ), - ] - for (let i = 0; i < readme_urls.length; i++) { - try { - const res = await fetch( - readme_urls[i] - // readme_urls[i].includes('raw.githubusercontent.com') - // ? readme_urls[i] - // : // use proxy as most servers produce a CORS error - // `/git_proxy/readme/${encodeURIComponent(readme_urls[i])}` - ) - if (res.ok) { - text = await res.text() - break - } else { - continue - } - } catch { - continue - } - } - } catch {} - update(text) -} diff --git a/src/lib/stores/repos.ts b/src/lib/stores/repos.ts deleted file mode 100644 index 85baec0..0000000 --- a/src/lib/stores/repos.ts +++ /dev/null @@ -1,367 +0,0 @@ -import { - event_defaults, - collection_defaults, - type RepoCollection, - type RepoEvent, - type RepoSummary, -} from '$lib/components/repo/type' -import { NDKRelaySet, NDKEvent } from '@nostr-dev-kit/ndk' -import { get, writable, type Writable } from 'svelte/store' -import { base_relays, ndk } from './ndk' -import { repo_kind } from '$lib/kinds' -import { - aToNaddr, - extractAReference, - selectRepoFromCollection, -} from '$lib/components/repo/utils' -import { nip19 } from 'nostr-tools' - -export const repos: { - [a: string]: Writable -} = {} - -export const repo_collections: { - [a: string]: Writable -} = {} - -export const ensureRepo = ( - a: string | NDKEvent, - naddr_relays: string[] | undefined = undefined -): Writable => { - if (typeof a !== 'string') { - const repo_event = eventToRepoEvent(a) - if (repo_event) { - const a = repoEventToARef(repo_event) - repos[a] = writable({ ...repo_event, loading: true }) - fetchReferencedBy(repo_event) - return repos[a] - } - return repos[''] - } - if (!repos[a]) { - const base: RepoEvent = { - ...event_defaults, - } - - const a_ref = extractAReference(a) - - if (!a_ref) return writable(base) - - const { pubkey, identifier } = a_ref - - repos[a] = writable({ - ...base, - identifier, - author: pubkey, - naddr: aToNaddr(a_ref) || '', - maintainers: [pubkey], - }) - - const sub = ndk.subscribe( - { kinds: [repo_kind], '#d': [identifier], authors: [pubkey] }, - { - groupable: true, - // default 100 - groupableDelay: 200, - closeOnEose: false, - }, - NDKRelaySet.fromRelayUrls([...base_relays, ...(naddr_relays || [])], ndk) - ) - sub.on('event', (event: NDKEvent) => { - const repo_event = eventToRepoEvent(event) - - if (repo_event) { - if ( - identifier === repo_event.identifier && - pubkey === repo_event.author - ) - repos[a].update(() => { - return { - ...repo_event, - } - }) - fetchReferencedBy(repo_event) - // TODO fetch stargazers - } - }) - sub.on('eose', () => { - // still awaiting reference_by at this point - repos[a].update((repo_event) => { - return { - ...repo_event, - loading: false, - } - }) - }) - } - setTimeout(() => { - repos[a].update((repo_event) => { - return { - ...repo_event, - loading: false, - } - }) - }, 5000) - return repos[a] -} - -export const returnRepo = async ( - a: string, - naddr_relays: string[] | undefined = undefined -): Promise => { - return new Promise((r) => { - const unsubscriber = ensureRepo(a, naddr_relays).subscribe((c) => { - if (!c.loading) { - setTimeout(() => { - if (unsubscriber) unsubscriber() - }, 5) - r(c) - } - }) - }) -} - -export const ensureRepoCollection = ( - a: string, - naddr_relays: string[] | undefined = undefined -): Writable => { - if (!repo_collections[a]) { - const base: RepoCollection = { - ...collection_defaults, - selected_a: a, - } - - repo_collections[a] = writable(base) - - const a_ref = extractAReference(a) - - if (!a_ref) return repo_collections[a] - - const { pubkey, identifier } = a_ref - - returnRepo(a, naddr_relays).then(async (repo_event) => { - if (get(repo_collections[a]).events.length > 0) return - repo_collections[a].update((collection) => { - return { - ...collection, - events: [repo_event], - maintainers: repo_event.maintainers, - most_recent_index: 0, - } - }) - - const new_maintainers: string[] = [] - - const addMaintainers = async (m: string) => { - const m_repo_event = await returnRepo(`${repo_kind}:${m}:${identifier}`) - repo_collections[a].update((collection) => { - m_repo_event.maintainers.forEach((m) => { - if ( - ![pubkey, ...collection.maintainers, ...new_maintainers].includes( - m - ) - ) - new_maintainers.push(m) - }) - const events = [...collection.events, m_repo_event] - const most_recent = events.sort( - (a, b) => b.created_at - a.created_at - )[0] - return { - ...collection, - events, - most_recent_index: events.findIndex( - (e) => e.author === most_recent.author - ), - maintainers: [...collection.maintainers, ...new_maintainers], - } - }) - } - - // add maintainer events - await Promise.all( - repo_event.maintainers - .filter((m) => m !== pubkey) - .map((m) => addMaintainers(m)) - ) - - // also add maintainers included in their maintainer events - while (new_maintainers.length > 0) { - await Promise.all(new_maintainers.map((m) => addMaintainers(m))) - } - - repo_collections[a].update((repo_collection) => { - return { - ...repo_collection, - loading: false, - } - }) - }) - } - setTimeout(() => { - repo_collections[a].update((repo_collection) => { - return { - ...repo_collection, - loading: false, - } - }) - }, 5000) - return repo_collections[a] -} - -export const returnRepoCollection = async ( - a: string -): Promise => { - return new Promise((r) => { - const unsubscriber = ensureRepoCollection(a).subscribe((c) => { - if (!c.loading) { - setTimeout(() => { - if (unsubscriber) unsubscriber() - }, 5) - r(c) - } - }) - }) -} - -const repoEventToARef = (repo_event: RepoEvent): string => - `${repo_kind}:${repo_event.author}:${repo_event.identifier}` - -const fetchReferencedBy = (repo_event: RepoEvent) => { - const relays_to_use = - repo_event.relays.length < 3 - ? repo_event.relays - : [...base_relays].concat(repo_event.relays) - - const ref_sub = ndk.subscribe( - { - '#a': [repoEventToARef(repo_event)], - limit: 10, - }, - { - groupable: true, - // default 100 - groupableDelay: 200, - closeOnEose: true, - }, - NDKRelaySet.fromRelayUrls(relays_to_use, ndk) - ) - ref_sub.on('event', (ref_event: NDKEvent) => { - repos[repoEventToARef(repo_event)].update((repo_event) => { - return { - ...repo_event, - referenced_by: repo_event.referenced_by.includes(ref_event.id) - ? [...repo_event.referenced_by] - : [...repo_event.referenced_by, ref_event.id], - most_recent_reference_timestamp: - ref_event.created_at && - repo_event.most_recent_reference_timestamp < ref_event.created_at - ? ref_event.created_at - : repo_event.most_recent_reference_timestamp, - } - }) - }) - - ref_sub.on('eose', () => { - repos[repoEventToARef(repo_event)].update((repo_event) => { - return { - ...repo_event, - // finished loading repo_event as we have all referenced_by events - loading: false, - } - }) - }) -} - -export const eventToRepoEvent = (event: NDKEvent): RepoEvent | undefined => { - if (event.kind !== repo_kind) return undefined - - const maintainers = [event.pubkey] - event.getMatchingTags('maintainers').forEach((t: string[]) => { - t.forEach((v, i) => { - if (i > 0 && v !== maintainers[0]) { - try { - nip19.npubEncode(v) // will throw if invalid hex pubkey - maintainers.push(v) - } catch {} - } - }) - }) - const relays: string[] = [] - event.getMatchingTags('relays').forEach((t: string[]) => { - t.forEach((v, i) => { - if (i > 0) { - relays.push(v) - } - }) - }) - const web: string[] = [] - event.getMatchingTags('web').forEach((t: string[]) => { - t.forEach((v, i) => { - if (i > 0) { - web.push(v) - } - }) - }) - const clone: string[] = [] - event.getMatchingTags('clone').forEach((t: string[]) => { - t.forEach((v, i) => { - if (i > 0) { - clone.push(v) - } - }) - }) - return { - event_id: event.id, - naddr: event.encode(), - author: event.pubkey, - identifier: event.replaceableDTag(), - unique_commit: event.tagValue('r') || undefined, - name: event.tagValue('name') || '', - description: event.tagValue('description') || '', - clone, - web, - tags: event.getMatchingTags('t').map((t) => t[1]) || [], - maintainers, - relays, - referenced_by: [], - most_recent_reference_timestamp: event.created_at || 0, - created_at: event.created_at || 0, - loading: true, // loading until references fetched - } -} - -export const repoCollectionToSummary = ( - collection: RepoCollection -): RepoSummary | undefined => { - const selected = selectRepoFromCollection(collection) - if (!selected) return undefined - return { - name: selected.name, - identifier: selected.identifier, - naddr: selected.naddr, - unique_commit: selected.unique_commit, - description: selected.description, - maintainers: selected.maintainers, - loading: collection.loading, - created_at: selected.created_at, - most_recent_reference_timestamp: Math.max.apply( - 0, - collection.events.map((e) => e.most_recent_reference_timestamp) - ), - } as RepoSummary -} - -export const repoEventToSummary = (event: RepoEvent): RepoSummary => { - return { - name: event.name, - identifier: event.identifier, - naddr: event.naddr, - unique_commit: event.unique_commit, - description: event.description, - maintainers: event.maintainers, - loading: event.loading, - created_at: event.created_at, - most_recent_reference_timestamp: event.most_recent_reference_timestamp, - } as RepoSummary -} diff --git a/src/lib/stores/users.ts b/src/lib/stores/users.ts deleted file mode 100644 index 608ffed..0000000 --- a/src/lib/stores/users.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { - defaults as user_defaults, - type UserObject, -} from '$lib/components/users/type' -import { - getRelayListForUser, - NDKNip07Signer, - NDKRelayList, -} from '@nostr-dev-kit/ndk' -import { get, writable, type Unsubscriber, type Writable } from 'svelte/store' -import { ndk } from './ndk' - -export const users: { [hexpubkey: string]: Writable } = {} - -const empty_user: Writable = writable({ - loading: true, - hexpubkey: '', - npub: 'npub...', -}) - -export const ensureUser = (hexpubkey: string): Writable => { - if (hexpubkey === '') return empty_user - if (!users[hexpubkey]) { - const u = ndk.getUser({ hexpubkey }) - - const base: UserObject = { - loading: false, - hexpubkey, - npub: u.npub, - } - - users[hexpubkey] = writable(base) - getUserRelays(hexpubkey) - const getProfile = () => { - u.fetchProfile({ - closeOnEose: true, - groupable: true, - // default 100 - groupableDelay: 200, - }).then( - (p) => { - users[hexpubkey].update((u) => ({ - ...u, - loading: false, - profile: p === null ? undefined : p, - })) - }, - () => { - users[hexpubkey].update((u) => ({ - ...u, - loading: false, - })) - } - ) - } - let attempts = 1 - const tryAgainin3s = () => { - setTimeout( - () => { - if (!get(users[hexpubkey]).profile) { - getProfile() - attempts++ - if (attempts < 5) tryAgainin3s() - } - }, - (attempts ^ 2) * 1000 - ) - } - getProfile() - tryAgainin3s() - } - return users[hexpubkey] -} - -export const returnUser = async (hexpubkey: string): Promise => { - return new Promise((r) => { - const unsubscriber = ensureUser(hexpubkey).subscribe((u) => { - if (!u.loading) { - setTimeout(() => { - if (unsubscriber) unsubscriber() - }, 5) - r(u) - } - }) - }) -} - -// nip07_plugin is set in Navbar component -export const nip07_plugin: Writable = writable(undefined) - -export const checkForNip07Plugin = () => { - if (window.nostr) { - nip07_plugin.set(true) - if (localStorage.getItem('nip07pubkey')) login() - } else { - let timerId: NodeJS.Timeout | undefined = undefined - const intervalId = setInterval(() => { - if (window.nostr) { - clearTimeout(timerId) - clearInterval(intervalId) - nip07_plugin.set(true) - if (localStorage.getItem('nip07pubkey')) login() - } - }, 100) - timerId = setTimeout(() => { - clearInterval(intervalId) - nip07_plugin.set(false) - }, 5000) - } -} - -const signer = new NDKNip07Signer(2000) - -export const logged_in_user: Writable = - writable(undefined) - -export const login = async (): Promise => { - return new Promise(async (res, rej) => { - const user = get(logged_in_user) - if (user) return res() - if (get(nip07_plugin)) { - try { - const ndk_user = await signer.blockUntilReady() - localStorage.setItem('nip07pubkey', ndk_user.pubkey) - logged_in_user.set({ - ...user_defaults, - hexpubkey: ndk_user.pubkey, - }) - ndk.signer = signer - ensureUser(ndk_user.pubkey).subscribe((user) => { - logged_in_user.set({ ...user }) - }) - return res() - } catch (e) { - alert(e) - rej() - } - } else { - rej() - } - }) -} - -export const logout = async (): Promise => { - logged_in_user.set(undefined) - localStorage.removeItem('nip07pubkey') - ndk.signer = undefined -} - -interface UserRelays { - loading: boolean - ndk_relays: NDKRelayList | undefined -} - -export const user_relays: { [hexpubkey: string]: Writable } = {} - -export const getUserRelays = async (hexpubkey: string): Promise => { - return new Promise(async (res, _) => { - if (user_relays[hexpubkey]) { - const unsubscriber: Unsubscriber = user_relays[hexpubkey].subscribe( - (querying_user_relays) => { - if (querying_user_relays && !querying_user_relays.loading) { - res(querying_user_relays) - setTimeout(() => { - if (unsubscriber) unsubscriber() - }, 5) - } - } - ) - } else { - user_relays[hexpubkey] = writable({ - loading: true, - ndk_relays: undefined, - }) - const relay_list = await getRelayListForUser(hexpubkey, ndk) - const querying_user_relays = { - loading: false, - ndk_relays: relay_list, - } - user_relays[hexpubkey].set({ ...querying_user_relays }) - res(querying_user_relays) - } - }) -} diff --git a/src/lib/stores/utils.ts b/src/lib/stores/utils.ts deleted file mode 100644 index 553caa2..0000000 --- a/src/lib/stores/utils.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const ignore_kinds = [ - 31234, // amethyst draft kind - 9978, // confidence scoring event -] diff --git a/src/lib/wrappers/ComposeIssue.svelte b/src/lib/wrappers/ComposeIssue.svelte deleted file mode 100644 index 8440b27..0000000 --- a/src/lib/wrappers/ComposeIssue.svelte +++ /dev/null @@ -1,136 +0,0 @@ - - -{#if edit_mode} -
    -
    - - - -
    -
    - {#if submit_attempted && title.length < 10} -
    - title must be at least 10 characters -
    - {/if} - -
    -
    -
    -{/if} -{#if submitted} -
    sent going to issue!
    -{/if} diff --git a/src/lib/wrappers/ComposeReply.svelte b/src/lib/wrappers/ComposeReply.svelte deleted file mode 100644 index 79273ec..0000000 --- a/src/lib/wrappers/ComposeReply.svelte +++ /dev/null @@ -1,159 +0,0 @@ - - -{#if edit_mode} - -{/if} -{#if submitted} - -{/if} diff --git a/src/lib/wrappers/EventCard.svelte b/src/lib/wrappers/EventCard.svelte deleted file mode 100644 index 1611c46..0000000 --- a/src/lib/wrappers/EventCard.svelte +++ /dev/null @@ -1,89 +0,0 @@ - - -{#if event.kind && [6, 16].includes(event.kind)} - - reposted by - -{:else if event.kind && event.kind === 5} - - deletion requested by - -{:else if event.kind && event.kind === 30001} - - added to '{getDtag(event) || 'unknown'}' list by - -{:else if event.kind && event.kind == repo_kind} - - - -{:else if preview && event.kind && event.kind === patch_kind} - - - -{:else if preview && event.kind && event.kind === issue_kind} - - - -{:else} - - {#if event.kind == patch_kind} - {#if isCoverLetter(event.content)} - - {:else} - - {/if} - {:else if event.kind && proposal_status_kinds.includes(event.kind)} - - {:else} - - {/if} - -{/if} diff --git a/src/lib/wrappers/EventPreview.svelte b/src/lib/wrappers/EventPreview.svelte deleted file mode 100644 index f6c6d9a..0000000 --- a/src/lib/wrappers/EventPreview.svelte +++ /dev/null @@ -1,69 +0,0 @@ - - -
    - {#if repo && $repo} - - - - {:else if $event && $event.pubkey} -
    - -
    - {:else if cannot_find_event} -
    cannot find event
    - {:else} -
    loading...
    - {/if} -
    diff --git a/src/lib/wrappers/Navbar.svelte b/src/lib/wrappers/Navbar.svelte deleted file mode 100644 index 4b63bc7..0000000 --- a/src/lib/wrappers/Navbar.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/src/lib/wrappers/RepoDetails.svelte b/src/lib/wrappers/RepoDetails.svelte deleted file mode 100644 index 6bf329a..0000000 --- a/src/lib/wrappers/RepoDetails.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/src/lib/wrappers/RepoMenu.svelte b/src/lib/wrappers/RepoMenu.svelte deleted file mode 100644 index 071552c..0000000 --- a/src/lib/wrappers/RepoMenu.svelte +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/src/lib/wrappers/RepoPageWrapper.svelte b/src/lib/wrappers/RepoPageWrapper.svelte deleted file mode 100644 index a614bf7..0000000 --- a/src/lib/wrappers/RepoPageWrapper.svelte +++ /dev/null @@ -1,70 +0,0 @@ - - - -{#if invalid_naddr} - - -
    Error! invalid naddr in url:
    -
    {repo_naddr}
    -
    -
    - - - -{/if} -{#if with_side_bar} - -
    -
    - -
    -
    -
    -

    Repository Details

    -
    -
    - -
    -
    -
    -
    -{:else} - -{/if} diff --git a/src/lib/wrappers/Thread.svelte b/src/lib/wrappers/Thread.svelte deleted file mode 100644 index 6c83779..0000000 --- a/src/lib/wrappers/Thread.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -{#each thread_trees as tree, i} - {#if i > 0} -
    new revision
    - {/if} - -{/each} diff --git a/src/lib/wrappers/ThreadTree.svelte b/src/lib/wrappers/ThreadTree.svelte deleted file mode 100644 index 9789e23..0000000 --- a/src/lib/wrappers/ThreadTree.svelte +++ /dev/null @@ -1,138 +0,0 @@ - - -{#if tree} - - - {#each tree.child_nodes as layer1} - - - {#each layer1.child_nodes as layer2} - - - {#each layer2.child_nodes as layer3} - - - {#each layer3.child_nodes as layer4} - - - {#each layer4.child_nodes as layer5} - - - {#each layer5.child_nodes as layer6} - - - {#each layer6.child_nodes as layer7} - - - {#each layer7.child_nodes as layer8} - - - {#each layer8.child_nodes as layer9} - - - {#each layer9.child_nodes as layer10} - - - {#each layer10.child_nodes as layer11} - - - {#each layer11.child_nodes as layer12} - - - {#each layer12.child_nodes as layer13} - - - {#each layer13.child_nodes as layer14} - - - {#each layer14.child_nodes as layer15} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - - {/each} - {#if show_compose} - - {/if} - -{/if} diff --git a/src/lib/wrappers/thread_tree.spec.ts b/src/lib/wrappers/thread_tree.spec.ts deleted file mode 100644 index 9a8958a..0000000 --- a/src/lib/wrappers/thread_tree.spec.ts +++ /dev/null @@ -1,231 +0,0 @@ -import { describe, expect, test } from 'vitest' -import { createThreadTree, getParentId, getThreadTrees } from './thread_tree' -import NDK, { - NDKEvent, - NDKPrivateKeySigner, - type NDKTag, -} from '@nostr-dev-kit/ndk' -import { reply_kind } from '$lib/kinds' - -const ndk = new NDK() -ndk.signer = new NDKPrivateKeySigner( - '08608a436aee4c07ea5c36f85cb17c58f52b3ad7094f9318cc777771f0bf218b' -) -const generateEventWithTags = async (tags: NDKTag[]): Promise => { - const event = new NDKEvent(ndk) - event.kind = reply_kind - event.content = Math.random().toFixed(10) - tags.forEach((tag) => { - event.tags.push(tag) - }) - await event.sign() - return event -} - -describe('getParentId', () => { - describe('when all types of e tag are present', () => { - test('returns id of e reply tag', async () => { - expect( - getParentId( - await generateEventWithTags([ - ['e', '012'], - ['e', '123', '', 'root'], - ['e', '789', '', 'mention'], - ['e', '456', '', 'reply'], - ]) - ) - ).toEqual('456') - }) - }) - describe('when all types of e tag are present except reply', () => { - test('returns id of e root tag', async () => { - expect( - getParentId( - await generateEventWithTags([ - ['e', '012'], - ['e', '123', '', 'root'], - ['e', '789', '', 'mention'], - ]) - ) - ).toEqual('123') - }) - }) - describe('when only mention and unmarked e tags are present', () => { - test('returns id of unmarked e tag', async () => { - expect( - getParentId( - await generateEventWithTags([ - ['e', '012'], - ['e', '789', '', 'mention'], - ]) - ) - ).toEqual('012') - }) - }) - describe('when only mention e tag are present', () => { - test('return undefined', async () => { - expect( - getParentId(await generateEventWithTags([['e', '789', '', 'mention']])) - ).toBeUndefined() - }) - }) -}) - -describe('createThreadTree', () => { - describe('only events without parents are returned as top level array items', () => { - describe('1 parent, 1 child', () => { - test('returns array with only parent at top level', async () => { - const root = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const tree = createThreadTree([root, reply_to_root]) - expect(tree).to.have.length(1) - expect(tree[0].event.id).to.eq(root.id) - }) - test('parent has child in child_nodes, child has empty child nodes', async () => { - const root = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const tree = createThreadTree([root, reply_to_root]) - expect(tree[0].child_nodes).to.have.length(1) - expect(tree[0].child_nodes[0].event.id).to.eq(reply_to_root.id) - expect(tree[0].child_nodes[0].child_nodes).to.be.length(0) - }) - }) - describe('1 grand parent, 1 parent, 1 child - out of order', () => { - test('returns array with only grand parent at top level with parent as its child, and child as parents child', async () => { - const grand_parent = await generateEventWithTags([]) - const parent = await generateEventWithTags([ - ['e', grand_parent.id, '', 'reply'], - ]) - const child = await generateEventWithTags([ - ['e', parent.id, '', 'reply'], - ]) - const tree = createThreadTree([grand_parent, child, parent]) - expect(tree).to.have.length(1) - expect(tree[0].event.id).to.eq(grand_parent.id) - expect(tree[0].child_nodes).to.have.length(1) - expect(tree[0].child_nodes[0].event.id).to.eq(parent.id) - expect(tree[0].child_nodes[0].child_nodes).to.have.length(1) - expect(tree[0].child_nodes[0].child_nodes[0].event.id).to.eq(child.id) - expect( - tree[0].child_nodes[0].child_nodes[0].child_nodes - ).to.have.length(0) - }) - }) - describe('2 roots, 1 child', () => { - test('returns array with 2 roots at top level', async () => { - const root = await generateEventWithTags([]) - const root2 = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const tree = createThreadTree([root, reply_to_root, root2]) - expect(tree).to.have.length(2) - expect(tree[0].event.id).to.eq(root.id) - expect(tree[1].event.id).to.eq(root2.id) - expect(tree[1].child_nodes).to.have.length(0) - expect(tree[0].child_nodes).to.have.length(1) - expect(tree[0].child_nodes[0].event.id).to.eq(reply_to_root.id) - expect(tree[0].child_nodes[0].child_nodes).to.be.length(0) - }) - }) - }) -}) - -describe('getThreadTrees', () => { - describe('issue', () => { - describe('2 roots, 1 child', () => { - test('array only contains node related to specified event and children', async () => { - const root = await generateEventWithTags([]) - const root2 = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const trees = getThreadTrees('issue', root, [ - root, - reply_to_root, - root2, - ]) - expect(trees).to.have.length(1) - expect(trees[0].event.id).to.eq(root.id) - expect(trees[0].child_nodes).to.have.length(1) - expect(trees[0].child_nodes[0].event.id).to.eq(reply_to_root.id) - expect(trees[0].child_nodes[0].child_nodes).to.be.length(0) - }) - }) - }) - describe('proposal', () => { - describe('2 roots, 1 child', () => { - test('array only contains node related to specified event and children', async () => { - const root = await generateEventWithTags([]) - const root2 = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const trees = getThreadTrees('proposal', root, [ - root, - reply_to_root, - root2, - ]) - expect(trees).to.have.length(1) - expect(trees[0].event.id).to.eq(root.id) - expect(trees[0].child_nodes).to.have.length(1) - expect(trees[0].child_nodes[0].event.id).to.eq(reply_to_root.id) - expect(trees[0].child_nodes[0].child_nodes).to.be.length(0) - }) - }) - describe('2 roots, 1 reply, 1 revision', () => { - test('array contains node related to specified event with reply, and revision', async () => { - const root = await generateEventWithTags([]) - const root2 = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const revision_of_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ['t', 'revision-root'], - ]) - const trees = getThreadTrees('proposal', root, [ - root, - reply_to_root, - root2, - revision_of_root, - ]) - expect(trees).to.have.length(2) - expect(trees[0].event.id).to.eq(root.id) - expect(trees[0].child_nodes).to.have.length(1) - expect(trees[0].child_nodes[0].event.id).to.eq(reply_to_root.id) - expect(trees[1].event.id).to.eq(revision_of_root.id) - }) - }) - }) - describe('issue', () => { - describe('2 roots, 1 reply, 1 revision', () => { - test('array contains only node related to specified event with reply and revision as children', async () => { - const root = await generateEventWithTags([]) - const root2 = await generateEventWithTags([]) - const reply_to_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ]) - const revision_of_root = await generateEventWithTags([ - ['e', root.id, '', 'reply'], - ['t', 'revision-root'], - ]) - const trees = getThreadTrees('issue', root, [ - root, - reply_to_root, - root2, - revision_of_root, - ]) - expect(trees).to.have.length(1) - expect(trees[0].event.id).to.eq(root.id) - expect(trees[0].child_nodes).to.have.length(2) - expect(trees[0].child_nodes[0].event.id).to.eq(reply_to_root.id) - expect(trees[0].child_nodes[1].event.id).to.eq(revision_of_root.id) - }) - }) - }) -}) diff --git a/src/lib/wrappers/thread_tree.ts b/src/lib/wrappers/thread_tree.ts deleted file mode 100644 index c2934b5..0000000 --- a/src/lib/wrappers/thread_tree.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { ThreadTreeNode } from '$lib/components/events/type' -import type { NDKEvent } from '@nostr-dev-kit/ndk' - -export const getParentId = (reply: NDKEvent): string | undefined => { - const t = - reply.tags.find((tag) => tag.length === 4 && tag[3] === 'reply') || - reply.tags.find((tag) => tag.length === 4 && tag[3] === 'root') || - // include events that don't use nip 10 markers - reply.tags.find((tag) => tag.length < 4 && tag[0] === 'e') - return t ? t[1] : undefined -} - -export const createThreadTree = (replies: NDKEvent[]): ThreadTreeNode[] => { - const hashTable: { [key: string]: ThreadTreeNode } = Object.create(null) - replies.forEach( - (reply) => (hashTable[reply.id] = { event: reply, child_nodes: [] }) - ) - const thread_tree: ThreadTreeNode[] = [] - replies.forEach((reply) => { - const reply_parent_id = getParentId(reply) - if (reply_parent_id && hashTable[reply_parent_id]) { - hashTable[reply_parent_id].child_nodes.push(hashTable[reply.id]) - hashTable[reply_parent_id].child_nodes.sort( - (a, b) => (a.event.created_at || 0) - (b.event.created_at || 0) - ) - } else thread_tree.push(hashTable[reply.id]) - }) - return thread_tree -} - -export const splitIntoRevisionThreadTrees = ( - tree: ThreadTreeNode -): ThreadTreeNode[] => { - const thread_revision_trees: ThreadTreeNode[] = [ - { - ...tree, - child_nodes: [...tree?.child_nodes], - }, - ] - thread_revision_trees[0].child_nodes = [ - ...thread_revision_trees[0].child_nodes.filter((n) => { - if (n.event.tags.some((t) => t.length > 1 && t[1] === 'revision-root')) { - thread_revision_trees.push(n) - return false - } - return true - }), - ] - return thread_revision_trees.sort( - (a, b) => (a.event.created_at || 0) - (b.event.created_at || 0) - ) -} - -export const getThreadTrees = ( - type: 'proposal' | 'issue', - event: NDKEvent | undefined, - replies: NDKEvent[] | undefined -): ThreadTreeNode[] => { - if (event) { - const all_trees = createThreadTree(replies ? [event, ...replies] : [event]) - const event_tree = all_trees.find((t) => t.event.id === event.id) - if (event_tree) { - // TODO: add 'mentions' and secondary references with a 'metioned event wrapper' - if (type === 'proposal') return splitIntoRevisionThreadTrees(event_tree) - return [event_tree] - } - } - - return [] -} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte deleted file mode 100644 index ec96722..0000000 --- a/src/routes/+layout.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - -
    diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts deleted file mode 100644 index 62ad4e4..0000000 --- a/src/routes/+layout.ts +++ /dev/null @@ -1 +0,0 @@ -export const ssr = false diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte deleted file mode 100644 index 4be1d4a..0000000 --- a/src/routes/+page.svelte +++ /dev/null @@ -1,125 +0,0 @@ - - - - GitCitadel - - - -
    -
    -
    -

    - GitCitadel -

    -

    - Because we think about git every day. -

    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    -
    -

    Alexandria

    -
    -
    - The Nostr Alexandria e-reader and publisher, for NIP-62 Curated Publications has not yet been released, but you can try it out in our dev environment. -
    -
    -
    -
    -
    -
    -

    - GitCitadel Status -

    -
    -
    - monitoring page for various relays and servers -
    -
    -
    -
    -
    -
    -

    - About GitCitadel -

    -
    -
    - You can find out more about our project, on our wiki pages: project docs -
    -
    -
    -
    -
    -
    -

    Noscrypt

    -
    -
    - One of the C-libraries that the Aedile NDK uses is Noscrypt, which handles the cryptography operations. -
    -
    -
    - - - -
    -

    GitCitadel Repositories

    -

    These are the repositories we're working on, currently.

    -
    - -
    -
    -
    diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte deleted file mode 100644 index 7d9b55d..0000000 --- a/src/routes/about/+page.svelte +++ /dev/null @@ -1,313 +0,0 @@ - - - - GitCitadel - About - - - - - -
    -

    About

    -

    - gitcitadel.eu, ngit and git-remote-nostr are tools - to enable code collaboration over nostr created and maintained by - DanConwayDev compatible with nip34 -

    - - -

    The Need

    - -

    - git is a decentralized version control system, yet most freedom tech - projects use centralized walled gardens on top of git as a social and - collaboration layer for code changes -

    - -

    - by far the most popular, Microsoft's GitHub, has a history of banning - accounts and repositories without warning and this creates a real risk of - disruption for important projects like bitcoin-core -

    - -

    The Opportunity

    - -

    - whilst alternatives do exist, nearly all of them involve moving to another - walled garden, either controlled by a different centralized guardian, or - self-hosted which is less suitable for an anarchic project -

    -

    - some projects use patches-over-email: an alternative and decentralized - approach that pre-dates GitHub. despite its antiquated tooling, it has a - very smooth and effective workflow for those that use it regularly and has - proven to scale to very large projects like the linux kernel -

    - -

    - ultimately, GitHub remains by far the most popular choice for freedom tech - projects. the accessible UX, convenience, inter-connected tooling and - network effect are just a few of the reasons -

    - -

    - nostr is the ideal permissionless, decentralized, and censorship resistant - social layer for the anarchic FOSS code collaboration use case -

    - -

    - there is an opportunity to build modern tooling that competes from a UX - perspective and has the additional benefit of integrating into a wider - social ecosystem -

    - -

    The Philosophy

    - -

    - there is innovation happening with git and nostr in a few places and - gitcitadel.eu aims to work with different approaches -

    - -

    ngit is more opinionated, and its philosophy can be summed up as:

    -
      -
    • let git be git - don't try and reinvent git
    • -
    • - let nostr be nostr - leverage the benefits of nostr -
    • -
    • - learn from the success of others - eg. the PR model has - proved to be very popular. how can we enable similar experiences with patches? -
    • -
    - -

    - patch-over-email, with its proven scalability, lays the foundation for - providing this social layer without having to re-invent the complexities - of creating an efficient alternative to git server over nostr, or use - specialized relays -

    - -

    The Protocol

    - -

    - nip34 is a nostr protocol for sending git patches over nostr, - similar to how patches are sent via email using `git format-patch` and `git - send-email`. the patches-over-email model has proven to be a robust workflow - that is used extensively, including in very large projects such as the linux - kernel -

    - -

    - git-remote-nostr, ngit and gitcitadel.eu implements optional features of - nip34, which enable: -

    -
      -
    • - patches to be managed as branches, similar to GitHub PRs -
        -
      • - amendments to a proposal can be made by pushing a commit using git push - or - ngit push - rather than issuing a complete revision, which modifies the original - commits (still possible with - git push --force - or - ngit push --force - or - ngit send --in-reply-to nevent123...) -
      • -
      • - a proposal can be checked out as a branch which reflects the repo - state when the proposal was generated with pgp signatures intact -
          -
        • - there is less friction for reviewers with this model as they - don't have to deal with resolving conflicts as patches are - applied to the tip of the main branch. whereas maintainers, who - might be considering accepting the proposal right away, may find - it preferable to resolves conflicts as part of their review -
        • -
        -
      • -
      • author pgp signatures and original commit_ids can be retained
      • -
      • - features can be 'merged' using a 'merge commit' so that a series of - feature commits can remain distinct rather than each applied to the - main branch directly -
      • -
      -
    • -
    • - support multiple maintainers for a repository and a pathway to smoothly - transition maintainership when a maintainer moves on -
    • -
    • - ensure that users who have already cloned the repository dont get - scammed by someone else issuing a repository event, pretending to be the - maintainer, and directing users to a malicious git server -
        -
      • - ngit init - creates an optional - maintainers.yaml file - in the root of your repo that lists the authorized maintainers and - desired relays -
          -
        • - a fallback is used to prevent contributors from needing to know - the event id if a maintainer is not ready to add a nostr - specific file to the repository. ngit tags the earliest unique - commit id in the repo event. ngit defaults to using the most - recent repo event it finds with this tag. it also tags all - proposals with this id and when listing patches, and also - includes patches sent to other repo events with this id as it is - clearly intended for the same repo -
        • -
        -
      • -
      -
    • -
    - -

    FAQs

    - -

    - You're not replacing GitHub, you're still using GitHub as a git server -

    -

    - it is trivial to switch git servers as they all operate with the exact - same protocol. changing the social layer requires a social and UX shift - which can be challenging, disruptive and timeconsuming -

    - -

    Are you trying to replicate / replace Github?

    - -

    - no. GitHub is a very large product with a lot of features which don't meet - the goal of freedom tech code collaboration -

    -

    - we are specifically looking to address the needs of anarchic FOSS freedom - tech products -

    - -

    Enhancements

    - -

    - got ideas? please share them and lets explore as a community. here's three - to get you started: -

    -
      -
    • DVM to run CI pipelines? yes please
    • -
    • - services to enable merge directly from nostr events. hello! -
    • -
    • - repo event showing authoritive tip of main branch and referencing - multiple git_server mirrors? Hell yeah! -
    • -
    - - -
    -
    diff --git a/src/routes/concept/+page.svelte b/src/routes/concept/+page.svelte deleted file mode 100644 index 550853d..0000000 --- a/src/routes/concept/+page.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - - - GitCitadel: Concept - - - - {#await get_md()} -

    loading...

    - {:then md} -
    - -
    - {:catch error} - - {error.message} - - {/await} -
    diff --git a/src/routes/e/[nostr_ref]/+page.svelte b/src/routes/e/[nostr_ref]/+page.svelte deleted file mode 100644 index 8551798..0000000 --- a/src/routes/e/[nostr_ref]/+page.svelte +++ /dev/null @@ -1,113 +0,0 @@ - - - - GitCitadel - ngit - - -{#if error && waited} - - -
    Error! {error_msg}:
    -
    {data.nostr_ref}
    -
    -
    -{:else} - loading... -{/if} diff --git a/src/routes/e/[nostr_ref]/+page.ts b/src/routes/e/[nostr_ref]/+page.ts deleted file mode 100644 index ed86aa7..0000000 --- a/src/routes/e/[nostr_ref]/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { nostr_ref: string } }) => { - return { - nostr_ref: params.nostr_ref, - } -} diff --git a/src/routes/ngit/+page.svelte b/src/routes/ngit/+page.svelte deleted file mode 100644 index f6a513b..0000000 --- a/src/routes/ngit/+page.svelte +++ /dev/null @@ -1,142 +0,0 @@ - - - - GitCitadel - ngit - - - -
    -

    ngit

    -

    a command-line tool to send and review patches via nostr

    -
      -
    • - works seemlessly with gitcitadel.eu - -
    • -
    • fully compatable with nip34
    • -
    • - enables proposals to be managed as branches, similar to GitHub PRs via - optional nip34 -
    • -
    -

    ngit and gitcitadel.eu are new, experimental and in an alpha state.

    - - -

    Install

    - -

    Commands

    -

    run from the your product's git repository:

    -

    - ngit init - signal you are this repo's maintainer accepting proposals via nostr -

    - -

    - ngit send - issue commits as a proposal -

    -

    - ngit list - list proposals; checkout, apply or donwload selected -

    -

    and when on a proposal branch:

    -

    - ngit push - send proposal revision -

    -

    - ngit pull - fetch and apply new proposal commits / revisions linked to branch -

    -

    Protocol

    -

    - nip34 is a nostr protocol for sending git patches over - nostr, similar to how patches are sent via email which is a model used extensively - including in very large project such as the linux kernel -

    -

    ngit supports optional nip34 features to enable:

    -
      -
    • - patches managed as branches, similar to GitHub PRs -
        -
      • - maintain commit ids, pgp signed commits, enabling merge with commits - pgp signed by the author, amend commits -
      • -
      -
    • -
    • - multiple maintainers for a repository and a pathway to smoothly - transition maintainership when a maintainer moves on -
    • -
    • - ensure that user who have already cloned the repository dont get scammed - by someone else issuing a repository event, pretending to be the - maintainer, and directing users to a malicious git server -
        -
      • - ngit init - creates an optional - maintainers.yaml file - in the root of your repo that lists the authorised maintainers and desired - relays. -
      • -
      -
    • -
    -

    - learn more -

    -
    -
    diff --git a/src/routes/p/[npub]/+page.svelte b/src/routes/p/[npub]/+page.svelte deleted file mode 100644 index ad38b6c..0000000 --- a/src/routes/p/[npub]/+page.svelte +++ /dev/null @@ -1,58 +0,0 @@ - - - - GitCitadel - - -{#if error} - - -
    - Error! profile reference in URL is not a valid npub or nprofile:: -
    -
    {data.npub}
    -
    -
    -{:else if pubkey} - -
    - -
    - repoCollectionToSummary(c) || { ...summary_defaults } - )} - loading={false} - /> -
    -
    -{/if} diff --git a/src/routes/p/[npub]/+page.ts b/src/routes/p/[npub]/+page.ts deleted file mode 100644 index 32cf5b4..0000000 --- a/src/routes/p/[npub]/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { npub: string } }) => { - return { - npub: params.npub, - } -} diff --git a/src/routes/quick-start/+page.svelte b/src/routes/quick-start/+page.svelte deleted file mode 100644 index f8090ce..0000000 --- a/src/routes/quick-start/+page.svelte +++ /dev/null @@ -1,378 +0,0 @@ - - - - GitCitadel - ngit - - - -
    -

    Quick Start

    -

    pre-requesite: install ngit and git-remote-nostr

    - -
    -
    -
    - -
    -

    Contributor Quick Start

    -
    -
    -
    -

    - pre-requesite: install ngit and git-remote-nostr -

    -

    1. find repository

    -
      -
    • - browse gitcitadel.eu/repos for the repository -
    • -
    • explore proposals and issues
    • -
    • - copy the git clone url (or press the green clone button to copy - the clone command) -
    • -
    -

    2. clone repository

    -
      -
    • -
      - using your prefered git client or with the git command you - just copied: -
      -
      - git clone nostr://npub123/repo-identifier -
      -
    • -
    -

    3. submit proposal

    -
    -
      -
    • -
      -
      - push a branch with the prefix `pr/` for example using git - commands: -
      -
      -
      - git checkout -b pr/great-feature -
      -
      - git commit -am "improve - the world" -
      -
      - git push -u -
      -
      -
      -
    • -
    • -
      -
      - OR for more options such as including a cover letter use - ngit: -
      -
      -
      - ngit send -
      -
      -
      -
    • -
    -
    -

    4. view proposals

    -
    -
      -
    • -
      -
      - for open proposals view remote branches with prefix `pr/` - for example using git command: -
      -
      -
      - git branch -r --list - origin/pr/* -
      -
      -
      -
    • -
    • -
      -
      OR using ngit:
      -
      -
      - ngit list -
      -
      -
      -
    • -
    -
    -

    5. update proposal

    -
    -
      -
    • -
      -
      - if you are the proposal author, or a maintainer you can - add commits to a proposal: -
      -
      -
      - git commit -am "extra - thing" -
      -
      -
      -
      - git push -
      -
      -
      -
    • -
    • -
      -
      or revising it:
      -
      -
      - git commit -a -amend -
      -
      -
      -
      - git push --force -
      -
      -
      -
    • -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    -

    Maintainer Quick Start

    -
    -
    -
    -

    - pre-requesite: install ngit and git-remote-nostr -

    -

    1. create a git repo and push to a git server

    -
    -
      -
    • -
      -
      for example using git commands:
      -
      -
      - git init -
      -
      - git commit -am "initial - commit" -
      -
      - // create repository on git server and the: - -
      -
      - git remote add origin - https://dm.co/usr/my-repo.git -
      -
      - git push -u origin - master -
      -
      -
      -
    • -
    -
    -

    2. initialize on nostr

    -
    -
      -
    • -
      -
      initialize:
      -
      -
      - ngit init - -
      -
      -
      -
    • -
    • -
      -
      - use the nostr remote to push state to nostr and git - server(s): -
      -
      -
      - git remote - set-url origin nostr://npub123/my-repo -
      -
      -
      -
    • -
    • - ensure all maintainers push to the nostr remote and not git - server directly so that state on nostr remains in sync -
    • -
    -
    -

    3. view proposals

    -
    -
      -
    • -
      -
      - for open proposals view remote branches with prefix `pr/` - for example using git command: -
      -
      -
      - git branch -r --list - origin/pr/* -
      -
      -
      -
    • -
    • -
      -
      - OR using ngit with more options such as applying them - directly: -
      -
      -
      - ngit list -
      -
      -
      -
    • -
    -
    -

    4. merge / incorporate proposals

    -
    -
      -
    • -
      -
      - the proposal status will be automatically updated if you - merge the branch: -
      -
      -
      - git checkout master -
      -
      - git merge pr/great-feature(e8246b2) -
      -
      - git push -
      -
      -
      -
    • -
    • -
      -
      - use gitcitadel.eu to make comments or manually set the - status. -
      -
      -
      - ngit list -
      -
      -
      -
    • -
    -
    -

    5. consider turning off PRs and issues elsewhere

    -
    -
      -
    • - ie. on git server(s) so they are managed solely on nostr. -
    • -
    • - Note: for github use Repo Settings > Features for - issues but turning off PRs isn't yet possible. -
    • -
    -
    -
    -
    -
    -
    -
    -
    diff --git a/src/routes/r/[repo_naddr]/+page.svelte b/src/routes/r/[repo_naddr]/+page.svelte deleted file mode 100644 index 8adc371..0000000 --- a/src/routes/r/[repo_naddr]/+page.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - - - GitCitadel: {$selected_repo_event.name} - - - -
    -
    -

    README.md

    -
    -
    - {#if $selected_repo_readme.loading} -
    -
    -
    -
    -
    -
    - {:else if $selected_repo_readme.failed} -
    failed to load readme from git server...
    - {:else} -
    - -
    - {/if} -
    -
    -
    diff --git a/src/routes/r/[repo_naddr]/+page.ts b/src/routes/r/[repo_naddr]/+page.ts deleted file mode 100644 index 0f52eb4..0000000 --- a/src/routes/r/[repo_naddr]/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { repo_naddr: string } }) => { - return { - repo_naddr: params.repo_naddr, - } -} diff --git a/src/routes/r/[repo_naddr]/issues/+page.svelte b/src/routes/r/[repo_naddr]/issues/+page.svelte deleted file mode 100644 index 775fcb7..0000000 --- a/src/routes/r/[repo_naddr]/issues/+page.svelte +++ /dev/null @@ -1,93 +0,0 @@ - - - - GitCitadel: {$selected_repo_event.name} - issues - - - -
    -
    -
    -
    - - - -
    -
    -
    - -
    - {#if !$issue_summaries.loading && filtered.length === 0} -
    - can't find any {statusKindtoText(status, 'issue')} issues -
    - {:else} - - {/if} -
    -
    diff --git a/src/routes/r/[repo_naddr]/issues/+page.ts b/src/routes/r/[repo_naddr]/issues/+page.ts deleted file mode 100644 index 0f52eb4..0000000 --- a/src/routes/r/[repo_naddr]/issues/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { repo_naddr: string } }) => { - return { - repo_naddr: params.repo_naddr, - } -} diff --git a/src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.svelte b/src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.svelte deleted file mode 100644 index c71ca76..0000000 --- a/src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.svelte +++ /dev/null @@ -1,104 +0,0 @@ - - - - GitCitadel: {$selected_repo_event.name} - {$selected_issue_full.summary - .title} - - - - {#if invalid_issue_ref || (waited_5_secs && issue_error)} - - - {#if invalid_issue_ref} -
    Error! invalid Issue reference: {issue_id}
    -
    '{issue_nip19}'
    - {:else} -
    - Error! cannot find Issue {repo_error ? 'or repo ' : ''}event -
    - {/if} -
    -
    - {:else} - - -
    -
    -
    - {#if $selected_issue_full.issue_event} - - {/if} -
    -
    - -
    -
    - {/if} -
    diff --git a/src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.ts b/src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.ts deleted file mode 100644 index 7cee0d5..0000000 --- a/src/routes/r/[repo_naddr]/issues/[issue_nip19]/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const load = ({ - params, -}: { - params: { issue_nip19: string; repo_naddr: string } -}) => { - return { - repo_naddr: decodeURIComponent(params.repo_naddr), - issue_nip19: params.issue_nip19, - } -} diff --git a/src/routes/r/[repo_naddr]/issues/new/+page.svelte b/src/routes/r/[repo_naddr]/issues/new/+page.svelte deleted file mode 100644 index 601dd9a..0000000 --- a/src/routes/r/[repo_naddr]/issues/new/+page.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - - - GitCitadel: {$selected_repo_event.name} - new issue - - -{#if invalid_naddr || (waited_5_secs && $selected_repo_collection.loading && $selected_repo_event.name.length)} - - - {#if invalid_naddr} -
    Error! invalid naddr in url:
    -
    {repo_naddr}
    - {:else} -
    Error! cannot find repository event:
    -
    {repo_naddr}
    - {/if} -
    -
    -{:else} - - - -
    -
    -

    Create Issue

    - -
    - -
    -
    -{/if} diff --git a/src/routes/r/[repo_naddr]/issues/new/+page.ts b/src/routes/r/[repo_naddr]/issues/new/+page.ts deleted file mode 100644 index 0f52eb4..0000000 --- a/src/routes/r/[repo_naddr]/issues/new/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { repo_naddr: string } }) => { - return { - repo_naddr: params.repo_naddr, - } -} diff --git a/src/routes/r/[repo_naddr]/proposals/+page.svelte b/src/routes/r/[repo_naddr]/proposals/+page.svelte deleted file mode 100644 index f689e56..0000000 --- a/src/routes/r/[repo_naddr]/proposals/+page.svelte +++ /dev/null @@ -1,121 +0,0 @@ - - - - GitCitadel: {$selected_repo_event.name} - proposals - - - -
    -
    -
    - - - - -
    -
    - {#if filtered.length === 0} -
    - can't find any {statusKindtoText(status, 'proposal')} proposals -
    - {:else} - - {/if} -
    - -
    diff --git a/src/routes/r/[repo_naddr]/proposals/+page.ts b/src/routes/r/[repo_naddr]/proposals/+page.ts deleted file mode 100644 index 0f52eb4..0000000 --- a/src/routes/r/[repo_naddr]/proposals/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { repo_naddr: string } }) => { - return { - repo_naddr: params.repo_naddr, - } -} diff --git a/src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.svelte b/src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.svelte deleted file mode 100644 index 24825a2..0000000 --- a/src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.svelte +++ /dev/null @@ -1,104 +0,0 @@ - - - - GitCitadel: {$selected_repo_event.name} - {$selected_proposal_full.summary - .title} - - - - {#if invalid_proposal_ref || (waited_5_secs && proposal_error)} - - - {#if invalid_proposal_ref} -
    Error! invalid Issue reference: {proposal_id}
    -
    '{proposal_nip19}'
    - {:else} -
    - Error! cannot find Issue {repo_error ? 'or repo ' : ''}event -
    - {/if} -
    -
    - {:else} - - -
    -
    -
    - {#if $selected_proposal_full.proposal_event} - - {/if} -
    -
    - -
    -
    - {/if} -
    diff --git a/src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.ts b/src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.ts deleted file mode 100644 index b90979b..0000000 --- a/src/routes/r/[repo_naddr]/proposals/[proposal_nip19]/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const load = ({ - params, -}: { - params: { proposal_nip19: string; repo_naddr: string } -}) => { - return { - repo_naddr: decodeURIComponent(params.repo_naddr), - proposal_nip19: params.proposal_nip19, - } -} diff --git a/src/routes/repo/[repo_identifier]/+page.svelte b/src/routes/repo/[repo_identifier]/+page.svelte deleted file mode 100644 index 295d66d..0000000 --- a/src/routes/repo/[repo_identifier]/+page.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - - -
    - -
    -
    diff --git a/src/routes/repo/[repo_identifier]/+page.ts b/src/routes/repo/[repo_identifier]/+page.ts deleted file mode 100644 index 868a226..0000000 --- a/src/routes/repo/[repo_identifier]/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }: { params: { repo_identifier: string } }) => { - return { - repo_identifier: params.repo_identifier, - } -} diff --git a/src/routes/repo/[repo_identifier]/issue/[event_id]/+page.ts b/src/routes/repo/[repo_identifier]/issue/[event_id]/+page.ts deleted file mode 100644 index 677bea0..0000000 --- a/src/routes/repo/[repo_identifier]/issue/[event_id]/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from '@sveltejs/kit' - -export const load = ({ params }: { params: { event_id: string } }) => { - throw redirect(301, `/e/${params.event_id}`) -} diff --git a/src/routes/repo/[repo_identifier]/issues/+page.ts b/src/routes/repo/[repo_identifier]/issues/+page.ts deleted file mode 100644 index 4d5aebc..0000000 --- a/src/routes/repo/[repo_identifier]/issues/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from '@sveltejs/kit' - -export const load = ({ params }: { params: { repo_identifier: string } }) => { - throw redirect(301, `/repo/${params.repo_identifier}`) -} diff --git a/src/routes/repo/[repo_identifier]/proposal/[event_id]/+page.ts b/src/routes/repo/[repo_identifier]/proposal/[event_id]/+page.ts deleted file mode 100644 index 677bea0..0000000 --- a/src/routes/repo/[repo_identifier]/proposal/[event_id]/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from '@sveltejs/kit' - -export const load = ({ params }: { params: { event_id: string } }) => { - throw redirect(301, `/e/${params.event_id}`) -} diff --git a/src/routes/repo/[repo_identifier]/proposals/+page.ts b/src/routes/repo/[repo_identifier]/proposals/+page.ts deleted file mode 100644 index 4d5aebc..0000000 --- a/src/routes/repo/[repo_identifier]/proposals/+page.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { redirect } from '@sveltejs/kit' - -export const load = ({ params }: { params: { repo_identifier: string } }) => { - throw redirect(301, `/repo/${params.repo_identifier}`) -} diff --git a/src/routes/repos/+page.svelte b/src/routes/repos/+page.svelte deleted file mode 100644 index b2767e0..0000000 --- a/src/routes/repos/+page.svelte +++ /dev/null @@ -1,26 +0,0 @@ - - - - GitCitadel - Repos - - - -
    - repoEventToSummary(c) || { ...summary_defaults } - )} - group_by="name" - loading={$recent_repos.loading} - /> -
    -
    diff --git a/static/.well-known/nostr.json b/static/.well-known/nostr.json deleted file mode 100644 index 209d48b..0000000 --- a/static/.well-known/nostr.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "names": { - "GitCitadel": "846ebf79a0a8813274ec9727490621ad423f16a3e474d7fd66e6a98bfe4e39a4", - "gc": "846ebf79a0a8813274ec9727490621ad423f16a3e474d7fd66e6a98bfe4e39a4" - }, - "nip46": { - "846ebf79a0a8813274ec9727490621ad423f16a3e474d7fd66e6a98bfe4e39a4": [ - "wss://thecitadel.nostr1.com" - ] - } -} diff --git a/static/favicon.ico b/static/favicon.ico deleted file mode 100644 index a0b6ee59c133723778276a27ca18e3d5a60c8571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EW-cPl)Se<5!c6UQRN6 zInm(dZ0FZgOkb@|cz1r;*VngxFZ6$NdCj-)AO8OT|9_GHo3*L$U*G(_GWOm3hrd_G zy_;$O`r)ykJE}hZ`SovS)yJFLzyJRJ@5`${zkmF@x#Rn%XMc87eq8AHW@q)s&oBO* zob_d*{>#(zzD_iJxj69cm)C!fO!z!O@8z*6pN~!X^6L7pWf54#YzJGM;=g%*He|`V=^Yh-~ayp`M0I;!<#$5&o2DBCi&gE^!M821szu=S*6;Rz8+IbkL$HCLZF~s8Z z*-7ESha5y&cg|)}+Q~Li$+jgxbc$Tn@ut`fkN^Ldes|7-uSI2jm0Z#LH-EpKN&9Xg z^WV>b<3_LLgUVkUX9*vCDdajmSV8Re_d7yCp6_ang%vij*FTx)>vu@D;$!$d=e*+w zo*(D^S?k8FCvbld7m@P|LQGgU#H`%p9HyOW!k+b& zjalmJELH{6uVP8w`Ce%bv){cfss3BH{`SJ$YIX^O?+-I<|y7*3?zboz2pewo$rc@5_bX`I7{_ z6>dGR`n&Wdt2D!#r2p=}*y6UUAAJ2>I~5qbswJ)wB`Jv|saDBFsX&Us$iT=%*T7QO z$Rxzb(8|Ev%E(aLz`)ADU<>QM? diff --git a/static/icons/GitCitadel_Logo/GitCitadel.ico b/static/icons/GitCitadel_Logo/GitCitadel.ico deleted file mode 100644 index a0b6ee59c133723778276a27ca18e3d5a60c8571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EW-cPl)Se<5!c6UQRN6 zInm(dZ0FZgOkb@|cz1r;*VngxFZ6$NdCj-)AO8OT|9_GHo3*L$U*G(_GWOm3hrd_G zy_;$O`r)ykJE}hZ`SovS)yJFLzyJRJ@5`${zkmF@x#Rn%XMc87eq8AHW@q)s&oBO* zob_d*{>#(zzD_iJxj69cm)C!fO!z!O@8z*6pN~!X^6L7pWf54#YzJGM;=g%*He|`V=^Yh-~ayp`M0I;!<#$5&o2DBCi&gE^!M821szu=S*6;Rz8+IbkL$HCLZF~s8Z z*-7ESha5y&cg|)}+Q~Li$+jgxbc$Tn@ut`fkN^Ldes|7-uSI2jm0Z#LH-EpKN&9Xg z^WV>b<3_LLgUVkUX9*vCDdajmSV8Re_d7yCp6_ang%vij*FTx)>vu@D;$!$d=e*+w zo*(D^S?k8FCvbld7m@P|LQGgU#H`%p9HyOW!k+b& zjalmJELH{6uVP8w`Ce%bv){cfss3BH{`SJ$YIX^O?+-I<|y7*3?zboz2pewo$rc@5_bX`I7{_ z6>dGR`n&Wdt2D!#r2p=}*y6UUAAJ2>I~5qbswJ)wB`Jv|saDBFsX&Us$iT=%*T7QO z$Rxzb(8|Ev%E(aLz`)ADU<>QM? diff --git a/static/icons/GitCitadel_Logo/GitCitadel_Icon_Black.svg b/static/icons/GitCitadel_Logo/GitCitadel_Icon_Black.svg deleted file mode 100644 index 115c93b..0000000 --- a/static/icons/GitCitadel_Logo/GitCitadel_Icon_Black.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/icons/GitCitadel_Logo/GitCitadel_Icon_White.svg b/static/icons/GitCitadel_Logo/GitCitadel_Icon_White.svg deleted file mode 100644 index dacd627..0000000 --- a/static/icons/GitCitadel_Logo/GitCitadel_Icon_White.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/static/icons/GitCitadel_Logo/GitCitadel_Logo.png b/static/icons/GitCitadel_Logo/GitCitadel_Logo.png deleted file mode 100644 index 83c0a027053790e513e65882afce3aeeabef9a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75094 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 diff --git a/static/icons/GitCitadel_Logo/GitCitadel_PFP_Purple.png b/static/icons/GitCitadel_Logo/GitCitadel_PFP_Purple.png deleted file mode 100644 index 1f2fd551de2f43ba2208b688320edb7a66303e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8514 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 diff --git a/static/icons/icon-32x32.png b/static/icons/icon-32x32.png deleted file mode 100644 index a0b6ee59c133723778276a27ca18e3d5a60c8571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EW-cPl)Se<5!c6UQRN6 zInm(dZ0FZgOkb@|cz1r;*VngxFZ6$NdCj-)AO8OT|9_GHo3*L$U*G(_GWOm3hrd_G zy_;$O`r)ykJE}hZ`SovS)yJFLzyJRJ@5`${zkmF@x#Rn%XMc87eq8AHW@q)s&oBO* zob_d*{>#(zzD_iJxj69cm)C!fO!z!O@8z*6pN~!X^6L7pWf54#YzJGM;=g%*He|`V=^Yh-~ayp`M0I;!<#$5&o2DBCi&gE^!M821szu=S*6;Rz8+IbkL$HCLZF~s8Z z*-7ESha5y&cg|)}+Q~Li$+jgxbc$Tn@ut`fkN^Ldes|7-uSI2jm0Z#LH-EpKN&9Xg z^WV>b<3_LLgUVkUX9*vCDdajmSV8Re_d7yCp6_ang%vij*FTx)>vu@D;$!$d=e*+w zo*(D^S?k8FCvbld7m@P|LQGgU#H`%p9HyOW!k+b& zjalmJELH{6uVP8w`Ce%bv){cfss3BH{`SJ$YIX^O?+-I<|y7*3?zboz2pewo$rc@5_bX`I7{_ z6>dGR`n&Wdt2D!#r2p=}*y6UUAAJ2>I~5qbswJ)wB`Jv|saDBFsX&Us$iT=%*T7QO z$Rxzb(8|Ev%E(aLz`)ADU<>QM? diff --git a/static/icons/icon.svg b/static/icons/icon.svg deleted file mode 100644 index 5d19a98..0000000 --- a/static/icons/icon.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/static/manifest.json b/static/manifest.json deleted file mode 100644 index 5cdfa29..0000000 --- a/static/manifest.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "gitcitadel.eu", - "short_name": "GitCitadel", - "icons": [ - { - "src": "icons/icon-512x512.png?v=1", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/icon-192x192.png?v=1", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/icon-180x180.png?v=1", - "sizes": "180x180", - "type": "image/png" - }, - { - "src": "icons/icon-152x152.png?v=1", - "sizes": "152x152", - "type": "image/png" - }, - { - "src": "icons/icon-120x120.png?v=1", - "sizes": "120x120", - "type": "image/png" - }, - { - "src": "icons/icon-76x76.png?v=1", - "sizes": "76x76", - "type": "image/png" - }, - { - "src": "icons/icon-60x60.png?v=1", - "sizes": "60x60", - "type": "image/png" - }, - { - "src": "icons/icon-57x57.png?v=1", - "sizes": "57x57", - "type": "image/png" - }, - { - "src": "icons/icon-48x48.png?v=1", - "sizes": "48x48", - "type": "image/png" - }, - { - "src": "icons/icon-32x32.png?v=1", - "sizes": "32x32", - "type": "image/png" - }, - { - "src": "icons/icon-16x16.png?v=1", - "sizes": "16x16", - "type": "image/png" - } - ], - "start_url": "/", - "display": "standalone" -} diff --git a/svelte.config.js b/svelte.config.js deleted file mode 100644 index 3ab8b56..0000000 --- a/svelte.config.js +++ /dev/null @@ -1,16 +0,0 @@ -import adapter from '@sveltejs/adapter-static' -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - // Consult https://kit.svelte.dev/docs/integrations#preprocessors - // for more information about preprocessors - preprocess: vitePreprocess(), - kit: { - adapter: adapter({ - fallback: '404.html', - }), - }, -} - -export default config diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index d6aef2f..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,18 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -import typography from '@tailwindcss/typography' -import daisyui from 'daisyui' - -export default { - content: ['./src/**/*.{svelte,js,ts}'], - theme: { - extend: { - colors: { - 'base-400': '#16171e', - }, - }, - }, - plugins: [typography, daisyui], - daisyui: { - themes: ['forest'], - }, -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 91f6439..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "types": ["vitest/globals"] - }, - "include": ["*.config.*s", "src/**/*"] -} diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index dd1b8b7..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { sveltekit } from '@sveltejs/kit/vite' -import { defineConfig } from 'vite' - -export default defineConfig({ - plugins: [sveltekit()], -}) diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 61769ce..0000000 --- a/yarn.lock +++ /dev/null @@ -1,4416 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adobe/css-tools@^4.4.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz" - integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== - -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - -"@ampproject/remapping@^2.2.1": - version "2.3.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.10.4": - version "7.25.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz" - integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== - dependencies: - "@babel/highlight" "^7.25.7" - picocolors "^1.0.0" - -"@babel/helper-validator-identifier@^7.25.7": - version "7.25.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz" - integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== - -"@babel/highlight@^7.25.7": - version "7.25.7" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz" - integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== - dependencies: - "@babel/helper-validator-identifier" "^7.25.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.22.6": - version "7.25.7" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz" - integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w== - dependencies: - regenerator-runtime "^0.14.0" - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/linux-x64@0.23.1": - version "0.23.1" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz" - integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz" - integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== - -"@eslint/eslintrc@^1.0.5": - version "1.4.1" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.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" - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - 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" - -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== - -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== - dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - 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" - -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mdx-js/react@^3.0.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz" - integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== - dependencies: - "@types/mdx" "^2.0.0" - -"@noble/ciphers@^0.5.1": - version "0.5.3" - resolved "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz" - integrity sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w== - -"@noble/curves@^1.6.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz" - integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== - dependencies: - "@noble/hashes" "1.5.0" - -"@noble/curves@~1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz" - integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== - dependencies: - "@noble/hashes" "1.3.1" - -"@noble/curves@1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/hashes@^1.5.0", "@noble/hashes@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz" - integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== - -"@noble/hashes@~1.3.0": - version "1.3.3" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/hashes@~1.3.1": - version "1.3.3" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/hashes@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/secp256k1@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.1.0.tgz" - integrity sha512-XLEQQNdablO0XZOIniFQimiXsZDNwaYgL96dZwC54Q30imSbAOFf3NKtepc+cXyuZf5Q1HCgbqgZ2UFFuHVcEw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nostr-dev-kit/ndk-svelte@^2.2.18": - version "2.2.19" - resolved "https://registry.npmjs.org/@nostr-dev-kit/ndk-svelte/-/ndk-svelte-2.2.19.tgz" - integrity sha512-ZwTEX++ExjWD1Hklo2/kyWeF/YO2gstwnb13rRA1oQQSnmYJhm7kRAB6rANeU3vd70n9a1YPsjdvyfG3OiuUDA== - dependencies: - "@nostr-dev-kit/ndk" "2.10.1" - svelte "^4.2.1" - -"@nostr-dev-kit/ndk@^2.10.0", "@nostr-dev-kit/ndk@2.10.1": - version "2.10.1" - resolved "https://registry.npmjs.org/@nostr-dev-kit/ndk/-/ndk-2.10.1.tgz" - integrity sha512-DE4n+wLL8nzja9rwBC1yuDG+fE5aky/ByWQu9H+b8qsq5/iPokFaB87TUbdTMwSzP45qJTTRNVH95NsuXaoqig== - dependencies: - "@noble/curves" "^1.6.0" - "@noble/hashes" "^1.5.0" - "@noble/secp256k1" "^2.1.0" - "@scure/base" "^1.1.9" - debug "^4.3.6" - light-bolt11-decoder "^3.2.0" - nostr-tools "^2.7.1" - tseep "^1.2.2" - typescript-lru-cache "^2.0.0" - utf8-buffer "^1.0.0" - websocket-polyfill "^0.0.3" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.28" - resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz" - integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== - -"@rollup/rollup-linux-x64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz" - integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== - -"@scure/base@^1.1.9", "@scure/base@~1.1.0": - version "1.1.9" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz" - integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== - -"@scure/base@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== - -"@scure/bip32@1.3.1": - version "1.3.1" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz" - integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== - dependencies: - "@noble/curves" "~1.1.0" - "@noble/hashes" "~1.3.1" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - -"@storybook/addon-a11y@^8.3.2": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.3.6.tgz" - integrity sha512-EeVzUN+WaLtz/DXVBL3rIGvP8+pTuJXA3lEz9CbTQXRO7QMhzTTXLKmp8xmSA2w5H01a8XpjLcZ5LYjdKrvw0g== - dependencies: - "@storybook/addon-highlight" "8.3.6" - axe-core "^4.2.0" - -"@storybook/addon-actions@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.3.6.tgz" - integrity sha512-nOqgl0WoZK2KwjaABaXMoIgrIHOQl9inOzJvqQau0HOtsvnXGXYfJXYnpjZenoZDoZXKbUDl0U2haDFx2a2fJw== - dependencies: - "@storybook/global" "^5.0.0" - "@types/uuid" "^9.0.1" - dequal "^2.0.2" - polished "^4.2.2" - uuid "^9.0.0" - -"@storybook/addon-backgrounds@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.3.6.tgz" - integrity sha512-yBn+a8i5OJzJaX6Bx5MAkfei7c2nvq+RRmvuyvxw11rtDGR6Nz4OBBe56reWxo868wVUggpRTPJCMVe5tDYgVg== - dependencies: - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - ts-dedent "^2.0.0" - -"@storybook/addon-controls@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.3.6.tgz" - integrity sha512-9IMLHgtWPuFoRCt3hDsIk1FbkK5SlCMDW1DDwtTBIeWYYZLvptS42+vGVTeQ8v5SejmVzZkzuUdzu3p4sb3IcA== - dependencies: - "@storybook/global" "^5.0.0" - dequal "^2.0.2" - lodash "^4.17.21" - ts-dedent "^2.0.0" - -"@storybook/addon-docs@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.3.6.tgz" - integrity sha512-31Rk1TOhDIzGM2wNCUIB1xKuWtArW0D2Puua9warEXlQ3FtvwmxnPrwbIzw6ufYZDWPwl9phDYTcRh8WqZIoGg== - dependencies: - "@mdx-js/react" "^3.0.0" - "@storybook/blocks" "8.3.6" - "@storybook/csf-plugin" "8.3.6" - "@storybook/global" "^5.0.0" - "@storybook/react-dom-shim" "8.3.6" - "@types/react" "^16.8.0 || ^17.0.0 || ^18.0.0" - fs-extra "^11.1.0" - react "^16.8.0 || ^17.0.0 || ^18.0.0" - react-dom "^16.8.0 || ^17.0.0 || ^18.0.0" - rehype-external-links "^3.0.0" - rehype-slug "^6.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-essentials@^8.3.2": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.3.6.tgz" - integrity sha512-MQPFvThlGU7wlda1xhBPQCmDh90cSSZ31OsVs1uC5kJh0aLbY2gYXPurq1G54kzrYo8SMfBxsXrCplz8Ir6UTg== - dependencies: - "@storybook/addon-actions" "8.3.6" - "@storybook/addon-backgrounds" "8.3.6" - "@storybook/addon-controls" "8.3.6" - "@storybook/addon-docs" "8.3.6" - "@storybook/addon-highlight" "8.3.6" - "@storybook/addon-measure" "8.3.6" - "@storybook/addon-outline" "8.3.6" - "@storybook/addon-toolbars" "8.3.6" - "@storybook/addon-viewport" "8.3.6" - ts-dedent "^2.0.0" - -"@storybook/addon-highlight@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.3.6.tgz" - integrity sha512-A7uU+1OPVXGpkklEUJjSl2VEEDLCSNvmffUJlvW1GjajsNFIHOW2CSD+KnfFlQyPxyVbnWAYLqUP4XJxoqrvDw== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/addon-interactions@^8.3.2": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.3.6.tgz" - integrity sha512-Y0YUJj0oE1+6DFkaTPXM/8+dwTSoy0ltj2Sn2KOTJYzxKQYXBp8TlUv0QOQiGH7o/GKXIWek/VlTuvG/JEeiWw== - dependencies: - "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.3.6" - "@storybook/test" "8.3.6" - polished "^4.2.2" - ts-dedent "^2.2.0" - -"@storybook/addon-links@^8.3.2": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.3.6.tgz" - integrity sha512-EGEH/kEjndEldbqyiJ8XSASkxqwzL/lgA/+6mHpa6Ljxhk1s5IMGcdA1ymJYJ2BpNdkUxRj/uxAa38eGcQiJ/g== - dependencies: - "@storybook/csf" "^0.1.11" - "@storybook/global" "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-measure@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.3.6.tgz" - integrity sha512-VHWeGgYjhzhwb2WAqYW/qyEPqg5pwKR/XqFfd+3tEirUs/64olL1l3lzLwZ8Cm07cJ81T8Z4myywb9kObZfQlw== - dependencies: - "@storybook/global" "^5.0.0" - tiny-invariant "^1.3.1" - -"@storybook/addon-outline@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.3.6.tgz" - integrity sha512-+VXpM8SIHX2cn30qLlMvER9/6iioFRSn2sAfLniqy4RrcQmcMP+qgE7ZzbzExt7cneJh3VFsYqBS/HElu14Vgg== - dependencies: - "@storybook/global" "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-svelte-csf@^4.1.7": - version "4.1.7" - resolved "https://registry.npmjs.org/@storybook/addon-svelte-csf/-/addon-svelte-csf-4.1.7.tgz" - integrity sha512-gMyk6Fz2PPff8zb52giSAJGSZkd/+mmA25m/ORlxMKrwp6WhB+4dcVB8RtexndCvZrSts0rzVH8Nd9c9lBCGpQ== - dependencies: - "@babel/runtime" "^7.22.6" - "@storybook/types" "^8.0.0" - dedent "^1.2.0" - magic-string "^0.30.1" - -"@storybook/addon-toolbars@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.3.6.tgz" - integrity sha512-FJH+lRoZXENfpMR/G09ZqB0TmL/k6bv07GN1ysoVs420tKRgjfz6uXaZz5COrhcdISr5mTNmG+mw9x7xXTfX3Q== - -"@storybook/addon-viewport@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.3.6.tgz" - integrity sha512-bL51v837W1cng/+0pypkoLsWKWmvux96zLOzqLCpcWAQ4OSMhW3foIWpCiFwMG/KY+GanoOocTx6i7j5hLtuTA== - dependencies: - memoizerific "^1.11.3" - -"@storybook/blocks@^8.3.2", "@storybook/blocks@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.3.6.tgz" - integrity sha512-Oc5jU6EzfsENjrd91KcKyEKBh60RT+8uyLi1RIrymC2C/mzZMTEoNIrbnQt0eIqbjlHxn6y9JMJxHu4NJ4EmZg== - dependencies: - "@storybook/csf" "^0.1.11" - "@storybook/global" "^5.0.0" - "@storybook/icons" "^1.2.10" - "@types/lodash" "^4.14.167" - color-convert "^2.0.1" - dequal "^2.0.2" - lodash "^4.17.21" - markdown-to-jsx "^7.4.5" - memoizerific "^1.11.3" - polished "^4.2.2" - react-colorful "^5.1.2" - telejson "^7.2.0" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/builder-vite@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.3.6.tgz" - integrity sha512-AF4+oFe1mvIHrLvaYsv8B0YSlXQtSlKTKwrXnUbcAbeGRwMmFKA1t3VyAcXV0yB9MtZ8YJsA/uKRkgGEaN7wJQ== - dependencies: - "@storybook/csf-plugin" "8.3.6" - "@types/find-cache-dir" "^3.2.1" - browser-assert "^1.2.1" - es-module-lexer "^1.5.0" - express "^4.19.2" - find-cache-dir "^3.0.0" - fs-extra "^11.1.0" - magic-string "^0.30.0" - ts-dedent "^2.0.0" - -"@storybook/components@^8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/components/-/components-8.3.6.tgz" - integrity sha512-TXuoGZY7X3iixF45lXkYOFk8k2q9OHcqHyHyem1gATLLQXgyOvDgzm+VB7uKBNzssRQPEE+La70nfG8bq/viRw== - -"@storybook/core@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/core/-/core-8.3.6.tgz" - integrity sha512-frwfgf0EJ7QL29DWZ5bla/g0eOOWqJGd14t+VUBlpP920zB6sdDfo7+p9JoCjD9u08lGeFDqbPNKayUk+0qDag== - dependencies: - "@storybook/csf" "^0.1.11" - "@types/express" "^4.17.21" - better-opn "^3.0.2" - browser-assert "^1.2.1" - esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0" - esbuild-register "^3.5.0" - express "^4.19.2" - jsdoc-type-pratt-parser "^4.0.0" - process "^0.11.10" - recast "^0.23.5" - semver "^7.6.2" - util "^0.12.5" - ws "^8.2.3" - -"@storybook/csf-plugin@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.3.6.tgz" - integrity sha512-TJyJPFejO6Gyr3+bXqE/+LomQbivvfHEbee/GwtlRj0XF4KQlqnvuEdEdcK25JbD0NXT8AbyncEUmjoxE7ojQw== - dependencies: - unplugin "^1.3.1" - -"@storybook/csf@^0.1.11": - version "0.1.11" - resolved "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz" - integrity sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg== - dependencies: - type-fest "^2.19.0" - -"@storybook/global@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz" - integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== - -"@storybook/icons@^1.2.10": - version "1.2.12" - resolved "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.12.tgz" - integrity sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q== - -"@storybook/instrumenter@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.3.6.tgz" - integrity sha512-0RowbKwoB/s7rtymlnKNiyWN1Z3ZK5mwgzVjlRmzxDL8hrdi5KDjTNExuJTRR3ZaBP2RR0/I3m/n0p9JhHAZvg== - dependencies: - "@storybook/global" "^5.0.0" - "@vitest/utils" "^2.0.5" - util "^0.12.4" - -"@storybook/manager-api@^8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.3.6.tgz" - integrity sha512-Xt5VFZcL+G/9uzaHjzWFhxRNrP+4rPhSRKEvCZorAbC9+Hv+ZDs1JSZS5wMb4WKpXBZ0rwDVOLwngqbVtfRHuQ== - -"@storybook/preview-api@^8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.3.6.tgz" - integrity sha512-/Wxvb7wbI2O2iH63arRQQyyojA630vibdshkFjuC/u1nYdptEV1jkxa0OYmbZbKCn4/ze6uH4hfsKOpDPV9SWg== - -"@storybook/react-dom-shim@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.3.6.tgz" - integrity sha512-9BO6VXIdli4GHSfiP/Z0gwAf7oQig3D/yWK2U1+91UWDV8nIAgnNBAi76U4ORC6MiK5MdkDfIikIxnLLeLnahA== - -"@storybook/svelte-vite@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-8.3.6.tgz" - integrity sha512-XeHo8hyqPs9YX/MWcqh9mdlSYYy5rwuOKEu5eDlIQeG/3VkHSklFyiIAiJ41fNSlYXYGTguahqIrinHB3cCCsw== - dependencies: - "@storybook/builder-vite" "8.3.6" - "@storybook/svelte" "8.3.6" - magic-string "^0.30.0" - svelte-preprocess "^5.1.1" - sveltedoc-parser "^4.2.1" - ts-dedent "^2.2.0" - -"@storybook/svelte@^7.0.0 || ^8.0.0 || ^8.0.0-beta.0 || ^8.2.0-beta.0", "@storybook/svelte@^8.3.2", "@storybook/svelte@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/svelte/-/svelte-8.3.6.tgz" - integrity sha512-8rIj5nJbZWqT4ZGklp/CI821bWKyFvMsa3VMWO1i5scWjEXV6ga97agYV6tefQ4Zqc0IZdvTyOrW76sjoRawjw== - dependencies: - "@storybook/components" "^8.3.6" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "^8.3.6" - "@storybook/preview-api" "^8.3.6" - "@storybook/theming" "^8.3.6" - sveltedoc-parser "^4.2.1" - ts-dedent "^2.0.0" - type-fest "~2.19" - -"@storybook/sveltekit@^8.3.2": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-8.3.6.tgz" - integrity sha512-Jce2BbM6fWs/gm2l8qTzeU4y7CXh3ACVEl2QMtJKkyTPxR9entzzIDoQrX5TF4lYhXzYvGTHCudU70iTSTarCA== - dependencies: - "@storybook/addon-actions" "8.3.6" - "@storybook/builder-vite" "8.3.6" - "@storybook/svelte" "8.3.6" - "@storybook/svelte-vite" "8.3.6" - -"@storybook/test@8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/test/-/test-8.3.6.tgz" - integrity sha512-WIc8LzK9jaEw+e3OiweEM2j3cppPzsWod59swuf6gDBf176EQLIyjtVc+Kh3qO4NNkcL+lwmqaLPjOxlBLaDbg== - dependencies: - "@storybook/csf" "^0.1.11" - "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.3.6" - "@testing-library/dom" "10.4.0" - "@testing-library/jest-dom" "6.5.0" - "@testing-library/user-event" "14.5.2" - "@vitest/expect" "2.0.5" - "@vitest/spy" "2.0.5" - util "^0.12.4" - -"@storybook/theming@^8.3.6": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/theming/-/theming-8.3.6.tgz" - integrity sha512-LQjUk6GXRW9ELkoBKuqzQKFUW+ajfGPfVELcfs3/VQX61VhthJ4olov4bGPc04wsmmFMgN/qODxT485IwOHfPQ== - -"@storybook/types@^8.0.0": - version "8.3.6" - resolved "https://registry.npmjs.org/@storybook/types/-/types-8.3.6.tgz" - integrity sha512-EY+bjIxxmKkFrL7CyDQb3EXbmy0+Y9OieaPrNNM7QXTfGgp81lXhfqMX3HLMMjplk+rcxVJLyzXSBx0nIn91fQ== - -"@sveltejs/adapter-static@^3.0.5": - version "3.0.5" - resolved "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.5.tgz" - integrity sha512-kFJR7RxeB6FBvrKZWAEzIALatgy11ISaaZbcPup8JdWUdrmmfUHHTJ738YHJTEfnCiiXi6aX8Q6ePY7tnSMD6Q== - -"@sveltejs/kit@^2.0.0", "@sveltejs/kit@^2.5.28": - version "2.7.2" - resolved "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.7.2.tgz" - integrity sha512-bFwrl+0bNr0/DHQZM0INwwSPNYqDjfsKRhUoa6rj9d8tDZzszBrJ3La6/HVFxWGONEigtG+SzHXa1BEa1BLdwA== - dependencies: - "@types/cookie" "^0.6.0" - cookie "^0.6.0" - devalue "^5.1.0" - esm-env "^1.0.0" - import-meta-resolve "^4.1.0" - kleur "^4.1.5" - magic-string "^0.30.5" - mrmime "^2.0.0" - sade "^1.8.1" - set-cookie-parser "^2.6.0" - sirv "^3.0.0" - tiny-glob "^0.2.9" - -"@sveltejs/vite-plugin-svelte-inspector@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz" - integrity sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg== - dependencies: - debug "^4.3.4" - -"@sveltejs/vite-plugin-svelte@^2.0.0 || ^3.0.0", "@sveltejs/vite-plugin-svelte@^3.0.0", "@sveltejs/vite-plugin-svelte@^3.0.0 || ^4.0.0-next.1", "@sveltejs/vite-plugin-svelte@^3.1.2": - version "3.1.2" - resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.2.tgz" - integrity sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA== - dependencies: - "@sveltejs/vite-plugin-svelte-inspector" "^2.1.0" - debug "^4.3.4" - deepmerge "^4.3.1" - kleur "^4.1.5" - magic-string "^0.30.10" - svelte-hmr "^0.16.0" - vitefu "^0.2.5" - -"@tailwindcss/typography@^0.5.15": - version "0.5.15" - resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz" - integrity sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA== - dependencies: - lodash.castarray "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - postcss-selector-parser "6.0.10" - -"@testing-library/dom@>=7.21.4", "@testing-library/dom@10.4.0": - version "10.4.0" - resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz" - integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.3.0" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@6.5.0": - version "6.5.0" - resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz" - integrity sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA== - dependencies: - "@adobe/css-tools" "^4.4.0" - aria-query "^5.0.0" - chalk "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.6.3" - lodash "^4.17.21" - redent "^3.0.0" - -"@testing-library/user-event@14.5.2": - version "14.5.2" - resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz" - integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== - -"@types/aria-query@^5.0.1": - version "5.0.4" - resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz" - integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cookie@^0.6.0": - version "0.6.0" - resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz" - integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== - -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.1", "@types/estree@1.0.6": - version "1.0.6" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/express-serve-static-core@^4.17.33": - 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== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.21": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/find-cache-dir@^3.2.1": - version "3.2.1" - resolved "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz" - integrity sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw== - -"@types/hast@^3.0.0": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/lodash@^4.14.167": - version "4.17.12" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.12.tgz" - integrity sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ== - -"@types/marked@^5.0.1": - version "5.0.2" - resolved "https://registry.npmjs.org/@types/marked/-/marked-5.0.2.tgz" - integrity sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg== - -"@types/mdx@^2.0.0": - version "2.0.13" - resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz" - integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node@*", "@types/node@^18.0.0 || >=20.0.0": - version "22.7.8" - resolved "https://registry.npmjs.org/@types/node/-/node-22.7.8.tgz" - integrity sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg== - dependencies: - undici-types "~6.19.2" - -"@types/prop-types@*": - version "15.7.13" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz" - integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== - -"@types/pug@^2.0.6": - version "2.0.10" - resolved "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz" - integrity sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== - -"@types/qs@*": - version "6.9.16" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== - -"@types/ramda@^0.30.2": - version "0.30.2" - resolved "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.2.tgz" - integrity sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA== - dependencies: - types-ramda "^0.30.1" - -"@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== - -"@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@>=16": - version "18.3.11" - resolved "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz" - integrity sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.7" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== - -"@types/uuid@^9.0.1": - version "9.0.8" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== - -"@typescript-eslint/eslint-plugin@^8.6.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz" - integrity sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.11.0" - "@typescript-eslint/type-utils" "8.11.0" - "@typescript-eslint/utils" "8.11.0" - "@typescript-eslint/visitor-keys" "8.11.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@^8.6.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz" - integrity sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg== - dependencies: - "@typescript-eslint/scope-manager" "8.11.0" - "@typescript-eslint/types" "8.11.0" - "@typescript-eslint/typescript-estree" "8.11.0" - "@typescript-eslint/visitor-keys" "8.11.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@8.11.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz" - integrity sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ== - dependencies: - "@typescript-eslint/types" "8.11.0" - "@typescript-eslint/visitor-keys" "8.11.0" - -"@typescript-eslint/type-utils@8.11.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz" - integrity sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg== - dependencies: - "@typescript-eslint/typescript-estree" "8.11.0" - "@typescript-eslint/utils" "8.11.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" - -"@typescript-eslint/types@8.11.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz" - integrity sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw== - -"@typescript-eslint/typescript-estree@8.11.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz" - integrity sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg== - dependencies: - "@typescript-eslint/types" "8.11.0" - "@typescript-eslint/visitor-keys" "8.11.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 "^1.3.0" - -"@typescript-eslint/utils@8.11.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz" - integrity sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.11.0" - "@typescript-eslint/types" "8.11.0" - "@typescript-eslint/typescript-estree" "8.11.0" - -"@typescript-eslint/visitor-keys@8.11.0": - version "8.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz" - integrity sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw== - dependencies: - "@typescript-eslint/types" "8.11.0" - eslint-visitor-keys "^3.4.3" - -"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@vitest/expect@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz" - integrity sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA== - dependencies: - "@vitest/spy" "2.0.5" - "@vitest/utils" "2.0.5" - chai "^5.1.1" - tinyrainbow "^1.2.0" - -"@vitest/expect@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz" - integrity sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ== - dependencies: - "@vitest/spy" "2.1.3" - "@vitest/utils" "2.1.3" - chai "^5.1.1" - tinyrainbow "^1.2.0" - -"@vitest/mocker@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.3.tgz" - integrity sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ== - dependencies: - "@vitest/spy" "2.1.3" - estree-walker "^3.0.3" - magic-string "^0.30.11" - -"@vitest/pretty-format@^2.1.3", "@vitest/pretty-format@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz" - integrity sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ== - dependencies: - tinyrainbow "^1.2.0" - -"@vitest/pretty-format@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz" - integrity sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ== - dependencies: - tinyrainbow "^1.2.0" - -"@vitest/runner@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.3.tgz" - integrity sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ== - dependencies: - "@vitest/utils" "2.1.3" - pathe "^1.1.2" - -"@vitest/snapshot@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.3.tgz" - integrity sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg== - dependencies: - "@vitest/pretty-format" "2.1.3" - magic-string "^0.30.11" - pathe "^1.1.2" - -"@vitest/spy@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz" - integrity sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA== - dependencies: - tinyspy "^3.0.0" - -"@vitest/spy@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.3.tgz" - integrity sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ== - dependencies: - tinyspy "^3.0.0" - -"@vitest/utils@^2.0.5", "@vitest/utils@2.1.3": - version "2.1.3" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz" - integrity sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA== - dependencies: - "@vitest/pretty-format" "2.1.3" - loupe "^3.1.1" - tinyrainbow "^1.2.0" - -"@vitest/utils@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz" - integrity sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ== - dependencies: - "@vitest/pretty-format" "2.0.5" - estree-walker "^3.0.3" - loupe "^3.1.1" - tinyrainbow "^1.2.0" - -accepts@~1.3.8: - 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== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.10.0, acorn@^8.12.1, acorn@^8.6.0, acorn@^8.9.0: - version "8.13.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ansi-colors@^4.1.1: - 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== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - 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" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.0.0, aria-query@^5.3.0, aria-query@5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -assertion-error@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz" - integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== - -ast-types@^0.16.1: - version "0.16.1" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz" - integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== - dependencies: - tslib "^2.0.1" - -autoprefixer@^10.4.20: - version "10.4.20" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== - dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.1" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.7: - 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== - dependencies: - possible-typed-array-names "^1.0.0" - -axe-core@^4.2.0: - version "4.10.1" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.10.1.tgz" - integrity sha512-qPC9o+kD8Tir0lzNGLeghbOrWMr3ZJpaRlCIb6Uobt/7N4FiEDvqUMnxzCHRHmg8vOg14kr5gVNyScRmbMaJ9g== - -axobject-query@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz" - integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -better-opn@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz" - integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== - dependencies: - open "^8.0.4" - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -body-parser@1.20.3: - 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== - 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" - -brace-expansion@^1.1.7: - 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" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browser-assert@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz" - integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== - -browserslist@^4.23.3, "browserslist@>= 4.21.0": - version "4.24.2" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz" - integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== - dependencies: - caniuse-lite "^1.0.30001669" - electron-to-chromium "^1.5.41" - node-releases "^2.0.18" - update-browserslist-db "^1.1.1" - -buffer-crc32@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz" - integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== - -bufferutil@^4.0.1: - version "4.0.8" - resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" - integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== - dependencies: - node-gyp-build "^4.3.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -call-bind@^1.0.2, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-css@^2.0.1: - 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== - -caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: - version "1.0.30001669" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz" - integrity sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w== - -chai@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz" - integrity sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA== - dependencies: - assertion-error "^2.0.1" - check-error "^2.1.1" - deep-eql "^5.0.1" - loupe "^3.1.0" - pathval "^2.0.0" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-error@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz" - integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== - -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - 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" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz" - integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== - dependencies: - readdirp "^4.0.1" - -code-red@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz" - integrity sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - "@types/estree" "^1.0.1" - acorn "^8.10.0" - estree-walker "^3.0.3" - periscopic "^3.1.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-selector-tokenizer@^0.8: - version "0.8.0" - resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz" - integrity sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - -css-tree@^2.3.1: - 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== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -culori@^3: - version "3.3.0" - resolved "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz" - integrity sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ== - -d@^1.0.1, d@^1.0.2, d@1: - version "1.0.2" - resolved "https://registry.npmjs.org/d/-/d-1.0.2.tgz" - integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== - dependencies: - es5-ext "^0.10.64" - type "^2.7.2" - -daisyui@^4.12.10: - version "4.12.13" - resolved "https://registry.npmjs.org/daisyui/-/daisyui-4.12.13.tgz" - integrity sha512-BnXyQoOByUF/7wSdIKubyhXxbtL8gxwY3u2cNMkxGP39TSVJqMmlItqtpY903fQnLI/NokC+bc+ZV+PEPsppPw== - dependencies: - css-selector-tokenizer "^0.8" - culori "^3" - picocolors "^1" - postcss-js "^4" - -dayjs@^1.11.13: - version "1.11.13" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" - integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== - -debug@^2.2.0: - 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" - -debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6: - version "4.3.7" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -debug@2.6.9: - 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" - -dedent@^1.2.0: - version "1.5.3" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-eql@^5.0.1: - version "5.0.2" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz" - integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== - -deep-is@^0.1.3: - 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== - -deepmerge@^4.3.1: - 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== - -define-data-property@^1.1.4: - 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== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.2, dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -devalue@^5.1.0: - version "5.1.1" - resolved "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz" - integrity sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw== - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - -dom-accessibility-api@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz" - integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - -domhandler@^4.2.0: - version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.0.0: - version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.41: - version "1.5.42" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.42.tgz" - integrity sha512-gIfKavKDw1mhvic9nbzA5lZw8QSHpdMwLwXc0cWidQz9B15pDoDdDH4boIatuFfeoCatb3a/NGL6CYRVFxGZ9g== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.5.0: - version "1.5.4" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== - -es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.63, es5-ext@^0.10.64, es5-ext@~0.10.14: - version "0.10.64" - resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz" - integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^3.1.2: - version "3.3.1" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz" - integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.4" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz" - integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== - dependencies: - d "^1.0.2" - ext "^1.7.0" - -esbuild-register@^3.5.0: - version "3.6.0" - resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz" - integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg== - dependencies: - debug "^4.3.4" - -"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0", "esbuild@>=0.12 <1": - version "0.23.1" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz" - integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.23.1" - "@esbuild/android-arm" "0.23.1" - "@esbuild/android-arm64" "0.23.1" - "@esbuild/android-x64" "0.23.1" - "@esbuild/darwin-arm64" "0.23.1" - "@esbuild/darwin-x64" "0.23.1" - "@esbuild/freebsd-arm64" "0.23.1" - "@esbuild/freebsd-x64" "0.23.1" - "@esbuild/linux-arm" "0.23.1" - "@esbuild/linux-arm64" "0.23.1" - "@esbuild/linux-ia32" "0.23.1" - "@esbuild/linux-loong64" "0.23.1" - "@esbuild/linux-mips64el" "0.23.1" - "@esbuild/linux-ppc64" "0.23.1" - "@esbuild/linux-riscv64" "0.23.1" - "@esbuild/linux-s390x" "0.23.1" - "@esbuild/linux-x64" "0.23.1" - "@esbuild/netbsd-x64" "0.23.1" - "@esbuild/openbsd-arm64" "0.23.1" - "@esbuild/openbsd-x64" "0.23.1" - "@esbuild/sunos-x64" "0.23.1" - "@esbuild/win32-arm64" "0.23.1" - "@esbuild/win32-ia32" "0.23.1" - "@esbuild/win32-x64" "0.23.1" - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-compat-utils@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz" - integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q== - dependencies: - semver "^7.5.4" - -eslint-config-prettier@*, eslint-config-prettier@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -eslint-plugin-prettier@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz" - integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.9.1" - -eslint-plugin-svelte@^2.44.0: - version "2.46.0" - resolved "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.0.tgz" - integrity sha512-1A7iEMkzmCZ9/Iz+EAfOGYL8IoIG6zeKEq1SmpxGeM5SXmoQq+ZNnCpXFVJpsxPWYx8jIVGMerQMzX20cqUl0g== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@jridgewell/sourcemap-codec" "^1.4.15" - eslint-compat-utils "^0.5.1" - esutils "^2.0.3" - known-css-properties "^0.35.0" - postcss "^8.4.38" - postcss-load-config "^3.1.4" - postcss-safe-parser "^6.0.0" - postcss-selector-parser "^6.1.0" - semver "^7.6.2" - svelte-eslint-parser "^0.43.0" - -eslint-scope@^7.1.0, eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - 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== - -"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0-0 || ^9.0.0-0", eslint@^8.0.0, "eslint@^8.57.0 || ^9.0.0", eslint@>=5, eslint@>=6.0.0, eslint@>=7.0.0, eslint@>=8.0.0: - version "8.57.1" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" - "@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" - -eslint@8.4.1: - version "8.4.1" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.4.1.tgz" - integrity sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg== - dependencies: - "@eslint/eslintrc" "^1.0.5" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.0" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.1.0" - espree "^9.2.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.2.0" - semver "^7.2.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esm-env@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz" - integrity sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA== - -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - -espree@^9.2.0, espree@9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz" - integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== - dependencies: - acorn "^8.6.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.1.0" - -espree@^9.4.0: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0, esquery@^1.4.2: - version "1.6.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^3.0.0, estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2, esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -express@^4.19.2: - version "4.21.1" - resolved "https://registry.npmjs.org/express/-/express-4.21.1.tgz" - integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== - 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.10" - 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" - -ext@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.3.0, fast-glob@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - 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" - -fast-json-stable-stringify@^2.0.0: - 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== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fdir@^6.2.0: - version "6.4.2" - resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz" - integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== - 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" - -find-cache-dir@^3.0.0: - version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^11.1.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -functional-red-black-tree@^1.0.1: - 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== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - 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" - -github-slugger@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz" - integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1, glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^10.3.10: - version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - 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" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -globals@^13.19.0, globals@^13.6.0: - version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - 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== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.0, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hast-util-heading-rank@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz" - integrity sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-element@^3.0.0: - 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== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-to-string@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz" - integrity sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A== - dependencies: - "@types/hast" "^3.0.0" - -highlight.js@^11.10.0: - version "11.10.0" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz" - integrity sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ== - -htmlparser2-svelte@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/htmlparser2-svelte/-/htmlparser2-svelte-4.1.0.tgz" - integrity sha512-+4f4RBFz7Rj2Hp0ZbFbXC+Kzbd6S9PgjiuFtdT76VMNgKogrEZy0pG2UrPycPbrZzVEIM5lAT3lAdkSTCHLPjg== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-meta-resolve@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz" - integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.3, inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - 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== - -is-absolute-url@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz" - integrity sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - 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@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - 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== - -is-reference@^3.0.0, is-reference@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz" - integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - dependencies: - "@types/estree" "*" - -is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jiti@^1.21.0: - version "1.21.6" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdoc-type-pratt-parser@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz" - integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - 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== - -json-stable-stringify-without-jsonify@^1.0.1: - 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== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -known-css-properties@^0.35.0: - version "0.35.0" - resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz" - integrity sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -light-bolt11-decoder@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/light-bolt11-decoder/-/light-bolt11-decoder-3.2.0.tgz" - integrity sha512-3QEofgiBOP4Ehs9BI+RkZdXZNtSys0nsJ6fyGeSiAGCBsMwHGUDS/JQlY/sTnWs91A2Nh0S9XXfA8Sy9g6QpuQ== - dependencies: - "@scure/base" "1.1.1" - -lilconfig@^2.0.5, lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lilconfig@^3.0.0: - version "3.1.2" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-character@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz" - integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.castarray@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz" - integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loupe@^3.1.0, loupe@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz" - integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== - -lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - -magic-string@^0.30.0, magic-string@^0.30.1, magic-string@^0.30.10, magic-string@^0.30.11, magic-string@^0.30.4, magic-string@^0.30.5: - version "0.30.12" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz" - integrity sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -make-dir@^3.0.2: - 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== - dependencies: - semver "^6.0.0" - -map-or-similar@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz" - integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== - -markdown-to-jsx@^7.4.5: - version "7.5.0" - resolved "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz" - integrity sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw== - -marked@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz" - integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memoizerific@^1.11.3: - version "1.11.3" - resolved "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz" - integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== - dependencies: - map-or-similar "^1.5.0" - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.8" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@~2.1.24, mime-types@~2.1.34: - 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" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -node-gyp-build@^4.3.0: - version "4.8.2" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz" - integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== - -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -nostr-tools@^2.7.1, nostr-tools@^2.7.2: - version "2.8.1" - resolved "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.8.1.tgz" - integrity sha512-lInnbSjtBHviiEpxRt4rV73XdC9lMUuaMkvsiNVpIboGwebP19w4NOx91QRfupczGTSiKxV5X3GzxRr3IvHuCw== - dependencies: - "@noble/ciphers" "^0.5.1" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.1" - "@scure/base" "1.1.1" - "@scure/bip32" "1.3.1" - "@scure/bip39" "1.2.1" - optionalDependencies: - nostr-wasm v0.1.0 - -nostr-wasm@v0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/nostr-wasm/-/nostr-wasm-0.1.0.tgz" - integrity sha512-78BTryCLcLYv96ONU8Ws3Q1JzjlAt+43pWQhIl86xZmWeegYCNLPml7yQ+gG3vR6V5h4XGj+TxO+SS5dsThQIA== - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -open@^8.0.4: - version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1, optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - 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== - dependencies: - p-limit "^3.0.2" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json-from-dist@^1.0.0: - 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== - -parent-module@^1.0.0: - 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== - dependencies: - callsites "^3.0.0" - -parse-diff@^0.11.1: - version "0.11.1" - resolved "https://registry.npmjs.org/parse-diff/-/parse-diff-0.11.1.tgz" - integrity sha512-Oq4j8LAOPOcssanQkIjxosjATBIEJhCxMCxPhMu+Ci4wdNmAEdx0O+a7gzbR2PyKXgKPvRLIN5g224+dJAsKHA== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== - -pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathval@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz" - integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== - -periscopic@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@^1, picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -"picomatch@^3 || ^4": - version "4.0.2" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -polished@^4.2.2: - version "4.3.1" - resolved "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz" - integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== - dependencies: - "@babel/runtime" "^7.17.8" - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4, postcss-js@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" - integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== - dependencies: - camelcase-css "^2.0.1" - -"postcss-load-config@^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - -postcss-nested@^6.0.1: - version "6.2.0" - resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz" - integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== - dependencies: - postcss-selector-parser "^6.1.1" - -postcss-safe-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz" - integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== - -postcss-scss@^4.0.9: - version "4.0.9" - resolved "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz" - integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== - -postcss-selector-parser@^6.0.11: - 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== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.1.0: - 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== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.1.1: - 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== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@6.0.10: - version "6.0.10" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -"postcss@^7 || ^8", postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.3.3, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.29, postcss@^8.4.38, postcss@^8.4.39, postcss@^8.4.43, postcss@^8.4.47, postcss@>=8.0.9: - version "8.4.47" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.0" - source-map-js "^1.2.1" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier-plugin-svelte@*, prettier-plugin-svelte@^3.2.6: - version "3.2.7" - resolved "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.7.tgz" - integrity sha512-/Dswx/ea0lV34If1eDcG3nulQ63YNr5KPDfMsjbdtpSWOxKKJ7nAc2qlVuYwEvCr4raIuredNoR7K4JCkmTGaQ== - -prettier-plugin-tailwindcss@^0.6.6: - version "0.6.8" - resolved "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz" - integrity sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA== - -prettier@^3.0, prettier@^3.0.0, prettier@^3.3.3, prettier@>=3.0.0: - version "3.3.3" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== - -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -proxy-addr@~2.0.7: - 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== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -ramda@^0.30.1: - version "0.30.1" - resolved "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz" - integrity sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - 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== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-colorful@^5.1.2: - version "5.6.1" - resolved "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz" - integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== - -"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", react-dom@^18.3.1, react-dom@>=16.8.0: - version "18.3.1" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.2" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -"react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", react@^18.3.1, "react@>= 0.14.0", react@>=16, react@>=16.8.0: - 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== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readdirp@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz" - integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recast@^0.23.5: - version "0.23.9" - resolved "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz" - integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== - dependencies: - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tiny-invariant "^1.3.3" - tslib "^2.0.1" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -rehype-external-links@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz" - integrity sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw== - dependencies: - "@types/hast" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-is-element "^3.0.0" - is-absolute-url "^4.0.0" - space-separated-tokens "^2.0.0" - unist-util-visit "^5.0.0" - -rehype-slug@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz" - integrity sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A== - dependencies: - "@types/hast" "^3.0.0" - github-slugger "^2.0.0" - hast-util-heading-rank "^3.0.0" - hast-util-to-string "^3.0.0" - unist-util-visit "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.1.7, resolve@^1.22.2: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.2: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup@^4.20.0: - version "4.24.0" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz" - integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.24.0" - "@rollup/rollup-android-arm64" "4.24.0" - "@rollup/rollup-darwin-arm64" "4.24.0" - "@rollup/rollup-darwin-x64" "4.24.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" - "@rollup/rollup-linux-arm-musleabihf" "4.24.0" - "@rollup/rollup-linux-arm64-gnu" "4.24.0" - "@rollup/rollup-linux-arm64-musl" "4.24.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" - "@rollup/rollup-linux-riscv64-gnu" "4.24.0" - "@rollup/rollup-linux-s390x-gnu" "4.24.0" - "@rollup/rollup-linux-x64-gnu" "4.24.0" - "@rollup/rollup-linux-x64-musl" "4.24.0" - "@rollup/rollup-win32-arm64-msvc" "4.24.0" - "@rollup/rollup-win32-ia32-msvc" "4.24.0" - "@rollup/rollup-win32-x64-msvc" "4.24.0" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -sade@^1.7.4, sade@^1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sander@^0.5.0: - version "0.5.1" - resolved "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz" - integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== - dependencies: - es6-promise "^3.1.2" - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" - -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" - -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.2.1, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: - version "7.6.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -send@0.19.0: - version "0.19.0" - resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - 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" - -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - -set-cookie-parser@^2.6.0: - 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== - -set-function-length@^1.2.1: - 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== - 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" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sirv@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz" - integrity sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sorcery@^0.11.0: - version "0.11.1" - resolved "https://registry.npmjs.org/sorcery/-/sorcery-0.11.1.tgz" - integrity sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.14" - buffer-crc32 "^1.0.0" - minimist "^1.2.0" - sander "^0.5.0" - -source-map-js@^1.0.1, source-map-js@^1.2.1: - 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== - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -std-env@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -storybook@^8.3.2, storybook@^8.3.6: - version "8.3.6" - resolved "https://registry.npmjs.org/storybook/-/storybook-8.3.6.tgz" - integrity sha512-9GVbtej6ZzPRUM7KRQ7848506FfHrUiJGqPuIQdoSJd09EmuEoLjmLAgEOmrHBQKgGYMaM7Vh9GsTLim6vwZTQ== - dependencies: - "@storybook/core" "8.3.6" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - 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" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - 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" - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - 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== - -sucrase@^3.32.0: - version "3.35.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - 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== - -svelte-check@^4.0.2: - version "4.0.5" - resolved "https://registry.npmjs.org/svelte-check/-/svelte-check-4.0.5.tgz" - integrity sha512-icBTBZ3ibBaywbXUat3cK6hB5Du+Kq9Z8CRuyLmm64XIe2/r+lQcbuBx/IQgsbrC+kT2jQ0weVpZSSRIPwB6jQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.25" - chokidar "^4.0.1" - fdir "^6.2.0" - picocolors "^1.0.0" - sade "^1.7.4" - -svelte-eslint-parser@^0.43.0: - version "0.43.0" - resolved "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz" - integrity sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA== - dependencies: - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - postcss "^8.4.39" - postcss-scss "^4.0.9" - -svelte-hmr@^0.16.0: - version "0.16.0" - resolved "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz" - integrity sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA== - -svelte-markdown@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.4.1.tgz" - integrity sha512-pOlLY6EruKJaWI9my/2bKX8PdTeP5CM0s4VMmwmC2prlOkjAf+AOmTM4wW/l19Y6WZ87YmP8+ZCJCCwBChWjYw== - dependencies: - "@types/marked" "^5.0.1" - marked "^5.1.2" - -svelte-preprocess@^5.1.1: - version "5.1.4" - resolved "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz" - integrity sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA== - dependencies: - "@types/pug" "^2.0.6" - detect-indent "^6.1.0" - magic-string "^0.30.5" - sorcery "^0.11.0" - strip-indent "^3.0.0" - -"svelte@^3.19.0 || ^4.0.0", "svelte@^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0", "svelte@^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", "svelte@^3.37.0 || ^4.0.0 || ^5.0.0", svelte@^4.0.0, "svelte@^4.0.0 || ^5.0.0-next.0", "svelte@^4.0.0 || ^5.0.0-next.65", svelte@^4.2.1, svelte@^4.2.19: - version "4.2.19" - resolved "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz" - integrity sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@jridgewell/sourcemap-codec" "^1.4.15" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/estree" "^1.0.1" - acorn "^8.9.0" - aria-query "^5.3.0" - axobject-query "^4.0.0" - code-red "^1.0.3" - css-tree "^2.3.1" - estree-walker "^3.0.3" - is-reference "^3.0.1" - locate-character "^3.0.0" - magic-string "^0.30.4" - periscopic "^3.1.0" - -sveltedoc-parser@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/sveltedoc-parser/-/sveltedoc-parser-4.2.1.tgz" - integrity sha512-sWJRa4qOfRdSORSVw9GhfDEwsbsYsegnDzBevUCF6k/Eis/QqCu9lJ6I0+d/E2wOWCjOhlcJ3+jl/Iur+5mmCw== - dependencies: - eslint "8.4.1" - espree "9.2.0" - htmlparser2-svelte "4.1.0" - -synckit@^0.9.1: - version "0.9.2" - resolved "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz" - integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -tailwindcss@^3.4.12, "tailwindcss@>=3.0.0 || insiders || >=4.0.0-alpha.20": - version "3.4.14" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz" - integrity sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA== - 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.21.0" - 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" - -telejson@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz" - integrity sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ== - dependencies: - memoizerific "^1.11.3" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - 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== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -tiny-glob@^0.2.9: - version "0.2.9" - resolved "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -tiny-invariant@^1.3.1, tiny-invariant@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -tinybench@^2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz" - integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== - -tinyexec@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz" - integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== - -tinypool@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz" - integrity sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA== - -tinyrainbow@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz" - integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== - -tinyspy@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz" - integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== - -to-regex-range@^5.0.1: - 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== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-dedent@^2.0.0, ts-dedent@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz" - integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== - -ts-interface-checker@^0.1.9: - 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== - -ts-toolbelt@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" - integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== - -tseep@^1.2.2: - version "1.3.1" - resolved "https://registry.npmjs.org/tseep/-/tseep-1.3.1.tgz" - integrity sha512-ZPtfk1tQnZVyr7BPtbJ93qaAh2lZuIOpTMjhrYa4XctT8xe7t4SAW9LIxrySDuYMsfNNayE51E/WNGrNVgVicQ== - -tslib@^2.0.1, tslib@^2.6.2, tslib@^2.7.0: - version "2.8.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz" - integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== - -tstl@^2.0.7: - version "2.5.16" - resolved "https://registry.npmjs.org/tstl/-/tstl-2.5.16.tgz" - integrity sha512-+O2ybLVLKcBwKm4HymCEwZIT0PpwS3gCYnxfSDEjJEKADvIFruaQjd3m7CAKNU1c7N3X3WjVz87re7TA2A5FUw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - 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== - -type-fest@^2.19.0, type-fest@~2.19: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^2.7.2: - version "2.7.3" - resolved "https://registry.npmjs.org/type/-/type-2.7.3.tgz" - integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== - -typedarray-to-buffer@^3.1.5: - 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== - dependencies: - is-typedarray "^1.0.0" - -types-ramda@^0.30.1: - version "0.30.1" - resolved "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz" - integrity sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA== - dependencies: - ts-toolbelt "^9.6.0" - -typescript-lru-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/typescript-lru-cache/-/typescript-lru-cache-2.0.0.tgz" - integrity sha512-Jp57Qyy8wXeMkdNuZiglE6v2Cypg13eDA1chHwDG6kq51X7gk4K7P7HaDdzZKCxkegXkVHNcPD0n5aW6OZH3aA== - -typescript@^5.6.2, "typescript@>= 4.3.x", "typescript@>=3.9.5 || ^4.0.0 || ^5.0.0", typescript@>=4.2.0, typescript@>=5.0.0: - version "5.6.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== - -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -unist-util-is@^6.0.0: - 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== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - 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== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - 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== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@~1.0.0, unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unplugin@^1.3.1: - version "1.14.1" - resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz" - integrity sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w== - dependencies: - acorn "^8.12.1" - webpack-virtual-modules "^0.6.2" - -update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.0" - -uri-js@^4.2.2: - 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" - -utf-8-validate@^5.0.2, utf-8-validate@>=5.0.2: - version "5.0.10" - resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -utf8-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/utf8-buffer/-/utf8-buffer-1.0.0.tgz" - integrity sha512-ueuhzvWnp5JU5CiGSY4WdKbiN/PO2AZ/lpeLiz2l38qwdLy/cW40XobgyuIWucNyum0B33bVB0owjFCeGBSLqg== - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.4, util@^0.12.5: - version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - 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" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vite-node@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-2.1.3.tgz" - integrity sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA== - dependencies: - cac "^6.7.14" - debug "^4.3.6" - pathe "^1.1.2" - vite "^5.0.0" - -"vite@^3.0.0 || ^4.0.0 || ^5.0.0", "vite@^4.0.0 || ^5.0.0", vite@^5.0.0, vite@^5.0.3, vite@^5.4.6: - version "5.4.9" - resolved "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz" - integrity sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" - -vitefu@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz" - integrity sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q== - -vitest@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/vitest/-/vitest-2.1.3.tgz" - integrity sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA== - dependencies: - "@vitest/expect" "2.1.3" - "@vitest/mocker" "2.1.3" - "@vitest/pretty-format" "^2.1.3" - "@vitest/runner" "2.1.3" - "@vitest/snapshot" "2.1.3" - "@vitest/spy" "2.1.3" - "@vitest/utils" "2.1.3" - chai "^5.1.1" - debug "^4.3.6" - magic-string "^0.30.11" - pathe "^1.1.2" - std-env "^3.7.0" - tinybench "^2.9.0" - tinyexec "^0.3.0" - tinypool "^1.0.0" - tinyrainbow "^1.2.0" - vite "^5.0.0" - vite-node "2.1.3" - why-is-node-running "^2.3.0" - -webpack-virtual-modules@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz" - integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== - -websocket-polyfill@^0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/websocket-polyfill/-/websocket-polyfill-0.0.3.tgz" - integrity sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg== - dependencies: - tstl "^2.0.7" - websocket "^1.0.28" - -websocket@^1.0.28: - version "1.0.35" - resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz" - integrity sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.63" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.15" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -which@^2.0.1: - 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" - -why-is-node-running@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz" - integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - 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" - -wrap-ansi@^8.1.0: - 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" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^8.2.3: - version "8.18.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yaml@^2.3.4: - version "2.6.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz" - integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==