its for when you want to get like notifications for your reposts

Compare changes

Choose any two refs to compare.

+1
.gitignore
···
bsky-repost-likes
result
+
node_modules
+8
.tangled/workflows/build.yml
···
+
when:
+
- event: ["push"]
+
branch: ["main"]
+
+
steps:
+
- name: build server
+
command: |
+
nix build -L --show-trace
+43 -5
README.md
···
this is a small jetstream-consuming server that can notify
-
subscribers of when a repost of theirs has been liked.
+
subscribers of when a repost of theirs has been (un)liked.
-
right now it will fetch your follows and listen to those
-
users for likes. this will be made more configurable later
+
one current limitation is that like records that were made
+
before the server started are not fetched, this means that
+
if someone unlikes a repost before the server was started
+
you won't get a notification for this.
+
+
a server is hosted at `likes.gaze.systems` if you don't want
+
to host your own.
### usage
-
get go, build it, run it.
+
you can use the browser extension
+
([firefox](https://dev.gaze.systems/x/brl-ext-firefox-latest.zip),
+
[chrome](https://dev.gaze.systems/x/brl-ext-chrome-latest.zip))
+
to keep track of the likes.
+
you can also use the provided webapp, which is hosted at
+
`https://likes.gaze.systems/`.
+
+
#### details
open a websocket at path `/subscribe/:did` where `did` is
-
your DID (or any other user you want to stalk.)
+
your DID (or any other user you want to stalk.) by default
+
it will use your *follows* for who to notify you with.
+
+
you can specify `?listenTo=none` if you wish to configure
+
which users you want to listen to. after opening a websocket
+
with that, send a JSON message like below:
+
+
```json
+
{
+
"type": "update_listen_to",
+
"content": {
+
"listen_to": ["did:plc:blablabla", "did:web:example.org", ...]
+
}
+
}
+
```
+
+
### building
+
+
if using nix, see available packages with
+
`nix flake show git+https://tangled.sh/@poor.dog/bsky-repost-likes`.
+
+
otherwise:
+
- to build the server, do `cd server && go build`,
+
- to build the webapp, get pnpm and then
+
`cd webapp && pnpm i && pnpm build`,
+
- to build the extension, first build the webapp and then run
+
`cd extension && pnpm i && pnpm build`.
+26
extension/.gitignore
···
+
# Logs
+
logs
+
*.log
+
npm-debug.log*
+
yarn-debug.log*
+
yarn-error.log*
+
pnpm-debug.log*
+
lerna-debug.log*
+
+
node_modules
+
.output
+
stats.html
+
stats-*.json
+
.wxt
+
web-ext.config.ts
+
+
# Editor directories and files
+
.vscode/*
+
!.vscode/extensions.json
+
.idea
+
.DS_Store
+
*.suo
+
*.ntvs*
+
*.njsproj
+
*.sln
+
*.sw?
+3
extension/README.md
···
+
# WXT + SolidJS
+
+
This template should help get you started developing with SolidJS in WXT.
+1
extension/assets/solid.svg
···
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 166 155.3"><defs><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="27.5" y1="3" x2="152" y2="63.5"><stop offset=".1" stop-color="#76b3e1"/><stop offset=".3" stop-color="#dcf2fd"/><stop offset="1" stop-color="#76b3e1"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="95.8" y1="32.6" x2="74" y2="105.2"><stop offset="0" stop-color="#76b3e1"/><stop offset=".5" stop-color="#4377bb"/><stop offset="1" stop-color="#1f3b77"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="18.4" y1="64.2" x2="144.3" y2="149.8"><stop offset="0" stop-color="#315aa9"/><stop offset=".5" stop-color="#518ac8"/><stop offset="1" stop-color="#315aa9"/></linearGradient><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="75.2" y1="74.5" x2="24.4" y2="260.8"><stop offset="0" stop-color="#4377bb"/><stop offset=".5" stop-color="#1a336b"/><stop offset="1" stop-color="#1a336b"/></linearGradient></defs><path d="M163 35S110-4 69 5l-3 1c-6 2-11 5-14 9l-2 3-15 26 26 5c11 7 25 10 38 7l46 9 18-30z" fill="#76b3e1"/><path d="M163 35S110-4 69 5l-3 1c-6 2-11 5-14 9l-2 3-15 26 26 5c11 7 25 10 38 7l46 9 18-30z" opacity=".3" fill="url(#a)"/><path d="M52 35l-4 1c-17 5-22 21-13 35 10 13 31 20 48 15l62-21S92 26 52 35z" fill="#518ac8"/><path d="M52 35l-4 1c-17 5-22 21-13 35 10 13 31 20 48 15l62-21S92 26 52 35z" opacity=".3" fill="url(#b)"/><path d="M134 80a45 45 0 00-48-15L24 85 4 120l112 19 20-36c4-7 3-15-2-23z" fill="url(#c)"/><path d="M114 115a45 45 0 00-48-15L4 120s53 40 94 30l3-1c17-5 23-21 13-34z" fill="url(#d)"/></svg>
+90
extension/entrypoints/background.ts
···
+
import {
+
ConnectionStatus,
+
connectService,
+
Notification,
+
} from "bsky-repost-likes-monitor/background";
+
import { onMessage, sendMessage } from "webext-bridge/background";
+
+
let websocket: WebSocket | null = null;
+
let reconnectBackoff = 1000 * 1;
+
+
let connectionStatus: ConnectionStatus = "disconnected";
+
let error: string | null = null;
+
let items: Notification[] = [];
+
+
export default defineBackground({
+
persistent: true,
+
main: async () => {
+
browser.action.setBadgeBackgroundColor({ color: "#0886FE" });
+
browser.action.setBadgeTextColor({ color: "#FFFFFF" });
+
+
onMessage("connectService", connect);
+
onMessage("disconnectService", disconnect);
+
onMessage("connectionStatus", () => {
+
return connectionStatus;
+
});
+
onMessage("error", () => {
+
return error;
+
});
+
onMessage("items", () => {
+
return items;
+
});
+
onMessage("clearItems", () => {
+
items = [];
+
browser.action.setBadgeText({ text: "" });
+
});
+
+
// connect on service start once
+
let actorId = await store.actorId.getValue();
+
let serviceDomain = await store.serviceDomain.getValue();
+
if (actorId.length > 0 && serviceDomain.length > 0) {
+
connect({ data: { actorId, serviceDomain } });
+
}
+
+
// send pings to keep service alive
+
setInterval(() => {
+
if (websocket && connectionStatus === "connected") websocket.send("");
+
}, 1000 * 15);
+
},
+
});
+
+
const connect = ({
+
data: { actorId, serviceDomain },
+
}: {
+
data: { actorId: string; serviceDomain: string };
+
}) => {
+
connectService({
+
actorId,
+
serviceDomain,
+
pushNotification: (item) => {
+
items = [item, ...items];
+
browser.action.setBadgeText({ text: items.length.toString() });
+
sendMessage("setItems", items, "popup");
+
},
+
setConnectionStatus,
+
setError,
+
doRetry: () => {
+
if (websocket !== null && connectionStatus === "error") {
+
const b = reconnectBackoff;
+
reconnectBackoff *= 2;
+
return b;
+
} else return null;
+
},
+
}).then((ws) => {
+
websocket = ws ?? null;
+
});
+
};
+
const disconnect = () => {
+
setConnectionStatus("disconnected");
+
setError(null);
+
websocket?.close();
+
websocket = null;
+
};
+
const setConnectionStatus = (status: ConnectionStatus) => {
+
connectionStatus = status;
+
sendMessage("setConnectionStatus", status, "popup");
+
};
+
const setError = (_error: string | null) => {
+
error = _error;
+
sendMessage("setError", error, "popup");
+
};
+13
extension/entrypoints/popup/index.html
···
+
<!doctype html>
+
<html lang="en">
+
<head>
+
<meta charset="UTF-8" />
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+
<title>bsky repost likes</title>
+
<meta name="manifest.type" content="browser_action" />
+
</head>
+
<body style="width: 60ch">
+
<div id="root"></div>
+
<script type="module" src="./main.tsx"></script>
+
</body>
+
</html>
+87
extension/entrypoints/popup/main.tsx
···
+
import { render } from "solid-js/web";
+
+
import "bsky-repost-likes-monitor/style.css";
+
import {
+
App,
+
AppProps,
+
ConnectionStatus,
+
Notification,
+
} from "bsky-repost-likes-monitor";
+
import { Component, createSignal } from "solid-js";
+
import { onMessage, sendMessage } from "webext-bridge/popup";
+
import store from "@/utils/store";
+
+
const Wrapped: Component = () => {
+
const [actorId, setActorId] = createSignal<string>("");
+
const [serviceDomain, setWsUrl] = createSignal<string>("");
+
const [items, setItems] = createSignal<Notification[]>([]);
+
const [connectionStatus, setConnectionStatus] =
+
createSignal<ConnectionStatus>("disconnected");
+
const [error, setError] = createSignal<string | null>(null);
+
+
onMessage("setError", ({ data }) => {
+
setError(data);
+
});
+
onMessage("setConnectionStatus", ({ data }) => {
+
setConnectionStatus(data);
+
});
+
onMessage("setItems", ({ data }) => {
+
setItems(data);
+
});
+
+
const connect = async () => {
+
try {
+
await sendMessage(
+
"connectService",
+
{
+
actorId: actorId(),
+
serviceDomain: serviceDomain(),
+
},
+
"background",
+
);
+
await store.actorId.setValue(actorId());
+
await store.serviceDomain.setValue(serviceDomain());
+
} catch (error) {
+
setError(`failed to connect: ${error}`);
+
}
+
};
+
+
const disconnect = async () => {
+
try {
+
await sendMessage("disconnectService", {}, "background");
+
} catch (error) {
+
setError(`failed to disconnect: ${error}`);
+
}
+
};
+
+
onCleanup(disconnect);
+
onMount(async () => {
+
await store.actorId.getValue().then(setActorId);
+
await store.serviceDomain.getValue().then(setWsUrl);
+
+
await sendMessage("connectionStatus", {}, "background").then(
+
setConnectionStatus,
+
);
+
await sendMessage("error", {}, "background").then(setError);
+
await sendMessage("items", {}, "background").then(setItems);
+
});
+
+
const props: AppProps = {
+
actorIdSignal: [actorId, setActorId],
+
serviceDomainSignal: [serviceDomain, setWsUrl],
+
items,
+
clearItems: () => {
+
setItems([]);
+
sendMessage("clearItems", {}, "background");
+
},
+
connectionStatus: connectionStatus,
+
error,
+
connect,
+
disconnect,
+
isExtension: true,
+
};
+
+
return <App {...props}></App>;
+
};
+
+
render(() => <Wrapped />, document.getElementById("root")!);
+27
extension/package.json
···
+
{
+
"name": "bsky-repost-likes-monitor",
+
"description": "watches your bluesky reposts for any likes from users you care about!",
+
"private": true,
+
"version": "0.0.0",
+
"type": "module",
+
"scripts": {
+
"dev": "wxt",
+
"dev:firefox": "wxt -b firefox",
+
"build": "pnpm -C ../webapp run build:lib && wxt build",
+
"build:firefox": "pnpm -C ../webapp run build:lib && wxt build -b firefox",
+
"zip": "wxt zip",
+
"zip:firefox": "wxt zip -b firefox",
+
"compile": "tsc --noEmit",
+
"postinstall": "wxt prepare"
+
},
+
"dependencies": {
+
"bsky-repost-likes-monitor": "link:..\\webapp",
+
"solid-js": "^1.9.7",
+
"webext-bridge": "^6.0.1"
+
},
+
"devDependencies": {
+
"@wxt-dev/module-solid": "^1.1.3",
+
"typescript": "^5.8.3",
+
"wxt": "^0.20.7"
+
}
+
}
+31
extension/package.nix
···
+
{
+
stdenv,
+
nodejs,
+
pnpm,
+
lib,
+
pnpmDeps,
+
}:
+
stdenv.mkDerivation (finalAttrs: {
+
pname = "brl-monitor-browserext";
+
version = "main";
+
+
src = lib.fileset.toSource {
+
root = ../.;
+
fileset = lib.fileset.unions [./. ../webapp ../pnpm-lock.yaml ../pnpm-workspace.yaml];
+
};
+
+
nativeBuildInputs = [
+
nodejs
+
pnpm.configHook
+
];
+
+
buildPhase = ''
+
export TERM=dumb
+
pnpm -C webapp build:lib
+
pnpm -C extension zip
+
pnpm -C extension zip:firefox
+
'';
+
installPhase = "mv extension/.output $out";
+
+
inherit pnpmDeps;
+
})
+3
extension/pnpm-workspace.yaml
···
+
onlyBuiltDependencies:
+
- esbuild
+
- spawn-sync
extension/public/icon/128.png

This is a binary file and will not be displayed.

extension/public/icon/16.png

This is a binary file and will not be displayed.

extension/public/icon/32.png

This is a binary file and will not be displayed.

extension/public/icon/48.png

This is a binary file and will not be displayed.

extension/public/icon/96.png

This is a binary file and will not be displayed.

+9
extension/public/icon.svg
···
+
<svg fill="none" width="18" viewBox="0 0 24 24" height="18" style="color: rgb(111, 134, 159); pointer-events: none;" xmlns="http://www.w3.org/2000/svg">
+
<g id="heart">
+
<path d="M0 200 v-200 h200 a100,100 90 0,1 0,200 a100,100 90 0,1 -200,0 z"></path>
+
</g>
+
<path fill="hsl(211, 20%, 53%)" fill-rule="evenodd" clip-rule="evenodd" d="M17.957 2.293a1 1 0 1 0-1.414 1.414L17.836 5H6a3 3 0 0 0-3 3v3a1 1 0 1 0 2 0V8a1 1 0 0 1 1-1h11.836l-1.293 1.293a1 1 0 0 0 1.414 1.414l2.47-2.47a1.75 1.75 0 0 0 0-2.474l-2.47-2.47ZM20 12a1 1 0 0 1 1 1v3a3 3 0 0 1-3 3H6.164l1.293 1.293a1 1 0 1 1-1.414 1.414l-2.47-2.47a1.75 1.75 0 0 1 0-2.474l2.47-2.47a1 1 0 0 1 1.414 1.414L6.164 17H18a1 1 0 0 0 1-1v-3a1 1 0 0 1 1-1Z"></path>
+
<g transform="matrix(-0.027082, -0.027082, 0.027082, -0.027082, 7.761168, 13.079366)" fill="red" class="outline" style="stroke-width: 0px;">
+
<path d="M 0 200 L 0 0 L 200 0 C 276.98 0 321.66 94.043 256.423 134.91 C 217.982 158.991 149.988 137.583 121.807 125.923 C 132.095 155.576 172.911 244.156 90.468 292.776 C 59.694 310.925 0 235.727 0 200 Z"></path>
+
</g>
+
</svg>
+7
extension/tsconfig.json
···
+
{
+
"extends": "./.wxt/tsconfig.json",
+
"compilerOptions": {
+
"jsx": "preserve",
+
"jsxImportSource": "solid-js"
+
}
+
}
+16
extension/types/shim.d.ts
···
+
import { ConnectionStatus, Notification } from "bsky-repost-likes-monitor";
+
import { ProtocolWithReturn } from "webext-bridge";
+
+
declare module "webext-bridge" {
+
export interface ProtocolMap {
+
connectService: { actorId: string; serviceDomain: string };
+
disconnectService: {};
+
connectionStatus: ProtocolWithReturn<{}, ConnectionStatus>;
+
setConnectionStatus: ConnectionStatus;
+
error: ProtocolWithReturn<{}, string | null>;
+
setError: string | null;
+
items: ProtocolWithReturn<{}, Notification[]>;
+
setItems: Notification[];
+
clearItems: {};
+
}
+
}
+11
extension/utils/store.ts
···
+
import { ConnectionStatus } from "bsky-repost-likes-monitor";
+
+
const store = {
+
actorId: storage.defineItem<string>("sync:actorId", { fallback: "" }),
+
serviceDomain: storage.defineItem<string>("sync:serviceDomain", {
+
fallback: "likes.gaze.systems",
+
}),
+
backoff: storage.defineItem<number>("local:backoff", { fallback: 1000 * 1 }),
+
};
+
+
export default store;
+20
extension/wxt.config.ts
···
+
import { defineConfig } from "wxt";
+
+
// See https://wxt.dev/api/config.html
+
export default defineConfig({
+
modules: ["@wxt-dev/module-solid"],
+
manifest: {
+
name: "bluesky repost likes monitor",
+
short_name: "bsky repost likes",
+
description:
+
"watches your bluesky reposts for any likes from users you care about!",
+
permissions: ["storage"],
+
},
+
vite: () => {
+
return {
+
resolve: {
+
dedupe: ["solid-js"],
+
},
+
};
+
},
+
});
+9 -9
flake.lock
···
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
-
"lastModified": 1748821116,
-
"narHash": "sha256-F82+gS044J1APL0n4hH50GYdPRv/5JWm34oCJYmVKdE=",
+
"lastModified": 1751413152,
+
"narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=",
"owner": "hercules-ci",
"repo": "flake-parts",
-
"rev": "49f0870db23e8c1ca0b5259734a02cd9e1e371a1",
+
"rev": "77826244401ea9de6e3bac47c2db46005e1f30b5",
"type": "github"
},
"original": {
···
},
"nixpkgs": {
"locked": {
-
"lastModified": 1749143949,
-
"narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=",
+
"lastModified": 1751637120,
+
"narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d",
+
"rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3",
"type": "github"
},
"original": {
···
},
"nixpkgs-lib": {
"locked": {
-
"lastModified": 1748740939,
-
"narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=",
+
"lastModified": 1751159883,
+
"narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
-
"rev": "656a64127e9d791a334452c6b6606d17539476e2",
+
"rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab",
"type": "github"
},
"original": {
+14 -2
flake.nix
···
outputs = inputs@{ flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ "x86_64-linux" ];
-
perSystem = { pkgs, ... }: {
-
packages.default = pkgs.callPackage ./package.nix {};
+
perSystem = { pkgs, lib, ... }: let
+
pnpmDeps = pkgs.pnpm.fetchDeps {
+
pname = "workspace";
+
version = "";
+
src = lib.fileset.toSource {
+
root = ./.;
+
fileset = lib.fileset.unions [./pnpm-lock.yaml ./pnpm-workspace.yaml ./extension ./webapp];
+
};
+
hash = "sha256-4Z7CqMG4Ixh7auYjrt4zlO3xNGUZ7IXl0pKclX581K8=";
+
};
+
in {
+
packages.default = pkgs.callPackage ./server/package.nix {};
+
packages.webapp = pkgs.callPackage ./webapp/package.nix {inherit pnpmDeps;};
+
packages.extension = pkgs.callPackage ./extension/package.nix {inherit pnpmDeps;};
};
};
}
-75
go.mod
···
-
module bsky-repost-likes
-
-
go 1.23.9
-
-
require (
-
github.com/bluesky-social/indigo v0.0.0-20250606055443-008e4ed915ad
-
github.com/bluesky-social/jetstream v0.0.0-20250414024304-d17bd81a945e
-
github.com/cornelk/hashmap v1.0.8
-
github.com/gorilla/mux v1.8.1
-
github.com/gorilla/websocket v1.5.3
-
)
-
-
require (
-
github.com/beorn7/perks v1.0.1 // indirect
-
github.com/carlmjohnson/versioninfo v0.22.5 // indirect
-
github.com/cespare/xxhash/v2 v2.3.0 // indirect
-
github.com/felixge/httpsnoop v1.0.4 // indirect
-
github.com/go-logr/logr v1.4.1 // indirect
-
github.com/go-logr/stdr v1.2.2 // indirect
-
github.com/goccy/go-json v0.10.2 // indirect
-
github.com/gogo/protobuf v1.3.2 // indirect
-
github.com/google/uuid v1.6.0 // indirect
-
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
-
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
-
github.com/hashicorp/golang-lru v1.0.2 // indirect
-
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
-
github.com/ipfs/bbloom v0.0.4 // indirect
-
github.com/ipfs/go-block-format v0.2.0 // indirect
-
github.com/ipfs/go-cid v0.4.1 // indirect
-
github.com/ipfs/go-datastore v0.6.0 // indirect
-
github.com/ipfs/go-ipfs-blockstore v1.3.1 // indirect
-
github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect
-
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
-
github.com/ipfs/go-ipld-cbor v0.1.0 // indirect
-
github.com/ipfs/go-ipld-format v0.6.0 // indirect
-
github.com/ipfs/go-log v1.0.5 // indirect
-
github.com/ipfs/go-log/v2 v2.5.1 // indirect
-
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
-
github.com/jbenet/goprocess v0.1.4 // indirect
-
github.com/klauspost/compress v1.17.9 // indirect
-
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
-
github.com/mattn/go-isatty v0.0.20 // indirect
-
github.com/minio/sha256-simd v1.0.1 // indirect
-
github.com/mr-tron/base58 v1.2.0 // indirect
-
github.com/multiformats/go-base32 v0.1.0 // indirect
-
github.com/multiformats/go-base36 v0.2.0 // indirect
-
github.com/multiformats/go-multibase v0.2.0 // indirect
-
github.com/multiformats/go-multihash v0.2.3 // indirect
-
github.com/multiformats/go-varint v0.0.7 // indirect
-
github.com/opentracing/opentracing-go v1.2.0 // indirect
-
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect
-
github.com/prometheus/client_golang v1.19.1 // indirect
-
github.com/prometheus/client_model v0.6.1 // indirect
-
github.com/prometheus/common v0.54.0 // indirect
-
github.com/prometheus/procfs v0.15.1 // indirect
-
github.com/spaolacci/murmur3 v1.1.0 // indirect
-
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect
-
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect
-
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect
-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect
-
go.opentelemetry.io/otel v1.21.0 // indirect
-
go.opentelemetry.io/otel/metric v1.21.0 // indirect
-
go.opentelemetry.io/otel/trace v1.21.0 // indirect
-
go.uber.org/atomic v1.11.0 // indirect
-
go.uber.org/multierr v1.11.0 // indirect
-
go.uber.org/zap v1.26.0 // indirect
-
golang.org/x/crypto v0.22.0 // indirect
-
golang.org/x/sys v0.22.0 // indirect
-
golang.org/x/time v0.5.0 // indirect
-
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
-
google.golang.org/protobuf v1.34.2 // indirect
-
lukechampine.com/blake3 v1.2.1 // indirect
-
)
-
-
replace github.com/bluesky-social/jetstream => github.com/caseyho/jetstream v0.0.0-20250310034359-bee7b7fc4d0f
-227
go.sum
···
-
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
-
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-
github.com/bluesky-social/indigo v0.0.0-20250606055443-008e4ed915ad h1:VQnna39DdE6i2s0rm3ZG1GfucQOWJdYuyACzwxNQ+T4=
-
github.com/bluesky-social/indigo v0.0.0-20250606055443-008e4ed915ad/go.mod h1:ovyxp8AMO1Hoe838vMJUbqHTZaAR8ABM3g3TXu+A5Ng=
-
github.com/bluesky-social/jetstream v0.0.0-20250414024304-d17bd81a945e h1:P/O6TDHs53gwgV845uDHI+Nri889ixksRrh4bCkCdxo=
-
github.com/bluesky-social/jetstream v0.0.0-20250414024304-d17bd81a945e/go.mod h1:WiYEeyJSdUwqoaZ71KJSpTblemUCpwJfh5oVXplK6T4=
-
github.com/carlmjohnson/versioninfo v0.22.5 h1:O00sjOLUAFxYQjlN/bzYTuZiS0y6fWDQjMRvwtKgwwc=
-
github.com/carlmjohnson/versioninfo v0.22.5/go.mod h1:QT9mph3wcVfISUKd0i9sZfVrPviHuSF+cUtLjm2WSf8=
-
github.com/caseyho/jetstream v0.0.0-20250310034359-bee7b7fc4d0f h1:Ed2fW2wWekh6HK2S7vaHnlSlSJTT7iNdxcgdPYFaBrg=
-
github.com/caseyho/jetstream v0.0.0-20250310034359-bee7b7fc4d0f/go.mod h1:WiYEeyJSdUwqoaZ71KJSpTblemUCpwJfh5oVXplK6T4=
-
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
-
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-
github.com/cornelk/hashmap v1.0.8 h1:nv0AWgw02n+iDcawr5It4CjQIAcdMMKRrs10HOJYlrc=
-
github.com/cornelk/hashmap v1.0.8/go.mod h1:RfZb7JO3RviW/rT6emczVuC/oxpdz4UsSB2LJSclR1k=
-
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
-
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
-
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
-
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
-
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
-
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
-
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
-
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
-
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
-
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
-
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
-
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
-
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
-
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
-
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
-
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
-
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
-
github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs=
-
github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM=
-
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
-
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
-
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
-
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
-
github.com/ipfs/go-ipfs-blockstore v1.3.1 h1:cEI9ci7V0sRNivqaOr0elDsamxXFxJMMMy7PTTDQNsQ=
-
github.com/ipfs/go-ipfs-blockstore v1.3.1/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
-
github.com/ipfs/go-ipfs-ds-help v1.1.1 h1:B5UJOH52IbcfS56+Ul+sv8jnIV10lbjLF5eOO0C66Nw=
-
github.com/ipfs/go-ipfs-ds-help v1.1.1/go.mod h1:75vrVCkSdSFidJscs8n4W+77AtTpCIAdDGAwjitJMIo=
-
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
-
github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs=
-
github.com/ipfs/go-ipld-cbor v0.1.0 h1:dx0nS0kILVivGhfWuB6dUpMa/LAwElHPw1yOGYopoYs=
-
github.com/ipfs/go-ipld-cbor v0.1.0/go.mod h1:U2aYlmVrJr2wsUBU67K4KgepApSZddGRDWBYR0H4sCk=
-
github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U=
-
github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg=
-
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
-
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
-
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
-
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
-
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
-
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
-
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
-
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
-
github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o=
-
github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
-
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
-
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
-
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
-
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
-
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
-
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
-
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
-
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
-
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
-
github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
-
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
-
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
-
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
-
github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
-
github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
-
github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
-
github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
-
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
-
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
-
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
-
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f h1:VXTQfuJj9vKR4TCkEuWIckKvdHFeJH/huIFJ9/cXOB0=
-
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw=
-
github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
-
github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
-
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
-
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
-
github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8=
-
github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ=
-
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
-
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
-
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
-
github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM=
-
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
-
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
-
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e h1:28X54ciEwwUxyHn9yrZfl5ojgF4CBNLWX7LR0rvBkf4=
-
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so=
-
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA=
-
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8=
-
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q=
-
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I=
-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24=
-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo=
-
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
-
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
-
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
-
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
-
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
-
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
-
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
-
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
-
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
-
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
-
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
-
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
-
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
-
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
-
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
-
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
-
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
-
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
-
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
-
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-
lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
-
lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
-59
jetstream.go
···
-
package main
-
-
import (
-
"context"
-
"log/slog"
-
"time"
-
-
"github.com/bluesky-social/jetstream/pkg/client"
-
"github.com/bluesky-social/jetstream/pkg/client/schedulers/sequential"
-
"github.com/bluesky-social/jetstream/pkg/models"
-
)
-
-
type HandleEvent func(context.Context, *models.Event) error
-
-
func startJetstreamLoop(logger *slog.Logger, outStream **client.Client, name string, handleEvent HandleEvent, optsFn func() models.SubscriberOptionsUpdatePayload) {
-
for {
-
stream, startFn, err := startJetstreamClient(name, optsFn(), handleEvent)
-
*outStream = stream
-
if startFn != nil {
-
err = startFn()
-
}
-
if err != nil {
-
logger.Error("stream failed", "name", name, "error", err)
-
}
-
}
-
}
-
-
func startJetstreamClient(name string, opts models.SubscriberOptionsUpdatePayload, handleEvent HandleEvent) (*client.Client, func() error, error) {
-
ctx := context.Background()
-
-
config := client.DefaultClientConfig()
-
config.WebsocketURL = "wss://jetstream1.us-west.bsky.network/subscribe"
-
config.Compress = true
-
config.WantedCollections = opts.WantedCollections
-
config.WantedDids = opts.WantedDIDs
-
config.RequireHello = len(config.WantedDids) == 0
-
-
scheduler := sequential.NewScheduler(name, logger, handleEvent)
-
-
c, err := client.NewClient(config, logger, scheduler)
-
if err != nil {
-
logger.Error("failed to create jetstream client", "name", name, "error", err)
-
return nil, nil, err
-
}
-
-
startFn := func() error {
-
cursor := time.Now().UnixMicro()
-
-
logger.Info("starting jetstream client", "name", name, "collections", opts.WantedCollections, "wanted_dids", len(opts.WantedDIDs))
-
if err := c.ConnectAndRead(ctx, &cursor); err != nil {
-
logger.Error("jetstream client failed", "name", name, "error", err)
-
return err
-
}
-
-
return nil
-
}
-
-
return c, startFn, nil
-
}
-296
main.go
···
-
package main
-
-
import (
-
"context"
-
"encoding/json"
-
"log"
-
"log/slog"
-
"net/http"
-
-
"github.com/bluesky-social/indigo/api/bsky"
-
"github.com/bluesky-social/indigo/xrpc"
-
"github.com/bluesky-social/jetstream/pkg/client"
-
"github.com/bluesky-social/jetstream/pkg/models"
-
"github.com/cornelk/hashmap"
-
"github.com/gorilla/mux"
-
"github.com/gorilla/websocket"
-
)
-
-
type Set[T comparable] map[T]struct{}
-
-
type SubscriberData struct {
-
DID string
-
Conn *websocket.Conn
-
ListenTo Set[string]
-
Reposts Set[string]
-
}
-
-
type NotificationMessage struct {
-
Liked bool `json:"liked"`
-
ByDid string `json:"did"`
-
RepostURI string `json:"repost_uri"`
-
}
-
-
var (
-
// storing the subscriber data in both Should Be Fine
-
// we dont modify subscriber data at the same time in two places
-
subscribers = hashmap.New[string, *SubscriberData]()
-
listeningTo = hashmap.New[string, *hashmap.Map[string, *SubscriberData]]()
-
-
likeStream *client.Client
-
subscriberStream *client.Client
-
-
upgrader = websocket.Upgrader{
-
CheckOrigin: func(r *http.Request) bool {
-
return true
-
},
-
}
-
-
logger *slog.Logger
-
)
-
-
func getSubscriberDids() []string {
-
dids := make([]string, 0, subscribers.Len())
-
subscribers.Range(func(s string, sd *SubscriberData) bool {
-
dids = append(dids, s)
-
return true
-
})
-
return dids
-
}
-
-
func listenTo(sd *SubscriberData, did string) {
-
targetDids, _ := listeningTo.GetOrInsert(did, hashmap.New[string, *SubscriberData]())
-
targetDids.Insert(sd.DID, sd)
-
}
-
-
func stopListeningTo(subscriberDid, did string) {
-
if targetDids, exists := listeningTo.Get(did); exists {
-
targetDids.Del(subscriberDid)
-
}
-
}
-
-
func main() {
-
logger = slog.Default()
-
-
go likeStreamLoop(logger)
-
go subscriberStreamLoop(logger)
-
-
r := mux.NewRouter()
-
r.HandleFunc("/subscribe/{did}", handleSubscribe).Methods("GET")
-
-
log.Println("Server starting on :8080")
-
if err := http.ListenAndServe(":8080", r); err != nil {
-
log.Fatalf("error while serving: %s", err)
-
}
-
}
-
-
func handleSubscribe(w http.ResponseWriter, r *http.Request) {
-
vars := mux.Vars(r)
-
did := vars["did"]
-
-
logger = logger.With("did", did)
-
-
conn, err := upgrader.Upgrade(w, r, nil)
-
if err != nil {
-
logger.Error("WebSocket upgrade failed", "error", err)
-
return
-
}
-
defer conn.Close()
-
-
logger.Info("new subscriber")
-
-
pdsURI, err := findUserPDS(r.Context(), did)
-
if err != nil {
-
logger.Error("cant resolve user pds", "error", err)
-
return
-
}
-
logger = logger.With("pds", pdsURI)
-
-
xrpcClient := &xrpc.Client{
-
Host: pdsURI,
-
}
-
// todo: implement skipping fetching follows and allow specifying users to listen to via websocket
-
follows, err := fetchFollows(r.Context(), xrpcClient, did)
-
if err != nil {
-
logger.Error("error fetching follows", "error", err)
-
return
-
}
-
logger.Info("fetched follows")
-
reposts, err := fetchReposts(r.Context(), xrpcClient, did)
-
if err != nil {
-
logger.Error("error fetching reposts", "error", err)
-
return
-
}
-
logger.Info("fetched reposts")
-
-
sd := &SubscriberData{
-
DID: did,
-
Conn: conn,
-
// use user follows as default listen to
-
ListenTo: follows,
-
Reposts: reposts,
-
}
-
-
subscribers.Set(sd.DID, sd)
-
for listenDid := range sd.ListenTo {
-
listenTo(sd, listenDid)
-
}
-
-
updateSubscriberStreamOpts()
-
updateLikeStreamOpts()
-
// delete subscriber after we are done
-
defer func() {
-
for listenDid := range sd.ListenTo {
-
stopListeningTo(sd.DID, listenDid)
-
}
-
subscribers.Del(sd.DID)
-
-
updateSubscriberStreamOpts()
-
updateLikeStreamOpts()
-
}()
-
-
logger.Info("serving subscriber")
-
-
for {
-
_, _, err := conn.ReadMessage()
-
if err != nil {
-
logger.Info("WebSocket connection closed", "error", err)
-
break
-
}
-
}
-
}
-
-
func getLikeStreamOpts() models.SubscriberOptionsUpdatePayload {
-
return models.SubscriberOptionsUpdatePayload{
-
WantedCollections: []string{"app.bsky.feed.like"},
-
// WantedDIDs: getFollowsDids(),
-
}
-
}
-
-
func getSubscriberStreamOpts() models.SubscriberOptionsUpdatePayload {
-
return models.SubscriberOptionsUpdatePayload{
-
WantedCollections: []string{"app.bsky.feed.repost", "app.bsky.graph.follow"},
-
WantedDIDs: getSubscriberDids(),
-
}
-
}
-
-
func updateLikeStreamOpts() {
-
opts := getLikeStreamOpts()
-
err := likeStream.SendOptionsUpdate(opts)
-
if err != nil {
-
logger.Error("couldnt update like stream opts", "error", err)
-
return
-
}
-
logger.Info("updated like stream opts", "requestedDids", len(opts.WantedDIDs))
-
}
-
-
func updateSubscriberStreamOpts() {
-
opts := getSubscriberStreamOpts()
-
err := subscriberStream.SendOptionsUpdate(opts)
-
if err != nil {
-
logger.Error("couldnt update subscriber stream opts", "error", err)
-
return
-
}
-
logger.Info("updated subscriber stream opts", "userCount", len(opts.WantedDIDs))
-
}
-
-
func likeStreamLoop(logger *slog.Logger) {
-
startJetstreamLoop(logger, &likeStream, "like_tracker", HandleLikeEvent, getLikeStreamOpts)
-
}
-
-
func subscriberStreamLoop(logger *slog.Logger) {
-
startJetstreamLoop(logger, &subscriberStream, "subscriber", HandleSubscriberEvent, getSubscriberStreamOpts)
-
}
-
-
func HandleLikeEvent(ctx context.Context, event *models.Event) error {
-
if event == nil || event.Commit == nil || len(event.Commit.Record) == 0 {
-
return nil
-
}
-
-
// skip handling event if its not from a source we are listening to
-
targets, exists := listeningTo.Get(event.Did)
-
if !exists {
-
return nil
-
}
-
-
var like bsky.FeedLike
-
if err := json.Unmarshal(event.Commit.Record, &like); err != nil {
-
logger.Error("failed to unmarshal like", "error", err)
-
return nil
-
}
-
-
targets.Range(func(s string, sd *SubscriberData) bool {
-
for repostURI, _ := range sd.Reposts {
-
// (un)liked a post the subscriber reposted
-
if like.Subject.Uri == repostURI {
-
notification := NotificationMessage{
-
Liked: event.Commit.Operation != models.CommitOperationDelete,
-
ByDid: event.Did,
-
RepostURI: repostURI,
-
}
-
-
if err := sd.Conn.WriteJSON(notification); err != nil {
-
logger.Error("failed to send notification", "subscriber", sd.DID, "error", err)
-
}
-
}
-
}
-
return true
-
})
-
-
return nil
-
}
-
-
func HandleSubscriberEvent(ctx context.Context, event *models.Event) error {
-
if event == nil || event.Commit == nil {
-
return nil
-
}
-
-
switch event.Commit.Collection {
-
case "app.bsky.feed.repost":
-
modifySubscribersWithEvent(
-
event,
-
func(s *SubscriberData, r bsky.FeedRepost) { delete(s.Reposts, r.Subject.Uri) },
-
func(s *SubscriberData, r bsky.FeedRepost) {
-
s.Reposts[r.Subject.Uri] = struct{}{}
-
},
-
)
-
case "app.bsky.graph.follow":
-
modifySubscribersWithEvent(
-
event,
-
func(s *SubscriberData, r bsky.GraphFollow) {
-
delete(s.ListenTo, r.Subject)
-
stopListeningTo(s.DID, r.Subject)
-
},
-
func(s *SubscriberData, r bsky.GraphFollow) {
-
s.ListenTo[r.Subject] = struct{}{}
-
listenTo(s, r.Subject)
-
},
-
)
-
}
-
-
return nil
-
}
-
-
type ModifyFunc[v any] func(*SubscriberData, v)
-
-
func modifySubscribersWithEvent[v any](event *models.Event, onDelete ModifyFunc[v], onUpdate ModifyFunc[v]) error {
-
if len(event.Commit.Record) == 0 {
-
return nil
-
}
-
-
var data v
-
if err := json.Unmarshal(event.Commit.Record, &data); err != nil {
-
logger.Error("Failed to unmarshal repost", "error", err, "raw", event.Commit.Record)
-
return nil
-
}
-
-
if subscriber, exists := subscribers.Get(event.Did); exists {
-
if event.Commit.Operation == models.CommitOperationDelete {
-
onDelete(subscriber, data)
-
} else {
-
onUpdate(subscriber, data)
-
}
-
}
-
-
return nil
-
}
-12
package.nix
···
-
{
-
buildGoModule,
-
...
-
}:
-
buildGoModule (final: {
-
pname = "bsky-repost-likes";
-
version = "main";
-
-
src = ./.;
-
-
vendorHash = "sha256-nqBgpykQDR1lXO27oWH/lG3NVH31G6WKHRQKUZbjVUI=";
-
})
+6319
pnpm-lock.yaml
···
+
lockfileVersion: '9.0'
+
+
settings:
+
autoInstallPeers: true
+
excludeLinksFromLockfile: false
+
+
importers:
+
+
extension:
+
dependencies:
+
bsky-repost-likes-monitor:
+
specifier: link:..\webapp
+
version: link:../webapp
+
solid-js:
+
specifier: ^1.9.7
+
version: 1.9.7
+
webext-bridge:
+
specifier: ^6.0.1
+
version: 6.0.1
+
devDependencies:
+
'@wxt-dev/module-solid':
+
specifier: ^1.1.3
+
version: 1.1.3(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(wxt@0.20.7(@types/node@24.0.10)(jiti@2.4.2)(rollup@4.44.2))
+
typescript:
+
specifier: ^5.8.3
+
version: 5.8.3
+
wxt:
+
specifier: ^0.20.7
+
version: 0.20.7(@types/node@24.0.10)(jiti@2.4.2)(rollup@4.44.2)
+
+
webapp:
+
dependencies:
+
'@atcute/atproto':
+
specifier: ^3.1.0
+
version: 3.1.0
+
'@atcute/bluesky':
+
specifier: ^3.1.4
+
version: 3.1.4
+
'@atcute/client':
+
specifier: ^4.0.3
+
version: 4.0.3
+
'@atcute/identity-resolver':
+
specifier: ^1.1.3
+
version: 1.1.3(@atcute/identity@1.0.3)
+
'@atcute/lexicons':
+
specifier: ^1.1.0
+
version: 1.1.0
+
solid-js:
+
specifier: ^1.9.7
+
version: 1.9.7
+
devDependencies:
+
'@eslint/css':
+
specifier: ^0.8.1
+
version: 0.8.1
+
'@eslint/js':
+
specifier: ^9.30.1
+
version: 9.30.1
+
'@unocss/preset-attributify':
+
specifier: ^66.3.3
+
version: 66.3.3
+
'@unocss/preset-wind4':
+
specifier: ^66.3.3
+
version: 66.3.3
+
'@unocss/transformer-attributify-jsx':
+
specifier: ^66.3.3
+
version: 66.3.3
+
'@unocss/transformer-directives':
+
specifier: ^66.3.3
+
version: 66.3.3
+
'@unocss/transformer-variant-group':
+
specifier: ^66.3.3
+
version: 66.3.3
+
eslint:
+
specifier: ^9.30.1
+
version: 9.30.1(jiti@2.4.2)
+
eslint-config-prettier:
+
specifier: ^10.1.5
+
version: 10.1.5(eslint@9.30.1(jiti@2.4.2))
+
eslint-plugin-solid:
+
specifier: ^0.14.5
+
version: 0.14.5(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
globals:
+
specifier: ^16.3.0
+
version: 16.3.0
+
prettier:
+
specifier: 3.5.3
+
version: 3.5.3
+
solid-devtools:
+
specifier: ^0.34.3
+
version: 0.34.3(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))
+
typescript:
+
specifier: ^5.8.3
+
version: 5.8.3
+
typescript-eslint:
+
specifier: ^8.35.1
+
version: 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
unocss:
+
specifier: ^66.3.3
+
version: 66.3.3(postcss@8.5.6)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3))
+
vite:
+
specifier: ^6.3.5
+
version: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
vite-plugin-dts:
+
specifier: ^4.5.4
+
version: 4.5.4(@types/node@24.0.10)(rollup@4.44.2)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))
+
vite-plugin-solid:
+
specifier: ^2.11.7
+
version: 2.11.7(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))
+
+
packages:
+
+
'@1natsu/wait-element@4.1.2':
+
resolution: {integrity: sha512-qWxSJD+Q5b8bKOvESFifvfZ92DuMsY+03SBNjTO34ipJLP6mZ9yK4bQz/vlh48aEQXoJfaZBqUwKL5BdI5iiWw==}
+
+
'@aklinker1/rollup-plugin-visualizer@5.12.0':
+
resolution: {integrity: sha512-X24LvEGw6UFmy0lpGJDmXsMyBD58XmX1bbwsaMLhNoM+UMQfQ3b2RtC+nz4b/NoRK5r6QJSKJHBNVeUdwqybaQ==}
+
engines: {node: '>=14'}
+
hasBin: true
+
peerDependencies:
+
rollup: 2.x || 3.x || 4.x
+
peerDependenciesMeta:
+
rollup:
+
optional: true
+
+
'@ampproject/remapping@2.3.0':
+
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+
engines: {node: '>=6.0.0'}
+
+
'@antfu/install-pkg@1.1.0':
+
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+
+
'@antfu/utils@8.1.1':
+
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
+
+
'@atcute/atproto@3.1.0':
+
resolution: {integrity: sha512-aJbDsY7FcIh8APWKAimBtshPwqoRE056tc0UV6vw4TW4e3nYaHedoJmKhlh/k8KQWxyw64MQThNGMaC89HNoTg==}
+
+
'@atcute/bluesky@3.1.4':
+
resolution: {integrity: sha512-iSdZGk/UktgKpT/lI0/YxRjM3E5dkd6/vIa2mgH82lgRjI0jH5LJAfLXPyr2mPeZ/qku1gf2/KrkqJ9dfiNxVw==}
+
+
'@atcute/client@4.0.3':
+
resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==}
+
+
'@atcute/identity-resolver@1.1.3':
+
resolution: {integrity: sha512-KZgGgg99CWaV7Df3+h3X/WMrDzTPQVfsaoIVbTNLx2B56BvCL2EmaxPSVw/7BFUJMZHlVU4rtoEB4lyvNyMswA==}
+
peerDependencies:
+
'@atcute/identity': ^1.0.0
+
+
'@atcute/identity@1.0.3':
+
resolution: {integrity: sha512-mNMxbKHFGys03A8JXKk0KfMBzdd0vrYMzZZWjpw1nYTs0+ea6bo5S1hwqVUZxHdo1gFHSe/t63jxQIF4yL9aKw==}
+
+
'@atcute/lexicons@1.1.0':
+
resolution: {integrity: sha512-LFqwnria78xLYb62Ri/+WwQpUTgZp2DuyolNGIIOV1dpiKhFFFh//nscHMA6IExFLQRqWDs3tTjy7zv0h3sf1Q==}
+
+
'@atcute/util-fetch@1.0.1':
+
resolution: {integrity: sha512-Clc0E/5ufyGBVfYBUwWNlHONlZCoblSr4Ho50l1LhmRPGB1Wu/AQ9Sz+rsBg7fdaW/auve8ulmwhRhnX2cGRow==}
+
+
'@babel/code-frame@7.27.1':
+
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/compat-data@7.28.0':
+
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/core@7.28.0':
+
resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/generator@7.28.0':
+
resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-compilation-targets@7.27.2':
+
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-globals@7.28.0':
+
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-imports@7.18.6':
+
resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-imports@7.27.1':
+
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-transforms@7.27.3':
+
resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0
+
+
'@babel/helper-plugin-utils@7.27.1':
+
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-string-parser@7.27.1':
+
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-validator-identifier@7.27.1':
+
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-validator-option@7.27.1':
+
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helpers@7.27.6':
+
resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/parser@7.28.0':
+
resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
+
engines: {node: '>=6.0.0'}
+
hasBin: true
+
+
'@babel/plugin-syntax-jsx@7.27.1':
+
resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
+
'@babel/plugin-syntax-typescript@7.27.1':
+
resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+
engines: {node: '>=6.9.0'}
+
peerDependencies:
+
'@babel/core': ^7.0.0-0
+
+
'@babel/runtime@7.27.0':
+
resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/template@7.27.2':
+
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/traverse@7.28.0':
+
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/types@7.28.0':
+
resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==}
+
engines: {node: '>=6.9.0'}
+
+
'@badrap/valita@0.4.5':
+
resolution: {integrity: sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==}
+
engines: {node: '>= 18'}
+
+
'@devicefarmer/adbkit-logcat@2.1.3':
+
resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==}
+
engines: {node: '>= 4'}
+
+
'@devicefarmer/adbkit-monkey@1.2.1':
+
resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==}
+
engines: {node: '>= 0.10.4'}
+
+
'@devicefarmer/adbkit@3.3.8':
+
resolution: {integrity: sha512-7rBLLzWQnBwutH2WZ0EWUkQdihqrnLYCUMaB44hSol9e0/cdIhuNFcqZO0xNheAU6qqHVA8sMiLofkYTgb+lmw==}
+
engines: {node: '>= 0.10.4'}
+
hasBin: true
+
+
'@esbuild/aix-ppc64@0.25.5':
+
resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
+
engines: {node: '>=18'}
+
cpu: [ppc64]
+
os: [aix]
+
+
'@esbuild/android-arm64@0.25.5':
+
resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [android]
+
+
'@esbuild/android-arm@0.25.5':
+
resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
+
engines: {node: '>=18'}
+
cpu: [arm]
+
os: [android]
+
+
'@esbuild/android-x64@0.25.5':
+
resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [android]
+
+
'@esbuild/darwin-arm64@0.25.5':
+
resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@esbuild/darwin-x64@0.25.5':
+
resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [darwin]
+
+
'@esbuild/freebsd-arm64@0.25.5':
+
resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [freebsd]
+
+
'@esbuild/freebsd-x64@0.25.5':
+
resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [freebsd]
+
+
'@esbuild/linux-arm64@0.25.5':
+
resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [linux]
+
+
'@esbuild/linux-arm@0.25.5':
+
resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
+
engines: {node: '>=18'}
+
cpu: [arm]
+
os: [linux]
+
+
'@esbuild/linux-ia32@0.25.5':
+
resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
+
engines: {node: '>=18'}
+
cpu: [ia32]
+
os: [linux]
+
+
'@esbuild/linux-loong64@0.25.5':
+
resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
+
engines: {node: '>=18'}
+
cpu: [loong64]
+
os: [linux]
+
+
'@esbuild/linux-mips64el@0.25.5':
+
resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
+
engines: {node: '>=18'}
+
cpu: [mips64el]
+
os: [linux]
+
+
'@esbuild/linux-ppc64@0.25.5':
+
resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
+
engines: {node: '>=18'}
+
cpu: [ppc64]
+
os: [linux]
+
+
'@esbuild/linux-riscv64@0.25.5':
+
resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
+
engines: {node: '>=18'}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@esbuild/linux-s390x@0.25.5':
+
resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
+
engines: {node: '>=18'}
+
cpu: [s390x]
+
os: [linux]
+
+
'@esbuild/linux-x64@0.25.5':
+
resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [linux]
+
+
'@esbuild/netbsd-arm64@0.25.5':
+
resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [netbsd]
+
+
'@esbuild/netbsd-x64@0.25.5':
+
resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [netbsd]
+
+
'@esbuild/openbsd-arm64@0.25.5':
+
resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [openbsd]
+
+
'@esbuild/openbsd-x64@0.25.5':
+
resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [openbsd]
+
+
'@esbuild/sunos-x64@0.25.5':
+
resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [sunos]
+
+
'@esbuild/win32-arm64@0.25.5':
+
resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
+
engines: {node: '>=18'}
+
cpu: [arm64]
+
os: [win32]
+
+
'@esbuild/win32-ia32@0.25.5':
+
resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
+
engines: {node: '>=18'}
+
cpu: [ia32]
+
os: [win32]
+
+
'@esbuild/win32-x64@0.25.5':
+
resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
+
engines: {node: '>=18'}
+
cpu: [x64]
+
os: [win32]
+
+
'@eslint-community/eslint-utils@4.7.0':
+
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
peerDependencies:
+
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+
'@eslint-community/regexpp@4.12.1':
+
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+
'@eslint/config-array@0.21.0':
+
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/config-helpers@0.3.0':
+
resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/core@0.14.0':
+
resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/core@0.15.1':
+
resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/css-tree@3.6.1':
+
resolution: {integrity: sha512-5DIsBME23tUQD5zHD+T38lC2DG4jB8x8JRa+yDncLne2TIZA0VuCpcSazOX1EC+sM/q8w24qeevXfmfsIxAeqA==}
+
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+
'@eslint/css@0.8.1':
+
resolution: {integrity: sha512-674JJD1q8sDlJORLep+gGnm3VRCQo/qLmKQgCIf2LnUK/tHf96StWjLX2IF3yyp3yeU9npZ6ixySMr2G256eiQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/eslintrc@3.3.1':
+
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/js@9.30.1':
+
resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/object-schema@2.1.6':
+
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@eslint/plugin-kit@0.3.3':
+
resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@humanfs/core@0.19.1':
+
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+
engines: {node: '>=18.18.0'}
+
+
'@humanfs/node@0.16.6':
+
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+
engines: {node: '>=18.18.0'}
+
+
'@humanwhocodes/module-importer@1.0.1':
+
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+
engines: {node: '>=12.22'}
+
+
'@humanwhocodes/retry@0.3.1':
+
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+
engines: {node: '>=18.18'}
+
+
'@humanwhocodes/retry@0.4.3':
+
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+
engines: {node: '>=18.18'}
+
+
'@iconify/types@2.0.0':
+
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+
'@iconify/utils@2.3.0':
+
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
+
+
'@isaacs/balanced-match@4.0.1':
+
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+
engines: {node: 20 || >=22}
+
+
'@isaacs/brace-expansion@5.0.0':
+
resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+
engines: {node: 20 || >=22}
+
+
'@jridgewell/gen-mapping@0.3.12':
+
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
+
+
'@jridgewell/resolve-uri@3.1.2':
+
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+
engines: {node: '>=6.0.0'}
+
+
'@jridgewell/sourcemap-codec@1.5.4':
+
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
+
+
'@jridgewell/trace-mapping@0.3.29':
+
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+
+
'@microsoft/api-extractor-model@7.30.6':
+
resolution: {integrity: sha512-znmFn69wf/AIrwHya3fxX6uB5etSIn6vg4Q4RB/tb5VDDs1rqREc+AvMC/p19MUN13CZ7+V/8pkYPTj7q8tftg==}
+
+
'@microsoft/api-extractor@7.52.8':
+
resolution: {integrity: sha512-cszYIcjiNscDoMB1CIKZ3My61+JOhpERGlGr54i6bocvGLrcL/wo9o+RNXMBrb7XgLtKaizZWUpqRduQuHQLdg==}
+
hasBin: true
+
+
'@microsoft/tsdoc-config@0.17.1':
+
resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==}
+
+
'@microsoft/tsdoc@0.15.1':
+
resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
+
+
'@nodelib/fs.scandir@2.1.5':
+
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+
engines: {node: '>= 8'}
+
+
'@nodelib/fs.stat@2.0.5':
+
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+
engines: {node: '>= 8'}
+
+
'@nodelib/fs.walk@1.2.8':
+
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+
engines: {node: '>= 8'}
+
+
'@nothing-but/utils@0.17.0':
+
resolution: {integrity: sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==}
+
+
'@pnpm/config.env-replace@1.1.0':
+
resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
+
engines: {node: '>=12.22.0'}
+
+
'@pnpm/network.ca-file@1.0.2':
+
resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==}
+
engines: {node: '>=12.22.0'}
+
+
'@pnpm/npm-conf@2.3.1':
+
resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
+
engines: {node: '>=12'}
+
+
'@polka/url@1.0.0-next.29':
+
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+
+
'@quansync/fs@0.1.3':
+
resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}
+
engines: {node: '>=20.0.0'}
+
+
'@rollup/pluginutils@5.2.0':
+
resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
+
engines: {node: '>=14.0.0'}
+
peerDependencies:
+
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+
peerDependenciesMeta:
+
rollup:
+
optional: true
+
+
'@rollup/rollup-android-arm-eabi@4.44.2':
+
resolution: {integrity: sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==}
+
cpu: [arm]
+
os: [android]
+
+
'@rollup/rollup-android-arm64@4.44.2':
+
resolution: {integrity: sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==}
+
cpu: [arm64]
+
os: [android]
+
+
'@rollup/rollup-darwin-arm64@4.44.2':
+
resolution: {integrity: sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@rollup/rollup-darwin-x64@4.44.2':
+
resolution: {integrity: sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==}
+
cpu: [x64]
+
os: [darwin]
+
+
'@rollup/rollup-freebsd-arm64@4.44.2':
+
resolution: {integrity: sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==}
+
cpu: [arm64]
+
os: [freebsd]
+
+
'@rollup/rollup-freebsd-x64@4.44.2':
+
resolution: {integrity: sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==}
+
cpu: [x64]
+
os: [freebsd]
+
+
'@rollup/rollup-linux-arm-gnueabihf@4.44.2':
+
resolution: {integrity: sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==}
+
cpu: [arm]
+
os: [linux]
+
+
'@rollup/rollup-linux-arm-musleabihf@4.44.2':
+
resolution: {integrity: sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==}
+
cpu: [arm]
+
os: [linux]
+
+
'@rollup/rollup-linux-arm64-gnu@4.44.2':
+
resolution: {integrity: sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==}
+
cpu: [arm64]
+
os: [linux]
+
+
'@rollup/rollup-linux-arm64-musl@4.44.2':
+
resolution: {integrity: sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==}
+
cpu: [arm64]
+
os: [linux]
+
+
'@rollup/rollup-linux-loongarch64-gnu@4.44.2':
+
resolution: {integrity: sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==}
+
cpu: [loong64]
+
os: [linux]
+
+
'@rollup/rollup-linux-powerpc64le-gnu@4.44.2':
+
resolution: {integrity: sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==}
+
cpu: [ppc64]
+
os: [linux]
+
+
'@rollup/rollup-linux-riscv64-gnu@4.44.2':
+
resolution: {integrity: sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@rollup/rollup-linux-riscv64-musl@4.44.2':
+
resolution: {integrity: sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==}
+
cpu: [riscv64]
+
os: [linux]
+
+
'@rollup/rollup-linux-s390x-gnu@4.44.2':
+
resolution: {integrity: sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==}
+
cpu: [s390x]
+
os: [linux]
+
+
'@rollup/rollup-linux-x64-gnu@4.44.2':
+
resolution: {integrity: sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==}
+
cpu: [x64]
+
os: [linux]
+
+
'@rollup/rollup-linux-x64-musl@4.44.2':
+
resolution: {integrity: sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==}
+
cpu: [x64]
+
os: [linux]
+
+
'@rollup/rollup-win32-arm64-msvc@4.44.2':
+
resolution: {integrity: sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==}
+
cpu: [arm64]
+
os: [win32]
+
+
'@rollup/rollup-win32-ia32-msvc@4.44.2':
+
resolution: {integrity: sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==}
+
cpu: [ia32]
+
os: [win32]
+
+
'@rollup/rollup-win32-x64-msvc@4.44.2':
+
resolution: {integrity: sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==}
+
cpu: [x64]
+
os: [win32]
+
+
'@rushstack/node-core-library@5.13.1':
+
resolution: {integrity: sha512-5yXhzPFGEkVc9Fu92wsNJ9jlvdwz4RNb2bMso+/+TH0nMm1jDDDsOIf4l8GAkPxGuwPw5DH24RliWVfSPhlW/Q==}
+
peerDependencies:
+
'@types/node': '*'
+
peerDependenciesMeta:
+
'@types/node':
+
optional: true
+
+
'@rushstack/rig-package@0.5.3':
+
resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==}
+
+
'@rushstack/terminal@0.15.3':
+
resolution: {integrity: sha512-DGJ0B2Vm69468kZCJkPj3AH5nN+nR9SPmC0rFHtzsS4lBQ7/dgOwtwVxYP7W9JPDMuRBkJ4KHmWKr036eJsj9g==}
+
peerDependencies:
+
'@types/node': '*'
+
peerDependenciesMeta:
+
'@types/node':
+
optional: true
+
+
'@rushstack/ts-command-line@5.0.1':
+
resolution: {integrity: sha512-bsbUucn41UXrQK7wgM8CNM/jagBytEyJqXw/umtI8d68vFm1Jwxh1OtLrlW7uGZgjCWiiPH6ooUNa1aVsuVr3Q==}
+
+
'@solid-devtools/debugger@0.28.1':
+
resolution: {integrity: sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==}
+
peerDependencies:
+
solid-js: ^1.9.0
+
+
'@solid-devtools/shared@0.20.0':
+
resolution: {integrity: sha512-o5TACmUOQsxpzpOKCjbQqGk8wL8PMi+frXG9WNu4Lh3PQVUB6hs95Kl/S8xc++zwcMguUKZJn8h5URUiMOca6Q==}
+
peerDependencies:
+
solid-js: ^1.9.0
+
+
'@solid-primitives/bounds@0.1.3':
+
resolution: {integrity: sha512-UbiyKMdSPmtijcEDnYLQL3zzaejpwWDAJJ4Gt5P0hgVs6A72piov0GyNw7V2SroH7NZFwxlYS22YmOr8A5xc1Q==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/event-listener@2.4.3':
+
resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/keyboard@1.3.3':
+
resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/media@2.3.3':
+
resolution: {integrity: sha512-hQ4hLOGvfbugQi5Eu1BFWAIJGIAzztq9x0h02xgBGl2l0Jaa3h7tg6bz5tV1NSuNYVGio4rPoa7zVQQLkkx9dA==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/refs@1.1.2':
+
resolution: {integrity: sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/resize-observer@2.1.3':
+
resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/rootless@1.5.2':
+
resolution: {integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/scheduled@1.5.2':
+
resolution: {integrity: sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/static-store@0.1.2':
+
resolution: {integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/styles@0.1.2':
+
resolution: {integrity: sha512-7iX5K+J5b1PRrbgw3Ki92uvU2LgQ0Kd/QMsrAZxDg5dpUBwMyTijZkA3bbs1ikZsT1oQhS41bTyKbjrXeU0Awg==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@solid-primitives/utils@6.3.2':
+
resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==}
+
peerDependencies:
+
solid-js: ^1.6.12
+
+
'@types/argparse@1.0.38':
+
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
+
+
'@types/babel__core@7.20.5':
+
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+
'@types/babel__generator@7.27.0':
+
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+
'@types/babel__template@7.4.4':
+
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+
'@types/babel__traverse@7.20.7':
+
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
+
+
'@types/estree@1.0.8':
+
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+
'@types/filesystem@0.0.36':
+
resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==}
+
+
'@types/filewriter@0.0.33':
+
resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==}
+
+
'@types/har-format@1.2.16':
+
resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==}
+
+
'@types/json-schema@7.0.15':
+
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+
'@types/minimatch@3.0.5':
+
resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
+
+
'@types/node@24.0.10':
+
resolution: {integrity: sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==}
+
+
'@types/webextension-polyfill@0.8.3':
+
resolution: {integrity: sha512-GN+Hjzy9mXjWoXKmaicTegv3FJ0WFZ3aYz77Wk8TMp1IY3vEzvzj1vnsa0ggV7vMI1i+PUxe4qqnIJKCzf9aTg==}
+
+
'@types/yauzl@2.10.3':
+
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
+
'@typescript-eslint/eslint-plugin@8.35.1':
+
resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
'@typescript-eslint/parser': ^8.35.1
+
eslint: ^8.57.0 || ^9.0.0
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/parser@8.35.1':
+
resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
eslint: ^8.57.0 || ^9.0.0
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/project-service@8.35.1':
+
resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/scope-manager@8.35.1':
+
resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@typescript-eslint/tsconfig-utils@8.35.1':
+
resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/type-utils@8.35.1':
+
resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
eslint: ^8.57.0 || ^9.0.0
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/types@8.35.1':
+
resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@typescript-eslint/typescript-estree@8.35.1':
+
resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/utils@8.35.1':
+
resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
eslint: ^8.57.0 || ^9.0.0
+
typescript: '>=4.8.4 <5.9.0'
+
+
'@typescript-eslint/visitor-keys@8.35.1':
+
resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
'@unocss/astro@66.3.3':
+
resolution: {integrity: sha512-q26EfadSMmEXZpWDKsJF9anBCfhYDmWljVpDZ2Wo8K48IbZMUXrWfiAiUc6ijE/A/rADfHk8bp3a3GE01t3I9A==}
+
peerDependencies:
+
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
+
peerDependenciesMeta:
+
vite:
+
optional: true
+
+
'@unocss/cli@66.3.3':
+
resolution: {integrity: sha512-U0HoDcwi/DetqP5zDT3dfxG94pC3TI0PfxmpdTfPY7xEylIdLbV89fb70CvJVysDSQJIuw6TYwqS1ZlHoYNKTA==}
+
engines: {node: '>=14'}
+
hasBin: true
+
+
'@unocss/config@66.3.3':
+
resolution: {integrity: sha512-D/UxnAmkabapqWU4tF85dWWhNfCUyNutWmd4AD2VsQRZOykufJedLV74r3Z3XhoPJn4IGr3BKZm5/rflf5viDg==}
+
engines: {node: '>=14'}
+
+
'@unocss/core@66.3.3':
+
resolution: {integrity: sha512-6WFLd92TJelVQARtCGaF+EgEoHKIVe43gkGXVoWILu0HUDRWdhv+cpcyX0RTJV22Y976AxeneU7/zmhAh+CXNg==}
+
+
'@unocss/extractor-arbitrary-variants@66.3.3':
+
resolution: {integrity: sha512-TXzjH6FcITQ8V2x7ETHgVOlAHf3ll/ysxL+W4fMROm8jP/o7jvsg36tRfOwU0sDGo/qoCPux82ix9e6/JW0oqQ==}
+
+
'@unocss/inspector@66.3.3':
+
resolution: {integrity: sha512-NsK1WRWez2Mzk4+ophtBdXel8nGaPkIDa9lYSFMdKLF/1jNW23txeEL8CsD6/CK8K0BsR11rhLKhUrzyrjfBSQ==}
+
+
'@unocss/postcss@66.3.3':
+
resolution: {integrity: sha512-VKq+BtfPIZbLeAeZFprtKZJAyFBOqA8qpQm+vmWBiBia70JzkwfF2SMNIHiGt022yRo9ZmjnI9uRTxSzqXUsUQ==}
+
engines: {node: '>=14'}
+
peerDependencies:
+
postcss: ^8.4.21
+
+
'@unocss/preset-attributify@66.3.3':
+
resolution: {integrity: sha512-22+0Cqqu09q+xHfZ3Wk8Coxe5m6PmpgWz4U5xrEC8056UfG3Q1KEqoCxy2wySJIq8SqxQ30Nlll7oMa31B8Krw==}
+
+
'@unocss/preset-icons@66.3.3':
+
resolution: {integrity: sha512-Bmhiev05BN/horlgnyZ8gzQWZKd7oVpUBWD66X7U/dgkLdO6B5GIIsdO5Fi7JLeMDmyXm6vlYk0YQhiTbx8l9w==}
+
+
'@unocss/preset-mini@66.3.3':
+
resolution: {integrity: sha512-pz8rgvHRYS/6fsZNtG7iArLzwANnLy5GkHY/lbuqkWhO2S2Nf7kpJCbR/uV/XeuFsLnYcZW3NLOmelfvZvJamA==}
+
+
'@unocss/preset-tagify@66.3.3':
+
resolution: {integrity: sha512-L1Ez7Y4uBaW+wiv1BOQygpfhseSt3EZ53jqkl7fxl1EKVsJy6SuZgJxlXEHUYp9xYdSp6EHq2CfL8UevaR+loA==}
+
+
'@unocss/preset-typography@66.3.3':
+
resolution: {integrity: sha512-aQXiGCObvWD9grfUpm0d5nzN+Cpvag0rHP39UjUKb0xSTzY09VzwDrua4kWVO5wJLNK6/L70osyhEgmC3qToxA==}
+
+
'@unocss/preset-uno@66.3.3':
+
resolution: {integrity: sha512-Tiho4LidpuMHrB19GHTU6XrL0A5eFELHk9ebQ/3WeTy+K/9a6Hn5zsHJe5UCtOsEcUdKB33oZx0hXUp93hb/YQ==}
+
+
'@unocss/preset-web-fonts@66.3.3':
+
resolution: {integrity: sha512-ysKZeC7TXxRiqnNL9GxZFGMKFAHXrcaqozPaEOIJ40dvzbJt8IMLyFndZkcFMcgDCV0pFh/y37mGxxxARO9+pQ==}
+
+
'@unocss/preset-wind3@66.3.3':
+
resolution: {integrity: sha512-iXmjvPqvmPTo4z7epQDqHxzlGRsbLJEgfETqTrRJeagvFG7Gs+ajS8cQhbf6wL01dSRHjvhVXi3MsIvqfHHXOw==}
+
+
'@unocss/preset-wind4@66.3.3':
+
resolution: {integrity: sha512-JSJTXVJel6kX+u4Ktt6JGnukYWYhKxmjgORTwclUpokRHgEoD+xsh0Rz4YGJ1fWSnzNslNQhWP9yDRByVPHWwA==}
+
+
'@unocss/preset-wind@66.3.3':
+
resolution: {integrity: sha512-3Mxl/TDPcv8nNKdFe3WKdlXE6de+lCaaizEH86BILW3ZeyPU9aKzWcZIoxohla0a6zMxDQ2+Gf+7EwaOvpqo7Q==}
+
+
'@unocss/reset@66.3.3':
+
resolution: {integrity: sha512-VIeR/mIcCL89/1uA1KM1QCYca4aeIGqEHMTJL1nCD4v+7wk6XhNXhsp5gMIHo+V804SUSmATWaeHTiKpiFu7AQ==}
+
+
'@unocss/rule-utils@66.3.3':
+
resolution: {integrity: sha512-QKgVGV5nRRnK44/reUKFLAc5UGyl98vz3hrfk8JI8pVza58vmQWTdAB2rIpNJ5a5j+EkWfDOUlGQaOrIeYGLdg==}
+
engines: {node: '>=14'}
+
+
'@unocss/transformer-attributify-jsx@66.3.3':
+
resolution: {integrity: sha512-ENNYFk5wrI4jlxn0tWGeR9QGxflAfZue3X2ABg0KSVOiYyIOsrHqtdoiLYkuCA9idRlBZPQxePJKcPWt1r/tYA==}
+
+
'@unocss/transformer-compile-class@66.3.3':
+
resolution: {integrity: sha512-VTEFuwp3iajGWyEFwmO5LRvOjgZM1TK+4rX5Q79xyTAPkLAKgOa03Ne8+kU8oG0TQEa4mXVw6ul9McM7UBJh1w==}
+
+
'@unocss/transformer-directives@66.3.3':
+
resolution: {integrity: sha512-11T7fmYk/XZcqFDn4qiIvs04mJhUtAoha5Y99bVE+L3byWa6BT4jb5aSAKk+24q5aynwgB++4RgfQxarj69WTw==}
+
+
'@unocss/transformer-variant-group@66.3.3':
+
resolution: {integrity: sha512-uhK81pbJfXJFYaXxOoIFVEG8/Kx1iaAkTwRB6c+WNUfl9GiKyYQcrI7bETgCPPbg230Z68jVICBgBATeLJ31vQ==}
+
+
'@unocss/vite@66.3.3':
+
resolution: {integrity: sha512-uu3smeEW6q36ri6vydRx2GiTGF5O/J80Fr4GLmLiwfpt2YnPHraO7XHVR5/mwG2Oz5Kov0uGvxVsdgxZABKRgw==}
+
peerDependencies:
+
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
+
+
'@volar/language-core@2.4.17':
+
resolution: {integrity: sha512-chmRZMbKmcGpKMoO7Reb70uiLrzo0KWC2CkFttKUuKvrE+VYgi+fL9vWMJ07Fv5ulX0V1TAyyacN9q3nc5/ecA==}
+
+
'@volar/source-map@2.4.17':
+
resolution: {integrity: sha512-QDybtQyO3Ms/NjFqNHTC5tbDN2oK5VH7ZaKrcubtfHBDj63n2pizHC3wlMQ+iT55kQXZUUAbmBX5L1C8CHFeBw==}
+
+
'@volar/typescript@2.4.17':
+
resolution: {integrity: sha512-3paEFNh4P5DkgNUB2YkTRrfUekN4brAXxd3Ow1syMqdIPtCZHbUy4AW99S5RO/7mzyTWPMdDSo3mqTpB/LPObQ==}
+
+
'@vue/compiler-core@3.5.17':
+
resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==}
+
+
'@vue/compiler-dom@3.5.17':
+
resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==}
+
+
'@vue/compiler-sfc@3.5.17':
+
resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==}
+
+
'@vue/compiler-ssr@3.5.17':
+
resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==}
+
+
'@vue/compiler-vue2@2.7.16':
+
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+
+
'@vue/language-core@2.2.0':
+
resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==}
+
peerDependencies:
+
typescript: '*'
+
peerDependenciesMeta:
+
typescript:
+
optional: true
+
+
'@vue/reactivity@3.5.17':
+
resolution: {integrity: sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==}
+
+
'@vue/runtime-core@3.5.17':
+
resolution: {integrity: sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==}
+
+
'@vue/runtime-dom@3.5.17':
+
resolution: {integrity: sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==}
+
+
'@vue/server-renderer@3.5.17':
+
resolution: {integrity: sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==}
+
peerDependencies:
+
vue: 3.5.17
+
+
'@vue/shared@3.5.17':
+
resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==}
+
+
'@webext-core/fake-browser@1.3.2':
+
resolution: {integrity: sha512-jFyPWWz+VkHAC9DRIiIPOyu6X/KlC8dYqSKweHz6tsDb86QawtVgZSpYcM+GOQBlZc5DHFo92jJ7cIq4uBnU0A==}
+
+
'@webext-core/isolated-element@1.1.2':
+
resolution: {integrity: sha512-CNHYhsIR8TPkPb+4yqTIuzaGnVn/Fshev5fyoPW+/8Cyc93tJbCjP9PC1XSK6fDWu+xASdPHLZaoa2nWAYoxeQ==}
+
+
'@webext-core/match-patterns@1.0.3':
+
resolution: {integrity: sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A==}
+
+
'@wxt-dev/browser@0.0.326':
+
resolution: {integrity: sha512-4Pb4ES7jMsxYFHEEhK005bOL2BnDEXO3jjZTOvF0gWdota8Ytpg81VtKVSC1ohj17C6tE6oNI3FdcVRfKUBl3Q==}
+
+
'@wxt-dev/module-solid@1.1.3':
+
resolution: {integrity: sha512-iQthYvhe3OieJTLSq9z6747cYKHZ7XOVX/Cl5Rop/k+gcJ795u0j4lvVs3Tn+55uAC7xEye0eG2sLocaXZDZcg==}
+
peerDependencies:
+
wxt: '>=0.19.16'
+
+
'@wxt-dev/storage@1.1.1':
+
resolution: {integrity: sha512-H1vYWeoWz03INV4r+sLYDFil88b3rgMMfgGp/EXy3bLbveJeiMiFs/G0bsBN2Ra87Iqlf2oVYRb/ABQpAugbew==}
+
+
acorn-jsx@5.3.2:
+
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+
peerDependencies:
+
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+
acorn@8.15.0:
+
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+
engines: {node: '>=0.4.0'}
+
hasBin: true
+
+
adm-zip@0.5.16:
+
resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+
engines: {node: '>=12.0'}
+
+
ajv-draft-04@1.0.0:
+
resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+
peerDependencies:
+
ajv: ^8.5.0
+
peerDependenciesMeta:
+
ajv:
+
optional: true
+
+
ajv-formats@3.0.1:
+
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+
peerDependencies:
+
ajv: ^8.0.0
+
peerDependenciesMeta:
+
ajv:
+
optional: true
+
+
ajv@6.12.6:
+
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+
ajv@8.12.0:
+
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+
+
ajv@8.13.0:
+
resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==}
+
+
alien-signals@0.4.14:
+
resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==}
+
+
ansi-align@3.0.1:
+
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+
+
ansi-escapes@7.0.0:
+
resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+
engines: {node: '>=18'}
+
+
ansi-regex@5.0.1:
+
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+
engines: {node: '>=8'}
+
+
ansi-regex@6.1.0:
+
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+
engines: {node: '>=12'}
+
+
ansi-styles@4.3.0:
+
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+
engines: {node: '>=8'}
+
+
ansi-styles@6.2.1:
+
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+
engines: {node: '>=12'}
+
+
any-promise@1.3.0:
+
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+
anymatch@3.1.3:
+
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+
engines: {node: '>= 8'}
+
+
argparse@1.0.10:
+
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+
argparse@2.0.1:
+
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+
array-differ@4.0.0:
+
resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
array-union@3.0.1:
+
resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==}
+
engines: {node: '>=12'}
+
+
async-mutex@0.5.0:
+
resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==}
+
+
async@3.2.6:
+
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+
atomic-sleep@1.0.0:
+
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+
engines: {node: '>=8.0.0'}
+
+
atomically@2.0.3:
+
resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==}
+
+
babel-plugin-jsx-dom-expressions@0.39.8:
+
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==}
+
peerDependencies:
+
'@babel/core': ^7.20.12
+
+
babel-preset-solid@1.9.6:
+
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==}
+
peerDependencies:
+
'@babel/core': ^7.0.0
+
+
balanced-match@1.0.2:
+
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+
base64-js@1.5.1:
+
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+
big-integer@1.6.52:
+
resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
+
engines: {node: '>=0.6'}
+
+
binary-extensions@2.3.0:
+
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+
engines: {node: '>=8'}
+
+
bl@5.1.0:
+
resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
+
+
bluebird@3.7.2:
+
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+
+
boolbase@1.0.0:
+
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+
boxen@8.0.1:
+
resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==}
+
engines: {node: '>=18'}
+
+
bplist-parser@0.2.0:
+
resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
+
engines: {node: '>= 5.10.0'}
+
+
brace-expansion@1.1.12:
+
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+
brace-expansion@2.0.2:
+
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+
braces@3.0.3:
+
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+
engines: {node: '>=8'}
+
+
browserslist@4.25.1:
+
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
+
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+
hasBin: true
+
+
buffer-crc32@0.2.13:
+
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
+
buffer-from@1.1.2:
+
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+
buffer@6.0.3:
+
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+
bundle-name@3.0.0:
+
resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
+
engines: {node: '>=12'}
+
+
bundle-name@4.1.0:
+
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+
engines: {node: '>=18'}
+
+
c12@3.0.4:
+
resolution: {integrity: sha512-t5FaZTYbbCtvxuZq9xxIruYydrAGsJ+8UdP0pZzMiK2xl/gNiSOy0OxhLzHUEEb0m1QXYqfzfvyIFEmz/g9lqg==}
+
peerDependencies:
+
magicast: ^0.3.5
+
peerDependenciesMeta:
+
magicast:
+
optional: true
+
+
cac@6.7.14:
+
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+
engines: {node: '>=8'}
+
+
callsites@3.1.0:
+
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+
engines: {node: '>=6'}
+
+
camelcase@8.0.0:
+
resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
+
engines: {node: '>=16'}
+
+
caniuse-lite@1.0.30001727:
+
resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==}
+
+
chalk@4.1.2:
+
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+
engines: {node: '>=10'}
+
+
chalk@5.4.1:
+
resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+
chokidar@3.6.0:
+
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+
engines: {node: '>= 8.10.0'}
+
+
chokidar@4.0.3:
+
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+
engines: {node: '>= 14.16.0'}
+
+
chrome-launcher@1.1.2:
+
resolution: {integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==}
+
engines: {node: '>=12.13.0'}
+
hasBin: true
+
+
ci-info@4.3.0:
+
resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==}
+
engines: {node: '>=8'}
+
+
citty@0.1.6:
+
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
+
cli-boxes@3.0.0:
+
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+
engines: {node: '>=10'}
+
+
cli-cursor@4.0.0:
+
resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
cli-cursor@5.0.0:
+
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+
engines: {node: '>=18'}
+
+
cli-highlight@2.1.11:
+
resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==}
+
engines: {node: '>=8.0.0', npm: '>=5.0.0'}
+
hasBin: true
+
+
cli-spinners@2.9.2:
+
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+
engines: {node: '>=6'}
+
+
cli-truncate@4.0.0:
+
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+
engines: {node: '>=18'}
+
+
cliui@7.0.4:
+
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+
cliui@8.0.1:
+
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+
engines: {node: '>=12'}
+
+
clone@1.0.4:
+
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+
engines: {node: '>=0.8'}
+
+
color-convert@2.0.1:
+
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+
engines: {node: '>=7.0.0'}
+
+
color-name@1.1.4:
+
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+
colorette@2.0.20:
+
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+
+
commander@2.9.0:
+
resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==}
+
engines: {node: '>= 0.6.x'}
+
+
commander@9.5.0:
+
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+
engines: {node: ^12.20.0 || >=14}
+
+
compare-versions@6.1.1:
+
resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
+
+
concat-map@0.0.1:
+
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+
concat-stream@1.6.2:
+
resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
+
engines: {'0': node >= 0.8}
+
+
confbox@0.1.8:
+
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+
confbox@0.2.2:
+
resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+
+
config-chain@1.1.13:
+
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+
+
configstore@7.0.0:
+
resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==}
+
engines: {node: '>=18'}
+
+
consola@3.4.2:
+
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+
engines: {node: ^14.18.0 || >=16.10.0}
+
+
convert-source-map@2.0.0:
+
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+
core-util-is@1.0.3:
+
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+
cross-spawn@7.0.6:
+
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+
engines: {node: '>= 8'}
+
+
css-select@5.2.2:
+
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+
css-tree@3.1.0:
+
resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+
css-what@6.2.2:
+
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+
engines: {node: '>= 6'}
+
+
cssom@0.5.0:
+
resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
+
+
csstype@3.1.3:
+
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+
de-indent@1.0.2:
+
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
+
debounce@1.2.1:
+
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
+
+
debug@2.6.9:
+
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+
peerDependencies:
+
supports-color: '*'
+
peerDependenciesMeta:
+
supports-color:
+
optional: true
+
+
debug@4.3.7:
+
resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+
engines: {node: '>=6.0'}
+
peerDependencies:
+
supports-color: '*'
+
peerDependenciesMeta:
+
supports-color:
+
optional: true
+
+
debug@4.4.1:
+
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+
engines: {node: '>=6.0'}
+
peerDependencies:
+
supports-color: '*'
+
peerDependenciesMeta:
+
supports-color:
+
optional: true
+
+
deep-extend@0.6.0:
+
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+
engines: {node: '>=4.0.0'}
+
+
deep-is@0.1.4:
+
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+
default-browser-id@3.0.0:
+
resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
+
engines: {node: '>=12'}
+
+
default-browser-id@5.0.0:
+
resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+
engines: {node: '>=18'}
+
+
default-browser@4.0.0:
+
resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
+
engines: {node: '>=14.16'}
+
+
default-browser@5.2.1:
+
resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+
engines: {node: '>=18'}
+
+
defaults@1.0.4:
+
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+
define-lazy-prop@2.0.0:
+
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+
engines: {node: '>=8'}
+
+
define-lazy-prop@3.0.0:
+
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+
engines: {node: '>=12'}
+
+
defu@6.1.4:
+
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
+
dequal@2.0.3:
+
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+
engines: {node: '>=6'}
+
+
destr@2.0.5:
+
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
+
+
dom-serializer@2.0.0:
+
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+
domelementtype@2.3.0:
+
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+
domhandler@5.0.3:
+
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+
engines: {node: '>= 4'}
+
+
domutils@3.2.2:
+
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+
dot-prop@9.0.0:
+
resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==}
+
engines: {node: '>=18'}
+
+
dotenv-expand@12.0.2:
+
resolution: {integrity: sha512-lXpXz2ZE1cea1gL4sz2Ipj8y4PiVjytYr3Ij0SWoms1PGxIv7m2CRKuRuCRtHdVuvM/hNJPMxt5PbhboNC4dPQ==}
+
engines: {node: '>=12'}
+
+
dotenv@16.6.1:
+
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
+
engines: {node: '>=12'}
+
+
duplexer@0.1.2:
+
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+
+
electron-to-chromium@1.5.179:
+
resolution: {integrity: sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==}
+
+
emoji-regex@10.4.0:
+
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+
+
emoji-regex@8.0.0:
+
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+
end-of-stream@1.4.5:
+
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+
entities@4.5.0:
+
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+
engines: {node: '>=0.12'}
+
+
entities@6.0.1:
+
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
+
engines: {node: '>=0.12'}
+
+
environment@1.1.0:
+
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+
engines: {node: '>=18'}
+
+
error-ex@1.3.2:
+
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+
es-module-lexer@1.7.0:
+
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+
es6-error@4.1.1:
+
resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
+
+
esbuild@0.25.5:
+
resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
+
engines: {node: '>=18'}
+
hasBin: true
+
+
escalade@3.2.0:
+
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+
engines: {node: '>=6'}
+
+
escape-goat@4.0.0:
+
resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==}
+
engines: {node: '>=12'}
+
+
escape-string-regexp@4.0.0:
+
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+
engines: {node: '>=10'}
+
+
escape-string-regexp@5.0.0:
+
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+
engines: {node: '>=12'}
+
+
eslint-config-prettier@10.1.5:
+
resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==}
+
hasBin: true
+
peerDependencies:
+
eslint: '>=7.0.0'
+
+
eslint-plugin-solid@0.14.5:
+
resolution: {integrity: sha512-nfuYK09ah5aJG/oEN6P1qziy1zLgW4PDWe75VNPi4CEFYk1x2AEqwFeQfEPR7gNn0F2jOeqKhx2E+5oNCOBYWQ==}
+
engines: {node: '>=18.0.0'}
+
peerDependencies:
+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
+
typescript: '>=4.8.4'
+
+
eslint-scope@8.4.0:
+
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
eslint-visitor-keys@3.4.3:
+
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+
eslint-visitor-keys@4.2.1:
+
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
eslint@9.30.1:
+
resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
hasBin: true
+
peerDependencies:
+
jiti: '*'
+
peerDependenciesMeta:
+
jiti:
+
optional: true
+
+
esm-env@1.2.2:
+
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
+
+
espree@10.4.0:
+
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+
esquery@1.6.0:
+
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+
engines: {node: '>=0.10'}
+
+
esrecurse@4.3.0:
+
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+
engines: {node: '>=4.0'}
+
+
estraverse@5.3.0:
+
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+
engines: {node: '>=4.0'}
+
+
estree-walker@2.0.2:
+
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+
estree-walker@3.0.3:
+
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+
esutils@2.0.3:
+
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+
engines: {node: '>=0.10.0'}
+
+
eventemitter3@5.0.1:
+
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+
execa@5.1.1:
+
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+
engines: {node: '>=10'}
+
+
execa@7.2.0:
+
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
+
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+
+
exsolve@1.0.7:
+
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
+
+
extract-zip@2.0.1:
+
resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+
engines: {node: '>= 10.17.0'}
+
hasBin: true
+
+
fast-deep-equal@3.1.3:
+
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+
fast-glob@3.3.3:
+
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+
engines: {node: '>=8.6.0'}
+
+
fast-json-stable-stringify@2.1.0:
+
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+
fast-levenshtein@2.0.6:
+
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+
fast-redact@3.5.0:
+
resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
+
engines: {node: '>=6'}
+
+
fastq@1.19.1:
+
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+
fd-slicer@1.1.0:
+
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+
+
fdir@6.4.6:
+
resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+
peerDependencies:
+
picomatch: ^3 || ^4
+
peerDependenciesMeta:
+
picomatch:
+
optional: true
+
+
file-entry-cache@8.0.0:
+
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+
engines: {node: '>=16.0.0'}
+
+
filesize@10.1.6:
+
resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
+
engines: {node: '>= 10.4.0'}
+
+
fill-range@7.1.1:
+
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+
engines: {node: '>=8'}
+
+
find-up@5.0.0:
+
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+
engines: {node: '>=10'}
+
+
firefox-profile@4.7.0:
+
resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==}
+
engines: {node: '>=18'}
+
hasBin: true
+
+
flat-cache@4.0.1:
+
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+
engines: {node: '>=16'}
+
+
flatted@3.3.3:
+
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
+
formdata-node@6.0.3:
+
resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==}
+
engines: {node: '>= 18'}
+
+
fs-extra@11.3.0:
+
resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
+
engines: {node: '>=14.14'}
+
+
fsevents@2.3.3:
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+
os: [darwin]
+
+
function-bind@1.1.2:
+
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+
fx-runner@1.4.0:
+
resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==}
+
hasBin: true
+
+
gensync@1.0.0-beta.2:
+
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+
engines: {node: '>=6.9.0'}
+
+
get-caller-file@2.0.5:
+
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+
engines: {node: 6.* || 8.* || >= 10.*}
+
+
get-east-asian-width@1.3.0:
+
resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+
engines: {node: '>=18'}
+
+
get-port-please@3.1.2:
+
resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==}
+
+
get-stream@5.2.0:
+
resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+
engines: {node: '>=8'}
+
+
get-stream@6.0.1:
+
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+
engines: {node: '>=10'}
+
+
giget@2.0.0:
+
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
+
hasBin: true
+
+
glob-parent@5.1.2:
+
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+
engines: {node: '>= 6'}
+
+
glob-parent@6.0.2:
+
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+
engines: {node: '>=10.13.0'}
+
+
glob-to-regexp@0.4.1:
+
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+
global-directory@4.0.1:
+
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
+
engines: {node: '>=18'}
+
+
globals@14.0.0:
+
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+
engines: {node: '>=18'}
+
+
globals@15.15.0:
+
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
+
engines: {node: '>=18'}
+
+
globals@16.3.0:
+
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
+
engines: {node: '>=18'}
+
+
graceful-fs@4.2.10:
+
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+
+
graceful-fs@4.2.11:
+
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+
graceful-readlink@1.0.1:
+
resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
+
+
graphemer@1.4.0:
+
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+
growly@1.3.0:
+
resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==}
+
+
gzip-size@6.0.0:
+
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
+
engines: {node: '>=10'}
+
+
has-flag@4.0.0:
+
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+
engines: {node: '>=8'}
+
+
hasown@2.0.2:
+
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+
engines: {node: '>= 0.4'}
+
+
he@1.2.0:
+
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+
hasBin: true
+
+
highlight.js@10.7.3:
+
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
+
+
hookable@5.5.3:
+
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+
html-entities@2.3.3:
+
resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
+
+
html-escaper@3.0.3:
+
resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
+
+
html-tags@3.3.1:
+
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+
engines: {node: '>=8'}
+
+
htmlparser2@10.0.0:
+
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
+
+
human-signals@2.1.0:
+
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+
engines: {node: '>=10.17.0'}
+
+
human-signals@4.3.1:
+
resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
+
engines: {node: '>=14.18.0'}
+
+
ieee754@1.2.1:
+
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+
ignore@5.3.2:
+
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+
engines: {node: '>= 4'}
+
+
ignore@7.0.5:
+
resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+
engines: {node: '>= 4'}
+
+
immediate@3.0.6:
+
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+
+
import-fresh@3.3.1:
+
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+
engines: {node: '>=6'}
+
+
import-lazy@4.0.0:
+
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+
engines: {node: '>=8'}
+
+
import-meta-resolve@4.1.0:
+
resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+
+
imurmurhash@0.1.4:
+
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+
engines: {node: '>=0.8.19'}
+
+
inherits@2.0.4:
+
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+
ini@1.3.8:
+
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+
ini@4.1.1:
+
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
+
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+
ini@4.1.3:
+
resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
+
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+
inline-style-parser@0.2.4:
+
resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
+
+
is-absolute@0.1.7:
+
resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==}
+
engines: {node: '>=0.10.0'}
+
+
is-arrayish@0.2.1:
+
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+
is-binary-path@2.1.0:
+
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+
engines: {node: '>=8'}
+
+
is-core-module@2.16.1:
+
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+
engines: {node: '>= 0.4'}
+
+
is-docker@2.2.1:
+
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+
engines: {node: '>=8'}
+
hasBin: true
+
+
is-docker@3.0.0:
+
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
hasBin: true
+
+
is-extglob@2.1.1:
+
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+
engines: {node: '>=0.10.0'}
+
+
is-fullwidth-code-point@3.0.0:
+
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+
engines: {node: '>=8'}
+
+
is-fullwidth-code-point@4.0.0:
+
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+
engines: {node: '>=12'}
+
+
is-fullwidth-code-point@5.0.0:
+
resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+
engines: {node: '>=18'}
+
+
is-glob@4.0.3:
+
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+
engines: {node: '>=0.10.0'}
+
+
is-html@2.0.0:
+
resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==}
+
engines: {node: '>=8'}
+
+
is-in-ci@1.0.0:
+
resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==}
+
engines: {node: '>=18'}
+
hasBin: true
+
+
is-inside-container@1.0.0:
+
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+
engines: {node: '>=14.16'}
+
hasBin: true
+
+
is-installed-globally@1.0.0:
+
resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==}
+
engines: {node: '>=18'}
+
+
is-interactive@2.0.0:
+
resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
+
engines: {node: '>=12'}
+
+
is-npm@6.0.0:
+
resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
is-number@7.0.0:
+
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+
engines: {node: '>=0.12.0'}
+
+
is-path-inside@4.0.0:
+
resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
+
engines: {node: '>=12'}
+
+
is-plain-object@2.0.4:
+
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+
engines: {node: '>=0.10.0'}
+
+
is-potential-custom-element-name@1.0.1:
+
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+
+
is-primitive@3.0.1:
+
resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==}
+
engines: {node: '>=0.10.0'}
+
+
is-relative@0.1.3:
+
resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==}
+
engines: {node: '>=0.10.0'}
+
+
is-stream@2.0.1:
+
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+
engines: {node: '>=8'}
+
+
is-stream@3.0.0:
+
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
is-unicode-supported@1.3.0:
+
resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
+
engines: {node: '>=12'}
+
+
is-unicode-supported@2.1.0:
+
resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
+
engines: {node: '>=18'}
+
+
is-what@4.1.16:
+
resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+
engines: {node: '>=12.13'}
+
+
is-wsl@2.2.0:
+
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+
engines: {node: '>=8'}
+
+
is-wsl@3.1.0:
+
resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+
engines: {node: '>=16'}
+
+
isarray@1.0.0:
+
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+
isexe@1.1.2:
+
resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==}
+
+
isexe@2.0.0:
+
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+
isobject@3.0.1:
+
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+
engines: {node: '>=0.10.0'}
+
+
jiti@2.4.2:
+
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
+
hasBin: true
+
+
jju@1.4.0:
+
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+
+
js-tokens@4.0.0:
+
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+
js-tokens@9.0.1:
+
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
+
js-yaml@4.1.0:
+
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+
hasBin: true
+
+
jsesc@3.1.0:
+
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+
engines: {node: '>=6'}
+
hasBin: true
+
+
json-buffer@3.0.1:
+
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+
json-parse-even-better-errors@3.0.2:
+
resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+
json-schema-traverse@0.4.1:
+
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+
json-schema-traverse@1.0.0:
+
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+
json-stable-stringify-without-jsonify@1.0.1:
+
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+
json5@2.2.3:
+
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+
engines: {node: '>=6'}
+
hasBin: true
+
+
jsonfile@6.1.0:
+
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+
jszip@3.10.1:
+
resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
+
+
kebab-case@1.0.2:
+
resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==}
+
+
keyv@4.5.4:
+
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+
kleur@3.0.3:
+
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+
engines: {node: '>=6'}
+
+
known-css-properties@0.30.0:
+
resolution: {integrity: sha512-VSWXYUnsPu9+WYKkfmJyLKtIvaRJi1kXUqVmBACORXZQxT5oZDsoZ2vQP+bQFDnWtpI/4eq3MLoRMjI2fnLzTQ==}
+
+
kolorist@1.8.0:
+
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+
+
ky@1.8.1:
+
resolution: {integrity: sha512-7Bp3TpsE+L+TARSnnDpk3xg8Idi8RwSLdj6CMbNWoOARIrGrbuLGusV0dYwbZOm4bB3jHNxSw8Wk/ByDqJEnDw==}
+
engines: {node: '>=18'}
+
+
latest-version@9.0.0:
+
resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==}
+
engines: {node: '>=18'}
+
+
levn@0.4.1:
+
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+
engines: {node: '>= 0.8.0'}
+
+
lie@3.3.0:
+
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+
+
lighthouse-logger@2.0.1:
+
resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==}
+
+
lines-and-columns@2.0.4:
+
resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
linkedom@0.18.11:
+
resolution: {integrity: sha512-K03GU3FUlnhBAP0jPb7tN7YJl7LbjZx30Z8h6wgLXusnKF7+BEZvfEbdkN/lO9LfFzxN3S0ZAriDuJ/13dIsLA==}
+
+
listr2@8.3.3:
+
resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
+
engines: {node: '>=18.0.0'}
+
+
local-pkg@1.1.1:
+
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
+
engines: {node: '>=14'}
+
+
locate-path@6.0.0:
+
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+
engines: {node: '>=10'}
+
+
lodash.camelcase@4.3.0:
+
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+
lodash.kebabcase@4.1.1:
+
resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
+
lodash.merge@4.6.2:
+
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+
lodash.snakecase@4.1.1:
+
resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+
+
lodash@4.17.21:
+
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+
log-symbols@5.1.0:
+
resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
+
engines: {node: '>=12'}
+
+
log-symbols@6.0.0:
+
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
+
engines: {node: '>=18'}
+
+
log-update@6.1.0:
+
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
+
engines: {node: '>=18'}
+
+
lru-cache@5.1.1:
+
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+
lru-cache@6.0.0:
+
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+
engines: {node: '>=10'}
+
+
magic-string@0.30.17:
+
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
+
magicast@0.3.5:
+
resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+
+
make-error@1.3.6:
+
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+
many-keys-map@2.0.1:
+
resolution: {integrity: sha512-DHnZAD4phTbZ+qnJdjoNEVU1NecYoSdbOOoVmTDH46AuxDkEVh3MxTVpXq10GtcTC6mndN9dkv1rNfpjRcLnOw==}
+
+
marky@1.3.0:
+
resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
+
+
mdn-data@2.12.2:
+
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+
+
mdn-data@2.21.0:
+
resolution: {integrity: sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==}
+
+
merge-anything@5.1.7:
+
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
+
engines: {node: '>=12.13'}
+
+
merge-stream@2.0.0:
+
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+
merge2@1.4.1:
+
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+
engines: {node: '>= 8'}
+
+
micromatch@4.0.8:
+
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+
engines: {node: '>=8.6'}
+
+
mimic-fn@2.1.0:
+
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+
engines: {node: '>=6'}
+
+
mimic-fn@4.0.0:
+
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+
engines: {node: '>=12'}
+
+
mimic-function@5.0.1:
+
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+
engines: {node: '>=18'}
+
+
minimatch@10.0.3:
+
resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+
engines: {node: 20 || >=22}
+
+
minimatch@3.0.8:
+
resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==}
+
+
minimatch@3.1.2:
+
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+
minimatch@9.0.5:
+
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+
engines: {node: '>=16 || 14 >=14.17'}
+
+
minimist@1.2.8:
+
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+
mlly@1.7.4:
+
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+
+
mrmime@2.0.1:
+
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+
engines: {node: '>=10'}
+
+
ms@2.0.0:
+
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+
ms@2.1.3:
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+
muggle-string@0.4.1:
+
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
+
multimatch@6.0.0:
+
resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
mz@2.7.0:
+
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+
nano-spawn@0.2.1:
+
resolution: {integrity: sha512-/pULofvsF8mOVcl/nUeVXL/GYOEvc7eJWSIxa+K4OYUolvXa5zwSgevsn4eoHs1xvh/BO3vx/PZiD9+Ow2ZVuw==}
+
engines: {node: '>=18.19'}
+
+
nanoevents@6.0.2:
+
resolution: {integrity: sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==}
+
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+
nanoid@3.3.11:
+
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+
hasBin: true
+
+
natural-compare@1.4.0:
+
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+
node-fetch-native@1.6.6:
+
resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
+
+
node-forge@1.3.1:
+
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+
engines: {node: '>= 6.13.0'}
+
+
node-notifier@10.0.1:
+
resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==}
+
+
node-releases@2.0.19:
+
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+
normalize-path@3.0.0:
+
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+
engines: {node: '>=0.10.0'}
+
+
npm-run-path@4.0.1:
+
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+
engines: {node: '>=8'}
+
+
npm-run-path@5.3.0:
+
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
nth-check@2.1.1:
+
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+
nypm@0.6.0:
+
resolution: {integrity: sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==}
+
engines: {node: ^14.16.0 || >=16.10.0}
+
hasBin: true
+
+
object-assign@4.1.1:
+
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+
engines: {node: '>=0.10.0'}
+
+
ofetch@1.4.1:
+
resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
+
+
ohash@2.0.11:
+
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
+
+
on-exit-leak-free@2.1.2:
+
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+
engines: {node: '>=14.0.0'}
+
+
once@1.4.0:
+
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+
onetime@5.1.2:
+
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+
engines: {node: '>=6'}
+
+
onetime@6.0.0:
+
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+
engines: {node: '>=12'}
+
+
onetime@7.0.0:
+
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+
engines: {node: '>=18'}
+
+
open@10.1.2:
+
resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==}
+
engines: {node: '>=18'}
+
+
open@8.4.2:
+
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+
engines: {node: '>=12'}
+
+
open@9.1.0:
+
resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
+
engines: {node: '>=14.16'}
+
+
optionator@0.9.4:
+
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+
engines: {node: '>= 0.8.0'}
+
+
ora@6.3.1:
+
resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
ora@8.2.0:
+
resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
+
engines: {node: '>=18'}
+
+
os-shim@0.1.3:
+
resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==}
+
engines: {node: '>= 0.4.0'}
+
+
p-limit@3.1.0:
+
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+
engines: {node: '>=10'}
+
+
p-locate@5.0.0:
+
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+
engines: {node: '>=10'}
+
+
package-json@10.0.1:
+
resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==}
+
engines: {node: '>=18'}
+
+
package-manager-detector@1.3.0:
+
resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
+
+
pako@1.0.11:
+
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+
+
parent-module@1.0.1:
+
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+
engines: {node: '>=6'}
+
+
parse-json@7.1.1:
+
resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==}
+
engines: {node: '>=16'}
+
+
parse5-htmlparser2-tree-adapter@6.0.1:
+
resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
+
+
parse5@5.1.1:
+
resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==}
+
+
parse5@6.0.1:
+
resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
+
+
parse5@7.3.0:
+
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+
+
path-browserify@1.0.1:
+
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+
path-exists@4.0.0:
+
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+
engines: {node: '>=8'}
+
+
path-key@3.1.1:
+
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+
engines: {node: '>=8'}
+
+
path-key@4.0.0:
+
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+
engines: {node: '>=12'}
+
+
path-parse@1.0.7:
+
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+
pathe@2.0.3:
+
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+
pend@1.2.0:
+
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
+
perfect-debounce@1.0.0:
+
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+
+
picocolors@1.1.1:
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+
picomatch@2.3.1:
+
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+
engines: {node: '>=8.6'}
+
+
picomatch@4.0.2:
+
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+
engines: {node: '>=12'}
+
+
pino-abstract-transport@2.0.0:
+
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+
+
pino-std-serializers@7.0.0:
+
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+
+
pino@9.6.0:
+
resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==}
+
hasBin: true
+
+
pkg-types@1.3.1:
+
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+
pkg-types@2.2.0:
+
resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
+
+
postcss@8.5.6:
+
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+
engines: {node: ^10 || ^12 || >=14}
+
+
prelude-ls@1.2.1:
+
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+
engines: {node: '>= 0.8.0'}
+
+
prettier@3.5.3:
+
resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
+
engines: {node: '>=14'}
+
hasBin: true
+
+
process-nextick-args@2.0.1:
+
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+
process-warning@4.0.1:
+
resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+
+
promise-toolbox@0.21.0:
+
resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==}
+
engines: {node: '>=6'}
+
+
prompts@2.4.2:
+
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+
engines: {node: '>= 6'}
+
+
proto-list@1.2.4:
+
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+
+
publish-browser-extension@3.0.1:
+
resolution: {integrity: sha512-k0Ljop/AIGlX0M+hrYjjL/fCaFy0TmkqQGcK3uHN3ZbxYWzivF412nGco6tRawb6Nxe/fPxWh3OaewaH+l03VA==}
+
engines: {node: ^18.0.0 || >=20.0.0}
+
hasBin: true
+
+
pump@3.0.3:
+
resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+
+
punycode@2.3.1:
+
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+
engines: {node: '>=6'}
+
+
pupa@3.1.0:
+
resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==}
+
engines: {node: '>=12.20'}
+
+
quansync@0.2.10:
+
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
+
+
queue-microtask@1.2.3:
+
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+
quick-format-unescaped@4.0.4:
+
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
+
rc9@2.1.2:
+
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
+
+
rc@1.2.8:
+
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+
hasBin: true
+
+
readable-stream@2.3.8:
+
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+
readable-stream@3.6.2:
+
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+
engines: {node: '>= 6'}
+
+
readdirp@3.6.0:
+
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+
engines: {node: '>=8.10.0'}
+
+
readdirp@4.1.2:
+
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+
engines: {node: '>= 14.18.0'}
+
+
real-require@0.2.0:
+
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+
engines: {node: '>= 12.13.0'}
+
+
regenerator-runtime@0.14.1:
+
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+
registry-auth-token@5.1.0:
+
resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==}
+
engines: {node: '>=14'}
+
+
registry-url@6.0.1:
+
resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==}
+
engines: {node: '>=12'}
+
+
require-directory@2.1.1:
+
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+
engines: {node: '>=0.10.0'}
+
+
require-from-string@2.0.2:
+
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+
engines: {node: '>=0.10.0'}
+
+
resolve-from@4.0.0:
+
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+
engines: {node: '>=4'}
+
+
resolve@1.22.10:
+
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+
engines: {node: '>= 0.4'}
+
hasBin: true
+
+
restore-cursor@4.0.0:
+
resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
restore-cursor@5.1.0:
+
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+
engines: {node: '>=18'}
+
+
reusify@1.1.0:
+
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+
rfdc@1.4.1:
+
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+
rollup@4.44.2:
+
resolution: {integrity: sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==}
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+
hasBin: true
+
+
run-applescript@5.0.0:
+
resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
+
engines: {node: '>=12'}
+
+
run-applescript@7.0.0:
+
resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==}
+
engines: {node: '>=18'}
+
+
run-parallel@1.2.0:
+
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+
safe-buffer@5.1.2:
+
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+
safe-buffer@5.2.1:
+
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+
safe-stable-stringify@2.5.0:
+
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+
engines: {node: '>=10'}
+
+
sax@1.4.1:
+
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+
+
scule@1.3.0:
+
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+
+
semver@6.3.1:
+
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+
hasBin: true
+
+
semver@7.5.4:
+
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+
engines: {node: '>=10'}
+
hasBin: true
+
+
semver@7.7.2:
+
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+
engines: {node: '>=10'}
+
hasBin: true
+
+
serialize-error@9.1.1:
+
resolution: {integrity: sha512-6uZQLGyUkNA4N+Zii9fYukmNu9PEA1F5rqcwXzN/3LtBjwl2dFBbVZ1Zyn08/CGkB4H440PIemdOQBt1Wvjbrg==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
seroval-plugins@1.3.2:
+
resolution: {integrity: sha512-0QvCV2lM3aj/U3YozDiVwx9zpH0q8A60CTWIv4Jszj/givcudPb48B+rkU5D51NJ0pTpweGMttHjboPa9/zoIQ==}
+
engines: {node: '>=10'}
+
peerDependencies:
+
seroval: ^1.0
+
+
seroval@1.3.2:
+
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
+
engines: {node: '>=10'}
+
+
set-value@4.1.0:
+
resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==}
+
engines: {node: '>=11.0'}
+
+
setimmediate@1.0.5:
+
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+
+
shebang-command@2.0.0:
+
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+
engines: {node: '>=8'}
+
+
shebang-regex@3.0.0:
+
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+
engines: {node: '>=8'}
+
+
shell-quote@1.7.3:
+
resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==}
+
+
shellwords@0.1.1:
+
resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==}
+
+
signal-exit@3.0.7:
+
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+
signal-exit@4.1.0:
+
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+
engines: {node: '>=14'}
+
+
sirv@3.0.1:
+
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
+
engines: {node: '>=18'}
+
+
sisteransi@1.0.5:
+
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+
slice-ansi@5.0.0:
+
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+
engines: {node: '>=12'}
+
+
slice-ansi@7.1.0:
+
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+
engines: {node: '>=18'}
+
+
solid-devtools@0.34.3:
+
resolution: {integrity: sha512-ZQua959n+Zu3sLbm9g0IRjYUb1YYlYbu83PWLRoKbSsq0a3ItQNhnS2OBU7rQNmOKZiMexNo9Z3izas9BcOKDg==}
+
peerDependencies:
+
solid-js: ^1.9.0
+
vite: ^2.2.3 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+
peerDependenciesMeta:
+
vite:
+
optional: true
+
+
solid-js@1.9.7:
+
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==}
+
+
solid-refresh@0.6.3:
+
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
+
peerDependencies:
+
solid-js: ^1.3
+
+
sonic-boom@4.2.0:
+
resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
+
+
source-map-js@1.2.1:
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+
engines: {node: '>=0.10.0'}
+
+
source-map-support@0.5.21:
+
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+
source-map@0.6.1:
+
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+
engines: {node: '>=0.10.0'}
+
+
source-map@0.7.4:
+
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+
engines: {node: '>= 8'}
+
+
spawn-sync@1.0.15:
+
resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==}
+
+
split2@4.2.0:
+
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+
engines: {node: '>= 10.x'}
+
+
split@1.0.1:
+
resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+
+
sprintf-js@1.0.3:
+
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+
stdin-discarder@0.1.0:
+
resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+
stdin-discarder@0.2.2:
+
resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
+
engines: {node: '>=18'}
+
+
string-argv@0.3.2:
+
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+
engines: {node: '>=0.6.19'}
+
+
string-width@4.2.3:
+
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+
engines: {node: '>=8'}
+
+
string-width@7.2.0:
+
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+
engines: {node: '>=18'}
+
+
string_decoder@1.1.1:
+
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+
string_decoder@1.3.0:
+
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+
strip-ansi@6.0.1:
+
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+
engines: {node: '>=8'}
+
+
strip-ansi@7.1.0:
+
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+
engines: {node: '>=12'}
+
+
strip-bom@5.0.0:
+
resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==}
+
engines: {node: '>=12'}
+
+
strip-final-newline@2.0.0:
+
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+
engines: {node: '>=6'}
+
+
strip-final-newline@3.0.0:
+
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+
engines: {node: '>=12'}
+
+
strip-json-comments@2.0.1:
+
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+
engines: {node: '>=0.10.0'}
+
+
strip-json-comments@3.1.1:
+
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+
engines: {node: '>=8'}
+
+
strip-json-comments@5.0.1:
+
resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==}
+
engines: {node: '>=14.16'}
+
+
strip-literal@3.0.0:
+
resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+
+
stubborn-fs@1.2.5:
+
resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==}
+
+
style-to-object@1.0.9:
+
resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
+
+
supports-color@7.2.0:
+
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+
engines: {node: '>=8'}
+
+
supports-color@8.1.1:
+
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+
engines: {node: '>=10'}
+
+
supports-preserve-symlinks-flag@1.0.0:
+
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+
engines: {node: '>= 0.4'}
+
+
thenify-all@1.6.0:
+
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+
engines: {node: '>=0.8'}
+
+
thenify@3.3.1:
+
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+
thread-stream@3.1.0:
+
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+
+
through@2.3.8:
+
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+
tiny-uid@1.1.2:
+
resolution: {integrity: sha512-0beRFXR+fv4C40ND2PqgNjq6iyB1dKXciKJjslLw0kPYCcR82aNd2b+Tt2yy06LimIlvtoehgvrm/fUZCutSfg==}
+
+
tinyexec@0.3.2:
+
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
+
tinyexec@1.0.1:
+
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
+
+
tinyglobby@0.2.14:
+
resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
+
engines: {node: '>=12.0.0'}
+
+
titleize@3.0.0:
+
resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
+
engines: {node: '>=12'}
+
+
tmp@0.2.3:
+
resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
+
engines: {node: '>=14.14'}
+
+
to-regex-range@5.0.1:
+
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+
engines: {node: '>=8.0'}
+
+
totalist@3.0.1:
+
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+
engines: {node: '>=6'}
+
+
ts-api-utils@2.1.0:
+
resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+
engines: {node: '>=18.12'}
+
peerDependencies:
+
typescript: '>=4.8.4'
+
+
tslib@2.8.1:
+
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+
type-check@0.4.0:
+
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+
engines: {node: '>= 0.8.0'}
+
+
type-fest@2.19.0:
+
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+
engines: {node: '>=12.20'}
+
+
type-fest@3.13.1:
+
resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
+
engines: {node: '>=14.16'}
+
+
type-fest@4.41.0:
+
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+
engines: {node: '>=16'}
+
+
typedarray@0.0.6:
+
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+
+
typescript-eslint@8.35.1:
+
resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==}
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
peerDependencies:
+
eslint: ^8.57.0 || ^9.0.0
+
typescript: '>=4.8.4 <5.9.0'
+
+
typescript@5.8.2:
+
resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+
engines: {node: '>=14.17'}
+
hasBin: true
+
+
typescript@5.8.3:
+
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+
engines: {node: '>=14.17'}
+
hasBin: true
+
+
ufo@1.6.1:
+
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+
+
uhyphen@0.2.0:
+
resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
+
+
unconfig@7.3.2:
+
resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==}
+
+
undici-types@7.8.0:
+
resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
+
+
unimport@5.1.0:
+
resolution: {integrity: sha512-wMmuG+wkzeHh2KCE6yiDlHmKelN8iE/maxkUYMbmrS6iV8+n6eP1TH3yKKlepuF4hrkepinEGmBXdfo9XZUvAw==}
+
engines: {node: '>=18.12.0'}
+
+
universalify@2.0.1:
+
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+
engines: {node: '>= 10.0.0'}
+
+
unocss@66.3.3:
+
resolution: {integrity: sha512-HSB+K4/EbouwYmxpPU52cg0exua7PUr2IAJZBV3iai6tPdMcJ0c8jXaw7G+2L+ffruVFTcS0e2kE4OrR8BKDLg==}
+
engines: {node: '>=14'}
+
peerDependencies:
+
'@unocss/webpack': 66.3.3
+
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
+
peerDependenciesMeta:
+
'@unocss/webpack':
+
optional: true
+
vite:
+
optional: true
+
+
unplugin-utils@0.2.4:
+
resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
+
engines: {node: '>=18.12.0'}
+
+
unplugin@2.3.5:
+
resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==}
+
engines: {node: '>=18.12.0'}
+
+
untildify@4.0.0:
+
resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
+
engines: {node: '>=8'}
+
+
update-browserslist-db@1.1.3:
+
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+
hasBin: true
+
peerDependencies:
+
browserslist: '>= 4.21.0'
+
+
update-notifier@7.3.1:
+
resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==}
+
engines: {node: '>=18'}
+
+
uri-js@4.4.1:
+
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+
util-deprecate@1.0.2:
+
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+
uuid@8.3.2:
+
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+
hasBin: true
+
+
validate-html-nesting@1.2.3:
+
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
+
+
vite-node@3.2.4:
+
resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+
hasBin: true
+
+
vite-plugin-dts@4.5.4:
+
resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==}
+
peerDependencies:
+
typescript: '*'
+
vite: '*'
+
peerDependenciesMeta:
+
vite:
+
optional: true
+
+
vite-plugin-solid@2.11.7:
+
resolution: {integrity: sha512-5TgK1RnE449g0Ryxb9BXqem89RSy7fE8XGVCo+Gw84IHgPuPVP7nYNP6WBVAaY/0xw+OqfdQee+kusL0y3XYNg==}
+
peerDependencies:
+
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
+
solid-js: ^1.7.2
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+
peerDependenciesMeta:
+
'@testing-library/jest-dom':
+
optional: true
+
+
vite@6.3.5:
+
resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+
hasBin: true
+
peerDependencies:
+
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+
jiti: '>=1.21.0'
+
less: '*'
+
lightningcss: ^1.21.0
+
sass: '*'
+
sass-embedded: '*'
+
stylus: '*'
+
sugarss: '*'
+
terser: ^5.16.0
+
tsx: ^4.8.1
+
yaml: ^2.4.2
+
peerDependenciesMeta:
+
'@types/node':
+
optional: true
+
jiti:
+
optional: true
+
less:
+
optional: true
+
lightningcss:
+
optional: true
+
sass:
+
optional: true
+
sass-embedded:
+
optional: true
+
stylus:
+
optional: true
+
sugarss:
+
optional: true
+
terser:
+
optional: true
+
tsx:
+
optional: true
+
yaml:
+
optional: true
+
+
vitefu@1.1.1:
+
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
+
peerDependencies:
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
+
peerDependenciesMeta:
+
vite:
+
optional: true
+
+
vscode-uri@3.1.0:
+
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
+
vue-flow-layout@0.1.1:
+
resolution: {integrity: sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==}
+
peerDependencies:
+
vue: ^3.4.37
+
+
vue@3.5.17:
+
resolution: {integrity: sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==}
+
peerDependencies:
+
typescript: '*'
+
peerDependenciesMeta:
+
typescript:
+
optional: true
+
+
watchpack@2.4.2:
+
resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
+
engines: {node: '>=10.13.0'}
+
+
wcwidth@1.0.1:
+
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+
web-ext-run@0.2.3:
+
resolution: {integrity: sha512-u/IiZaZ7dHFqTM1MLF27rBy8mS9fEEsqoOKL0u+kQdOLmEioA/0Szp67ADd3WAJZLd8/hO8cFST1IC/YMXKIjQ==}
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+
+
webext-bridge@6.0.1:
+
resolution: {integrity: sha512-GruIrN+vNwbxVCi8UW4Dqk5YkcGA9V0ZfJ57jXP9JXHbrsDs5k2N6NNYQR5e+wSCnQpGYOGAGihwUpKlhg8QIw==}
+
+
webextension-polyfill@0.9.0:
+
resolution: {integrity: sha512-LTtHb0yR49xa9irkstDxba4GATDAcDw3ncnFH9RImoFwDlW47U95ME5sn5IiQX2ghfaECaf6xyXM8yvClIBkkw==}
+
+
webpack-virtual-modules@0.6.2:
+
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
+
when-exit@2.1.4:
+
resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==}
+
+
when@3.7.7:
+
resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==}
+
+
which@1.2.4:
+
resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==}
+
hasBin: true
+
+
which@2.0.2:
+
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+
engines: {node: '>= 8'}
+
hasBin: true
+
+
widest-line@5.0.0:
+
resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+
engines: {node: '>=18'}
+
+
winreg@0.0.12:
+
resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==}
+
+
word-wrap@1.2.5:
+
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+
engines: {node: '>=0.10.0'}
+
+
wrap-ansi@7.0.0:
+
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+
engines: {node: '>=10'}
+
+
wrap-ansi@9.0.0:
+
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+
engines: {node: '>=18'}
+
+
wrappy@1.0.2:
+
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+
ws@8.18.1:
+
resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
+
engines: {node: '>=10.0.0'}
+
peerDependencies:
+
bufferutil: ^4.0.1
+
utf-8-validate: '>=5.0.2'
+
peerDependenciesMeta:
+
bufferutil:
+
optional: true
+
utf-8-validate:
+
optional: true
+
+
wxt@0.20.7:
+
resolution: {integrity: sha512-KABq5i3CnXMUaJTcORGDLCi04K/IceUVAx5rler2QbZpLvS13OUOO0k+4s/7LI3+N8zXLh/GlQArMyJfk3M2yQ==}
+
hasBin: true
+
+
xdg-basedir@5.1.0:
+
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
+
engines: {node: '>=12'}
+
+
xml2js@0.6.2:
+
resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
+
engines: {node: '>=4.0.0'}
+
+
xmlbuilder@11.0.1:
+
resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
+
engines: {node: '>=4.0'}
+
+
y18n@5.0.8:
+
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+
engines: {node: '>=10'}
+
+
yallist@3.1.1:
+
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+
yallist@4.0.0:
+
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+
yargs-parser@20.2.9:
+
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+
engines: {node: '>=10'}
+
+
yargs-parser@21.1.1:
+
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+
engines: {node: '>=12'}
+
+
yargs@16.2.0:
+
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+
engines: {node: '>=10'}
+
+
yargs@17.7.2:
+
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+
engines: {node: '>=12'}
+
+
yauzl@2.10.0:
+
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
+
yocto-queue@0.1.0:
+
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+
engines: {node: '>=10'}
+
+
zip-dir@2.0.0:
+
resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==}
+
+
zod@3.25.74:
+
resolution: {integrity: sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg==}
+
+
snapshots:
+
+
'@1natsu/wait-element@4.1.2':
+
dependencies:
+
defu: 6.1.4
+
many-keys-map: 2.0.1
+
+
'@aklinker1/rollup-plugin-visualizer@5.12.0(rollup@4.44.2)':
+
dependencies:
+
open: 8.4.2
+
picomatch: 2.3.1
+
source-map: 0.7.4
+
yargs: 17.7.2
+
optionalDependencies:
+
rollup: 4.44.2
+
+
'@ampproject/remapping@2.3.0':
+
dependencies:
+
'@jridgewell/gen-mapping': 0.3.12
+
'@jridgewell/trace-mapping': 0.3.29
+
+
'@antfu/install-pkg@1.1.0':
+
dependencies:
+
package-manager-detector: 1.3.0
+
tinyexec: 1.0.1
+
+
'@antfu/utils@8.1.1': {}
+
+
'@atcute/atproto@3.1.0':
+
dependencies:
+
'@atcute/lexicons': 1.1.0
+
+
'@atcute/bluesky@3.1.4':
+
dependencies:
+
'@atcute/atproto': 3.1.0
+
'@atcute/lexicons': 1.1.0
+
+
'@atcute/client@4.0.3':
+
dependencies:
+
'@atcute/identity': 1.0.3
+
'@atcute/lexicons': 1.1.0
+
+
'@atcute/identity-resolver@1.1.3(@atcute/identity@1.0.3)':
+
dependencies:
+
'@atcute/identity': 1.0.3
+
'@atcute/lexicons': 1.1.0
+
'@atcute/util-fetch': 1.0.1
+
'@badrap/valita': 0.4.5
+
+
'@atcute/identity@1.0.3':
+
dependencies:
+
'@atcute/lexicons': 1.1.0
+
'@badrap/valita': 0.4.5
+
+
'@atcute/lexicons@1.1.0':
+
dependencies:
+
esm-env: 1.2.2
+
+
'@atcute/util-fetch@1.0.1':
+
dependencies:
+
'@badrap/valita': 0.4.5
+
+
'@babel/code-frame@7.27.1':
+
dependencies:
+
'@babel/helper-validator-identifier': 7.27.1
+
js-tokens: 4.0.0
+
picocolors: 1.1.1
+
+
'@babel/compat-data@7.28.0': {}
+
+
'@babel/core@7.28.0':
+
dependencies:
+
'@ampproject/remapping': 2.3.0
+
'@babel/code-frame': 7.27.1
+
'@babel/generator': 7.28.0
+
'@babel/helper-compilation-targets': 7.27.2
+
'@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0)
+
'@babel/helpers': 7.27.6
+
'@babel/parser': 7.28.0
+
'@babel/template': 7.27.2
+
'@babel/traverse': 7.28.0
+
'@babel/types': 7.28.0
+
convert-source-map: 2.0.0
+
debug: 4.4.1
+
gensync: 1.0.0-beta.2
+
json5: 2.2.3
+
semver: 6.3.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/generator@7.28.0':
+
dependencies:
+
'@babel/parser': 7.28.0
+
'@babel/types': 7.28.0
+
'@jridgewell/gen-mapping': 0.3.12
+
'@jridgewell/trace-mapping': 0.3.29
+
jsesc: 3.1.0
+
+
'@babel/helper-compilation-targets@7.27.2':
+
dependencies:
+
'@babel/compat-data': 7.28.0
+
'@babel/helper-validator-option': 7.27.1
+
browserslist: 4.25.1
+
lru-cache: 5.1.1
+
semver: 6.3.1
+
+
'@babel/helper-globals@7.28.0': {}
+
+
'@babel/helper-module-imports@7.18.6':
+
dependencies:
+
'@babel/types': 7.28.0
+
+
'@babel/helper-module-imports@7.27.1':
+
dependencies:
+
'@babel/traverse': 7.28.0
+
'@babel/types': 7.28.0
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
+
dependencies:
+
'@babel/core': 7.28.0
+
'@babel/helper-module-imports': 7.27.1
+
'@babel/helper-validator-identifier': 7.27.1
+
'@babel/traverse': 7.28.0
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/helper-plugin-utils@7.27.1': {}
+
+
'@babel/helper-string-parser@7.27.1': {}
+
+
'@babel/helper-validator-identifier@7.27.1': {}
+
+
'@babel/helper-validator-option@7.27.1': {}
+
+
'@babel/helpers@7.27.6':
+
dependencies:
+
'@babel/template': 7.27.2
+
'@babel/types': 7.28.0
+
+
'@babel/parser@7.28.0':
+
dependencies:
+
'@babel/types': 7.28.0
+
+
'@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
+
dependencies:
+
'@babel/core': 7.28.0
+
'@babel/helper-plugin-utils': 7.27.1
+
+
'@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)':
+
dependencies:
+
'@babel/core': 7.28.0
+
'@babel/helper-plugin-utils': 7.27.1
+
+
'@babel/runtime@7.27.0':
+
dependencies:
+
regenerator-runtime: 0.14.1
+
+
'@babel/template@7.27.2':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@babel/parser': 7.28.0
+
'@babel/types': 7.28.0
+
+
'@babel/traverse@7.28.0':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@babel/generator': 7.28.0
+
'@babel/helper-globals': 7.28.0
+
'@babel/parser': 7.28.0
+
'@babel/template': 7.27.2
+
'@babel/types': 7.28.0
+
debug: 4.4.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/types@7.28.0':
+
dependencies:
+
'@babel/helper-string-parser': 7.27.1
+
'@babel/helper-validator-identifier': 7.27.1
+
+
'@badrap/valita@0.4.5': {}
+
+
'@devicefarmer/adbkit-logcat@2.1.3': {}
+
+
'@devicefarmer/adbkit-monkey@1.2.1': {}
+
+
'@devicefarmer/adbkit@3.3.8':
+
dependencies:
+
'@devicefarmer/adbkit-logcat': 2.1.3
+
'@devicefarmer/adbkit-monkey': 1.2.1
+
bluebird: 3.7.2
+
commander: 9.5.0
+
debug: 4.3.7
+
node-forge: 1.3.1
+
split: 1.0.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@esbuild/aix-ppc64@0.25.5':
+
optional: true
+
+
'@esbuild/android-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/android-arm@0.25.5':
+
optional: true
+
+
'@esbuild/android-x64@0.25.5':
+
optional: true
+
+
'@esbuild/darwin-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/darwin-x64@0.25.5':
+
optional: true
+
+
'@esbuild/freebsd-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/freebsd-x64@0.25.5':
+
optional: true
+
+
'@esbuild/linux-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/linux-arm@0.25.5':
+
optional: true
+
+
'@esbuild/linux-ia32@0.25.5':
+
optional: true
+
+
'@esbuild/linux-loong64@0.25.5':
+
optional: true
+
+
'@esbuild/linux-mips64el@0.25.5':
+
optional: true
+
+
'@esbuild/linux-ppc64@0.25.5':
+
optional: true
+
+
'@esbuild/linux-riscv64@0.25.5':
+
optional: true
+
+
'@esbuild/linux-s390x@0.25.5':
+
optional: true
+
+
'@esbuild/linux-x64@0.25.5':
+
optional: true
+
+
'@esbuild/netbsd-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/netbsd-x64@0.25.5':
+
optional: true
+
+
'@esbuild/openbsd-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/openbsd-x64@0.25.5':
+
optional: true
+
+
'@esbuild/sunos-x64@0.25.5':
+
optional: true
+
+
'@esbuild/win32-arm64@0.25.5':
+
optional: true
+
+
'@esbuild/win32-ia32@0.25.5':
+
optional: true
+
+
'@esbuild/win32-x64@0.25.5':
+
optional: true
+
+
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))':
+
dependencies:
+
eslint: 9.30.1(jiti@2.4.2)
+
eslint-visitor-keys: 3.4.3
+
+
'@eslint-community/regexpp@4.12.1': {}
+
+
'@eslint/config-array@0.21.0':
+
dependencies:
+
'@eslint/object-schema': 2.1.6
+
debug: 4.4.1
+
minimatch: 3.1.2
+
transitivePeerDependencies:
+
- supports-color
+
+
'@eslint/config-helpers@0.3.0': {}
+
+
'@eslint/core@0.14.0':
+
dependencies:
+
'@types/json-schema': 7.0.15
+
+
'@eslint/core@0.15.1':
+
dependencies:
+
'@types/json-schema': 7.0.15
+
+
'@eslint/css-tree@3.6.1':
+
dependencies:
+
mdn-data: 2.21.0
+
source-map-js: 1.2.1
+
+
'@eslint/css@0.8.1':
+
dependencies:
+
'@eslint/core': 0.14.0
+
'@eslint/css-tree': 3.6.1
+
'@eslint/plugin-kit': 0.3.3
+
+
'@eslint/eslintrc@3.3.1':
+
dependencies:
+
ajv: 6.12.6
+
debug: 4.4.1
+
espree: 10.4.0
+
globals: 14.0.0
+
ignore: 5.3.2
+
import-fresh: 3.3.1
+
js-yaml: 4.1.0
+
minimatch: 3.1.2
+
strip-json-comments: 3.1.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@eslint/js@9.30.1': {}
+
+
'@eslint/object-schema@2.1.6': {}
+
+
'@eslint/plugin-kit@0.3.3':
+
dependencies:
+
'@eslint/core': 0.15.1
+
levn: 0.4.1
+
+
'@humanfs/core@0.19.1': {}
+
+
'@humanfs/node@0.16.6':
+
dependencies:
+
'@humanfs/core': 0.19.1
+
'@humanwhocodes/retry': 0.3.1
+
+
'@humanwhocodes/module-importer@1.0.1': {}
+
+
'@humanwhocodes/retry@0.3.1': {}
+
+
'@humanwhocodes/retry@0.4.3': {}
+
+
'@iconify/types@2.0.0': {}
+
+
'@iconify/utils@2.3.0':
+
dependencies:
+
'@antfu/install-pkg': 1.1.0
+
'@antfu/utils': 8.1.1
+
'@iconify/types': 2.0.0
+
debug: 4.4.1
+
globals: 15.15.0
+
kolorist: 1.8.0
+
local-pkg: 1.1.1
+
mlly: 1.7.4
+
transitivePeerDependencies:
+
- supports-color
+
+
'@isaacs/balanced-match@4.0.1': {}
+
+
'@isaacs/brace-expansion@5.0.0':
+
dependencies:
+
'@isaacs/balanced-match': 4.0.1
+
+
'@jridgewell/gen-mapping@0.3.12':
+
dependencies:
+
'@jridgewell/sourcemap-codec': 1.5.4
+
'@jridgewell/trace-mapping': 0.3.29
+
+
'@jridgewell/resolve-uri@3.1.2': {}
+
+
'@jridgewell/sourcemap-codec@1.5.4': {}
+
+
'@jridgewell/trace-mapping@0.3.29':
+
dependencies:
+
'@jridgewell/resolve-uri': 3.1.2
+
'@jridgewell/sourcemap-codec': 1.5.4
+
+
'@microsoft/api-extractor-model@7.30.6(@types/node@24.0.10)':
+
dependencies:
+
'@microsoft/tsdoc': 0.15.1
+
'@microsoft/tsdoc-config': 0.17.1
+
'@rushstack/node-core-library': 5.13.1(@types/node@24.0.10)
+
transitivePeerDependencies:
+
- '@types/node'
+
+
'@microsoft/api-extractor@7.52.8(@types/node@24.0.10)':
+
dependencies:
+
'@microsoft/api-extractor-model': 7.30.6(@types/node@24.0.10)
+
'@microsoft/tsdoc': 0.15.1
+
'@microsoft/tsdoc-config': 0.17.1
+
'@rushstack/node-core-library': 5.13.1(@types/node@24.0.10)
+
'@rushstack/rig-package': 0.5.3
+
'@rushstack/terminal': 0.15.3(@types/node@24.0.10)
+
'@rushstack/ts-command-line': 5.0.1(@types/node@24.0.10)
+
lodash: 4.17.21
+
minimatch: 3.0.8
+
resolve: 1.22.10
+
semver: 7.5.4
+
source-map: 0.6.1
+
typescript: 5.8.2
+
transitivePeerDependencies:
+
- '@types/node'
+
+
'@microsoft/tsdoc-config@0.17.1':
+
dependencies:
+
'@microsoft/tsdoc': 0.15.1
+
ajv: 8.12.0
+
jju: 1.4.0
+
resolve: 1.22.10
+
+
'@microsoft/tsdoc@0.15.1': {}
+
+
'@nodelib/fs.scandir@2.1.5':
+
dependencies:
+
'@nodelib/fs.stat': 2.0.5
+
run-parallel: 1.2.0
+
+
'@nodelib/fs.stat@2.0.5': {}
+
+
'@nodelib/fs.walk@1.2.8':
+
dependencies:
+
'@nodelib/fs.scandir': 2.1.5
+
fastq: 1.19.1
+
+
'@nothing-but/utils@0.17.0': {}
+
+
'@pnpm/config.env-replace@1.1.0': {}
+
+
'@pnpm/network.ca-file@1.0.2':
+
dependencies:
+
graceful-fs: 4.2.10
+
+
'@pnpm/npm-conf@2.3.1':
+
dependencies:
+
'@pnpm/config.env-replace': 1.1.0
+
'@pnpm/network.ca-file': 1.0.2
+
config-chain: 1.1.13
+
+
'@polka/url@1.0.0-next.29': {}
+
+
'@quansync/fs@0.1.3':
+
dependencies:
+
quansync: 0.2.10
+
+
'@rollup/pluginutils@5.2.0(rollup@4.44.2)':
+
dependencies:
+
'@types/estree': 1.0.8
+
estree-walker: 2.0.2
+
picomatch: 4.0.2
+
optionalDependencies:
+
rollup: 4.44.2
+
+
'@rollup/rollup-android-arm-eabi@4.44.2':
+
optional: true
+
+
'@rollup/rollup-android-arm64@4.44.2':
+
optional: true
+
+
'@rollup/rollup-darwin-arm64@4.44.2':
+
optional: true
+
+
'@rollup/rollup-darwin-x64@4.44.2':
+
optional: true
+
+
'@rollup/rollup-freebsd-arm64@4.44.2':
+
optional: true
+
+
'@rollup/rollup-freebsd-x64@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-arm-gnueabihf@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-arm-musleabihf@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-arm64-gnu@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-arm64-musl@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-loongarch64-gnu@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-powerpc64le-gnu@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-riscv64-gnu@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-riscv64-musl@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-s390x-gnu@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-x64-gnu@4.44.2':
+
optional: true
+
+
'@rollup/rollup-linux-x64-musl@4.44.2':
+
optional: true
+
+
'@rollup/rollup-win32-arm64-msvc@4.44.2':
+
optional: true
+
+
'@rollup/rollup-win32-ia32-msvc@4.44.2':
+
optional: true
+
+
'@rollup/rollup-win32-x64-msvc@4.44.2':
+
optional: true
+
+
'@rushstack/node-core-library@5.13.1(@types/node@24.0.10)':
+
dependencies:
+
ajv: 8.13.0
+
ajv-draft-04: 1.0.0(ajv@8.13.0)
+
ajv-formats: 3.0.1(ajv@8.13.0)
+
fs-extra: 11.3.0
+
import-lazy: 4.0.0
+
jju: 1.4.0
+
resolve: 1.22.10
+
semver: 7.5.4
+
optionalDependencies:
+
'@types/node': 24.0.10
+
+
'@rushstack/rig-package@0.5.3':
+
dependencies:
+
resolve: 1.22.10
+
strip-json-comments: 3.1.1
+
+
'@rushstack/terminal@0.15.3(@types/node@24.0.10)':
+
dependencies:
+
'@rushstack/node-core-library': 5.13.1(@types/node@24.0.10)
+
supports-color: 8.1.1
+
optionalDependencies:
+
'@types/node': 24.0.10
+
+
'@rushstack/ts-command-line@5.0.1(@types/node@24.0.10)':
+
dependencies:
+
'@rushstack/terminal': 0.15.3(@types/node@24.0.10)
+
'@types/argparse': 1.0.38
+
argparse: 1.0.10
+
string-argv: 0.3.2
+
transitivePeerDependencies:
+
- '@types/node'
+
+
'@solid-devtools/debugger@0.28.1(solid-js@1.9.7)':
+
dependencies:
+
'@nothing-but/utils': 0.17.0
+
'@solid-devtools/shared': 0.20.0(solid-js@1.9.7)
+
'@solid-primitives/bounds': 0.1.3(solid-js@1.9.7)
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.7)
+
'@solid-primitives/keyboard': 1.3.3(solid-js@1.9.7)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/scheduled': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-devtools/shared@0.20.0(solid-js@1.9.7)':
+
dependencies:
+
'@nothing-but/utils': 0.17.0
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.7)
+
'@solid-primitives/media': 2.3.3(solid-js@1.9.7)
+
'@solid-primitives/refs': 1.1.2(solid-js@1.9.7)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/scheduled': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.7)
+
'@solid-primitives/styles': 0.1.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/bounds@0.1.3(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.7)
+
'@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.7)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/event-listener@2.4.3(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/keyboard@1.3.3(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.7)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/media@2.3.3(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.7)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/refs@1.1.2(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/resize-observer@2.1.3(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/event-listener': 2.4.3(solid-js@1.9.7)
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/static-store': 0.1.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/rootless@1.5.2(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/scheduled@1.5.2(solid-js@1.9.7)':
+
dependencies:
+
solid-js: 1.9.7
+
+
'@solid-primitives/static-store@0.1.2(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/styles@0.1.2(solid-js@1.9.7)':
+
dependencies:
+
'@solid-primitives/rootless': 1.5.2(solid-js@1.9.7)
+
'@solid-primitives/utils': 6.3.2(solid-js@1.9.7)
+
solid-js: 1.9.7
+
+
'@solid-primitives/utils@6.3.2(solid-js@1.9.7)':
+
dependencies:
+
solid-js: 1.9.7
+
+
'@types/argparse@1.0.38': {}
+
+
'@types/babel__core@7.20.5':
+
dependencies:
+
'@babel/parser': 7.28.0
+
'@babel/types': 7.28.0
+
'@types/babel__generator': 7.27.0
+
'@types/babel__template': 7.4.4
+
'@types/babel__traverse': 7.20.7
+
+
'@types/babel__generator@7.27.0':
+
dependencies:
+
'@babel/types': 7.28.0
+
+
'@types/babel__template@7.4.4':
+
dependencies:
+
'@babel/parser': 7.28.0
+
'@babel/types': 7.28.0
+
+
'@types/babel__traverse@7.20.7':
+
dependencies:
+
'@babel/types': 7.28.0
+
+
'@types/estree@1.0.8': {}
+
+
'@types/filesystem@0.0.36':
+
dependencies:
+
'@types/filewriter': 0.0.33
+
+
'@types/filewriter@0.0.33': {}
+
+
'@types/har-format@1.2.16': {}
+
+
'@types/json-schema@7.0.15': {}
+
+
'@types/minimatch@3.0.5': {}
+
+
'@types/node@24.0.10':
+
dependencies:
+
undici-types: 7.8.0
+
+
'@types/webextension-polyfill@0.8.3': {}
+
+
'@types/yauzl@2.10.3':
+
dependencies:
+
'@types/node': 24.0.10
+
optional: true
+
+
'@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
+
dependencies:
+
'@eslint-community/regexpp': 4.12.1
+
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
'@typescript-eslint/scope-manager': 8.35.1
+
'@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
'@typescript-eslint/visitor-keys': 8.35.1
+
eslint: 9.30.1(jiti@2.4.2)
+
graphemer: 1.4.0
+
ignore: 7.0.5
+
natural-compare: 1.4.0
+
ts-api-utils: 2.1.0(typescript@5.8.3)
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
'@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
+
dependencies:
+
'@typescript-eslint/scope-manager': 8.35.1
+
'@typescript-eslint/types': 8.35.1
+
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
+
'@typescript-eslint/visitor-keys': 8.35.1
+
debug: 4.4.1
+
eslint: 9.30.1(jiti@2.4.2)
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
'@typescript-eslint/project-service@8.35.1(typescript@5.8.3)':
+
dependencies:
+
'@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3)
+
'@typescript-eslint/types': 8.35.1
+
debug: 4.4.1
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
'@typescript-eslint/scope-manager@8.35.1':
+
dependencies:
+
'@typescript-eslint/types': 8.35.1
+
'@typescript-eslint/visitor-keys': 8.35.1
+
+
'@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)':
+
dependencies:
+
typescript: 5.8.3
+
+
'@typescript-eslint/type-utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
+
dependencies:
+
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
debug: 4.4.1
+
eslint: 9.30.1(jiti@2.4.2)
+
ts-api-utils: 2.1.0(typescript@5.8.3)
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
'@typescript-eslint/types@8.35.1': {}
+
+
'@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)':
+
dependencies:
+
'@typescript-eslint/project-service': 8.35.1(typescript@5.8.3)
+
'@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3)
+
'@typescript-eslint/types': 8.35.1
+
'@typescript-eslint/visitor-keys': 8.35.1
+
debug: 4.4.1
+
fast-glob: 3.3.3
+
is-glob: 4.0.3
+
minimatch: 9.0.5
+
semver: 7.7.2
+
ts-api-utils: 2.1.0(typescript@5.8.3)
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
'@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
+
dependencies:
+
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
+
'@typescript-eslint/scope-manager': 8.35.1
+
'@typescript-eslint/types': 8.35.1
+
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
+
eslint: 9.30.1(jiti@2.4.2)
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
'@typescript-eslint/visitor-keys@8.35.1':
+
dependencies:
+
'@typescript-eslint/types': 8.35.1
+
eslint-visitor-keys: 4.2.1
+
+
'@unocss/astro@66.3.3(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3))':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/reset': 66.3.3
+
'@unocss/vite': 66.3.3(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3))
+
optionalDependencies:
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
transitivePeerDependencies:
+
- vue
+
+
'@unocss/cli@66.3.3':
+
dependencies:
+
'@ampproject/remapping': 2.3.0
+
'@unocss/config': 66.3.3
+
'@unocss/core': 66.3.3
+
'@unocss/preset-uno': 66.3.3
+
cac: 6.7.14
+
chokidar: 3.6.0
+
colorette: 2.0.20
+
consola: 3.4.2
+
magic-string: 0.30.17
+
pathe: 2.0.3
+
perfect-debounce: 1.0.0
+
tinyglobby: 0.2.14
+
unplugin-utils: 0.2.4
+
+
'@unocss/config@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
unconfig: 7.3.2
+
+
'@unocss/core@66.3.3': {}
+
+
'@unocss/extractor-arbitrary-variants@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
+
'@unocss/inspector@66.3.3(vue@3.5.17(typescript@5.8.3))':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
colorette: 2.0.20
+
gzip-size: 6.0.0
+
sirv: 3.0.1
+
vue-flow-layout: 0.1.1(vue@3.5.17(typescript@5.8.3))
+
transitivePeerDependencies:
+
- vue
+
+
'@unocss/postcss@66.3.3(postcss@8.5.6)':
+
dependencies:
+
'@unocss/config': 66.3.3
+
'@unocss/core': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
css-tree: 3.1.0
+
postcss: 8.5.6
+
tinyglobby: 0.2.14
+
+
'@unocss/preset-attributify@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
+
'@unocss/preset-icons@66.3.3':
+
dependencies:
+
'@iconify/utils': 2.3.0
+
'@unocss/core': 66.3.3
+
ofetch: 1.4.1
+
transitivePeerDependencies:
+
- supports-color
+
+
'@unocss/preset-mini@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/extractor-arbitrary-variants': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
+
'@unocss/preset-tagify@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
+
'@unocss/preset-typography@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/preset-mini': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
+
'@unocss/preset-uno@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/preset-wind3': 66.3.3
+
+
'@unocss/preset-web-fonts@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
ofetch: 1.4.1
+
+
'@unocss/preset-wind3@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/preset-mini': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
+
'@unocss/preset-wind4@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/extractor-arbitrary-variants': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
+
'@unocss/preset-wind@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/preset-wind3': 66.3.3
+
+
'@unocss/reset@66.3.3': {}
+
+
'@unocss/rule-utils@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
magic-string: 0.30.17
+
+
'@unocss/transformer-attributify-jsx@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
+
'@unocss/transformer-compile-class@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
+
'@unocss/transformer-directives@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
'@unocss/rule-utils': 66.3.3
+
css-tree: 3.1.0
+
+
'@unocss/transformer-variant-group@66.3.3':
+
dependencies:
+
'@unocss/core': 66.3.3
+
+
'@unocss/vite@66.3.3(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3))':
+
dependencies:
+
'@ampproject/remapping': 2.3.0
+
'@unocss/config': 66.3.3
+
'@unocss/core': 66.3.3
+
'@unocss/inspector': 66.3.3(vue@3.5.17(typescript@5.8.3))
+
chokidar: 3.6.0
+
magic-string: 0.30.17
+
pathe: 2.0.3
+
tinyglobby: 0.2.14
+
unplugin-utils: 0.2.4
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
transitivePeerDependencies:
+
- vue
+
+
'@volar/language-core@2.4.17':
+
dependencies:
+
'@volar/source-map': 2.4.17
+
+
'@volar/source-map@2.4.17': {}
+
+
'@volar/typescript@2.4.17':
+
dependencies:
+
'@volar/language-core': 2.4.17
+
path-browserify: 1.0.1
+
vscode-uri: 3.1.0
+
+
'@vue/compiler-core@3.5.17':
+
dependencies:
+
'@babel/parser': 7.28.0
+
'@vue/shared': 3.5.17
+
entities: 4.5.0
+
estree-walker: 2.0.2
+
source-map-js: 1.2.1
+
+
'@vue/compiler-dom@3.5.17':
+
dependencies:
+
'@vue/compiler-core': 3.5.17
+
'@vue/shared': 3.5.17
+
+
'@vue/compiler-sfc@3.5.17':
+
dependencies:
+
'@babel/parser': 7.28.0
+
'@vue/compiler-core': 3.5.17
+
'@vue/compiler-dom': 3.5.17
+
'@vue/compiler-ssr': 3.5.17
+
'@vue/shared': 3.5.17
+
estree-walker: 2.0.2
+
magic-string: 0.30.17
+
postcss: 8.5.6
+
source-map-js: 1.2.1
+
+
'@vue/compiler-ssr@3.5.17':
+
dependencies:
+
'@vue/compiler-dom': 3.5.17
+
'@vue/shared': 3.5.17
+
+
'@vue/compiler-vue2@2.7.16':
+
dependencies:
+
de-indent: 1.0.2
+
he: 1.2.0
+
+
'@vue/language-core@2.2.0(typescript@5.8.3)':
+
dependencies:
+
'@volar/language-core': 2.4.17
+
'@vue/compiler-dom': 3.5.17
+
'@vue/compiler-vue2': 2.7.16
+
'@vue/shared': 3.5.17
+
alien-signals: 0.4.14
+
minimatch: 9.0.5
+
muggle-string: 0.4.1
+
path-browserify: 1.0.1
+
optionalDependencies:
+
typescript: 5.8.3
+
+
'@vue/reactivity@3.5.17':
+
dependencies:
+
'@vue/shared': 3.5.17
+
+
'@vue/runtime-core@3.5.17':
+
dependencies:
+
'@vue/reactivity': 3.5.17
+
'@vue/shared': 3.5.17
+
+
'@vue/runtime-dom@3.5.17':
+
dependencies:
+
'@vue/reactivity': 3.5.17
+
'@vue/runtime-core': 3.5.17
+
'@vue/shared': 3.5.17
+
csstype: 3.1.3
+
+
'@vue/server-renderer@3.5.17(vue@3.5.17(typescript@5.8.3))':
+
dependencies:
+
'@vue/compiler-ssr': 3.5.17
+
'@vue/shared': 3.5.17
+
vue: 3.5.17(typescript@5.8.3)
+
+
'@vue/shared@3.5.17': {}
+
+
'@webext-core/fake-browser@1.3.2':
+
dependencies:
+
lodash.merge: 4.6.2
+
+
'@webext-core/isolated-element@1.1.2':
+
dependencies:
+
is-potential-custom-element-name: 1.0.1
+
+
'@webext-core/match-patterns@1.0.3': {}
+
+
'@wxt-dev/browser@0.0.326':
+
dependencies:
+
'@types/filesystem': 0.0.36
+
'@types/har-format': 1.2.16
+
+
'@wxt-dev/module-solid@1.1.3(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(wxt@0.20.7(@types/node@24.0.10)(jiti@2.4.2)(rollup@4.44.2))':
+
dependencies:
+
vite-plugin-solid: 2.11.7(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))
+
wxt: 0.20.7(@types/node@24.0.10)(jiti@2.4.2)(rollup@4.44.2)
+
transitivePeerDependencies:
+
- '@testing-library/jest-dom'
+
- solid-js
+
- supports-color
+
- vite
+
+
'@wxt-dev/storage@1.1.1':
+
dependencies:
+
async-mutex: 0.5.0
+
dequal: 2.0.3
+
+
acorn-jsx@5.3.2(acorn@8.15.0):
+
dependencies:
+
acorn: 8.15.0
+
+
acorn@8.15.0: {}
+
+
adm-zip@0.5.16: {}
+
+
ajv-draft-04@1.0.0(ajv@8.13.0):
+
optionalDependencies:
+
ajv: 8.13.0
+
+
ajv-formats@3.0.1(ajv@8.13.0):
+
optionalDependencies:
+
ajv: 8.13.0
+
+
ajv@6.12.6:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
fast-json-stable-stringify: 2.1.0
+
json-schema-traverse: 0.4.1
+
uri-js: 4.4.1
+
+
ajv@8.12.0:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
json-schema-traverse: 1.0.0
+
require-from-string: 2.0.2
+
uri-js: 4.4.1
+
+
ajv@8.13.0:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
json-schema-traverse: 1.0.0
+
require-from-string: 2.0.2
+
uri-js: 4.4.1
+
+
alien-signals@0.4.14: {}
+
+
ansi-align@3.0.1:
+
dependencies:
+
string-width: 4.2.3
+
+
ansi-escapes@7.0.0:
+
dependencies:
+
environment: 1.1.0
+
+
ansi-regex@5.0.1: {}
+
+
ansi-regex@6.1.0: {}
+
+
ansi-styles@4.3.0:
+
dependencies:
+
color-convert: 2.0.1
+
+
ansi-styles@6.2.1: {}
+
+
any-promise@1.3.0: {}
+
+
anymatch@3.1.3:
+
dependencies:
+
normalize-path: 3.0.0
+
picomatch: 2.3.1
+
+
argparse@1.0.10:
+
dependencies:
+
sprintf-js: 1.0.3
+
+
argparse@2.0.1: {}
+
+
array-differ@4.0.0: {}
+
+
array-union@3.0.1: {}
+
+
async-mutex@0.5.0:
+
dependencies:
+
tslib: 2.8.1
+
+
async@3.2.6: {}
+
+
atomic-sleep@1.0.0: {}
+
+
atomically@2.0.3:
+
dependencies:
+
stubborn-fs: 1.2.5
+
when-exit: 2.1.4
+
+
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0):
+
dependencies:
+
'@babel/core': 7.28.0
+
'@babel/helper-module-imports': 7.18.6
+
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
+
'@babel/types': 7.28.0
+
html-entities: 2.3.3
+
parse5: 7.3.0
+
validate-html-nesting: 1.2.3
+
+
babel-preset-solid@1.9.6(@babel/core@7.28.0):
+
dependencies:
+
'@babel/core': 7.28.0
+
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0)
+
+
balanced-match@1.0.2: {}
+
+
base64-js@1.5.1: {}
+
+
big-integer@1.6.52: {}
+
+
binary-extensions@2.3.0: {}
+
+
bl@5.1.0:
+
dependencies:
+
buffer: 6.0.3
+
inherits: 2.0.4
+
readable-stream: 3.6.2
+
+
bluebird@3.7.2: {}
+
+
boolbase@1.0.0: {}
+
+
boxen@8.0.1:
+
dependencies:
+
ansi-align: 3.0.1
+
camelcase: 8.0.0
+
chalk: 5.4.1
+
cli-boxes: 3.0.0
+
string-width: 7.2.0
+
type-fest: 4.41.0
+
widest-line: 5.0.0
+
wrap-ansi: 9.0.0
+
+
bplist-parser@0.2.0:
+
dependencies:
+
big-integer: 1.6.52
+
+
brace-expansion@1.1.12:
+
dependencies:
+
balanced-match: 1.0.2
+
concat-map: 0.0.1
+
+
brace-expansion@2.0.2:
+
dependencies:
+
balanced-match: 1.0.2
+
+
braces@3.0.3:
+
dependencies:
+
fill-range: 7.1.1
+
+
browserslist@4.25.1:
+
dependencies:
+
caniuse-lite: 1.0.30001727
+
electron-to-chromium: 1.5.179
+
node-releases: 2.0.19
+
update-browserslist-db: 1.1.3(browserslist@4.25.1)
+
+
buffer-crc32@0.2.13: {}
+
+
buffer-from@1.1.2: {}
+
+
buffer@6.0.3:
+
dependencies:
+
base64-js: 1.5.1
+
ieee754: 1.2.1
+
+
bundle-name@3.0.0:
+
dependencies:
+
run-applescript: 5.0.0
+
+
bundle-name@4.1.0:
+
dependencies:
+
run-applescript: 7.0.0
+
+
c12@3.0.4(magicast@0.3.5):
+
dependencies:
+
chokidar: 4.0.3
+
confbox: 0.2.2
+
defu: 6.1.4
+
dotenv: 16.6.1
+
exsolve: 1.0.7
+
giget: 2.0.0
+
jiti: 2.4.2
+
ohash: 2.0.11
+
pathe: 2.0.3
+
perfect-debounce: 1.0.0
+
pkg-types: 2.2.0
+
rc9: 2.1.2
+
optionalDependencies:
+
magicast: 0.3.5
+
+
cac@6.7.14: {}
+
+
callsites@3.1.0: {}
+
+
camelcase@8.0.0: {}
+
+
caniuse-lite@1.0.30001727: {}
+
+
chalk@4.1.2:
+
dependencies:
+
ansi-styles: 4.3.0
+
supports-color: 7.2.0
+
+
chalk@5.4.1: {}
+
+
chokidar@3.6.0:
+
dependencies:
+
anymatch: 3.1.3
+
braces: 3.0.3
+
glob-parent: 5.1.2
+
is-binary-path: 2.1.0
+
is-glob: 4.0.3
+
normalize-path: 3.0.0
+
readdirp: 3.6.0
+
optionalDependencies:
+
fsevents: 2.3.3
+
+
chokidar@4.0.3:
+
dependencies:
+
readdirp: 4.1.2
+
+
chrome-launcher@1.1.2:
+
dependencies:
+
'@types/node': 24.0.10
+
escape-string-regexp: 4.0.0
+
is-wsl: 2.2.0
+
lighthouse-logger: 2.0.1
+
transitivePeerDependencies:
+
- supports-color
+
+
ci-info@4.3.0: {}
+
+
citty@0.1.6:
+
dependencies:
+
consola: 3.4.2
+
+
cli-boxes@3.0.0: {}
+
+
cli-cursor@4.0.0:
+
dependencies:
+
restore-cursor: 4.0.0
+
+
cli-cursor@5.0.0:
+
dependencies:
+
restore-cursor: 5.1.0
+
+
cli-highlight@2.1.11:
+
dependencies:
+
chalk: 4.1.2
+
highlight.js: 10.7.3
+
mz: 2.7.0
+
parse5: 5.1.1
+
parse5-htmlparser2-tree-adapter: 6.0.1
+
yargs: 16.2.0
+
+
cli-spinners@2.9.2: {}
+
+
cli-truncate@4.0.0:
+
dependencies:
+
slice-ansi: 5.0.0
+
string-width: 7.2.0
+
+
cliui@7.0.4:
+
dependencies:
+
string-width: 4.2.3
+
strip-ansi: 6.0.1
+
wrap-ansi: 7.0.0
+
+
cliui@8.0.1:
+
dependencies:
+
string-width: 4.2.3
+
strip-ansi: 6.0.1
+
wrap-ansi: 7.0.0
+
+
clone@1.0.4: {}
+
+
color-convert@2.0.1:
+
dependencies:
+
color-name: 1.1.4
+
+
color-name@1.1.4: {}
+
+
colorette@2.0.20: {}
+
+
commander@2.9.0:
+
dependencies:
+
graceful-readlink: 1.0.1
+
+
commander@9.5.0: {}
+
+
compare-versions@6.1.1: {}
+
+
concat-map@0.0.1: {}
+
+
concat-stream@1.6.2:
+
dependencies:
+
buffer-from: 1.1.2
+
inherits: 2.0.4
+
readable-stream: 2.3.8
+
typedarray: 0.0.6
+
+
confbox@0.1.8: {}
+
+
confbox@0.2.2: {}
+
+
config-chain@1.1.13:
+
dependencies:
+
ini: 1.3.8
+
proto-list: 1.2.4
+
+
configstore@7.0.0:
+
dependencies:
+
atomically: 2.0.3
+
dot-prop: 9.0.0
+
graceful-fs: 4.2.11
+
xdg-basedir: 5.1.0
+
+
consola@3.4.2: {}
+
+
convert-source-map@2.0.0: {}
+
+
core-util-is@1.0.3: {}
+
+
cross-spawn@7.0.6:
+
dependencies:
+
path-key: 3.1.1
+
shebang-command: 2.0.0
+
which: 2.0.2
+
+
css-select@5.2.2:
+
dependencies:
+
boolbase: 1.0.0
+
css-what: 6.2.2
+
domhandler: 5.0.3
+
domutils: 3.2.2
+
nth-check: 2.1.1
+
+
css-tree@3.1.0:
+
dependencies:
+
mdn-data: 2.12.2
+
source-map-js: 1.2.1
+
+
css-what@6.2.2: {}
+
+
cssom@0.5.0: {}
+
+
csstype@3.1.3: {}
+
+
de-indent@1.0.2: {}
+
+
debounce@1.2.1: {}
+
+
debug@2.6.9:
+
dependencies:
+
ms: 2.0.0
+
+
debug@4.3.7:
+
dependencies:
+
ms: 2.1.3
+
+
debug@4.4.1:
+
dependencies:
+
ms: 2.1.3
+
+
deep-extend@0.6.0: {}
+
+
deep-is@0.1.4: {}
+
+
default-browser-id@3.0.0:
+
dependencies:
+
bplist-parser: 0.2.0
+
untildify: 4.0.0
+
+
default-browser-id@5.0.0: {}
+
+
default-browser@4.0.0:
+
dependencies:
+
bundle-name: 3.0.0
+
default-browser-id: 3.0.0
+
execa: 7.2.0
+
titleize: 3.0.0
+
+
default-browser@5.2.1:
+
dependencies:
+
bundle-name: 4.1.0
+
default-browser-id: 5.0.0
+
+
defaults@1.0.4:
+
dependencies:
+
clone: 1.0.4
+
+
define-lazy-prop@2.0.0: {}
+
+
define-lazy-prop@3.0.0: {}
+
+
defu@6.1.4: {}
+
+
dequal@2.0.3: {}
+
+
destr@2.0.5: {}
+
+
dom-serializer@2.0.0:
+
dependencies:
+
domelementtype: 2.3.0
+
domhandler: 5.0.3
+
entities: 4.5.0
+
+
domelementtype@2.3.0: {}
+
+
domhandler@5.0.3:
+
dependencies:
+
domelementtype: 2.3.0
+
+
domutils@3.2.2:
+
dependencies:
+
dom-serializer: 2.0.0
+
domelementtype: 2.3.0
+
domhandler: 5.0.3
+
+
dot-prop@9.0.0:
+
dependencies:
+
type-fest: 4.41.0
+
+
dotenv-expand@12.0.2:
+
dependencies:
+
dotenv: 16.6.1
+
+
dotenv@16.6.1: {}
+
+
duplexer@0.1.2: {}
+
+
electron-to-chromium@1.5.179: {}
+
+
emoji-regex@10.4.0: {}
+
+
emoji-regex@8.0.0: {}
+
+
end-of-stream@1.4.5:
+
dependencies:
+
once: 1.4.0
+
+
entities@4.5.0: {}
+
+
entities@6.0.1: {}
+
+
environment@1.1.0: {}
+
+
error-ex@1.3.2:
+
dependencies:
+
is-arrayish: 0.2.1
+
+
es-module-lexer@1.7.0: {}
+
+
es6-error@4.1.1: {}
+
+
esbuild@0.25.5:
+
optionalDependencies:
+
'@esbuild/aix-ppc64': 0.25.5
+
'@esbuild/android-arm': 0.25.5
+
'@esbuild/android-arm64': 0.25.5
+
'@esbuild/android-x64': 0.25.5
+
'@esbuild/darwin-arm64': 0.25.5
+
'@esbuild/darwin-x64': 0.25.5
+
'@esbuild/freebsd-arm64': 0.25.5
+
'@esbuild/freebsd-x64': 0.25.5
+
'@esbuild/linux-arm': 0.25.5
+
'@esbuild/linux-arm64': 0.25.5
+
'@esbuild/linux-ia32': 0.25.5
+
'@esbuild/linux-loong64': 0.25.5
+
'@esbuild/linux-mips64el': 0.25.5
+
'@esbuild/linux-ppc64': 0.25.5
+
'@esbuild/linux-riscv64': 0.25.5
+
'@esbuild/linux-s390x': 0.25.5
+
'@esbuild/linux-x64': 0.25.5
+
'@esbuild/netbsd-arm64': 0.25.5
+
'@esbuild/netbsd-x64': 0.25.5
+
'@esbuild/openbsd-arm64': 0.25.5
+
'@esbuild/openbsd-x64': 0.25.5
+
'@esbuild/sunos-x64': 0.25.5
+
'@esbuild/win32-arm64': 0.25.5
+
'@esbuild/win32-ia32': 0.25.5
+
'@esbuild/win32-x64': 0.25.5
+
+
escalade@3.2.0: {}
+
+
escape-goat@4.0.0: {}
+
+
escape-string-regexp@4.0.0: {}
+
+
escape-string-regexp@5.0.0: {}
+
+
eslint-config-prettier@10.1.5(eslint@9.30.1(jiti@2.4.2)):
+
dependencies:
+
eslint: 9.30.1(jiti@2.4.2)
+
+
eslint-plugin-solid@0.14.5(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
+
dependencies:
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
eslint: 9.30.1(jiti@2.4.2)
+
estraverse: 5.3.0
+
is-html: 2.0.0
+
kebab-case: 1.0.2
+
known-css-properties: 0.30.0
+
style-to-object: 1.0.9
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
eslint-scope@8.4.0:
+
dependencies:
+
esrecurse: 4.3.0
+
estraverse: 5.3.0
+
+
eslint-visitor-keys@3.4.3: {}
+
+
eslint-visitor-keys@4.2.1: {}
+
+
eslint@9.30.1(jiti@2.4.2):
+
dependencies:
+
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
+
'@eslint-community/regexpp': 4.12.1
+
'@eslint/config-array': 0.21.0
+
'@eslint/config-helpers': 0.3.0
+
'@eslint/core': 0.14.0
+
'@eslint/eslintrc': 3.3.1
+
'@eslint/js': 9.30.1
+
'@eslint/plugin-kit': 0.3.3
+
'@humanfs/node': 0.16.6
+
'@humanwhocodes/module-importer': 1.0.1
+
'@humanwhocodes/retry': 0.4.3
+
'@types/estree': 1.0.8
+
'@types/json-schema': 7.0.15
+
ajv: 6.12.6
+
chalk: 4.1.2
+
cross-spawn: 7.0.6
+
debug: 4.4.1
+
escape-string-regexp: 4.0.0
+
eslint-scope: 8.4.0
+
eslint-visitor-keys: 4.2.1
+
espree: 10.4.0
+
esquery: 1.6.0
+
esutils: 2.0.3
+
fast-deep-equal: 3.1.3
+
file-entry-cache: 8.0.0
+
find-up: 5.0.0
+
glob-parent: 6.0.2
+
ignore: 5.3.2
+
imurmurhash: 0.1.4
+
is-glob: 4.0.3
+
json-stable-stringify-without-jsonify: 1.0.1
+
lodash.merge: 4.6.2
+
minimatch: 3.1.2
+
natural-compare: 1.4.0
+
optionator: 0.9.4
+
optionalDependencies:
+
jiti: 2.4.2
+
transitivePeerDependencies:
+
- supports-color
+
+
esm-env@1.2.2: {}
+
+
espree@10.4.0:
+
dependencies:
+
acorn: 8.15.0
+
acorn-jsx: 5.3.2(acorn@8.15.0)
+
eslint-visitor-keys: 4.2.1
+
+
esquery@1.6.0:
+
dependencies:
+
estraverse: 5.3.0
+
+
esrecurse@4.3.0:
+
dependencies:
+
estraverse: 5.3.0
+
+
estraverse@5.3.0: {}
+
+
estree-walker@2.0.2: {}
+
+
estree-walker@3.0.3:
+
dependencies:
+
'@types/estree': 1.0.8
+
+
esutils@2.0.3: {}
+
+
eventemitter3@5.0.1: {}
+
+
execa@5.1.1:
+
dependencies:
+
cross-spawn: 7.0.6
+
get-stream: 6.0.1
+
human-signals: 2.1.0
+
is-stream: 2.0.1
+
merge-stream: 2.0.0
+
npm-run-path: 4.0.1
+
onetime: 5.1.2
+
signal-exit: 3.0.7
+
strip-final-newline: 2.0.0
+
+
execa@7.2.0:
+
dependencies:
+
cross-spawn: 7.0.6
+
get-stream: 6.0.1
+
human-signals: 4.3.1
+
is-stream: 3.0.0
+
merge-stream: 2.0.0
+
npm-run-path: 5.3.0
+
onetime: 6.0.0
+
signal-exit: 3.0.7
+
strip-final-newline: 3.0.0
+
+
exsolve@1.0.7: {}
+
+
extract-zip@2.0.1:
+
dependencies:
+
debug: 4.4.1
+
get-stream: 5.2.0
+
yauzl: 2.10.0
+
optionalDependencies:
+
'@types/yauzl': 2.10.3
+
transitivePeerDependencies:
+
- supports-color
+
+
fast-deep-equal@3.1.3: {}
+
+
fast-glob@3.3.3:
+
dependencies:
+
'@nodelib/fs.stat': 2.0.5
+
'@nodelib/fs.walk': 1.2.8
+
glob-parent: 5.1.2
+
merge2: 1.4.1
+
micromatch: 4.0.8
+
+
fast-json-stable-stringify@2.1.0: {}
+
+
fast-levenshtein@2.0.6: {}
+
+
fast-redact@3.5.0: {}
+
+
fastq@1.19.1:
+
dependencies:
+
reusify: 1.1.0
+
+
fd-slicer@1.1.0:
+
dependencies:
+
pend: 1.2.0
+
+
fdir@6.4.6(picomatch@4.0.2):
+
optionalDependencies:
+
picomatch: 4.0.2
+
+
file-entry-cache@8.0.0:
+
dependencies:
+
flat-cache: 4.0.1
+
+
filesize@10.1.6: {}
+
+
fill-range@7.1.1:
+
dependencies:
+
to-regex-range: 5.0.1
+
+
find-up@5.0.0:
+
dependencies:
+
locate-path: 6.0.0
+
path-exists: 4.0.0
+
+
firefox-profile@4.7.0:
+
dependencies:
+
adm-zip: 0.5.16
+
fs-extra: 11.3.0
+
ini: 4.1.3
+
minimist: 1.2.8
+
xml2js: 0.6.2
+
+
flat-cache@4.0.1:
+
dependencies:
+
flatted: 3.3.3
+
keyv: 4.5.4
+
+
flatted@3.3.3: {}
+
+
formdata-node@6.0.3: {}
+
+
fs-extra@11.3.0:
+
dependencies:
+
graceful-fs: 4.2.11
+
jsonfile: 6.1.0
+
universalify: 2.0.1
+
+
fsevents@2.3.3:
+
optional: true
+
+
function-bind@1.1.2: {}
+
+
fx-runner@1.4.0:
+
dependencies:
+
commander: 2.9.0
+
shell-quote: 1.7.3
+
spawn-sync: 1.0.15
+
when: 3.7.7
+
which: 1.2.4
+
winreg: 0.0.12
+
+
gensync@1.0.0-beta.2: {}
+
+
get-caller-file@2.0.5: {}
+
+
get-east-asian-width@1.3.0: {}
+
+
get-port-please@3.1.2: {}
+
+
get-stream@5.2.0:
+
dependencies:
+
pump: 3.0.3
+
+
get-stream@6.0.1: {}
+
+
giget@2.0.0:
+
dependencies:
+
citty: 0.1.6
+
consola: 3.4.2
+
defu: 6.1.4
+
node-fetch-native: 1.6.6
+
nypm: 0.6.0
+
pathe: 2.0.3
+
+
glob-parent@5.1.2:
+
dependencies:
+
is-glob: 4.0.3
+
+
glob-parent@6.0.2:
+
dependencies:
+
is-glob: 4.0.3
+
+
glob-to-regexp@0.4.1: {}
+
+
global-directory@4.0.1:
+
dependencies:
+
ini: 4.1.1
+
+
globals@14.0.0: {}
+
+
globals@15.15.0: {}
+
+
globals@16.3.0: {}
+
+
graceful-fs@4.2.10: {}
+
+
graceful-fs@4.2.11: {}
+
+
graceful-readlink@1.0.1: {}
+
+
graphemer@1.4.0: {}
+
+
growly@1.3.0: {}
+
+
gzip-size@6.0.0:
+
dependencies:
+
duplexer: 0.1.2
+
+
has-flag@4.0.0: {}
+
+
hasown@2.0.2:
+
dependencies:
+
function-bind: 1.1.2
+
+
he@1.2.0: {}
+
+
highlight.js@10.7.3: {}
+
+
hookable@5.5.3: {}
+
+
html-entities@2.3.3: {}
+
+
html-escaper@3.0.3: {}
+
+
html-tags@3.3.1: {}
+
+
htmlparser2@10.0.0:
+
dependencies:
+
domelementtype: 2.3.0
+
domhandler: 5.0.3
+
domutils: 3.2.2
+
entities: 6.0.1
+
+
human-signals@2.1.0: {}
+
+
human-signals@4.3.1: {}
+
+
ieee754@1.2.1: {}
+
+
ignore@5.3.2: {}
+
+
ignore@7.0.5: {}
+
+
immediate@3.0.6: {}
+
+
import-fresh@3.3.1:
+
dependencies:
+
parent-module: 1.0.1
+
resolve-from: 4.0.0
+
+
import-lazy@4.0.0: {}
+
+
import-meta-resolve@4.1.0: {}
+
+
imurmurhash@0.1.4: {}
+
+
inherits@2.0.4: {}
+
+
ini@1.3.8: {}
+
+
ini@4.1.1: {}
+
+
ini@4.1.3: {}
+
+
inline-style-parser@0.2.4: {}
+
+
is-absolute@0.1.7:
+
dependencies:
+
is-relative: 0.1.3
+
+
is-arrayish@0.2.1: {}
+
+
is-binary-path@2.1.0:
+
dependencies:
+
binary-extensions: 2.3.0
+
+
is-core-module@2.16.1:
+
dependencies:
+
hasown: 2.0.2
+
+
is-docker@2.2.1: {}
+
+
is-docker@3.0.0: {}
+
+
is-extglob@2.1.1: {}
+
+
is-fullwidth-code-point@3.0.0: {}
+
+
is-fullwidth-code-point@4.0.0: {}
+
+
is-fullwidth-code-point@5.0.0:
+
dependencies:
+
get-east-asian-width: 1.3.0
+
+
is-glob@4.0.3:
+
dependencies:
+
is-extglob: 2.1.1
+
+
is-html@2.0.0:
+
dependencies:
+
html-tags: 3.3.1
+
+
is-in-ci@1.0.0: {}
+
+
is-inside-container@1.0.0:
+
dependencies:
+
is-docker: 3.0.0
+
+
is-installed-globally@1.0.0:
+
dependencies:
+
global-directory: 4.0.1
+
is-path-inside: 4.0.0
+
+
is-interactive@2.0.0: {}
+
+
is-npm@6.0.0: {}
+
+
is-number@7.0.0: {}
+
+
is-path-inside@4.0.0: {}
+
+
is-plain-object@2.0.4:
+
dependencies:
+
isobject: 3.0.1
+
+
is-potential-custom-element-name@1.0.1: {}
+
+
is-primitive@3.0.1: {}
+
+
is-relative@0.1.3: {}
+
+
is-stream@2.0.1: {}
+
+
is-stream@3.0.0: {}
+
+
is-unicode-supported@1.3.0: {}
+
+
is-unicode-supported@2.1.0: {}
+
+
is-what@4.1.16: {}
+
+
is-wsl@2.2.0:
+
dependencies:
+
is-docker: 2.2.1
+
+
is-wsl@3.1.0:
+
dependencies:
+
is-inside-container: 1.0.0
+
+
isarray@1.0.0: {}
+
+
isexe@1.1.2: {}
+
+
isexe@2.0.0: {}
+
+
isobject@3.0.1: {}
+
+
jiti@2.4.2: {}
+
+
jju@1.4.0: {}
+
+
js-tokens@4.0.0: {}
+
+
js-tokens@9.0.1: {}
+
+
js-yaml@4.1.0:
+
dependencies:
+
argparse: 2.0.1
+
+
jsesc@3.1.0: {}
+
+
json-buffer@3.0.1: {}
+
+
json-parse-even-better-errors@3.0.2: {}
+
+
json-schema-traverse@0.4.1: {}
+
+
json-schema-traverse@1.0.0: {}
+
+
json-stable-stringify-without-jsonify@1.0.1: {}
+
+
json5@2.2.3: {}
+
+
jsonfile@6.1.0:
+
dependencies:
+
universalify: 2.0.1
+
optionalDependencies:
+
graceful-fs: 4.2.11
+
+
jszip@3.10.1:
+
dependencies:
+
lie: 3.3.0
+
pako: 1.0.11
+
readable-stream: 2.3.8
+
setimmediate: 1.0.5
+
+
kebab-case@1.0.2: {}
+
+
keyv@4.5.4:
+
dependencies:
+
json-buffer: 3.0.1
+
+
kleur@3.0.3: {}
+
+
known-css-properties@0.30.0: {}
+
+
kolorist@1.8.0: {}
+
+
ky@1.8.1: {}
+
+
latest-version@9.0.0:
+
dependencies:
+
package-json: 10.0.1
+
+
levn@0.4.1:
+
dependencies:
+
prelude-ls: 1.2.1
+
type-check: 0.4.0
+
+
lie@3.3.0:
+
dependencies:
+
immediate: 3.0.6
+
+
lighthouse-logger@2.0.1:
+
dependencies:
+
debug: 2.6.9
+
marky: 1.3.0
+
transitivePeerDependencies:
+
- supports-color
+
+
lines-and-columns@2.0.4: {}
+
+
linkedom@0.18.11:
+
dependencies:
+
css-select: 5.2.2
+
cssom: 0.5.0
+
html-escaper: 3.0.3
+
htmlparser2: 10.0.0
+
uhyphen: 0.2.0
+
+
listr2@8.3.3:
+
dependencies:
+
cli-truncate: 4.0.0
+
colorette: 2.0.20
+
eventemitter3: 5.0.1
+
log-update: 6.1.0
+
rfdc: 1.4.1
+
wrap-ansi: 9.0.0
+
+
local-pkg@1.1.1:
+
dependencies:
+
mlly: 1.7.4
+
pkg-types: 2.2.0
+
quansync: 0.2.10
+
+
locate-path@6.0.0:
+
dependencies:
+
p-locate: 5.0.0
+
+
lodash.camelcase@4.3.0: {}
+
+
lodash.kebabcase@4.1.1: {}
+
+
lodash.merge@4.6.2: {}
+
+
lodash.snakecase@4.1.1: {}
+
+
lodash@4.17.21: {}
+
+
log-symbols@5.1.0:
+
dependencies:
+
chalk: 5.4.1
+
is-unicode-supported: 1.3.0
+
+
log-symbols@6.0.0:
+
dependencies:
+
chalk: 5.4.1
+
is-unicode-supported: 1.3.0
+
+
log-update@6.1.0:
+
dependencies:
+
ansi-escapes: 7.0.0
+
cli-cursor: 5.0.0
+
slice-ansi: 7.1.0
+
strip-ansi: 7.1.0
+
wrap-ansi: 9.0.0
+
+
lru-cache@5.1.1:
+
dependencies:
+
yallist: 3.1.1
+
+
lru-cache@6.0.0:
+
dependencies:
+
yallist: 4.0.0
+
+
magic-string@0.30.17:
+
dependencies:
+
'@jridgewell/sourcemap-codec': 1.5.4
+
+
magicast@0.3.5:
+
dependencies:
+
'@babel/parser': 7.28.0
+
'@babel/types': 7.28.0
+
source-map-js: 1.2.1
+
+
make-error@1.3.6: {}
+
+
many-keys-map@2.0.1: {}
+
+
marky@1.3.0: {}
+
+
mdn-data@2.12.2: {}
+
+
mdn-data@2.21.0: {}
+
+
merge-anything@5.1.7:
+
dependencies:
+
is-what: 4.1.16
+
+
merge-stream@2.0.0: {}
+
+
merge2@1.4.1: {}
+
+
micromatch@4.0.8:
+
dependencies:
+
braces: 3.0.3
+
picomatch: 2.3.1
+
+
mimic-fn@2.1.0: {}
+
+
mimic-fn@4.0.0: {}
+
+
mimic-function@5.0.1: {}
+
+
minimatch@10.0.3:
+
dependencies:
+
'@isaacs/brace-expansion': 5.0.0
+
+
minimatch@3.0.8:
+
dependencies:
+
brace-expansion: 1.1.12
+
+
minimatch@3.1.2:
+
dependencies:
+
brace-expansion: 1.1.12
+
+
minimatch@9.0.5:
+
dependencies:
+
brace-expansion: 2.0.2
+
+
minimist@1.2.8: {}
+
+
mlly@1.7.4:
+
dependencies:
+
acorn: 8.15.0
+
pathe: 2.0.3
+
pkg-types: 1.3.1
+
ufo: 1.6.1
+
+
mrmime@2.0.1: {}
+
+
ms@2.0.0: {}
+
+
ms@2.1.3: {}
+
+
muggle-string@0.4.1: {}
+
+
multimatch@6.0.0:
+
dependencies:
+
'@types/minimatch': 3.0.5
+
array-differ: 4.0.0
+
array-union: 3.0.1
+
minimatch: 3.1.2
+
+
mz@2.7.0:
+
dependencies:
+
any-promise: 1.3.0
+
object-assign: 4.1.1
+
thenify-all: 1.6.0
+
+
nano-spawn@0.2.1: {}
+
+
nanoevents@6.0.2: {}
+
+
nanoid@3.3.11: {}
+
+
natural-compare@1.4.0: {}
+
+
node-fetch-native@1.6.6: {}
+
+
node-forge@1.3.1: {}
+
+
node-notifier@10.0.1:
+
dependencies:
+
growly: 1.3.0
+
is-wsl: 2.2.0
+
semver: 7.7.2
+
shellwords: 0.1.1
+
uuid: 8.3.2
+
which: 2.0.2
+
+
node-releases@2.0.19: {}
+
+
normalize-path@3.0.0: {}
+
+
npm-run-path@4.0.1:
+
dependencies:
+
path-key: 3.1.1
+
+
npm-run-path@5.3.0:
+
dependencies:
+
path-key: 4.0.0
+
+
nth-check@2.1.1:
+
dependencies:
+
boolbase: 1.0.0
+
+
nypm@0.6.0:
+
dependencies:
+
citty: 0.1.6
+
consola: 3.4.2
+
pathe: 2.0.3
+
pkg-types: 2.2.0
+
tinyexec: 0.3.2
+
+
object-assign@4.1.1: {}
+
+
ofetch@1.4.1:
+
dependencies:
+
destr: 2.0.5
+
node-fetch-native: 1.6.6
+
ufo: 1.6.1
+
+
ohash@2.0.11: {}
+
+
on-exit-leak-free@2.1.2: {}
+
+
once@1.4.0:
+
dependencies:
+
wrappy: 1.0.2
+
+
onetime@5.1.2:
+
dependencies:
+
mimic-fn: 2.1.0
+
+
onetime@6.0.0:
+
dependencies:
+
mimic-fn: 4.0.0
+
+
onetime@7.0.0:
+
dependencies:
+
mimic-function: 5.0.1
+
+
open@10.1.2:
+
dependencies:
+
default-browser: 5.2.1
+
define-lazy-prop: 3.0.0
+
is-inside-container: 1.0.0
+
is-wsl: 3.1.0
+
+
open@8.4.2:
+
dependencies:
+
define-lazy-prop: 2.0.0
+
is-docker: 2.2.1
+
is-wsl: 2.2.0
+
+
open@9.1.0:
+
dependencies:
+
default-browser: 4.0.0
+
define-lazy-prop: 3.0.0
+
is-inside-container: 1.0.0
+
is-wsl: 2.2.0
+
+
optionator@0.9.4:
+
dependencies:
+
deep-is: 0.1.4
+
fast-levenshtein: 2.0.6
+
levn: 0.4.1
+
prelude-ls: 1.2.1
+
type-check: 0.4.0
+
word-wrap: 1.2.5
+
+
ora@6.3.1:
+
dependencies:
+
chalk: 5.4.1
+
cli-cursor: 4.0.0
+
cli-spinners: 2.9.2
+
is-interactive: 2.0.0
+
is-unicode-supported: 1.3.0
+
log-symbols: 5.1.0
+
stdin-discarder: 0.1.0
+
strip-ansi: 7.1.0
+
wcwidth: 1.0.1
+
+
ora@8.2.0:
+
dependencies:
+
chalk: 5.4.1
+
cli-cursor: 5.0.0
+
cli-spinners: 2.9.2
+
is-interactive: 2.0.0
+
is-unicode-supported: 2.1.0
+
log-symbols: 6.0.0
+
stdin-discarder: 0.2.2
+
string-width: 7.2.0
+
strip-ansi: 7.1.0
+
+
os-shim@0.1.3: {}
+
+
p-limit@3.1.0:
+
dependencies:
+
yocto-queue: 0.1.0
+
+
p-locate@5.0.0:
+
dependencies:
+
p-limit: 3.1.0
+
+
package-json@10.0.1:
+
dependencies:
+
ky: 1.8.1
+
registry-auth-token: 5.1.0
+
registry-url: 6.0.1
+
semver: 7.7.2
+
+
package-manager-detector@1.3.0: {}
+
+
pako@1.0.11: {}
+
+
parent-module@1.0.1:
+
dependencies:
+
callsites: 3.1.0
+
+
parse-json@7.1.1:
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
error-ex: 1.3.2
+
json-parse-even-better-errors: 3.0.2
+
lines-and-columns: 2.0.4
+
type-fest: 3.13.1
+
+
parse5-htmlparser2-tree-adapter@6.0.1:
+
dependencies:
+
parse5: 6.0.1
+
+
parse5@5.1.1: {}
+
+
parse5@6.0.1: {}
+
+
parse5@7.3.0:
+
dependencies:
+
entities: 6.0.1
+
+
path-browserify@1.0.1: {}
+
+
path-exists@4.0.0: {}
+
+
path-key@3.1.1: {}
+
+
path-key@4.0.0: {}
+
+
path-parse@1.0.7: {}
+
+
pathe@2.0.3: {}
+
+
pend@1.2.0: {}
+
+
perfect-debounce@1.0.0: {}
+
+
picocolors@1.1.1: {}
+
+
picomatch@2.3.1: {}
+
+
picomatch@4.0.2: {}
+
+
pino-abstract-transport@2.0.0:
+
dependencies:
+
split2: 4.2.0
+
+
pino-std-serializers@7.0.0: {}
+
+
pino@9.6.0:
+
dependencies:
+
atomic-sleep: 1.0.0
+
fast-redact: 3.5.0
+
on-exit-leak-free: 2.1.2
+
pino-abstract-transport: 2.0.0
+
pino-std-serializers: 7.0.0
+
process-warning: 4.0.1
+
quick-format-unescaped: 4.0.4
+
real-require: 0.2.0
+
safe-stable-stringify: 2.5.0
+
sonic-boom: 4.2.0
+
thread-stream: 3.1.0
+
+
pkg-types@1.3.1:
+
dependencies:
+
confbox: 0.1.8
+
mlly: 1.7.4
+
pathe: 2.0.3
+
+
pkg-types@2.2.0:
+
dependencies:
+
confbox: 0.2.2
+
exsolve: 1.0.7
+
pathe: 2.0.3
+
+
postcss@8.5.6:
+
dependencies:
+
nanoid: 3.3.11
+
picocolors: 1.1.1
+
source-map-js: 1.2.1
+
+
prelude-ls@1.2.1: {}
+
+
prettier@3.5.3: {}
+
+
process-nextick-args@2.0.1: {}
+
+
process-warning@4.0.1: {}
+
+
promise-toolbox@0.21.0:
+
dependencies:
+
make-error: 1.3.6
+
+
prompts@2.4.2:
+
dependencies:
+
kleur: 3.0.3
+
sisteransi: 1.0.5
+
+
proto-list@1.2.4: {}
+
+
publish-browser-extension@3.0.1:
+
dependencies:
+
cac: 6.7.14
+
cli-highlight: 2.1.11
+
consola: 3.4.2
+
dotenv: 16.6.1
+
extract-zip: 2.0.1
+
formdata-node: 6.0.3
+
listr2: 8.3.3
+
lodash.camelcase: 4.3.0
+
lodash.kebabcase: 4.1.1
+
lodash.snakecase: 4.1.1
+
ofetch: 1.4.1
+
open: 9.1.0
+
ora: 6.3.1
+
prompts: 2.4.2
+
zod: 3.25.74
+
transitivePeerDependencies:
+
- supports-color
+
+
pump@3.0.3:
+
dependencies:
+
end-of-stream: 1.4.5
+
once: 1.4.0
+
+
punycode@2.3.1: {}
+
+
pupa@3.1.0:
+
dependencies:
+
escape-goat: 4.0.0
+
+
quansync@0.2.10: {}
+
+
queue-microtask@1.2.3: {}
+
+
quick-format-unescaped@4.0.4: {}
+
+
rc9@2.1.2:
+
dependencies:
+
defu: 6.1.4
+
destr: 2.0.5
+
+
rc@1.2.8:
+
dependencies:
+
deep-extend: 0.6.0
+
ini: 1.3.8
+
minimist: 1.2.8
+
strip-json-comments: 2.0.1
+
+
readable-stream@2.3.8:
+
dependencies:
+
core-util-is: 1.0.3
+
inherits: 2.0.4
+
isarray: 1.0.0
+
process-nextick-args: 2.0.1
+
safe-buffer: 5.1.2
+
string_decoder: 1.1.1
+
util-deprecate: 1.0.2
+
+
readable-stream@3.6.2:
+
dependencies:
+
inherits: 2.0.4
+
string_decoder: 1.3.0
+
util-deprecate: 1.0.2
+
+
readdirp@3.6.0:
+
dependencies:
+
picomatch: 2.3.1
+
+
readdirp@4.1.2: {}
+
+
real-require@0.2.0: {}
+
+
regenerator-runtime@0.14.1: {}
+
+
registry-auth-token@5.1.0:
+
dependencies:
+
'@pnpm/npm-conf': 2.3.1
+
+
registry-url@6.0.1:
+
dependencies:
+
rc: 1.2.8
+
+
require-directory@2.1.1: {}
+
+
require-from-string@2.0.2: {}
+
+
resolve-from@4.0.0: {}
+
+
resolve@1.22.10:
+
dependencies:
+
is-core-module: 2.16.1
+
path-parse: 1.0.7
+
supports-preserve-symlinks-flag: 1.0.0
+
+
restore-cursor@4.0.0:
+
dependencies:
+
onetime: 5.1.2
+
signal-exit: 3.0.7
+
+
restore-cursor@5.1.0:
+
dependencies:
+
onetime: 7.0.0
+
signal-exit: 4.1.0
+
+
reusify@1.1.0: {}
+
+
rfdc@1.4.1: {}
+
+
rollup@4.44.2:
+
dependencies:
+
'@types/estree': 1.0.8
+
optionalDependencies:
+
'@rollup/rollup-android-arm-eabi': 4.44.2
+
'@rollup/rollup-android-arm64': 4.44.2
+
'@rollup/rollup-darwin-arm64': 4.44.2
+
'@rollup/rollup-darwin-x64': 4.44.2
+
'@rollup/rollup-freebsd-arm64': 4.44.2
+
'@rollup/rollup-freebsd-x64': 4.44.2
+
'@rollup/rollup-linux-arm-gnueabihf': 4.44.2
+
'@rollup/rollup-linux-arm-musleabihf': 4.44.2
+
'@rollup/rollup-linux-arm64-gnu': 4.44.2
+
'@rollup/rollup-linux-arm64-musl': 4.44.2
+
'@rollup/rollup-linux-loongarch64-gnu': 4.44.2
+
'@rollup/rollup-linux-powerpc64le-gnu': 4.44.2
+
'@rollup/rollup-linux-riscv64-gnu': 4.44.2
+
'@rollup/rollup-linux-riscv64-musl': 4.44.2
+
'@rollup/rollup-linux-s390x-gnu': 4.44.2
+
'@rollup/rollup-linux-x64-gnu': 4.44.2
+
'@rollup/rollup-linux-x64-musl': 4.44.2
+
'@rollup/rollup-win32-arm64-msvc': 4.44.2
+
'@rollup/rollup-win32-ia32-msvc': 4.44.2
+
'@rollup/rollup-win32-x64-msvc': 4.44.2
+
fsevents: 2.3.3
+
+
run-applescript@5.0.0:
+
dependencies:
+
execa: 5.1.1
+
+
run-applescript@7.0.0: {}
+
+
run-parallel@1.2.0:
+
dependencies:
+
queue-microtask: 1.2.3
+
+
safe-buffer@5.1.2: {}
+
+
safe-buffer@5.2.1: {}
+
+
safe-stable-stringify@2.5.0: {}
+
+
sax@1.4.1: {}
+
+
scule@1.3.0: {}
+
+
semver@6.3.1: {}
+
+
semver@7.5.4:
+
dependencies:
+
lru-cache: 6.0.0
+
+
semver@7.7.2: {}
+
+
serialize-error@9.1.1:
+
dependencies:
+
type-fest: 2.19.0
+
+
seroval-plugins@1.3.2(seroval@1.3.2):
+
dependencies:
+
seroval: 1.3.2
+
+
seroval@1.3.2: {}
+
+
set-value@4.1.0:
+
dependencies:
+
is-plain-object: 2.0.4
+
is-primitive: 3.0.1
+
+
setimmediate@1.0.5: {}
+
+
shebang-command@2.0.0:
+
dependencies:
+
shebang-regex: 3.0.0
+
+
shebang-regex@3.0.0: {}
+
+
shell-quote@1.7.3: {}
+
+
shellwords@0.1.1: {}
+
+
signal-exit@3.0.7: {}
+
+
signal-exit@4.1.0: {}
+
+
sirv@3.0.1:
+
dependencies:
+
'@polka/url': 1.0.0-next.29
+
mrmime: 2.0.1
+
totalist: 3.0.1
+
+
sisteransi@1.0.5: {}
+
+
slice-ansi@5.0.0:
+
dependencies:
+
ansi-styles: 6.2.1
+
is-fullwidth-code-point: 4.0.0
+
+
slice-ansi@7.1.0:
+
dependencies:
+
ansi-styles: 6.2.1
+
is-fullwidth-code-point: 5.0.0
+
+
solid-devtools@0.34.3(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)):
+
dependencies:
+
'@babel/core': 7.28.0
+
'@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0)
+
'@babel/types': 7.28.0
+
'@solid-devtools/debugger': 0.28.1(solid-js@1.9.7)
+
'@solid-devtools/shared': 0.20.0(solid-js@1.9.7)
+
solid-js: 1.9.7
+
optionalDependencies:
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
transitivePeerDependencies:
+
- supports-color
+
+
solid-js@1.9.7:
+
dependencies:
+
csstype: 3.1.3
+
seroval: 1.3.2
+
seroval-plugins: 1.3.2(seroval@1.3.2)
+
+
solid-refresh@0.6.3(solid-js@1.9.7):
+
dependencies:
+
'@babel/generator': 7.28.0
+
'@babel/helper-module-imports': 7.27.1
+
'@babel/types': 7.28.0
+
solid-js: 1.9.7
+
transitivePeerDependencies:
+
- supports-color
+
+
sonic-boom@4.2.0:
+
dependencies:
+
atomic-sleep: 1.0.0
+
+
source-map-js@1.2.1: {}
+
+
source-map-support@0.5.21:
+
dependencies:
+
buffer-from: 1.1.2
+
source-map: 0.6.1
+
+
source-map@0.6.1: {}
+
+
source-map@0.7.4: {}
+
+
spawn-sync@1.0.15:
+
dependencies:
+
concat-stream: 1.6.2
+
os-shim: 0.1.3
+
+
split2@4.2.0: {}
+
+
split@1.0.1:
+
dependencies:
+
through: 2.3.8
+
+
sprintf-js@1.0.3: {}
+
+
stdin-discarder@0.1.0:
+
dependencies:
+
bl: 5.1.0
+
+
stdin-discarder@0.2.2: {}
+
+
string-argv@0.3.2: {}
+
+
string-width@4.2.3:
+
dependencies:
+
emoji-regex: 8.0.0
+
is-fullwidth-code-point: 3.0.0
+
strip-ansi: 6.0.1
+
+
string-width@7.2.0:
+
dependencies:
+
emoji-regex: 10.4.0
+
get-east-asian-width: 1.3.0
+
strip-ansi: 7.1.0
+
+
string_decoder@1.1.1:
+
dependencies:
+
safe-buffer: 5.1.2
+
+
string_decoder@1.3.0:
+
dependencies:
+
safe-buffer: 5.2.1
+
+
strip-ansi@6.0.1:
+
dependencies:
+
ansi-regex: 5.0.1
+
+
strip-ansi@7.1.0:
+
dependencies:
+
ansi-regex: 6.1.0
+
+
strip-bom@5.0.0: {}
+
+
strip-final-newline@2.0.0: {}
+
+
strip-final-newline@3.0.0: {}
+
+
strip-json-comments@2.0.1: {}
+
+
strip-json-comments@3.1.1: {}
+
+
strip-json-comments@5.0.1: {}
+
+
strip-literal@3.0.0:
+
dependencies:
+
js-tokens: 9.0.1
+
+
stubborn-fs@1.2.5: {}
+
+
style-to-object@1.0.9:
+
dependencies:
+
inline-style-parser: 0.2.4
+
+
supports-color@7.2.0:
+
dependencies:
+
has-flag: 4.0.0
+
+
supports-color@8.1.1:
+
dependencies:
+
has-flag: 4.0.0
+
+
supports-preserve-symlinks-flag@1.0.0: {}
+
+
thenify-all@1.6.0:
+
dependencies:
+
thenify: 3.3.1
+
+
thenify@3.3.1:
+
dependencies:
+
any-promise: 1.3.0
+
+
thread-stream@3.1.0:
+
dependencies:
+
real-require: 0.2.0
+
+
through@2.3.8: {}
+
+
tiny-uid@1.1.2: {}
+
+
tinyexec@0.3.2: {}
+
+
tinyexec@1.0.1: {}
+
+
tinyglobby@0.2.14:
+
dependencies:
+
fdir: 6.4.6(picomatch@4.0.2)
+
picomatch: 4.0.2
+
+
titleize@3.0.0: {}
+
+
tmp@0.2.3: {}
+
+
to-regex-range@5.0.1:
+
dependencies:
+
is-number: 7.0.0
+
+
totalist@3.0.1: {}
+
+
ts-api-utils@2.1.0(typescript@5.8.3):
+
dependencies:
+
typescript: 5.8.3
+
+
tslib@2.8.1: {}
+
+
type-check@0.4.0:
+
dependencies:
+
prelude-ls: 1.2.1
+
+
type-fest@2.19.0: {}
+
+
type-fest@3.13.1: {}
+
+
type-fest@4.41.0: {}
+
+
typedarray@0.0.6: {}
+
+
typescript-eslint@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
+
dependencies:
+
'@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
'@typescript-eslint/parser': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
+
eslint: 9.30.1(jiti@2.4.2)
+
typescript: 5.8.3
+
transitivePeerDependencies:
+
- supports-color
+
+
typescript@5.8.2: {}
+
+
typescript@5.8.3: {}
+
+
ufo@1.6.1: {}
+
+
uhyphen@0.2.0: {}
+
+
unconfig@7.3.2:
+
dependencies:
+
'@quansync/fs': 0.1.3
+
defu: 6.1.4
+
jiti: 2.4.2
+
quansync: 0.2.10
+
+
undici-types@7.8.0: {}
+
+
unimport@5.1.0:
+
dependencies:
+
acorn: 8.15.0
+
escape-string-regexp: 5.0.0
+
estree-walker: 3.0.3
+
local-pkg: 1.1.1
+
magic-string: 0.30.17
+
mlly: 1.7.4
+
pathe: 2.0.3
+
picomatch: 4.0.2
+
pkg-types: 2.2.0
+
scule: 1.3.0
+
strip-literal: 3.0.0
+
tinyglobby: 0.2.14
+
unplugin: 2.3.5
+
unplugin-utils: 0.2.4
+
+
universalify@2.0.1: {}
+
+
unocss@66.3.3(postcss@8.5.6)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3)):
+
dependencies:
+
'@unocss/astro': 66.3.3(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3))
+
'@unocss/cli': 66.3.3
+
'@unocss/core': 66.3.3
+
'@unocss/postcss': 66.3.3(postcss@8.5.6)
+
'@unocss/preset-attributify': 66.3.3
+
'@unocss/preset-icons': 66.3.3
+
'@unocss/preset-mini': 66.3.3
+
'@unocss/preset-tagify': 66.3.3
+
'@unocss/preset-typography': 66.3.3
+
'@unocss/preset-uno': 66.3.3
+
'@unocss/preset-web-fonts': 66.3.3
+
'@unocss/preset-wind': 66.3.3
+
'@unocss/preset-wind3': 66.3.3
+
'@unocss/preset-wind4': 66.3.3
+
'@unocss/transformer-attributify-jsx': 66.3.3
+
'@unocss/transformer-compile-class': 66.3.3
+
'@unocss/transformer-directives': 66.3.3
+
'@unocss/transformer-variant-group': 66.3.3
+
'@unocss/vite': 66.3.3(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))(vue@3.5.17(typescript@5.8.3))
+
optionalDependencies:
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
transitivePeerDependencies:
+
- postcss
+
- supports-color
+
- vue
+
+
unplugin-utils@0.2.4:
+
dependencies:
+
pathe: 2.0.3
+
picomatch: 4.0.2
+
+
unplugin@2.3.5:
+
dependencies:
+
acorn: 8.15.0
+
picomatch: 4.0.2
+
webpack-virtual-modules: 0.6.2
+
+
untildify@4.0.0: {}
+
+
update-browserslist-db@1.1.3(browserslist@4.25.1):
+
dependencies:
+
browserslist: 4.25.1
+
escalade: 3.2.0
+
picocolors: 1.1.1
+
+
update-notifier@7.3.1:
+
dependencies:
+
boxen: 8.0.1
+
chalk: 5.4.1
+
configstore: 7.0.0
+
is-in-ci: 1.0.0
+
is-installed-globally: 1.0.0
+
is-npm: 6.0.0
+
latest-version: 9.0.0
+
pupa: 3.1.0
+
semver: 7.7.2
+
xdg-basedir: 5.1.0
+
+
uri-js@4.4.1:
+
dependencies:
+
punycode: 2.3.1
+
+
util-deprecate@1.0.2: {}
+
+
uuid@8.3.2: {}
+
+
validate-html-nesting@1.2.3: {}
+
+
vite-node@3.2.4(@types/node@24.0.10)(jiti@2.4.2):
+
dependencies:
+
cac: 6.7.14
+
debug: 4.4.1
+
es-module-lexer: 1.7.0
+
pathe: 2.0.3
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
transitivePeerDependencies:
+
- '@types/node'
+
- jiti
+
- less
+
- lightningcss
+
- sass
+
- sass-embedded
+
- stylus
+
- sugarss
+
- supports-color
+
- terser
+
- tsx
+
- yaml
+
+
vite-plugin-dts@4.5.4(@types/node@24.0.10)(rollup@4.44.2)(typescript@5.8.3)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)):
+
dependencies:
+
'@microsoft/api-extractor': 7.52.8(@types/node@24.0.10)
+
'@rollup/pluginutils': 5.2.0(rollup@4.44.2)
+
'@volar/typescript': 2.4.17
+
'@vue/language-core': 2.2.0(typescript@5.8.3)
+
compare-versions: 6.1.1
+
debug: 4.4.1
+
kolorist: 1.8.0
+
local-pkg: 1.1.1
+
magic-string: 0.30.17
+
typescript: 5.8.3
+
optionalDependencies:
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
transitivePeerDependencies:
+
- '@types/node'
+
- rollup
+
- supports-color
+
+
vite-plugin-solid@2.11.7(solid-js@1.9.7)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)):
+
dependencies:
+
'@babel/core': 7.28.0
+
'@types/babel__core': 7.20.5
+
babel-preset-solid: 1.9.6(@babel/core@7.28.0)
+
merge-anything: 5.1.7
+
solid-js: 1.9.7
+
solid-refresh: 0.6.3(solid-js@1.9.7)
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
vitefu: 1.1.1(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2))
+
transitivePeerDependencies:
+
- supports-color
+
+
vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2):
+
dependencies:
+
esbuild: 0.25.5
+
fdir: 6.4.6(picomatch@4.0.2)
+
picomatch: 4.0.2
+
postcss: 8.5.6
+
rollup: 4.44.2
+
tinyglobby: 0.2.14
+
optionalDependencies:
+
'@types/node': 24.0.10
+
fsevents: 2.3.3
+
jiti: 2.4.2
+
+
vitefu@1.1.1(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)):
+
optionalDependencies:
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
+
vscode-uri@3.1.0: {}
+
+
vue-flow-layout@0.1.1(vue@3.5.17(typescript@5.8.3)):
+
dependencies:
+
vue: 3.5.17(typescript@5.8.3)
+
+
vue@3.5.17(typescript@5.8.3):
+
dependencies:
+
'@vue/compiler-dom': 3.5.17
+
'@vue/compiler-sfc': 3.5.17
+
'@vue/runtime-dom': 3.5.17
+
'@vue/server-renderer': 3.5.17(vue@3.5.17(typescript@5.8.3))
+
'@vue/shared': 3.5.17
+
optionalDependencies:
+
typescript: 5.8.3
+
+
watchpack@2.4.2:
+
dependencies:
+
glob-to-regexp: 0.4.1
+
graceful-fs: 4.2.11
+
+
wcwidth@1.0.1:
+
dependencies:
+
defaults: 1.0.4
+
+
web-ext-run@0.2.3:
+
dependencies:
+
'@babel/runtime': 7.27.0
+
'@devicefarmer/adbkit': 3.3.8
+
chrome-launcher: 1.1.2
+
debounce: 1.2.1
+
es6-error: 4.1.1
+
firefox-profile: 4.7.0
+
fx-runner: 1.4.0
+
multimatch: 6.0.0
+
node-notifier: 10.0.1
+
parse-json: 7.1.1
+
pino: 9.6.0
+
promise-toolbox: 0.21.0
+
set-value: 4.1.0
+
source-map-support: 0.5.21
+
strip-bom: 5.0.0
+
strip-json-comments: 5.0.1
+
tmp: 0.2.3
+
update-notifier: 7.3.1
+
watchpack: 2.4.2
+
ws: 8.18.1
+
zip-dir: 2.0.0
+
transitivePeerDependencies:
+
- bufferutil
+
- supports-color
+
- utf-8-validate
+
+
webext-bridge@6.0.1:
+
dependencies:
+
'@types/webextension-polyfill': 0.8.3
+
nanoevents: 6.0.2
+
serialize-error: 9.1.1
+
tiny-uid: 1.1.2
+
webextension-polyfill: 0.9.0
+
+
webextension-polyfill@0.9.0: {}
+
+
webpack-virtual-modules@0.6.2: {}
+
+
when-exit@2.1.4: {}
+
+
when@3.7.7: {}
+
+
which@1.2.4:
+
dependencies:
+
is-absolute: 0.1.7
+
isexe: 1.1.2
+
+
which@2.0.2:
+
dependencies:
+
isexe: 2.0.0
+
+
widest-line@5.0.0:
+
dependencies:
+
string-width: 7.2.0
+
+
winreg@0.0.12: {}
+
+
word-wrap@1.2.5: {}
+
+
wrap-ansi@7.0.0:
+
dependencies:
+
ansi-styles: 4.3.0
+
string-width: 4.2.3
+
strip-ansi: 6.0.1
+
+
wrap-ansi@9.0.0:
+
dependencies:
+
ansi-styles: 6.2.1
+
string-width: 7.2.0
+
strip-ansi: 7.1.0
+
+
wrappy@1.0.2: {}
+
+
ws@8.18.1: {}
+
+
wxt@0.20.7(@types/node@24.0.10)(jiti@2.4.2)(rollup@4.44.2):
+
dependencies:
+
'@1natsu/wait-element': 4.1.2
+
'@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.44.2)
+
'@webext-core/fake-browser': 1.3.2
+
'@webext-core/isolated-element': 1.1.2
+
'@webext-core/match-patterns': 1.0.3
+
'@wxt-dev/browser': 0.0.326
+
'@wxt-dev/storage': 1.1.1
+
async-mutex: 0.5.0
+
c12: 3.0.4(magicast@0.3.5)
+
cac: 6.7.14
+
chokidar: 4.0.3
+
ci-info: 4.3.0
+
consola: 3.4.2
+
defu: 6.1.4
+
dotenv: 16.6.1
+
dotenv-expand: 12.0.2
+
esbuild: 0.25.5
+
fast-glob: 3.3.3
+
filesize: 10.1.6
+
fs-extra: 11.3.0
+
get-port-please: 3.1.2
+
giget: 2.0.0
+
hookable: 5.5.3
+
import-meta-resolve: 4.1.0
+
is-wsl: 3.1.0
+
json5: 2.2.3
+
jszip: 3.10.1
+
linkedom: 0.18.11
+
magicast: 0.3.5
+
minimatch: 10.0.3
+
nano-spawn: 0.2.1
+
normalize-path: 3.0.0
+
nypm: 0.6.0
+
ohash: 2.0.11
+
open: 10.1.2
+
ora: 8.2.0
+
perfect-debounce: 1.0.0
+
picocolors: 1.1.1
+
prompts: 2.4.2
+
publish-browser-extension: 3.0.1
+
scule: 1.3.0
+
unimport: 5.1.0
+
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)
+
vite-node: 3.2.4(@types/node@24.0.10)(jiti@2.4.2)
+
web-ext-run: 0.2.3
+
transitivePeerDependencies:
+
- '@types/node'
+
- bufferutil
+
- jiti
+
- less
+
- lightningcss
+
- rollup
+
- sass
+
- sass-embedded
+
- stylus
+
- sugarss
+
- supports-color
+
- terser
+
- tsx
+
- utf-8-validate
+
- yaml
+
+
xdg-basedir@5.1.0: {}
+
+
xml2js@0.6.2:
+
dependencies:
+
sax: 1.4.1
+
xmlbuilder: 11.0.1
+
+
xmlbuilder@11.0.1: {}
+
+
y18n@5.0.8: {}
+
+
yallist@3.1.1: {}
+
+
yallist@4.0.0: {}
+
+
yargs-parser@20.2.9: {}
+
+
yargs-parser@21.1.1: {}
+
+
yargs@16.2.0:
+
dependencies:
+
cliui: 7.0.4
+
escalade: 3.2.0
+
get-caller-file: 2.0.5
+
require-directory: 2.1.1
+
string-width: 4.2.3
+
y18n: 5.0.8
+
yargs-parser: 20.2.9
+
+
yargs@17.7.2:
+
dependencies:
+
cliui: 8.0.1
+
escalade: 3.2.0
+
get-caller-file: 2.0.5
+
require-directory: 2.1.1
+
string-width: 4.2.3
+
y18n: 5.0.8
+
yargs-parser: 21.1.1
+
+
yauzl@2.10.0:
+
dependencies:
+
buffer-crc32: 0.2.13
+
fd-slicer: 1.1.0
+
+
yocto-queue@0.1.0: {}
+
+
zip-dir@2.0.0:
+
dependencies:
+
async: 3.2.6
+
jszip: 3.10.1
+
+
zod@3.25.74: {}
+3
pnpm-workspace.yaml
···
+
packages:
+
- "webapp"
+
- "extension"
+1
server/.gitignore
···
+
bsky-repost-likes.exe
+75
server/go.mod
···
+
module bsky-repost-likes
+
+
go 1.23.9
+
+
require (
+
github.com/bluesky-social/indigo v0.0.0-20250606055443-008e4ed915ad
+
github.com/bluesky-social/jetstream v0.0.0-20250414024304-d17bd81a945e
+
github.com/cornelk/hashmap v1.0.8
+
github.com/gorilla/mux v1.8.1
+
github.com/gorilla/websocket v1.5.3
+
)
+
+
require (
+
github.com/beorn7/perks v1.0.1 // indirect
+
github.com/carlmjohnson/versioninfo v0.22.5 // indirect
+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
+
github.com/felixge/httpsnoop v1.0.4 // indirect
+
github.com/go-logr/logr v1.4.1 // indirect
+
github.com/go-logr/stdr v1.2.2 // indirect
+
github.com/goccy/go-json v0.10.2 // indirect
+
github.com/gogo/protobuf v1.3.2 // indirect
+
github.com/google/uuid v1.6.0 // indirect
+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
+
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
+
github.com/hashicorp/golang-lru v1.0.2 // indirect
+
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
+
github.com/ipfs/bbloom v0.0.4 // indirect
+
github.com/ipfs/go-block-format v0.2.0 // indirect
+
github.com/ipfs/go-cid v0.4.1 // indirect
+
github.com/ipfs/go-datastore v0.6.0 // indirect
+
github.com/ipfs/go-ipfs-blockstore v1.3.1 // indirect
+
github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect
+
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
+
github.com/ipfs/go-ipld-cbor v0.1.0 // indirect
+
github.com/ipfs/go-ipld-format v0.6.0 // indirect
+
github.com/ipfs/go-log v1.0.5 // indirect
+
github.com/ipfs/go-log/v2 v2.5.1 // indirect
+
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
+
github.com/jbenet/goprocess v0.1.4 // indirect
+
github.com/klauspost/compress v1.17.9 // indirect
+
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
+
github.com/mattn/go-isatty v0.0.20 // indirect
+
github.com/minio/sha256-simd v1.0.1 // indirect
+
github.com/mr-tron/base58 v1.2.0 // indirect
+
github.com/multiformats/go-base32 v0.1.0 // indirect
+
github.com/multiformats/go-base36 v0.2.0 // indirect
+
github.com/multiformats/go-multibase v0.2.0 // indirect
+
github.com/multiformats/go-multihash v0.2.3 // indirect
+
github.com/multiformats/go-varint v0.0.7 // indirect
+
github.com/opentracing/opentracing-go v1.2.0 // indirect
+
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect
+
github.com/prometheus/client_golang v1.19.1 // indirect
+
github.com/prometheus/client_model v0.6.1 // indirect
+
github.com/prometheus/common v0.54.0 // indirect
+
github.com/prometheus/procfs v0.15.1 // indirect
+
github.com/spaolacci/murmur3 v1.1.0 // indirect
+
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect
+
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect
+
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect
+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect
+
go.opentelemetry.io/otel v1.21.0 // indirect
+
go.opentelemetry.io/otel/metric v1.21.0 // indirect
+
go.opentelemetry.io/otel/trace v1.21.0 // indirect
+
go.uber.org/atomic v1.11.0 // indirect
+
go.uber.org/multierr v1.11.0 // indirect
+
go.uber.org/zap v1.26.0 // indirect
+
golang.org/x/crypto v0.22.0 // indirect
+
golang.org/x/sys v0.22.0 // indirect
+
golang.org/x/time v0.5.0 // indirect
+
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
+
google.golang.org/protobuf v1.34.2 // indirect
+
lukechampine.com/blake3 v1.2.1 // indirect
+
)
+
+
replace github.com/bluesky-social/jetstream => github.com/caseyho/jetstream v0.0.0-20250310034359-bee7b7fc4d0f
+227
server/go.sum
···
+
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
+
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+
github.com/bluesky-social/indigo v0.0.0-20250606055443-008e4ed915ad h1:VQnna39DdE6i2s0rm3ZG1GfucQOWJdYuyACzwxNQ+T4=
+
github.com/bluesky-social/indigo v0.0.0-20250606055443-008e4ed915ad/go.mod h1:ovyxp8AMO1Hoe838vMJUbqHTZaAR8ABM3g3TXu+A5Ng=
+
github.com/bluesky-social/jetstream v0.0.0-20250414024304-d17bd81a945e h1:P/O6TDHs53gwgV845uDHI+Nri889ixksRrh4bCkCdxo=
+
github.com/bluesky-social/jetstream v0.0.0-20250414024304-d17bd81a945e/go.mod h1:WiYEeyJSdUwqoaZ71KJSpTblemUCpwJfh5oVXplK6T4=
+
github.com/carlmjohnson/versioninfo v0.22.5 h1:O00sjOLUAFxYQjlN/bzYTuZiS0y6fWDQjMRvwtKgwwc=
+
github.com/carlmjohnson/versioninfo v0.22.5/go.mod h1:QT9mph3wcVfISUKd0i9sZfVrPviHuSF+cUtLjm2WSf8=
+
github.com/caseyho/jetstream v0.0.0-20250310034359-bee7b7fc4d0f h1:Ed2fW2wWekh6HK2S7vaHnlSlSJTT7iNdxcgdPYFaBrg=
+
github.com/caseyho/jetstream v0.0.0-20250310034359-bee7b7fc4d0f/go.mod h1:WiYEeyJSdUwqoaZ71KJSpTblemUCpwJfh5oVXplK6T4=
+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+
github.com/cornelk/hashmap v1.0.8 h1:nv0AWgw02n+iDcawr5It4CjQIAcdMMKRrs10HOJYlrc=
+
github.com/cornelk/hashmap v1.0.8/go.mod h1:RfZb7JO3RviW/rT6emczVuC/oxpdz4UsSB2LJSclR1k=
+
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
+
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
+
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
+
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
+
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
+
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
+
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
+
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
+
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
+
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
+
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
+
github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs=
+
github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM=
+
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
+
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
+
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
+
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
+
github.com/ipfs/go-ipfs-blockstore v1.3.1 h1:cEI9ci7V0sRNivqaOr0elDsamxXFxJMMMy7PTTDQNsQ=
+
github.com/ipfs/go-ipfs-blockstore v1.3.1/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
+
github.com/ipfs/go-ipfs-ds-help v1.1.1 h1:B5UJOH52IbcfS56+Ul+sv8jnIV10lbjLF5eOO0C66Nw=
+
github.com/ipfs/go-ipfs-ds-help v1.1.1/go.mod h1:75vrVCkSdSFidJscs8n4W+77AtTpCIAdDGAwjitJMIo=
+
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
+
github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs=
+
github.com/ipfs/go-ipld-cbor v0.1.0 h1:dx0nS0kILVivGhfWuB6dUpMa/LAwElHPw1yOGYopoYs=
+
github.com/ipfs/go-ipld-cbor v0.1.0/go.mod h1:U2aYlmVrJr2wsUBU67K4KgepApSZddGRDWBYR0H4sCk=
+
github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U=
+
github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg=
+
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
+
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
+
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
+
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
+
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
+
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
+
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
+
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
+
github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o=
+
github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
+
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
+
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
+
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
+
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
+
github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
+
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
+
github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
+
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
+
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
+
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
+
github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
+
github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
+
github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
+
github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
+
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
+
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
+
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
+
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
+
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f h1:VXTQfuJj9vKR4TCkEuWIckKvdHFeJH/huIFJ9/cXOB0=
+
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw=
+
github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
+
github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
+
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+
github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8=
+
github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ=
+
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
+
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
+
github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM=
+
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
+
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
+
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e h1:28X54ciEwwUxyHn9yrZfl5ojgF4CBNLWX7LR0rvBkf4=
+
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so=
+
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA=
+
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8=
+
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q=
+
gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I=
+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24=
+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo=
+
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
+
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
+
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
+
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
+
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
+
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
+
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
+
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
+
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
+
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
+
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
+
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
+
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
+
go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
+
go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
+
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
+
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
+
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
+
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
+
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+
lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
+
lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
+183
server/jetstream.go
···
+
package main
+
+
import (
+
"context"
+
"fmt"
+
"log/slog"
+
"sync"
+
"time"
+
+
"github.com/bluesky-social/jetstream/pkg/client"
+
"github.com/bluesky-social/jetstream/pkg/client/schedulers/sequential"
+
"github.com/bluesky-social/jetstream/pkg/models"
+
)
+
+
func Chunk[T any](slice []T, chunkSize int) [][]T {
+
var chunks [][]T
+
for i := 0; i < len(slice); i += chunkSize {
+
end := min(i+chunkSize, len(slice))
+
chunks = append(chunks, slice[i:end])
+
}
+
return chunks
+
}
+
+
type Stream struct {
+
inner *client.Client
+
cancel context.CancelFunc
+
}
+
type StreamManager struct {
+
ctx context.Context
+
logger *slog.Logger
+
streamsLock sync.Mutex
+
streams map[int]Stream
+
name string
+
handleEvent HandleEvent
+
optsFn OptsFn
+
}
+
+
func NewStreamManager(logger *slog.Logger, name string, handleEvent HandleEvent, optsFn OptsFn) *StreamManager {
+
manager := &StreamManager{
+
ctx: context.TODO(),
+
logger: logger.With("stream", name),
+
streamsLock: sync.Mutex{},
+
streams: make(map[int]Stream),
+
name: name,
+
handleEvent: handleEvent,
+
optsFn: optsFn,
+
}
+
go func() {
+
for {
+
time.Sleep(time.Minute * 2)
+
manager.streamsLock.Lock()
+
manager.logger.Info("sharding stats", "streamCount", len(manager.streams))
+
manager.streamsLock.Unlock()
+
}
+
}()
+
return manager
+
}
+
+
// doesnt lock streams!!!
+
func (manager *StreamManager) startSingle(id int, opts models.SubscriberOptionsUpdatePayload) {
+
ctx, cancel := context.WithCancel(manager.ctx)
+
stream := Stream{inner: nil, cancel: cancel}
+
// add to streams and put on wait group
+
manager.streams[id] = stream
+
go startJetstreamLoop(ctx, manager.logger.With("streamId", id), &stream.inner, fmt.Sprintf("%s_%d", manager.name, id), manager.handleEvent, opts)
+
}
+
+
func (manager *StreamManager) chunkedOpts() ([]models.SubscriberOptionsUpdatePayload, int) {
+
results := make([]models.SubscriberOptionsUpdatePayload, 0)
+
opts := manager.optsFn()
+
for _, wantedDidsChunk := range Chunk(opts.WantedDIDs, 9999) {
+
results = append(results, models.SubscriberOptionsUpdatePayload{
+
WantedCollections: opts.WantedCollections,
+
WantedDIDs: wantedDidsChunk,
+
MaxMessageSizeBytes: opts.MaxMessageSizeBytes,
+
})
+
}
+
return results, len(opts.WantedDIDs)
+
}
+
+
func (manager *StreamManager) updateOpts() {
+
chunks, userCount := manager.chunkedOpts()
+
logger := manager.logger.With("userCount", userCount)
+
manager.streamsLock.Lock()
+
idsSeen := make(map[int]struct{}, len(manager.streams))
+
// update existing streams or create new ones
+
for id, opts := range chunks {
+
idsSeen[id] = struct{}{}
+
if len(manager.streams) > id {
+
stream := manager.streams[id]
+
if stream.inner == nil {
+
continue
+
}
+
if err := stream.inner.SendOptionsUpdate(opts); err != nil {
+
logger.Error("couldnt update follow stream opts", "error", err, "streamId", id)
+
}
+
} else {
+
manager.startSingle(id, opts)
+
}
+
}
+
// cancel and delete unused streams
+
for k := range manager.streams {
+
if _, exists := idsSeen[k]; !exists {
+
manager.streams[k].cancel()
+
delete(manager.streams, k)
+
}
+
}
+
manager.streamsLock.Unlock()
+
logger.Info("updated opts")
+
}
+
+
type HandleEvent func(context.Context, *models.Event) error
+
type OptsFn func() models.SubscriberOptionsUpdatePayload
+
+
func startJetstreamLoop(ctx context.Context, logger *slog.Logger, outStream **client.Client, name string, handleEvent HandleEvent, opts models.SubscriberOptionsUpdatePayload) {
+
backoff := time.Second
+
for {
+
select {
+
case <-ctx.Done():
+
return
+
default:
+
streamDone := make(chan struct{})
+
stream, startFn, err := startJetstreamClient(ctx, logger, name, handleEvent)
+
*outStream = stream
+
if startFn != nil {
+
logger.Info("starting jetstream client", "collections", opts.WantedCollections, "userCount", len(opts.WantedDIDs))
+
go func() {
+
err = startFn()
+
streamDone <- struct{}{}
+
}()
+
// HACK: we need to wait for the websocket connection to start here. so we do
+
// need to upstream something to jetstream client
+
time.Sleep(time.Second * 2)
+
go func() {
+
// HACK: also silly because it panics if the connection isnt established yet (why????????????)
+
defer func() {
+
panic := recover()
+
if panic != nil {
+
err = fmt.Errorf("%s", panic)
+
}
+
}()
+
err = stream.SendOptionsUpdate(opts)
+
}()
+
if err == nil {
+
<-streamDone
+
}
+
}
+
if err != nil {
+
logger.Error("stream failed", "error", err, "backoff", backoff)
+
time.Sleep(backoff)
+
backoff = backoff * 2
+
} else {
+
backoff = time.Second
+
}
+
}
+
}
+
}
+
+
func startJetstreamClient(ctx context.Context, logger *slog.Logger, name string, handleEvent HandleEvent) (*client.Client, func() error, error) {
+
config := client.DefaultClientConfig()
+
config.WebsocketURL = "wss://jetstream1.us-west.bsky.network/subscribe"
+
config.Compress = true
+
config.RequireHello = true
+
+
scheduler := sequential.NewScheduler(name, logger, handleEvent)
+
+
c, err := client.NewClient(config, logger, scheduler)
+
if err != nil {
+
logger.Error("failed to create jetstream client", "error", err)
+
return nil, nil, err
+
}
+
+
startFn := func() error {
+
if err := c.ConnectAndRead(ctx, nil); err != nil {
+
logger.Error("jetstream client failed", "error", err)
+
return err
+
}
+
+
return nil
+
}
+
+
return c, startFn, nil
+
}
+446
server/main.go
···
+
package main
+
+
import (
+
"context"
+
"encoding/json"
+
"errors"
+
"io"
+
"log"
+
"log/slog"
+
"net/http"
+
"sync/atomic"
+
"time"
+
+
"github.com/bluesky-social/indigo/api/bsky"
+
"github.com/bluesky-social/indigo/atproto/syntax"
+
"github.com/bluesky-social/indigo/xrpc"
+
"github.com/bluesky-social/jetstream/pkg/models"
+
"github.com/cornelk/hashmap"
+
"github.com/google/uuid"
+
"github.com/gorilla/mux"
+
"github.com/gorilla/websocket"
+
)
+
+
type Set[T comparable] map[T]struct{}
+
+
const ListenTypeNone = "none"
+
const ListenTypeFollows = "follows"
+
+
type SubscriberData struct {
+
forActor syntax.DID
+
conn *websocket.Conn
+
listenType string
+
listenTo Set[syntax.DID]
+
}
+
+
type ActorData struct {
+
targets *hashmap.Map[string, *SubscriberData]
+
likes *hashmap.Map[syntax.RecordKey, bsky.FeedLike]
+
follows *hashmap.Map[syntax.RecordKey, bsky.GraphFollow]
+
followsCursor atomic.Pointer[string]
+
profile *bsky.ActorDefs_ProfileViewDetailed
+
profileFetchedAt time.Time
+
}
+
+
type NotificationActor struct {
+
DID syntax.DID `json:"did"` // the DID of the actor that (un)liked the post
+
Profile *bsky.ActorDefs_ProfileViewDetailed `json:"profile"` // the detailed profile of the actor that (un)liked the post
+
}
+
+
type NotificationMessage struct {
+
Liked bool `json:"liked"` // whether the message was liked or unliked
+
Actor NotificationActor `json:"actor"` // information about the actor that (un)liked
+
Record bsky.FeedLike `json:"record"` // the raw like record
+
Time int64 `json:"time"` // when the like event came in
+
}
+
+
type SubscriberMessage struct {
+
Type string `json:"type"`
+
Content json.RawMessage `json:"content"`
+
}
+
+
type SubscriberUpdateListenTo struct {
+
ListenTo []syntax.DID `json:"listen_to"`
+
}
+
+
var (
+
// storing the subscriber data in both Should Be Fine
+
// we dont modify subscriber data at the same time in two places
+
subscribers = hashmap.New[string, *SubscriberData]()
+
actorData = hashmap.New[syntax.DID, *ActorData]()
+
+
likeStreams *StreamManager
+
followStreams *StreamManager
+
+
upgrader = websocket.Upgrader{
+
CheckOrigin: func(r *http.Request) bool {
+
return true
+
},
+
}
+
+
logger *slog.Logger
+
)
+
+
func getSubscriberDids() []string {
+
_dids := make(Set[string], subscribers.Len())
+
subscribers.Range(func(s string, sd *SubscriberData) bool {
+
_dids[string(sd.forActor)] = struct{}{}
+
return true
+
})
+
dids := make([]string, 0, len(_dids))
+
for k := range _dids {
+
dids = append(dids, k)
+
}
+
return dids
+
}
+
+
func getLikeDids() []string {
+
_dids := make(Set[string], subscribers.Len()*5000)
+
subscribers.Range(func(s string, sd *SubscriberData) bool {
+
for did := range sd.listenTo {
+
_dids[string(did)] = struct{}{}
+
}
+
return true
+
})
+
dids := make([]string, 0, len(_dids))
+
for k := range _dids {
+
dids = append(dids, k)
+
}
+
return dids
+
}
+
+
func getActorData(did syntax.DID) *ActorData {
+
ud, _ := actorData.GetOrInsert(did, &ActorData{
+
targets: hashmap.New[string, *SubscriberData](),
+
likes: hashmap.New[syntax.RecordKey, bsky.FeedLike](),
+
follows: hashmap.New[syntax.RecordKey, bsky.GraphFollow](),
+
})
+
return ud
+
}
+
+
func markActorForLikes(sid string, sd *SubscriberData, did syntax.DID) {
+
ud := getActorData(did)
+
ud.targets.Insert(sid, sd)
+
}
+
+
func unmarkActorForLikes(sid string, did syntax.DID) {
+
if ud, exists := actorData.Get(did); exists {
+
ud.targets.Del(sid)
+
}
+
}
+
+
func main() {
+
logger = slog.Default()
+
+
likeStreams = NewStreamManager(logger, "like-tracker", HandleLikeEvent, getLikeStreamOpts)
+
followStreams = NewStreamManager(logger, "subscriber", HandleFollowEvent, getFollowStreamOpts)
+
+
r := mux.NewRouter()
+
r.HandleFunc("/subscribe/{did}", handleSubscribe).Methods("GET")
+
+
log.Println("server starting on :8080")
+
if err := http.ListenAndServe(":8080", r); err != nil {
+
log.Fatalf("error while serving: %s", err)
+
}
+
}
+
+
func handleSubscribe(w http.ResponseWriter, r *http.Request) {
+
vars := mux.Vars(r)
+
did, err := syntax.ParseDID(vars["did"])
+
if err != nil {
+
http.Error(w, "not a valid did", http.StatusBadRequest)
+
return
+
}
+
sid := uuid.New().String()
+
+
query := r.URL.Query()
+
listenType := query.Get("listenTo")
+
if len(listenType) == 0 {
+
listenType = ListenTypeFollows
+
}
+
+
logger := logger.With("did", did, "subscriberId", sid)
+
+
conn, err := upgrader.Upgrade(w, r, nil)
+
if err != nil {
+
logger.Error("WebSocket upgrade failed", "error", err)
+
return
+
}
+
defer conn.Close()
+
+
logger.Info("new subscriber")
+
+
pdsURI, err := findUserPDS(r.Context(), did)
+
if err != nil {
+
logger.Error("cant resolve user pds", "error", err)
+
return
+
}
+
logger = logger.With("pds", pdsURI)
+
+
xrpcClient := &xrpc.Client{
+
Host: pdsURI,
+
}
+
+
ud := getActorData(did)
+
sd := &SubscriberData{
+
forActor: did,
+
conn: conn,
+
listenType: listenType,
+
}
+
+
switch listenType {
+
case ListenTypeFollows:
+
follows, err := fetchFollows(r.Context(), xrpcClient, ud.followsCursor.Load(), did)
+
if err != nil {
+
logger.Error("error fetching follows", "error", err)
+
return
+
}
+
sd.listenTo = make(Set[syntax.DID])
+
// use we have stored
+
ud.follows.Range(func(rk syntax.RecordKey, f bsky.GraphFollow) bool {
+
sd.listenTo[syntax.DID(f.Subject)] = struct{}{}
+
return true
+
})
+
if len(follows) > 0 {
+
// store cursor for later requests so we dont have to fetch the whole thing again
+
ud.followsCursor.Store((*string)(&follows[len(follows)-1].rkey))
+
for _, f := range follows {
+
ud.follows.Insert(f.rkey, f.follow)
+
sd.listenTo[syntax.DID(f.follow.Subject)] = struct{}{}
+
}
+
}
+
logger.Info("fetched follows")
+
case ListenTypeNone:
+
sd.listenTo = make(Set[syntax.DID])
+
default:
+
http.Error(w, "invalid listen type", http.StatusBadRequest)
+
return
+
}
+
+
subscribers.Set(sid, sd)
+
for listenDid := range sd.listenTo {
+
markActorForLikes(sid, sd, listenDid)
+
}
+
updateStreamOpts()
+
// delete subscriber after we are done
+
defer func() {
+
for listenDid := range sd.listenTo {
+
unmarkActorForLikes(sid, listenDid)
+
}
+
subscribers.Del(sid)
+
updateStreamOpts()
+
}()
+
+
logger.Info("serving subscriber")
+
+
// send pings
+
go func() {
+
for {
+
select {
+
case <-r.Context().Done():
+
return
+
default:
+
conn.WriteMessage(websocket.PingMessage, []byte{})
+
time.Sleep(time.Second * 15)
+
}
+
}
+
}()
+
+
for {
+
var msg SubscriberMessage
+
err := conn.ReadJSON(&msg)
+
// dont kill websocket if its no value
+
if err != nil && !errors.Is(err, io.ErrUnexpectedEOF) {
+
logger.Error("WebSocket connection closed", "error", err)
+
break
+
}
+
switch msg.Type {
+
case "update_listen_to":
+
// only allow this if we arent managing listen to
+
if sd.listenType != ListenTypeNone {
+
continue
+
}
+
+
var innerMsg SubscriberUpdateListenTo
+
if err := json.Unmarshal(msg.Content, &innerMsg); err != nil {
+
logger.Debug("invalid message", "error", err)
+
break
+
}
+
+
// remove all current listens and add the ones the user requested
+
for listenDid := range sd.listenTo {
+
unmarkActorForLikes(sid, listenDid)
+
delete(sd.listenTo, listenDid)
+
}
+
for _, listenDid := range innerMsg.ListenTo {
+
sd.listenTo[listenDid] = struct{}{}
+
markActorForLikes(sid, sd, listenDid)
+
}
+
+
updateStreamOpts()
+
}
+
}
+
}
+
+
func getLikeStreamOpts() models.SubscriberOptionsUpdatePayload {
+
return models.SubscriberOptionsUpdatePayload{
+
WantedCollections: []string{"app.bsky.feed.like"},
+
WantedDIDs: getLikeDids(),
+
}
+
}
+
+
func getFollowStreamOpts() models.SubscriberOptionsUpdatePayload {
+
return models.SubscriberOptionsUpdatePayload{
+
WantedCollections: []string{"app.bsky.graph.follow"},
+
WantedDIDs: getSubscriberDids(),
+
}
+
}
+
+
func updateStreamOpts() {
+
likeStreams.updateOpts()
+
followStreams.updateOpts()
+
}
+
+
func HandleLikeEvent(ctx context.Context, event *models.Event) error {
+
if event == nil || event.Commit == nil {
+
return nil
+
}
+
+
byDid := syntax.DID(event.Did)
+
// skip handling event if its not from a source we are listening to
+
ud, exists := actorData.Get(byDid)
+
if !exists || ud.targets.Len() == 0 {
+
return nil
+
}
+
+
logger := logger.With("actor", byDid, "type", "like")
+
+
deleted := event.Commit.Operation == models.CommitOperationDelete
+
rkey := syntax.RecordKey(event.Commit.RKey)
+
+
var like bsky.FeedLike
+
if deleted {
+
if l, exists := ud.likes.Get(rkey); exists {
+
like = l
+
defer ud.likes.Del(rkey)
+
} else {
+
logger.Error("like record not found", "rkey", rkey)
+
return nil
+
}
+
} else if err := unmarshalEvent(event, &like); err != nil {
+
return nil
+
}
+
+
// if there is no via it means its not a repost anyway
+
if like.Via == nil {
+
return nil
+
}
+
+
// store for later when it gets deleted so we can fetch the record
+
if !deleted {
+
ud.likes.Insert(rkey, like)
+
}
+
+
repostURI := syntax.ATURI(like.Via.Uri)
+
// if not a repost we dont care
+
if repostURI.Collection() != "app.bsky.feed.repost" {
+
return nil
+
}
+
reposterDID, err := repostURI.Authority().AsDID()
+
if err != nil {
+
return err
+
}
+
ud.targets.Range(func(sid string, sd *SubscriberData) bool {
+
if sd.forActor != reposterDID {
+
return true
+
}
+
+
if ud.profile == nil || time.Since(ud.profileFetchedAt) > time.Hour*24 {
+
profile, err := fetchProfile(ctx, byDid)
+
if err != nil {
+
logger.Error("cant fetch profile", "error", err)
+
} else {
+
ud.profile = profile
+
ud.profileFetchedAt = time.Now()
+
}
+
}
+
+
notification := NotificationMessage{
+
Liked: !deleted,
+
Actor: NotificationActor{
+
DID: byDid,
+
Profile: ud.profile,
+
},
+
Record: like,
+
Time: event.TimeUS,
+
}
+
+
if err := sd.conn.WriteJSON(notification); err != nil {
+
logger.Error("failed to send notification", "error", err)
+
}
+
return true
+
})
+
+
return nil
+
}
+
+
func HandleFollowEvent(ctx context.Context, event *models.Event) error {
+
if event == nil || event.Commit == nil {
+
return nil
+
}
+
+
byDid := syntax.DID(event.Did)
+
ud, exists := actorData.Get(byDid)
+
if !exists || ud.targets.Len() == 0 {
+
return nil
+
}
+
+
deleted := event.Commit.Operation == models.CommitOperationDelete
+
rkey := syntax.RecordKey(event.Commit.RKey)
+
+
switch event.Commit.Collection {
+
case "app.bsky.graph.follow":
+
var r bsky.GraphFollow
+
if deleted {
+
if f, exists := ud.follows.Get(rkey); exists {
+
r = f
+
} else {
+
// most likely no ListenTypeFollows subscriber attached on actor
+
logger.Warn("follow record not found", "rkey", rkey, "actor", byDid)
+
return nil
+
}
+
ud.follows.Del(rkey)
+
} else {
+
if err := unmarshalEvent(event, &r); err != nil {
+
return nil
+
}
+
ud.follows.Insert(rkey, r)
+
}
+
+
ud.targets.Range(func(sid string, sd *SubscriberData) bool {
+
// if we arent managing then we dont need to update anything
+
if sd.listenType != ListenTypeFollows {
+
return true
+
}
+
subjectDid := syntax.DID(r.Subject)
+
if deleted {
+
unmarkActorForLikes(sid, subjectDid)
+
delete(sd.listenTo, subjectDid)
+
} else {
+
sd.listenTo[subjectDid] = struct{}{}
+
markActorForLikes(sid, sd, subjectDid)
+
}
+
return true
+
})
+
}
+
+
return nil
+
}
+
+
func unmarshalEvent[v any](event *models.Event, val *v) error {
+
if err := json.Unmarshal(event.Commit.Record, val); err != nil {
+
logger.Error("cant unmarshal record", "error", err, "raw", event.Commit.Record)
+
return err
+
}
+
return nil
+
}
+12
server/package.nix
···
+
{
+
buildGoModule,
+
...
+
}:
+
buildGoModule (final: {
+
pname = "brl-server";
+
version = "main";
+
+
src = ./.;
+
+
vendorHash = "sha256-jp6zKFzsrXEbyOZrHoYS8Zza58Skbs56GPTLnKRmiZE=";
+
})
+94
server/xrpc.go
···
+
package main
+
+
import (
+
"context"
+
"encoding/json"
+
"fmt"
+
+
"github.com/bluesky-social/indigo/api/atproto"
+
"github.com/bluesky-social/indigo/api/bsky"
+
"github.com/bluesky-social/indigo/atproto/identity"
+
"github.com/bluesky-social/indigo/atproto/syntax"
+
"github.com/bluesky-social/indigo/xrpc"
+
)
+
+
func findUserPDS(ctx context.Context, did syntax.DID) (string, error) {
+
id, err := identity.DefaultDirectory().LookupDID(ctx, did)
+
if err != nil {
+
return "", err
+
}
+
pdsURI := id.PDSEndpoint()
+
if len(pdsURI) == 0 {
+
return "", fmt.Errorf("no PDS URL was found in identity document")
+
}
+
+
return pdsURI, nil
+
}
+
+
func fetchProfile(ctx context.Context, did syntax.DID) (*bsky.ActorDefs_ProfileViewDetailed, error) {
+
return bsky.ActorGetProfile(ctx, &xrpc.Client{Host: "https://public.api.bsky.app"}, string(did))
+
}
+
+
func fetchRecords[v any](ctx context.Context, xrpcClient *xrpc.Client, cb func(syntax.ATURI, v), cursor *string, collection string, did syntax.DID) error {
+
if xrpcClient == nil {
+
pdsURI, err := findUserPDS(ctx, did)
+
if err != nil {
+
return err
+
}
+
xrpcClient = &xrpc.Client{
+
Host: pdsURI,
+
}
+
}
+
+
var cur string = ""
+
if cursor != nil {
+
cur = *cursor
+
}
+
+
for {
+
// todo: ratelimits?? idk what this does for those
+
out, err := atproto.RepoListRecords(ctx, xrpcClient, collection, cur, 100, string(did), true)
+
if err != nil {
+
return err
+
}
+
+
for _, record := range out.Records {
+
raw, _ := record.Value.MarshalJSON()
+
var val v
+
if err := json.Unmarshal(raw, &val); err != nil {
+
return err
+
}
+
cb(syntax.ATURI(record.Uri), val)
+
}
+
+
if out.Cursor == nil || *out.Cursor == "" {
+
break
+
}
+
cur = *out.Cursor
+
}
+
+
return nil
+
}
+
+
type FetchFollowItem struct {
+
rkey syntax.RecordKey
+
follow bsky.GraphFollow
+
}
+
+
func fetchFollows(ctx context.Context, xrpcClient *xrpc.Client, cursor *string, did syntax.DID) ([]FetchFollowItem, error) {
+
out := make([]FetchFollowItem, 0)
+
fetchRecords(ctx, xrpcClient, func(uri syntax.ATURI, f bsky.GraphFollow) {
+
out = append(out, FetchFollowItem{rkey: uri.RecordKey(), follow: f})
+
}, cursor, "app.bsky.graph.follow", did)
+
return out, nil
+
}
+
+
func fetchRepostLikes(ctx context.Context, xrpcClient *xrpc.Client, cursor *string, did syntax.DID) (map[syntax.RecordKey]bsky.FeedLike, error) {
+
out := make(map[syntax.RecordKey]bsky.FeedLike)
+
fetchRecords(ctx, xrpcClient, func(uri syntax.ATURI, f bsky.FeedLike) {
+
if f.Via != nil && syntax.ATURI(f.Via.Uri).Collection() == "app.bsky.feed.repost" {
+
out[uri.RecordKey()] = f
+
}
+
}, cursor, "app.bsky.feed.like", did)
+
return out, nil
+
}
+2
webapp/.gitignore
···
+
node_modules
+
dist
+44
webapp/.helix/languages.toml
···
+
[[language]]
+
name = "html"
+
formatter = { command = 'prettierd', args = [".html"] }
+
auto-format = true
+
+
[[language]]
+
name = "css"
+
formatter = { command = 'prettierd', args = [".css"] }
+
auto-format = true
+
+
[[language]]
+
name = "scss"
+
formatter = { command = 'prettierd', args = [".scss"] }
+
auto-format = true
+
+
[[language]]
+
name = "javascript"
+
formatter = { command = 'prettierd', args = [".js"] }
+
auto-format = true
+
+
[[language]]
+
name = "typescript"
+
formatter = { command = 'prettierd', args = [".ts"] }
+
auto-format = true
+
+
[[language]]
+
name = "jsx"
+
formatter = { command = 'prettierd', args = [".jsx"] }
+
auto-format = true
+
+
[[language]]
+
name = "tsx"
+
formatter = { command = 'prettierd', args = [".tsx"] }
+
auto-format = true
+
+
[[language]]
+
name = "json"
+
formatter = { command = 'prettierd', args = [".json"] }
+
auto-format = true
+
+
[[language]]
+
name = "jsonc"
+
formatter = { command = 'prettierd', args = [".jsonc"] }
+
auto-format = true
+1
webapp/.prettierrc
···
+
{}
+34
webapp/README.md
···
+
## Usage
+
+
Those templates dependencies are maintained via [pnpm](https://pnpm.io) via `pnpm up -Lri`.
+
+
This is the reason you see a `pnpm-lock.yaml`. That being said, any package manager will work. This file can be safely be removed once you clone a template.
+
+
```bash
+
$ npm install # or pnpm install or yarn install
+
```
+
+
### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs)
+
+
## Available Scripts
+
+
In the project directory, you can run:
+
+
### `npm run dev` or `npm start`
+
+
Runs the app in the development mode.<br>
+
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
+
+
The page will reload if you make edits.<br>
+
+
### `npm run build`
+
+
Builds the app for production to the `dist` folder.<br>
+
It correctly bundles Solid in production mode and optimizes the build for the best performance.
+
+
The build is minified and the filenames include the hashes.<br>
+
Your app is ready to be deployed!
+
+
## Deployment
+
+
You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.)
+29
webapp/eslint.config.js
···
+
import js from "@eslint/js";
+
import globals from "globals";
+
import tseslint from "typescript-eslint";
+
import css from "@eslint/css";
+
import solid from "eslint-plugin-solid";
+
import eslintConfigPrettier from "eslint-config-prettier/flat";
+
import { defineConfig } from "eslint/config";
+
+
export default defineConfig([
+
{
+
files: ["**/*.{js,mjs,cjs,ts,mts,cts}"],
+
plugins: { js },
+
extends: ["js/recommended"],
+
},
+
{
+
files: ["**/*.{js,mjs,cjs,ts,mts,cts}"],
+
languageOptions: { globals: globals.browser },
+
},
+
tseslint.configs.recommended,
+
{
+
files: ["**/*.css"],
+
plugins: { css },
+
language: "css/css",
+
extends: ["css/recommended"],
+
},
+
solid.configs["flat/recommended"],
+
solid.configs["flat/typescript"],
+
eslintConfigPrettier,
+
]);
+16
webapp/index.html
···
+
<!doctype html>
+
<html lang="en">
+
<head>
+
<meta charset="utf-8" />
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
+
<meta name="theme-color" content="#000000" />
+
<link rel="shortcut icon" type="image/ico" href="/src/assets/favicon.ico" />
+
<title>bsky repost likes monitor</title>
+
</head>
+
<body>
+
<noscript>You need to enable JavaScript to run this app.</noscript>
+
<div id="root"></div>
+
+
<script src="/src/index.tsx" type="module"></script>
+
</body>
+
</html>
+57
webapp/package.json
···
+
{
+
"name": "bsky-repost-likes-monitor",
+
"version": "0.0.0",
+
"description": "",
+
"type": "module",
+
"scripts": {
+
"start": "vite",
+
"dev": "vite",
+
"build": "vite build",
+
"build:lib": "vite build --config vite.config.lib.ts",
+
"serve": "vite preview"
+
},
+
"license": "MIT",
+
"exports": {
+
".": {
+
"import": "./dist/lib.js",
+
"types": "./dist/lib.d.ts"
+
},
+
"./background": {
+
"import": "./dist/background.js",
+
"types": "./dist/background.d.ts"
+
},
+
"./style.css": "./dist/bsky-repost-likes-monitor.css"
+
},
+
"files": [
+
"dist"
+
],
+
"devDependencies": {
+
"@eslint/css": "^0.8.1",
+
"@eslint/js": "^9.30.1",
+
"@unocss/preset-attributify": "^66.3.3",
+
"@unocss/preset-wind4": "^66.3.3",
+
"@unocss/transformer-attributify-jsx": "^66.3.3",
+
"@unocss/transformer-directives": "^66.3.3",
+
"@unocss/transformer-variant-group": "^66.3.3",
+
"eslint": "^9.30.1",
+
"eslint-config-prettier": "^10.1.5",
+
"eslint-plugin-solid": "^0.14.5",
+
"globals": "^16.3.0",
+
"prettier": "3.5.3",
+
"solid-devtools": "^0.34.3",
+
"typescript": "^5.8.3",
+
"typescript-eslint": "^8.35.1",
+
"unocss": "^66.3.3",
+
"vite": "^6.3.5",
+
"vite-plugin-dts": "^4.5.4",
+
"vite-plugin-solid": "^2.11.7"
+
},
+
"dependencies": {
+
"@atcute/atproto": "^3.1.0",
+
"@atcute/bluesky": "^3.1.4",
+
"@atcute/client": "^4.0.3",
+
"@atcute/identity-resolver": "^1.1.3",
+
"@atcute/lexicons": "^1.1.0",
+
"solid-js": "^1.9.7"
+
}
+
}
+26
webapp/package.nix
···
+
{
+
stdenv,
+
nodejs,
+
pnpm,
+
lib,
+
pnpmDeps,
+
}:
+
stdenv.mkDerivation (finalAttrs: {
+
pname = "brl-monitor";
+
version = "main";
+
+
src = lib.fileset.toSource {
+
root = ../.;
+
fileset = lib.fileset.unions [./. ../pnpm-lock.yaml ../pnpm-workspace.yaml];
+
};
+
+
nativeBuildInputs = [
+
nodejs
+
pnpm.configHook
+
];
+
+
buildPhase = "pnpm -C webapp build";
+
installPhase = "mv webapp/dist $out";
+
+
inherit pnpmDeps;
+
})
+2
webapp/pnpm-workspace.yaml
···
+
onlyBuiltDependencies:
+
- esbuild
+7
webapp/shims.d.ts
···
+
import type { AttributifyAttributes } from "@unocss/preset-attributify";
+
+
declare module "solid-js" {
+
namespace JSX {
+
interface HTMLAttributes<T> extends AttributifyAttributes {}
+
}
+
}
+82
webapp/src/ActivityItem.tsx
···
+
import type {} from "@atcute/bluesky";
+
import type {} from "@atcute/atproto";
+
import { parseCanonicalResourceUri } from "@atcute/lexicons/syntax";
+
import { Component, createSignal, createEffect } from "solid-js";
+
import { Notification } from "./types.js";
+
+
interface ActivityItemProps {
+
data: Notification;
+
isExtension: boolean;
+
}
+
+
export const ActivityItem: Component<ActivityItemProps> = (props) => {
+
const [postUrl, setPostUrl] = createSignal<string | null>(null);
+
+
const profile = props.data.actor.profile;
+
+
createEffect(() => {
+
const postUri = parseCanonicalResourceUri(
+
props.data.record.subject?.uri ?? "",
+
);
+
if (postUri.ok) {
+
setPostUrl(
+
`https://bsky.app/profile/${postUri.value.repo}/post/${postUri.value.rkey}`,
+
);
+
}
+
});
+
+
return (
+
<div
+
class={`flex flex-wrap items-center border py-1 px-2 ${
+
props.data.liked
+
? "bg-green-50 border-green-200"
+
: "bg-red-50 border-red-200"
+
}`}
+
>
+
<p text-wrap>
+
<span text={props.isExtension ? "sm" : "lg"}>
+
{props.data.liked ? "โค๏ธ" : "๐Ÿ’”"}
+
</span>{" "}
+
{(profile && (
+
<a
+
font-medium
+
href={`https://bsky.app/profile/${props.data.actor.did}`}
+
target="_blank"
+
hover:underline
+
text={`${props.isExtension ? "xs" : "sm"} gray-700`}
+
title={`@${profile!.handle}`}
+
>
+
{profile!.displayName ?? profile!.handle}{" "}
+
{!props.isExtension && profile!.displayName && (
+
<span font-normal text-gray-500>
+
(@{profile!.handle})
+
</span>
+
)}
+
</a>
+
)) || (
+
<a
+
font-medium
+
href={`https://bsky.app/profile/${props.data.actor.did}`}
+
target="_blank"
+
hover:underline
+
text={`${props.isExtension ? "xs" : "sm"} gray-700`}
+
>
+
{props.data.actor.did}
+
</a>
+
)}{" "}
+
<span text-gray-800>{props.data.liked ? "liked" : "unliked"}</span>{" "}
+
<a
+
text-blue-800
+
hover="underline text-blue-400"
+
href={postUrl() ?? props.data.record.subject?.uri}
+
>
+
this post
+
</a>{" "}
+
</p>
+
<div grow />
+
<div text="xs gray-500 end">
+
{new Date(props.data.time / 1000).toLocaleTimeString()}
+
</div>
+
</div>
+
);
+
};
+226
webapp/src/App.tsx
···
+
import { createSignal, onCleanup, For, type Component } from "solid-js";
+
+
import type {} from "@atcute/bluesky";
+
import type {} from "@atcute/atproto";
+
import { AppProps, ConnectionStatus, Notification } from "./types.js";
+
import { ActivityItem } from "./ActivityItem.jsx";
+
import { connect as connectService } from "./ws.ts";
+
+
const Wrapped: Component = () => {
+
const [actorId, setActorId] = createSignal<string>("");
+
const [serviceDomain, setWsUrl] = createSignal<string>("likes.gaze.systems");
+
const [items, setItems] = createSignal<Notification[]>([]);
+
const [connectionStatus, setConnectionStatus] =
+
createSignal<ConnectionStatus>("disconnected");
+
const [error, setError] = createSignal<string | null>(null);
+
const [ws, setWs] = createSignal<WebSocket | null>(null);
+
+
const connect = async () => {
+
// close existing connection if any
+
ws()?.close();
+
setWs(
+
(await connectService({
+
actorId: actorId(),
+
serviceDomain: serviceDomain(),
+
pushNotification: (item) => setItems((prev) => [item, ...prev]),
+
setConnectionStatus,
+
setError,
+
})) ?? null,
+
);
+
};
+
+
const disconnect = (): void => {
+
ws()?.close();
+
setWs(null);
+
};
+
+
onCleanup(disconnect);
+
+
const props: AppProps = {
+
actorIdSignal: [actorId, setActorId],
+
serviceDomainSignal: [serviceDomain, setWsUrl],
+
items,
+
clearItems: () => {
+
setItems([]);
+
},
+
connectionStatus,
+
error,
+
connect,
+
disconnect,
+
isExtension: false,
+
};
+
+
return <App {...props} />;
+
};
+
export default Wrapped;
+
+
export const App: Component<AppProps> = (props) => {
+
const [actorId, setActorId] = props.actorIdSignal;
+
const [serviceDomain, setWsUrl] = props.serviceDomainSignal;
+
const { disconnect, connect, error, connectionStatus, items, clearItems } =
+
props;
+
+
const isConnected = () => {
+
return (
+
connectionStatus() == "connecting..." || connectionStatus() == "connected"
+
);
+
};
+
+
const inputStyle = `flex-1 ${props.isExtension ? "px-2 py-1" : "px-4 py-2"} border border-gray-300 rounded-none bg-white focus:(outline-none ring-2)`;
+
+
return (
+
<div max-w-4xl mx-auto p-2 bg-gray-50 min-h-screen>
+
{props.isExtension ? (
+
<></>
+
) : (
+
<h1 border="l-16 blue" font-bold text="3xl gray-800" pl-2 mb-6>
+
monitor bluesky repost likes
+
</h1>
+
)}
+
+
{/* connection */}
+
<div mb-6>
+
<div flex gap-2 mb-2>
+
<input
+
type="text"
+
value={serviceDomain()}
+
onInput={(e) => setWsUrl((e.target as HTMLInputElement).value)}
+
placeholder="enter service host (e.g., likes.gaze.systems)"
+
class={`${inputStyle} focus-ring-purple-500`}
+
disabled={isConnected()}
+
/>
+
</div>
+
<div flex gap-2 mb-2>
+
<input
+
type="text"
+
value={actorId()}
+
onInput={(e) => setActorId((e.target as HTMLInputElement).value)}
+
onKeyPress={(e) => {
+
if (!isConnected() && e.key == "Enter") {
+
connect();
+
e.preventDefault();
+
}
+
}}
+
placeholder="enter handle or DID"
+
class={`${inputStyle} focus-ring-blue-500`}
+
disabled={isConnected()}
+
/>
+
<button
+
onClick={() => (isConnected() ? disconnect() : connect())}
+
class={`${props.isExtension ? "px-3 py-1" : "px-6 py-2"} rounded-none font-medium transition-colors ${
+
isConnected()
+
? "bg-red-500 hover:bg-red-600 text-white"
+
: "bg-blue-500 hover:bg-blue-600 text-white"
+
}`}
+
>
+
{isConnected() ? "disconnect" : "connect"}
+
</button>
+
</div>
+
+
{/* Status indicator */}
+
<div flex gap-2 items-center>
+
<div w-fit border border-gray-300 bg-gray-80 px-1 py="0.5">
+
<div
+
inline-block
+
w-3
+
h-3
+
rounded-full
+
class={
+
connectionStatus() === "connected"
+
? "bg-green-500"
+
: connectionStatus() === "connecting..."
+
? "bg-yellow-500"
+
: connectionStatus() === "error"
+
? "bg-red-500"
+
: "bg-gray-400"
+
}
+
/>
+
<span
+
ml-2
+
align="10%"
+
text={`${props.isExtension ? "xs" : "sm"} gray-600`}
+
>
+
status: {connectionStatus()}
+
</span>
+
</div>
+
{error() && (
+
<div w-fit border border-gray-300 bg-gray-80 p-1>
+
<div text={`${props.isExtension ? "xs" : "sm"} red-500`}>
+
{error()}
+
</div>
+
</div>
+
)}
+
</div>
+
</div>
+
+
{/* feed */}
+
<div>
+
<div class="flex justify-between items-center mb-4">
+
<h2
+
border="l-8 blue"
+
pl-2
+
text={`${props.isExtension ? "base" : "xl"} gray-700`}
+
font-semibold
+
>
+
activity feed ({items().length})
+
</h2>
+
<button
+
onClick={clearItems}
+
text={`white ${props.isExtension ? "xs" : "sm"}`}
+
class={`${props.isExtension ? "px-2 py-1" : "px-4 py-2"} ml-1 bg-gray-500 hover:bg-gray-600 rounded-none transition-colors disabled:opacity-50`}
+
disabled={items().length === 0}
+
>
+
clear feed
+
</button>
+
</div>
+
+
<div
+
class={`${props.isExtension ? "p-2" : "p-4"} h-[60vh] max-h-[60vh] overflow-y-auto border border-gray-200 rounded-none bg-white`}
+
>
+
{items().length === 0 ? (
+
<div flex items-center w-full h-full>
+
<div mx-auto text="center gray-500">
+
<div text-lg mb-2>
+
๐Ÿ‘€
+
</div>
+
<div>
+
nothing yet. connect and wait for someone to like a repost of
+
yours!
+
</div>
+
</div>
+
</div>
+
) : (
+
<For each={items()}>
+
{(item, index) => (
+
<div mb={index() == items().length - 1 ? "0" : "2"}>
+
<ActivityItem data={item} isExtension={props.isExtension} />
+
</div>
+
)}
+
</For>
+
)}
+
</div>
+
</div>
+
+
{props.isExtension ? (
+
<></>
+
) : (
+
<div border bg-blue-50 border-blue-200 rounded-none pl="1.5" p-1 mt-4>
+
<span text="xs blue-800" align="10%">
+
<span text-pink-400>source</span> <span text-gray>=</span>{" "}
+
<a
+
href="https://tangled.sh/@poor.dog/bsky-repost-likes"
+
text-orange-700
+
hover:text-orange-400
+
>
+
"https://tangled.sh/@poor.dog/bsky-repost-likes"
+
</a>{" "}
+
// made by{" "}
+
<a text-purple-700 hover:text-purple href="https://gaze.systems">
+
dusk
+
</a>
+
</span>
+
</div>
+
)}
+
</div>
+
);
+
};
webapp/src/assets/favicon.ico

