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 a0b6ee5..0000000 Binary files a/static/favicon.ico and /dev/null differ diff --git a/static/icons/GitCitadel_Logo/GitCitadel.ico b/static/icons/GitCitadel_Logo/GitCitadel.ico deleted file mode 100644 index a0b6ee5..0000000 Binary files a/static/icons/GitCitadel_Logo/GitCitadel.ico and /dev/null differ 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 83c0a02..0000000 Binary files a/static/icons/GitCitadel_Logo/GitCitadel_Logo.png and /dev/null differ 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 1f2fd55..0000000 Binary files a/static/icons/GitCitadel_Logo/GitCitadel_PFP_Purple.png and /dev/null differ diff --git a/static/icons/icon-32x32.png b/static/icons/icon-32x32.png deleted file mode 100644 index a0b6ee5..0000000 Binary files a/static/icons/icon-32x32.png and /dev/null differ 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==