This is a binary file and will not be displayed.

+9
webapp/src/background.ts
···
+
export type {
+
Notification,
+
NotificationActor,
+
ConnectionStatus,
+
} from "./types.ts";
+
export {
+
type Data as WebsocketCallbacks,
+
connect as connectService,
+
} from "./ws.ts";
+13
webapp/src/index.css
···
+
body {
+
margin: 0;
+
font-family:
+
-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu",
+
"Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+
-webkit-font-smoothing: antialiased;
+
-moz-osx-font-smoothing: grayscale;
+
}
+
+
code {
+
font-family:
+
source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
+
}
+18
webapp/src/index.tsx
···
+
/* @refresh reload */
+
import { render } from "solid-js/web";
+
import "solid-devtools";
+
+
import App from "./App.tsx";
+
+
import "./index.css";
+
import "virtual:uno.css";
+
+
const root = document.getElementById("root");
+
+
if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
+
throw new Error(
+
"Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?",
+
);
+
}
+
+
render(() => <App />, root!);
+10
webapp/src/lib.ts
···
+
import "./index.css";
+
import "virtual:uno.css";
+
+
export { App } from "./App.tsx";
+
export type {
+
AppProps,
+
Notification,
+
NotificationActor,
+
ConnectionStatus,
+
} from "./types.ts";
+34
webapp/src/types.ts
···
+
import { AppBskyFeedLike } from "@atcute/bluesky";
+
import { ProfileViewDetailed } from "@atcute/bluesky/types/app/actor/defs";
+
import { Did } from "@atcute/lexicons";
+
+
export interface AppProps {
+
actorIdSignal: [() => string, (value: string) => string];
+
serviceDomainSignal: [() => string, (value: string) => string];
+
items: () => Notification[];
+
clearItems: () => void;
+
connectionStatus: () => ConnectionStatus;
+
error: () => string | null;
+
connect: () => void;
+
disconnect: () => void;
+
// options
+
isExtension: boolean;
+
}
+
+
export interface Notification {
+
liked: boolean;
+
actor: NotificationActor;
+
record: AppBskyFeedLike.Main;
+
time: number;
+
}
+
+
export interface NotificationActor {
+
did: Did;
+
profile?: ProfileViewDetailed;
+
}
+
+
export type ConnectionStatus =
+
| "disconnected"
+
| "connecting..."
+
| "connected"
+
| "error";
+112
webapp/src/ws.ts
···
+
import { XrpcHandleResolver } from "@atcute/identity-resolver";
+
import { isDid, isHandle } from "@atcute/lexicons/syntax";
+
import { ConnectionStatus, Notification } from "./types.ts";
+
+
export interface Data {
+
setError: (error: string | null) => void;
+
setConnectionStatus: (status: ConnectionStatus) => void;
+
pushNotification: (item: Notification) => void;
+
actorId: string;
+
serviceDomain: string;
+
doRetry?: () => number | null;
+
}
+
+
const handleResolver = new XrpcHandleResolver({
+
serviceUrl: "https://public.api.bsky.app",
+
});
+
+
export const connect = async (cb: Data) => {
+
const didOrHandle = cb.actorId.trim();
+
const host = cb.serviceDomain.trim();
+
+
cb.setError(null);
+
cb.setConnectionStatus("connecting...");
+
+
let did: string;
+
if (!didOrHandle) {
+
cb.setConnectionStatus("error");
+
cb.setError("please enter a DID or a handle");
+
return;
+
} else if (isHandle(didOrHandle)) {
+
try {
+
did = await handleResolver.resolve(didOrHandle);
+
} catch (error) {
+
cb.setConnectionStatus("error");
+
cb.setError(`can't resolve handle: ${error}`);
+
return;
+
}
+
} else if (isDid(didOrHandle)) {
+
did = didOrHandle;
+
} else {
+
cb.setConnectionStatus("error");
+
cb.setError("inputted DID / handle is not valid");
+
return;
+
}
+
+
if (!host) {
+
cb.setError("please enter service host");
+
cb.setConnectionStatus("error");
+
return;
+
}
+
+
let proto = "wss";
+
const domain = host.split(":").at(0) ?? "";
+
if (["localhost", "0.0.0.0", "127.0.0.1"].some((v) => v === domain)) {
+
proto = "ws";
+
}
+
+
const url = `${proto}://${host}/subscribe/${did}`;
+
+
try {
+
let ws = new WebSocket(url);
+
+
ws.onopen = () => {
+
cb.setConnectionStatus("connected");
+
cb.setError(null);
+
console.log("WebSocket connected to:", url);
+
};
+
+
ws.onmessage = (event: MessageEvent) => {
+
try {
+
cb.pushNotification(JSON.parse(event.data));
+
} catch (error) {
+
console.error("Error parsing JSON:", error);
+
}
+
};
+
+
ws.onclose = (ev) => {
+
cb.setConnectionStatus("disconnected");
+
console.log("WebSocket disconnected");
+
// abnormal closure
+
if (ev.code === 1006) {
+
cb.setConnectionStatus("error");
+
const backoff = (cb.doRetry ?? (() => null))();
+
if (backoff) {
+
cb.setError(`websocket closed abnormally: (${ev.code}) ${ev.reason}`);
+
setTimeout(() => connect(cb), backoff);
+
}
+
} else if (ev.code === 1000 || ev.code === 1001 || ev.code === 1005) {
+
cb.setError(null);
+
} else {
+
cb.setConnectionStatus("error");
+
cb.setError(`websocket failed: (${ev.code}) ${ev.reason}`);
+
}
+
};
+
+
ws.onerror = (error: Event) => {
+
cb.setConnectionStatus("error");
+
cb.setError("connection failed");
+
console.error("WebSocket error:", error);
+
};
+
+
return ws;
+
} catch (error) {
+
cb.setConnectionStatus("error");
+
cb.setError(`failed to create connection: ${error}`);
+
console.error("Failed to create WebSocket:", error);
+
}
+
+
return;
+
};
+
+
export default connect;
+16
webapp/tsconfig.json
···
+
{
+
"compilerOptions": {
+
"strict": true,
+
"target": "ESNext",
+
"module": "NodeNext",
+
"moduleResolution": "nodenext",
+
"allowSyntheticDefaultImports": true,
+
"allowImportingTsExtensions": true,
+
"esModuleInterop": true,
+
"jsx": "preserve",
+
"jsxImportSource": "solid-js",
+
"types": ["vite/client"],
+
"noEmit": true,
+
"isolatedModules": true
+
}
+
}
+45
webapp/vite.config.lib.ts
···
+
import { defineConfig } from "vite";
+
import solidPlugin from "vite-plugin-solid";
+
import dts from "vite-plugin-dts";
+
+
import UnoCSS from "unocss/vite";
+
import {
+
presetAttributify,
+
presetWind4,
+
transformerAttributifyJsx,
+
transformerVariantGroup,
+
transformerDirectives,
+
} from "unocss";
+
+
export default defineConfig({
+
plugins: [
+
UnoCSS({
+
presets: [presetWind4(), presetAttributify()],
+
transformers: [
+
transformerVariantGroup(),
+
transformerDirectives(),
+
transformerAttributifyJsx(),
+
],
+
}),
+
solidPlugin(),
+
dts({
+
insertTypesEntry: true,
+
include: ["src/**/*.ts"],
+
exclude: ["src/**/*.tsx"],
+
}),
+
],
+
build: {
+
target: "esnext",
+
lib: {
+
entry: {
+
lib: "./src/lib.ts",
+
background: "./src/background.ts",
+
},
+
name: "bsky-repost-likes-monitor",
+
formats: ["es"],
+
},
+
rollupOptions: {
+
external: ["solid-js", "solid-js/web"],
+
},
+
},
+
});
+33
webapp/vite.config.ts
···
+
import { defineConfig } from "vite";
+
import solidPlugin from "vite-plugin-solid";
+
import devtools from "solid-devtools/vite";
+
+
import UnoCSS from "unocss/vite";
+
import {
+
presetAttributify,
+
presetWind4,
+
transformerAttributifyJsx,
+
transformerVariantGroup,
+
transformerDirectives,
+
} from "unocss";
+
+
export default defineConfig({
+
plugins: [
+
UnoCSS({
+
presets: [presetWind4(), presetAttributify()],
+
transformers: [
+
transformerVariantGroup(),
+
transformerDirectives(),
+
transformerAttributifyJsx(),
+
],
+
}),
+
devtools({ autoname: true }),
+
solidPlugin(),
+
],
+
server: {
+
port: 3000,
+
},
+
build: {
+
target: "esnext",
+
},
+
});
-66
xrpc.go
···
-
package main
-
-
import (
-
"context"
-
"encoding/json"
-
"fmt"
-
-
"github.com/bluesky-social/indigo/api/atproto"
-
"github.com/bluesky-social/indigo/api/bsky"
-
"github.com/bluesky-social/indigo/atproto/identity"
-
"github.com/bluesky-social/indigo/atproto/syntax"
-
"github.com/bluesky-social/indigo/xrpc"
-
)
-
-
func findUserPDS(ctx context.Context, did string) (string, error) {
-
id, err := identity.DefaultDirectory().LookupDID(ctx, syntax.DID(did))
-
if err != nil {
-
return "", err
-
}
-
pdsURI := id.PDSEndpoint()
-
if len(pdsURI) == 0 {
-
return "", fmt.Errorf("no PDS URL was found in identity document")
-
}
-
-
return pdsURI, nil
-
}
-
-
func fetchRecords[v any](ctx context.Context, xrpcClient *xrpc.Client, collection, did string, extractFn func(v) string) (Set[string], error) {
-
all := make(Set[string])
-
cursor := ""
-
-
for {
-
// todo: ratelimits?? idk what this does for those
-
out, err := atproto.RepoListRecords(ctx, xrpcClient, collection, cursor, 100, did, false)
-
if err != nil {
-
return nil, err
-
}
-
-
for _, record := range out.Records {
-
raw, _ := record.Value.MarshalJSON()
-
var val v
-
if err := json.Unmarshal(raw, &val); err != nil {
-
return nil, err
-
}
-
s := extractFn(val)
-
if len(s) > 0 {
-
all[s] = struct{}{}
-
}
-
}
-
-
if out.Cursor == nil || *out.Cursor == "" {
-
break
-
}
-
cursor = *out.Cursor
-
}
-
-
return all, nil
-
}
-
-
func fetchReposts(ctx context.Context, xrpcClient *xrpc.Client, did string) (Set[string], error) {
-
return fetchRecords(ctx, xrpcClient, "app.bsky.feed.repost", did, func(v bsky.FeedRepost) string { return v.Subject.Uri })
-
}
-
-
func fetchFollows(ctx context.Context, xrpcClient *xrpc.Client, did string) (Set[string], error) {
-
return fetchRecords(ctx, xrpcClient, "app.bsky.graph.follow", did, func(v bsky.GraphFollow) string { return v.Subject })
-
}