├── typedoc.json
├── .gitignore
├── .dprint.json
├── tsconfig.json
├── .eslintrc.json
├── package.json
├── README.md
├── src
└── index.ts
├── LICENSE
└── pnpm-lock.yaml
/typedoc.json:
--------------------------------------------------------------------------------
1 | {
2 | "entryPoints": ["src/index.ts"]
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | npm-debug.log*
2 | yarn-debug.log*
3 | yarn-error.log*
4 | .pnpm-debug.log*
5 |
6 | pids
7 | _.pid
8 | _.seed
9 | *.pid.lock
10 | .DS_Store
11 |
12 | node_modules/
13 |
14 | *.tsbuildinfo
15 | .npm
16 | .eslintcache
17 |
18 | .env
19 | .env.*
20 |
21 | .idea/
22 | .vscode/
23 |
24 | dist/
25 |
--------------------------------------------------------------------------------
/.dprint.json:
--------------------------------------------------------------------------------
1 | {
2 | "indentWidth": 4,
3 | "useTabs": true,
4 | "typescript": {
5 | "lineWidth": 100,
6 | "preferSingleLine": true,
7 | "arrowFunction.useParentheses": "force",
8 | "quoteProps": "asNeeded"
9 | },
10 | "json": {},
11 | "includes": ["src/**/*.{ts,tsx,js,jsx,json}", "./*.{ts,tsx,js,jsx,json,sh}"],
12 | "plugins": [
13 | "https://plugins.dprint.dev/typescript-0.88.1.wasm",
14 | "https://plugins.dprint.dev/json-0.17.4.wasm"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["esnext"],
4 | "target": "esnext",
5 | "module": "nodenext",
6 | "moduleResolution": "nodenext",
7 | "moduleDetection": "force",
8 |
9 | "declaration": true,
10 |
11 | "skipLibCheck": true,
12 | "newLine": "lf",
13 |
14 | "forceConsistentCasingInFileNames": true,
15 | "useDefineForClassFields": true,
16 |
17 | "noUnusedLocals": true,
18 | "noUnusedParameters": true,
19 | "noImplicitOverride": true,
20 | "noImplicitAny": true,
21 | "exactOptionalPropertyTypes": true,
22 | "strict": true,
23 |
24 | "outDir": "dist",
25 | "rootDir": "src"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["plugin:@typescript-eslint/strict-type-checked"],
3 | "plugins": ["@typescript-eslint"],
4 | "parser": "@typescript-eslint/parser",
5 | "parserOptions": {
6 | "project": "./tsconfig.json"
7 | },
8 | "rules": {
9 | "@typescript-eslint/ban-types": "off",
10 | "@typescript-eslint/no-explicit-any": "off",
11 | "@typescript-eslint/no-misused-promises": "off",
12 | "@typescript-eslint/no-unnecessary-condition": "off",
13 | "@typescript-eslint/no-unsafe-assignment": "off",
14 | "@typescript-eslint/no-unsafe-member-access": "off",
15 | "@typescript-eslint/no-unsafe-return": "off",
16 | "@typescript-eslint/restrict-plus-operands": "off",
17 | "@typescript-eslint/restrict-template-expressions": "off",
18 | "@typescript-eslint/unified-signatures": "off"
19 | },
20 | "ignorePatterns": ["dist", "node_modules"],
21 | "root": true
22 | }
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@skyware/firehose",
3 | "type": "module",
4 | "description": "A simple client for consuming data from an AT Protocol Relay.",
5 | "version": "0.5.2",
6 | "main": "dist/index.js",
7 | "types": "dist/index.d.ts",
8 | "license": "MPL-2.0",
9 | "repository": "https://github.com/skyware-js/firehose",
10 | "homepage": "https://skyware.js.org/docs/firehose",
11 | "keywords": [
12 | "bluesky",
13 | "bot",
14 | "atproto",
15 | "skyware"
16 | ],
17 | "scripts": {
18 | "build": "tsc",
19 | "lint": "eslint . --ext .ts",
20 | "fmt": "dprint fmt",
21 | "prepublish": "pnpm lint && pnpm fmt && pnpm build"
22 | },
23 | "devDependencies": {
24 | "@atcute/atproto": "^3.1.1",
25 | "@types/node": "^22.17.0",
26 | "@types/ws": "^8.5.10",
27 | "@typescript-eslint/eslint-plugin": "^6.7.4",
28 | "@typescript-eslint/parser": "^6.7.4",
29 | "dprint": "^0.41.0",
30 | "eslint": "^8.50.0",
31 | "multiformats": "^13.1.0",
32 | "typescript": "^5.9.2",
33 | "ws": "^8.16.0"
34 | },
35 | "dependencies": {
36 | "@atcute/car": "^3.0.3",
37 | "@atcute/cbor": "^2.2.2",
38 | "nanoevents": "^9.1.0"
39 | },
40 | "files": [
41 | "dist"
42 | ]
43 | }
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | @skyware/firehose
5 |
6 | A simple client for consuming data from an AT Protocol Relay.
7 |
8 | [Documentation](https://skyware.js.org/docs/firehose)
9 |
10 | ## Installation
11 |
12 | ```sh
13 | npm install @skyware/firehose
14 | ```
15 |
16 | ## Example Usage
17 |
18 | ```js
19 | import { Firehose } from "@skyware/firehose";
20 |
21 | const firehose = new Firehose();
22 | firehose.on("commit", (commit) => {
23 | for (const op of commit.ops) {
24 | console.log(op);
25 | }
26 | });
27 | firehose.start();
28 | ```
29 |
30 | ### Events
31 | | Event | Description |
32 | |------------------|------------------------------------------------------------------------------------------------------------------------------|
33 | | `commit` | Represents a commit to a user's repository. |
34 | | `identity` | Represents a change to an account's identity. Could be an updated handle, signing key, or PDS hosting endpoint. |
35 | | `handle` | Represents an update of an account's handle, or transition to/from invalid state (may be deprecated in favor of `identity`). |
36 | | `tombstone` | Indicates that an account has been deleted (may be deprecated in favor of `identity` or a future `account` event). |
37 | | `info` | An informational message from the relay. |
38 | | `open` | Emitted when the websocket connection is opened. |
39 | | `close` | Emitted when the websocket connection is closed. |
40 | | `error` | Emitted when an error occurs while handling a message. |
41 | | `websocketError` | Emitted when an error occurs with the websocket connection. |
42 |
43 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import type { ComAtprotoSyncSubscribeRepos } from "@atcute/atproto";
2 | import { readCar as createCarIterator } from "@atcute/car";
3 | import { decode, decodeFirst, fromBytes, toCidLink } from "@atcute/cbor";
4 |
5 | import { createNanoEvents, type Unsubscribe } from "nanoevents";
6 | import type { Data as WSData, WebSocket as WSWebSocket } from "ws";
7 |
8 | /**
9 | * Options for the Firehose class.
10 | */
11 | export interface FirehoseOptions {
12 | /**
13 | * The Relay to connect to.
14 | */
15 | relay?: string;
16 | /**
17 | * The cursor to listen from. If not provided, the firehose will start from the latest event.
18 | */
19 | cursor?: string;
20 | /**
21 | * Whether to automatically reconnect when no new messages are received for a period of time.
22 | * This will not reconnect if the connection was closed intentionally.
23 | * To do that, listen for the `"close"` event and call `start()` again.
24 | * @default true
25 | */
26 | autoReconnect?: boolean;
27 |
28 | /**
29 | * The WebSocket implementation to use (e.g. `import ws from "ws"`).
30 | * Not required if you are on Node 21.0.0 or newer, or another environment that provides a WebSocket implementation.
31 | */
32 | ws?: typeof WSWebSocket | typeof WebSocket;
33 | }
34 |
35 | export class Firehose {
36 | /** The relay to connect to. */
37 | public relay: string;
38 |
39 | /** WebSocket connection to the relay. */
40 | public ws: WebSocket;
41 |
42 | /** The current cursor. */
43 | public cursor = "";
44 |
45 | private emitter = createNanoEvents();
46 |
47 | private autoReconnect: boolean;
48 |
49 | private reconnectTimeout: NodeJS.Timeout | undefined;
50 |
51 | /**
52 | * Creates a new Firehose instance.
53 | * @param options Optional configuration.
54 | */
55 | constructor(options: FirehoseOptions = {}) {
56 | this.relay = options.relay ?? "wss://bsky.network";
57 | this.cursor = options.cursor ?? "";
58 | this.autoReconnect = options.autoReconnect ?? true;
59 |
60 | const cursorQueryParameter = this.cursor ? `?cursor=${this.cursor}` : "";
61 |
62 | if (typeof globalThis.WebSocket === "undefined" && !options.ws) {
63 | throw new Error(
64 | `No WebSocket implementation was found in your environment. You must provide an implementation as the \`ws\` option.
65 |
66 | For example, in a Node.js environment, \`npm install ws\` and then:
67 | import { Firehose } from "@skyware/firehose";
68 | import WebSocket from "ws";
69 |
70 | const firehose = new Firehose({
71 | ws: WebSocket,
72 | });`,
73 | );
74 | }
75 |
76 | const wsImpl = options.ws ?? globalThis.WebSocket;
77 |
78 | // @ts-expect-error — prototype incompatibility
79 | this.ws = new wsImpl(
80 | `${this.relay}/xrpc/com.atproto.sync.subscribeRepos${cursorQueryParameter}`,
81 | );
82 | }
83 |
84 | /**
85 | * Opens a WebSocket connection to the relay.
86 | */
87 | start() {
88 | this.ws.addEventListener("open", () => {
89 | this.emitter.emit("open");
90 | });
91 |
92 | this.ws.addEventListener("message", async ({ data }) => {
93 | try {
94 | // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
95 | const message = await this.parseMessage(data);
96 | if ("seq" in message && message.seq && !isNaN(message.seq)) {
97 | this.cursor = `${message.seq}`;
98 | }
99 | switch (message.$type) {
100 | case "com.atproto.sync.subscribeRepos#identity":
101 | this.emitter.emit("identity", message);
102 | break;
103 | case "com.atproto.sync.subscribeRepos#account":
104 | this.emitter.emit("account", message);
105 | break;
106 | case "com.atproto.sync.subscribeRepos#info":
107 | this.emitter.emit("info", message);
108 | break;
109 | case "com.atproto.sync.subscribeRepos#sync":
110 | this.emitter.emit("sync", message);
111 | break;
112 | case "com.atproto.sync.subscribeRepos#commit":
113 | this.emitter.emit("commit", message);
114 | break;
115 | default:
116 | this.emitter.emit("unknown", message);
117 | break;
118 | }
119 | } catch (error) {
120 | this.emitter.emit("error", { cursor: this.cursor, error });
121 | } finally {
122 | if (this.autoReconnect) this.preventReconnect();
123 | }
124 | });
125 |
126 | this.ws.addEventListener("close", () => {
127 | this.emitter.emit("close", this.cursor);
128 | });
129 |
130 | this.ws.addEventListener("error", (error) => {
131 | this.emitter.emit("websocketError", { cursor: this.cursor, error });
132 | });
133 | }
134 |
135 | /**
136 | * Closes the WebSocket connection.
137 | */
138 | close() {
139 | this.ws?.close();
140 | }
141 |
142 | /** Emitted when the connection is opened. */
143 | on(event: "open", listener: () => void): Unsubscribe;
144 | /** Emitted when the connection is closed. */
145 | on(event: "close", listener: (cursor: string) => void): Unsubscribe;
146 | /**
147 | * Emitted when the websocket reconnects due to not receiving any messages for a period of time.
148 | * This will only be emitted if the `autoReconnect` option is `true`.
149 | */
150 | on(event: "reconnect", listener: () => void): Unsubscribe;
151 | /** Emitted when an error occurs while handling a message. */
152 | on(
153 | event: "error",
154 | listener: ({ cursor, error }: { cursor: string; error: Error }) => void,
155 | ): Unsubscribe;
156 | /** Emitted when an error occurs within the websocket. */
157 | on(
158 | event: "websocketError",
159 | listener: ({ cursor, error }: { cursor: string; error: unknown }) => void,
160 | ): Unsubscribe;
161 | /** Represents a commit to a user's repository. */
162 | on(event: "commit", listener: (message: CommitEvent) => void): Unsubscribe;
163 | /**
164 | * Updates the repo to a new state, without necessarily including that state on the firehose.
165 | * Used to recover from broken commit streams, data loss incidents, or in situations where upstream
166 | * host does not know recent state of the repository.
167 | */
168 | on(event: "sync", listener: (message: SyncEvent) => void): Unsubscribe;
169 | /** Represents a change to an account's status on a host (eg, PDS or Relay). */
170 | on(event: "account", listener: (message: AccountEvent) => void): Unsubscribe;
171 | /**
172 | * Represents a change to an account's identity.
173 | * Could be an updated handle, signing key, or pds hosting endpoint.
174 | */
175 | on(event: "identity", listener: (message: IdentityEvent) => void): Unsubscribe;
176 | /** An informational message from the relay. */
177 | on(event: "info", listener: (message: InfoEvent) => void): Unsubscribe;
178 | /** Emitted when an unknown message is received. */
179 | on(event: "unknown", listener: (message: unknown) => void): Unsubscribe;
180 | on(event: string, listener: (...args: any[]) => void): () => void {
181 | return this.emitter.on(event, listener);
182 | }
183 |
184 | private async parseMessage(data: WSData): Promise {
185 | const buffer = new Uint8Array(
186 | await (new Blob(Array.isArray(data) ? data : [data])).arrayBuffer(),
187 | );
188 |
189 | const [header, remainder] = decodeFirst(buffer);
190 | const [body, remainder2] = decodeFirst(remainder);
191 | if (remainder2.length > 0) {
192 | throw new Error("Excess bytes in message");
193 | }
194 |
195 | const { t, op } = parseHeader(header);
196 |
197 | if (op === -1) {
198 | throw new Error(`Error: ${body.message}\nError code: ${body.error}`);
199 | }
200 |
201 | if (t === "#commit") {
202 | const {
203 | seq,
204 | repo,
205 | commit,
206 | rev,
207 | since,
208 | blocks: blocksBytes,
209 | ops: commitOps,
210 | prevData,
211 | time,
212 | } = body as ComAtprotoSyncSubscribeRepos.Commit;
213 |
214 | // A commit can contain no changes
215 | if (!blocksBytes?.$bytes?.length) {
216 | return {
217 | $type: "com.atproto.sync.subscribeRepos#commit",
218 | seq,
219 | repo,
220 | commit: commit.$link,
221 | rev,
222 | since,
223 | blocks: new Uint8Array(),
224 | ops: [],
225 | ...(prevData ? { prevData: prevData.$link } : {}),
226 | time,
227 | } satisfies CommitEvent;
228 | }
229 |
230 | const blocks = fromBytes(blocksBytes);
231 | const car = readCar(blocks);
232 |
233 | const ops: Array = [];
234 | for (const op of commitOps) {
235 | const action: "create" | "update" | "delete" = op.action as any;
236 | if (action === "create") {
237 | if (!op.cid) continue;
238 | const record = car.get(op.cid.$link);
239 | if (!record) continue;
240 | ops.push(
241 | { action, path: op.path, cid: op.cid.$link, record } satisfies CreateOp,
242 | );
243 | } else if (action === "update") {
244 | if (!op.cid) continue;
245 | const record = car.get(op.cid.$link);
246 | if (!record) continue;
247 | ops.push(
248 | {
249 | action,
250 | path: op.path,
251 | cid: op.cid.$link,
252 | ...(op.prev ? { prev: op.prev.$link } : {}),
253 | record,
254 | } satisfies UpdateOp,
255 | );
256 | } else if (action === "delete") {
257 | ops.push(
258 | {
259 | action,
260 | path: op.path,
261 | ...(op.prev ? { prev: op.prev.$link } : {}),
262 | } satisfies DeleteOp,
263 | );
264 | } else {
265 | throw new Error(`Unknown action: ${action}`);
266 | }
267 | }
268 |
269 | return {
270 | $type: "com.atproto.sync.subscribeRepos#commit",
271 | seq,
272 | repo,
273 | commit: commit.$link,
274 | rev,
275 | since,
276 | blocks,
277 | ops,
278 | ...(prevData ? { prevData: prevData.$link } : {}),
279 | time,
280 | } satisfies CommitEvent;
281 | } else if (t === "#sync") {
282 | const { seq, did, blocks: blocksBytes, rev, time } =
283 | body as ComAtprotoSyncSubscribeRepos.Sync;
284 |
285 | const blocks = (blocksBytes?.$bytes?.length)
286 | ? fromBytes(blocksBytes)
287 | : new Uint8Array();
288 | return {
289 | $type: "com.atproto.sync.subscribeRepos#sync",
290 | seq,
291 | did,
292 | blocks,
293 | rev,
294 | time,
295 | } satisfies SyncEvent;
296 | }
297 |
298 | return { $type: `com.atproto.sync.subscribeRepos${t}`, ...body };
299 | }
300 |
301 | private preventReconnect() {
302 | if (this.reconnectTimeout) clearTimeout(this.reconnectTimeout);
303 | this.reconnectTimeout = setTimeout(() => {
304 | this.reconnect();
305 | }, 5_000);
306 | }
307 |
308 | private reconnect() {
309 | this.ws?.close();
310 | this.start();
311 | this.emitter.emit("reconnect");
312 | }
313 | }
314 |
315 | /**
316 | * Represents a `create` repository operation.
317 | */
318 | export interface CreateOp {
319 | action: "create";
320 | /** The record's path in the repository. */
321 | path: string;
322 | /** The record's CID. */
323 | cid: string;
324 | /** The record's content. */
325 | record: {};
326 | }
327 |
328 | /**
329 | * Represents an `update` repository operation.
330 | */
331 | export interface UpdateOp {
332 | action: "update";
333 | /** The record's path in the repository. */
334 | path: string;
335 | /** The record's CID. */
336 | cid: string;
337 | /** The previous record CID. */
338 | prev?: string;
339 | /** The record's content. */
340 | record: {};
341 | }
342 |
343 | /**
344 | * Represents a `delete` repository operation.
345 | */
346 | export interface DeleteOp {
347 | action: "delete";
348 | /** The record's path in the repository. */
349 | path: string;
350 | /** The previous record CID. */
351 | prev?: string;
352 | }
353 |
354 | /** A repository operation. */
355 | export type RepoOp = CreateOp | UpdateOp | DeleteOp;
356 |
357 | /**
358 | * Represents an update of repository state.
359 | */
360 | export interface CommitEvent {
361 | $type: "com.atproto.sync.subscribeRepos#commit";
362 | /** The stream sequence number of this message. */
363 | seq: number;
364 | /** The repo this event comes from. */
365 | repo: string;
366 | /** Repo commit object CID. */
367 | commit: string;
368 | /** The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event. */
369 | rev: string;
370 | /** The rev of the last emitted commit from this repo (if any). */
371 | since: string | null;
372 | /** CAR file containing relevant blocks, as a diff since the previous repo state. */
373 | blocks: Uint8Array;
374 | /** List of repo mutation operations in this commit (eg, records created, updated, or deleted). */
375 | ops: Array;
376 | /** List of new blobs (by CID) referenced by records in this commit. */
377 | blobs?: { $link: string }[];
378 | /** Timestamp of when this message was originally broadcast. */
379 | time: string;
380 | }
381 |
382 | export interface SyncEvent {
383 | $type: "com.atproto.sync.subscribeRepos#sync";
384 | /** The stream sequence number of this message. */
385 | seq: number;
386 | /** The repo this event comes from. */
387 | did: string;
388 | /** CAR file containing the commit, as a block. */
389 | blocks: Uint8Array;
390 | /** The rev of the commit. */
391 | rev: string;
392 | /** Timestamp of when this message was originally broadcast. */
393 | time: string;
394 | }
395 |
396 | export type AccountEvent = ComAtprotoSyncSubscribeRepos.Account & {
397 | $type: "com.atproto.sync.subscribeRepos#account";
398 | };
399 | export type IdentityEvent = ComAtprotoSyncSubscribeRepos.Identity & {
400 | $type: "com.atproto.sync.subscribeRepos#identity";
401 | };
402 | export type InfoEvent = ComAtprotoSyncSubscribeRepos.Info & {
403 | $type: "com.atproto.sync.subscribeRepos#info";
404 | };
405 | export type Event = CommitEvent | SyncEvent | AccountEvent | IdentityEvent | InfoEvent;
406 |
407 | function parseHeader(header: any): { t: string; op: 1 | -1 } {
408 | if (
409 | !header
410 | || typeof header !== "object"
411 | || !header.t
412 | || typeof header.t !== "string"
413 | || !header.op
414 | || typeof header.op !== "number"
415 | ) {
416 | throw new Error("Invalid header received");
417 | }
418 | return { t: header.t, op: header.op };
419 | }
420 |
421 | function readCar(buffer: Uint8Array): Map {
422 | const records = new Map();
423 | for (const { cid, bytes } of createCarIterator(buffer)) {
424 | records.set(toCidLink(cid).$link, decode(bytes));
425 | }
426 | return records;
427 | }
428 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Mozilla Public License Version 2.0
2 | ==================================
3 |
4 | 1. Definitions
5 | --------------
6 |
7 | 1.1. "Contributor"
8 | means each individual or legal entity that creates, contributes to
9 | the creation of, or owns Covered Software.
10 |
11 | 1.2. "Contributor Version"
12 | means the combination of the Contributions of others (if any) used
13 | by a Contributor and that particular Contributor's Contribution.
14 |
15 | 1.3. "Contribution"
16 | means Covered Software of a particular Contributor.
17 |
18 | 1.4. "Covered Software"
19 | means Source Code Form to which the initial Contributor has attached
20 | the notice in Exhibit A, the Executable Form of such Source Code
21 | Form, and Modifications of such Source Code Form, in each case
22 | including portions thereof.
23 |
24 | 1.5. "Incompatible With Secondary Licenses"
25 | means
26 |
27 | (a) that the initial Contributor has attached the notice described
28 | in Exhibit B to the Covered Software; or
29 |
30 | (b) that the Covered Software was made available under the terms of
31 | version 1.1 or earlier of the License, but not also under the
32 | terms of a Secondary License.
33 |
34 | 1.6. "Executable Form"
35 | means any form of the work other than Source Code Form.
36 |
37 | 1.7. "Larger Work"
38 | means a work that combines Covered Software with other material, in
39 | a separate file or files, that is not Covered Software.
40 |
41 | 1.8. "License"
42 | means this document.
43 |
44 | 1.9. "Licensable"
45 | means having the right to grant, to the maximum extent possible,
46 | whether at the time of the initial grant or subsequently, any and
47 | all of the rights conveyed by this License.
48 |
49 | 1.10. "Modifications"
50 | means any of the following:
51 |
52 | (a) any file in Source Code Form that results from an addition to,
53 | deletion from, or modification of the contents of Covered
54 | Software; or
55 |
56 | (b) any new file in Source Code Form that contains any Covered
57 | Software.
58 |
59 | 1.11. "Patent Claims" of a Contributor
60 | means any patent claim(s), including without limitation, method,
61 | process, and apparatus claims, in any patent Licensable by such
62 | Contributor that would be infringed, but for the grant of the
63 | License, by the making, using, selling, offering for sale, having
64 | made, import, or transfer of either its Contributions or its
65 | Contributor Version.
66 |
67 | 1.12. "Secondary License"
68 | means either the GNU General Public License, Version 2.0, the GNU
69 | Lesser General Public License, Version 2.1, the GNU Affero General
70 | Public License, Version 3.0, or any later versions of those
71 | licenses.
72 |
73 | 1.13. "Source Code Form"
74 | means the form of the work preferred for making modifications.
75 |
76 | 1.14. "You" (or "Your")
77 | means an individual or a legal entity exercising rights under this
78 | License. For legal entities, "You" includes any entity that
79 | controls, is controlled by, or is under common control with You. For
80 | purposes of this definition, "control" means (a) the power, direct
81 | or indirect, to cause the direction or management of such entity,
82 | whether by contract or otherwise, or (b) ownership of more than
83 | fifty percent (50%) of the outstanding shares or beneficial
84 | ownership of such entity.
85 |
86 | 2. License Grants and Conditions
87 | --------------------------------
88 |
89 | 2.1. Grants
90 |
91 | Each Contributor hereby grants You a world-wide, royalty-free,
92 | non-exclusive license:
93 |
94 | (a) under intellectual property rights (other than patent or trademark)
95 | Licensable by such Contributor to use, reproduce, make available,
96 | modify, display, perform, distribute, and otherwise exploit its
97 | Contributions, either on an unmodified basis, with Modifications, or
98 | as part of a Larger Work; and
99 |
100 | (b) under Patent Claims of such Contributor to make, use, sell, offer
101 | for sale, have made, import, and otherwise transfer either its
102 | Contributions or its Contributor Version.
103 |
104 | 2.2. Effective Date
105 |
106 | The licenses granted in Section 2.1 with respect to any Contribution
107 | become effective for each Contribution on the date the Contributor first
108 | distributes such Contribution.
109 |
110 | 2.3. Limitations on Grant Scope
111 |
112 | The licenses granted in this Section 2 are the only rights granted under
113 | this License. No additional rights or licenses will be implied from the
114 | distribution or licensing of Covered Software under this License.
115 | Notwithstanding Section 2.1(b) above, no patent license is granted by a
116 | Contributor:
117 |
118 | (a) for any code that a Contributor has removed from Covered Software;
119 | or
120 |
121 | (b) for infringements caused by: (i) Your and any other third party's
122 | modifications of Covered Software, or (ii) the combination of its
123 | Contributions with other software (except as part of its Contributor
124 | Version); or
125 |
126 | (c) under Patent Claims infringed by Covered Software in the absence of
127 | its Contributions.
128 |
129 | This License does not grant any rights in the trademarks, service marks,
130 | or logos of any Contributor (except as may be necessary to comply with
131 | the notice requirements in Section 3.4).
132 |
133 | 2.4. Subsequent Licenses
134 |
135 | No Contributor makes additional grants as a result of Your choice to
136 | distribute the Covered Software under a subsequent version of this
137 | License (see Section 10.2) or under the terms of a Secondary License (if
138 | permitted under the terms of Section 3.3).
139 |
140 | 2.5. Representation
141 |
142 | Each Contributor represents that the Contributor believes its
143 | Contributions are its original creation(s) or it has sufficient rights
144 | to grant the rights to its Contributions conveyed by this License.
145 |
146 | 2.6. Fair Use
147 |
148 | This License is not intended to limit any rights You have under
149 | applicable copyright doctrines of fair use, fair dealing, or other
150 | equivalents.
151 |
152 | 2.7. Conditions
153 |
154 | Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
155 | in Section 2.1.
156 |
157 | 3. Responsibilities
158 | -------------------
159 |
160 | 3.1. Distribution of Source Form
161 |
162 | All distribution of Covered Software in Source Code Form, including any
163 | Modifications that You create or to which You contribute, must be under
164 | the terms of this License. You must inform recipients that the Source
165 | Code Form of the Covered Software is governed by the terms of this
166 | License, and how they can obtain a copy of this License. You may not
167 | attempt to alter or restrict the recipients' rights in the Source Code
168 | Form.
169 |
170 | 3.2. Distribution of Executable Form
171 |
172 | If You distribute Covered Software in Executable Form then:
173 |
174 | (a) such Covered Software must also be made available in Source Code
175 | Form, as described in Section 3.1, and You must inform recipients of
176 | the Executable Form how they can obtain a copy of such Source Code
177 | Form by reasonable means in a timely manner, at a charge no more
178 | than the cost of distribution to the recipient; and
179 |
180 | (b) You may distribute such Executable Form under the terms of this
181 | License, or sublicense it under different terms, provided that the
182 | license for the Executable Form does not attempt to limit or alter
183 | the recipients' rights in the Source Code Form under this License.
184 |
185 | 3.3. Distribution of a Larger Work
186 |
187 | You may create and distribute a Larger Work under terms of Your choice,
188 | provided that You also comply with the requirements of this License for
189 | the Covered Software. If the Larger Work is a combination of Covered
190 | Software with a work governed by one or more Secondary Licenses, and the
191 | Covered Software is not Incompatible With Secondary Licenses, this
192 | License permits You to additionally distribute such Covered Software
193 | under the terms of such Secondary License(s), so that the recipient of
194 | the Larger Work may, at their option, further distribute the Covered
195 | Software under the terms of either this License or such Secondary
196 | License(s).
197 |
198 | 3.4. Notices
199 |
200 | You may not remove or alter the substance of any license notices
201 | (including copyright notices, patent notices, disclaimers of warranty,
202 | or limitations of liability) contained within the Source Code Form of
203 | the Covered Software, except that You may alter any license notices to
204 | the extent required to remedy known factual inaccuracies.
205 |
206 | 3.5. Application of Additional Terms
207 |
208 | You may choose to offer, and to charge a fee for, warranty, support,
209 | indemnity or liability obligations to one or more recipients of Covered
210 | Software. However, You may do so only on Your own behalf, and not on
211 | behalf of any Contributor. You must make it absolutely clear that any
212 | such warranty, support, indemnity, or liability obligation is offered by
213 | You alone, and You hereby agree to indemnify every Contributor for any
214 | liability incurred by such Contributor as a result of warranty, support,
215 | indemnity or liability terms You offer. You may include additional
216 | disclaimers of warranty and limitations of liability specific to any
217 | jurisdiction.
218 |
219 | 4. Inability to Comply Due to Statute or Regulation
220 | ---------------------------------------------------
221 |
222 | If it is impossible for You to comply with any of the terms of this
223 | License with respect to some or all of the Covered Software due to
224 | statute, judicial order, or regulation then You must: (a) comply with
225 | the terms of this License to the maximum extent possible; and (b)
226 | describe the limitations and the code they affect. Such description must
227 | be placed in a text file included with all distributions of the Covered
228 | Software under this License. Except to the extent prohibited by statute
229 | or regulation, such description must be sufficiently detailed for a
230 | recipient of ordinary skill to be able to understand it.
231 |
232 | 5. Termination
233 | --------------
234 |
235 | 5.1. The rights granted under this License will terminate automatically
236 | if You fail to comply with any of its terms. However, if You become
237 | compliant, then the rights granted under this License from a particular
238 | Contributor are reinstated (a) provisionally, unless and until such
239 | Contributor explicitly and finally terminates Your grants, and (b) on an
240 | ongoing basis, if such Contributor fails to notify You of the
241 | non-compliance by some reasonable means prior to 60 days after You have
242 | come back into compliance. Moreover, Your grants from a particular
243 | Contributor are reinstated on an ongoing basis if such Contributor
244 | notifies You of the non-compliance by some reasonable means, this is the
245 | first time You have received notice of non-compliance with this License
246 | from such Contributor, and You become compliant prior to 30 days after
247 | Your receipt of the notice.
248 |
249 | 5.2. If You initiate litigation against any entity by asserting a patent
250 | infringement claim (excluding declaratory judgment actions,
251 | counter-claims, and cross-claims) alleging that a Contributor Version
252 | directly or indirectly infringes any patent, then the rights granted to
253 | You by any and all Contributors for the Covered Software under Section
254 | 2.1 of this License shall terminate.
255 |
256 | 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
257 | end user license agreements (excluding distributors and resellers) which
258 | have been validly granted by You or Your distributors under this License
259 | prior to termination shall survive termination.
260 |
261 | ************************************************************************
262 | * *
263 | * 6. Disclaimer of Warranty *
264 | * ------------------------- *
265 | * *
266 | * Covered Software is provided under this License on an "as is" *
267 | * basis, without warranty of any kind, either expressed, implied, or *
268 | * statutory, including, without limitation, warranties that the *
269 | * Covered Software is free of defects, merchantable, fit for a *
270 | * particular purpose or non-infringing. The entire risk as to the *
271 | * quality and performance of the Covered Software is with You. *
272 | * Should any Covered Software prove defective in any respect, You *
273 | * (not any Contributor) assume the cost of any necessary servicing, *
274 | * repair, or correction. This disclaimer of warranty constitutes an *
275 | * essential part of this License. No use of any Covered Software is *
276 | * authorized under this License except under this disclaimer. *
277 | * *
278 | ************************************************************************
279 |
280 | ************************************************************************
281 | * *
282 | * 7. Limitation of Liability *
283 | * -------------------------- *
284 | * *
285 | * Under no circumstances and under no legal theory, whether tort *
286 | * (including negligence), contract, or otherwise, shall any *
287 | * Contributor, or anyone who distributes Covered Software as *
288 | * permitted above, be liable to You for any direct, indirect, *
289 | * special, incidental, or consequential damages of any character *
290 | * including, without limitation, damages for lost profits, loss of *
291 | * goodwill, work stoppage, computer failure or malfunction, or any *
292 | * and all other commercial damages or losses, even if such party *
293 | * shall have been informed of the possibility of such damages. This *
294 | * limitation of liability shall not apply to liability for death or *
295 | * personal injury resulting from such party's negligence to the *
296 | * extent applicable law prohibits such limitation. Some *
297 | * jurisdictions do not allow the exclusion or limitation of *
298 | * incidental or consequential damages, so this exclusion and *
299 | * limitation may not apply to You. *
300 | * *
301 | ************************************************************************
302 |
303 | 8. Litigation
304 | -------------
305 |
306 | Any litigation relating to this License may be brought only in the
307 | courts of a jurisdiction where the defendant maintains its principal
308 | place of business and such litigation shall be governed by laws of that
309 | jurisdiction, without reference to its conflict-of-law provisions.
310 | Nothing in this Section shall prevent a party's ability to bring
311 | cross-claims or counter-claims.
312 |
313 | 9. Miscellaneous
314 | ----------------
315 |
316 | This License represents the complete agreement concerning the subject
317 | matter hereof. If any provision of this License is held to be
318 | unenforceable, such provision shall be reformed only to the extent
319 | necessary to make it enforceable. Any law or regulation which provides
320 | that the language of a contract shall be construed against the drafter
321 | shall not be used to construe this License against a Contributor.
322 |
323 | 10. Versions of the License
324 | ---------------------------
325 |
326 | 10.1. New Versions
327 |
328 | Mozilla Foundation is the license steward. Except as provided in Section
329 | 10.3, no one other than the license steward has the right to modify or
330 | publish new versions of this License. Each version will be given a
331 | distinguishing version number.
332 |
333 | 10.2. Effect of New Versions
334 |
335 | You may distribute the Covered Software under the terms of the version
336 | of the License under which You originally received the Covered Software,
337 | or under the terms of any subsequent version published by the license
338 | steward.
339 |
340 | 10.3. Modified Versions
341 |
342 | If you create software not governed by this License, and you want to
343 | create a new license for such software, you may create and use a
344 | modified version of this License if you rename the license and remove
345 | any references to the name of the license steward (except to note that
346 | such modified license differs from this License).
347 |
348 | 10.4. Distributing Source Code Form that is Incompatible With Secondary
349 | Licenses
350 |
351 | If You choose to distribute Source Code Form that is Incompatible With
352 | Secondary Licenses under the terms of this version of the License, the
353 | notice described in Exhibit B of this License must be attached.
354 |
355 | Exhibit A - Source Code Form License Notice
356 | -------------------------------------------
357 |
358 | This Source Code Form is subject to the terms of the Mozilla Public
359 | License, v. 2.0. If a copy of the MPL was not distributed with this
360 | file, You can obtain one at http://mozilla.org/MPL/2.0/.
361 |
362 | If it is not possible or desirable to put the notice in a particular
363 | file, then You may include the notice in a location (such as a LICENSE
364 | file in a relevant directory) where a recipient would be likely to look
365 | for such a notice.
366 |
367 | You may add additional accurate notices of copyright ownership.
368 |
369 | Exhibit B - "Incompatible With Secondary Licenses" Notice
370 | ---------------------------------------------------------
371 |
372 | This Source Code Form is "Incompatible With Secondary Licenses", as
373 | defined by the Mozilla Public License, v. 2.0.
374 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@atcute/car':
12 | specifier: ^3.0.3
13 | version: 3.1.1
14 | '@atcute/cbor':
15 | specifier: ^2.2.2
16 | version: 2.2.5
17 | nanoevents:
18 | specifier: ^9.1.0
19 | version: 9.1.0
20 | devDependencies:
21 | '@atcute/atproto':
22 | specifier: ^3.1.1
23 | version: 3.1.1
24 | '@types/node':
25 | specifier: ^22.17.0
26 | version: 22.17.0
27 | '@types/ws':
28 | specifier: ^8.5.10
29 | version: 8.5.10
30 | '@typescript-eslint/eslint-plugin':
31 | specifier: ^6.7.4
32 | version: 6.7.4(@typescript-eslint/parser@6.7.4(eslint@8.50.0)(typescript@5.9.2))(eslint@8.50.0)(typescript@5.9.2)
33 | '@typescript-eslint/parser':
34 | specifier: ^6.7.4
35 | version: 6.7.4(eslint@8.50.0)(typescript@5.9.2)
36 | dprint:
37 | specifier: ^0.41.0
38 | version: 0.41.0
39 | eslint:
40 | specifier: ^8.50.0
41 | version: 8.50.0
42 | multiformats:
43 | specifier: ^13.1.0
44 | version: 13.1.0
45 | typescript:
46 | specifier: ^5.9.2
47 | version: 5.9.2
48 | ws:
49 | specifier: ^8.16.0
50 | version: 8.18.3
51 |
52 | packages:
53 |
54 | '@aashutoshrathi/word-wrap@1.2.6':
55 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
56 | engines: {node: '>=0.10.0'}
57 |
58 | '@atcute/atproto@3.1.1':
59 | resolution: {integrity: sha512-D+RLTIPF0xLu7BPZY8KSewAPemJFh+3n3zeQ3ROsLxbTtCHbrTDMAmAFexaVRAPGcPYrwXaBUlv7yZjScJolMg==}
60 |
61 | '@atcute/car@3.1.1':
62 | resolution: {integrity: sha512-yhez/LqIl0zHubG6z/G/gqWYHmg7wJ5L4jNkbXj5FvZ4eOvmzsw8+ojbdq6wfMU4p5NhP0pUJNLkTZHbYSPmLg==}
63 |
64 | '@atcute/cbor@2.2.5':
65 | resolution: {integrity: sha512-sBT8+6qau0mC3kwgmjl+nzqGn02xsE9b+kSgXm4/BRd9w8fwdRQYwcC9ApDlfaojrljJfcEkimppl/IcPOF3CA==}
66 |
67 | '@atcute/cid@2.2.3':
68 | resolution: {integrity: sha512-WEzNSL1EuCVtCQDFYEBIm4dEP6PcMEwi8IYUVIWvT77eO5EjY58F63z5T4qMABxSBM0+L4kqMxypdL1Fzf6LZw==}
69 |
70 | '@atcute/lexicons@1.1.0':
71 | resolution: {integrity: sha512-LFqwnria78xLYb62Ri/+WwQpUTgZp2DuyolNGIIOV1dpiKhFFFh//nscHMA6IExFLQRqWDs3tTjy7zv0h3sf1Q==}
72 |
73 | '@atcute/multibase@1.1.4':
74 | resolution: {integrity: sha512-NUf5AeeSOmuZHGU+4GAaMtISJoG+ZHtW/vUVA4lK/YDt/7LODAW0Fd0NNIIUPVUoW0xJS6zSEIWvwLLuxmEHhA==}
75 |
76 | '@atcute/uint8array@1.0.3':
77 | resolution: {integrity: sha512-M/K+ihiVW8Pl2PFLzaC4E3l4JaZ1IH05Q0AbPWUC4cVHnd/gZ/1kAF5ngdtGvJeDMirHZ2VAy7OmAsPwR/2nlA==}
78 |
79 | '@atcute/varint@1.0.2':
80 | resolution: {integrity: sha512-0O31hePzzr4O3NGWHUKKOyta6CGSL+AtN8iir8grGxu9jXyI7DBARlw6PbgKA6uTAvsXdpmRmF8MX+p0TsLnNg==}
81 |
82 | '@dprint/darwin-arm64@0.41.0':
83 | resolution: {integrity: sha512-P9PtcQI0mrI4U6yyd+/iI664BHSqC9KTS6ogq0ptEdnLtlaWzf09D1nv6FBaHiG9m3conuBRlPsoUqt3j6PZ2w==}
84 | cpu: [arm64]
85 | os: [darwin]
86 |
87 | '@dprint/darwin-x64@0.41.0':
88 | resolution: {integrity: sha512-mSYnSoH0uyCkjgIWTny2DZAcaiRTe3kRWY5SeZECLGO37e+SdVg+ZjSzndhOvvEb9pv8EeBO1NJ9gHOSceT5Xw==}
89 | cpu: [x64]
90 | os: [darwin]
91 |
92 | '@dprint/linux-arm64-glibc@0.41.0':
93 | resolution: {integrity: sha512-U4xWzjjO/aAct8cSSMZFhg8l1jWy6VahXh8zWjGBufwX7t3xEcxMG9RyAp/ioYSY6wl4YXAmnUHywhC+wSjDHQ==}
94 | cpu: [arm64]
95 | os: [linux]
96 |
97 | '@dprint/linux-x64-glibc@0.41.0':
98 | resolution: {integrity: sha512-wjv5l4mGns7E8i32E8FfAk45tw5O7v4NM17gtvhe6ggOiOD6quHowOH00pLfEakMLMF9y0J5ZO2hxJ/w06bXmQ==}
99 | cpu: [x64]
100 | os: [linux]
101 |
102 | '@dprint/linux-x64-musl@0.41.0':
103 | resolution: {integrity: sha512-ZZOqiur9Xi/2uhz0Ce215VTSajAlSrduX/5k/hpIjI7Rgz22Vn77p5fmYxzWkTt/Li1zq5zboTvmGYx0QVNMrQ==}
104 | cpu: [x64]
105 | os: [linux]
106 |
107 | '@dprint/win32-x64@0.41.0':
108 | resolution: {integrity: sha512-mFx6x4Hn848/D4gPbDm7g1wlnOh2SGoVF9c9HMGCuOobUU2WIBztzV4L5qlFCB3gprlS0ru9BhlMpGhrp0CBYA==}
109 | cpu: [x64]
110 | os: [win32]
111 |
112 | '@eslint-community/eslint-utils@4.4.0':
113 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
114 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
115 | peerDependencies:
116 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
117 |
118 | '@eslint-community/regexpp@4.10.0':
119 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
120 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
121 |
122 | '@eslint/eslintrc@2.1.4':
123 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
124 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
125 |
126 | '@eslint/js@8.50.0':
127 | resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==}
128 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
129 |
130 | '@humanwhocodes/config-array@0.11.14':
131 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
132 | engines: {node: '>=10.10.0'}
133 |
134 | '@humanwhocodes/module-importer@1.0.1':
135 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
136 | engines: {node: '>=12.22'}
137 |
138 | '@humanwhocodes/object-schema@2.0.2':
139 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
140 |
141 | '@nodelib/fs.scandir@2.1.5':
142 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
143 | engines: {node: '>= 8'}
144 |
145 | '@nodelib/fs.stat@2.0.5':
146 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
147 | engines: {node: '>= 8'}
148 |
149 | '@nodelib/fs.walk@1.2.8':
150 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
151 | engines: {node: '>= 8'}
152 |
153 | '@types/json-schema@7.0.15':
154 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
155 |
156 | '@types/node@22.17.0':
157 | resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==}
158 |
159 | '@types/semver@7.5.7':
160 | resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==}
161 |
162 | '@types/ws@8.5.10':
163 | resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
164 |
165 | '@typescript-eslint/eslint-plugin@6.7.4':
166 | resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==}
167 | engines: {node: ^16.0.0 || >=18.0.0}
168 | peerDependencies:
169 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
170 | eslint: ^7.0.0 || ^8.0.0
171 | typescript: '*'
172 | peerDependenciesMeta:
173 | typescript:
174 | optional: true
175 |
176 | '@typescript-eslint/parser@6.7.4':
177 | resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==}
178 | engines: {node: ^16.0.0 || >=18.0.0}
179 | peerDependencies:
180 | eslint: ^7.0.0 || ^8.0.0
181 | typescript: '*'
182 | peerDependenciesMeta:
183 | typescript:
184 | optional: true
185 |
186 | '@typescript-eslint/scope-manager@6.7.4':
187 | resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==}
188 | engines: {node: ^16.0.0 || >=18.0.0}
189 |
190 | '@typescript-eslint/type-utils@6.7.4':
191 | resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==}
192 | engines: {node: ^16.0.0 || >=18.0.0}
193 | peerDependencies:
194 | eslint: ^7.0.0 || ^8.0.0
195 | typescript: '*'
196 | peerDependenciesMeta:
197 | typescript:
198 | optional: true
199 |
200 | '@typescript-eslint/types@6.7.4':
201 | resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==}
202 | engines: {node: ^16.0.0 || >=18.0.0}
203 |
204 | '@typescript-eslint/typescript-estree@6.7.4':
205 | resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==}
206 | engines: {node: ^16.0.0 || >=18.0.0}
207 | peerDependencies:
208 | typescript: '*'
209 | peerDependenciesMeta:
210 | typescript:
211 | optional: true
212 |
213 | '@typescript-eslint/utils@6.7.4':
214 | resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==}
215 | engines: {node: ^16.0.0 || >=18.0.0}
216 | peerDependencies:
217 | eslint: ^7.0.0 || ^8.0.0
218 |
219 | '@typescript-eslint/visitor-keys@6.7.4':
220 | resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==}
221 | engines: {node: ^16.0.0 || >=18.0.0}
222 |
223 | acorn-jsx@5.3.2:
224 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
225 | peerDependencies:
226 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
227 |
228 | acorn@8.11.3:
229 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
230 | engines: {node: '>=0.4.0'}
231 | hasBin: true
232 |
233 | ajv@6.12.6:
234 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
235 |
236 | ansi-regex@5.0.1:
237 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
238 | engines: {node: '>=8'}
239 |
240 | ansi-styles@4.3.0:
241 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
242 | engines: {node: '>=8'}
243 |
244 | argparse@2.0.1:
245 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
246 |
247 | array-union@2.1.0:
248 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
249 | engines: {node: '>=8'}
250 |
251 | balanced-match@1.0.2:
252 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
253 |
254 | brace-expansion@1.1.11:
255 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
256 |
257 | braces@3.0.2:
258 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
259 | engines: {node: '>=8'}
260 |
261 | callsites@3.1.0:
262 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
263 | engines: {node: '>=6'}
264 |
265 | chalk@4.1.2:
266 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
267 | engines: {node: '>=10'}
268 |
269 | color-convert@2.0.1:
270 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
271 | engines: {node: '>=7.0.0'}
272 |
273 | color-name@1.1.4:
274 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
275 |
276 | concat-map@0.0.1:
277 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
278 |
279 | cross-spawn@7.0.3:
280 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
281 | engines: {node: '>= 8'}
282 |
283 | debug@4.3.4:
284 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
285 | engines: {node: '>=6.0'}
286 | peerDependencies:
287 | supports-color: '*'
288 | peerDependenciesMeta:
289 | supports-color:
290 | optional: true
291 |
292 | deep-is@0.1.4:
293 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
294 |
295 | dir-glob@3.0.1:
296 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
297 | engines: {node: '>=8'}
298 |
299 | doctrine@3.0.0:
300 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
301 | engines: {node: '>=6.0.0'}
302 |
303 | dprint@0.41.0:
304 | resolution: {integrity: sha512-9Ctv6EnwOy5Ai566DczI/QhAC6y+AhWDA2gFU8Zz4xezUy1BevHaIYhfdLWZQxh4Qf4H28lRu1Lq+hhIm1US9w==}
305 | hasBin: true
306 |
307 | escape-string-regexp@4.0.0:
308 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
309 | engines: {node: '>=10'}
310 |
311 | eslint-scope@7.2.2:
312 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
313 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
314 |
315 | eslint-visitor-keys@3.4.3:
316 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
317 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
318 |
319 | eslint@8.50.0:
320 | resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==}
321 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
322 | hasBin: true
323 |
324 | esm-env@1.2.2:
325 | resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
326 |
327 | espree@9.6.1:
328 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
329 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
330 |
331 | esquery@1.5.0:
332 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
333 | engines: {node: '>=0.10'}
334 |
335 | esrecurse@4.3.0:
336 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
337 | engines: {node: '>=4.0'}
338 |
339 | estraverse@5.3.0:
340 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
341 | engines: {node: '>=4.0'}
342 |
343 | esutils@2.0.3:
344 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
345 | engines: {node: '>=0.10.0'}
346 |
347 | fast-deep-equal@3.1.3:
348 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
349 |
350 | fast-glob@3.3.2:
351 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
352 | engines: {node: '>=8.6.0'}
353 |
354 | fast-json-stable-stringify@2.1.0:
355 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
356 |
357 | fast-levenshtein@2.0.6:
358 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
359 |
360 | fastq@1.17.1:
361 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
362 |
363 | file-entry-cache@6.0.1:
364 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
365 | engines: {node: ^10.12.0 || >=12.0.0}
366 |
367 | fill-range@7.0.1:
368 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
369 | engines: {node: '>=8'}
370 |
371 | find-up@5.0.0:
372 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
373 | engines: {node: '>=10'}
374 |
375 | flat-cache@3.2.0:
376 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
377 | engines: {node: ^10.12.0 || >=12.0.0}
378 |
379 | flatted@3.2.9:
380 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
381 |
382 | fs.realpath@1.0.0:
383 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
384 |
385 | glob-parent@5.1.2:
386 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
387 | engines: {node: '>= 6'}
388 |
389 | glob-parent@6.0.2:
390 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
391 | engines: {node: '>=10.13.0'}
392 |
393 | glob@7.2.3:
394 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
395 |
396 | globals@13.24.0:
397 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
398 | engines: {node: '>=8'}
399 |
400 | globby@11.1.0:
401 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
402 | engines: {node: '>=10'}
403 |
404 | graphemer@1.4.0:
405 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
406 |
407 | has-flag@4.0.0:
408 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
409 | engines: {node: '>=8'}
410 |
411 | ignore@5.3.1:
412 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
413 | engines: {node: '>= 4'}
414 |
415 | import-fresh@3.3.0:
416 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
417 | engines: {node: '>=6'}
418 |
419 | imurmurhash@0.1.4:
420 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
421 | engines: {node: '>=0.8.19'}
422 |
423 | inflight@1.0.6:
424 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
425 |
426 | inherits@2.0.4:
427 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
428 |
429 | is-extglob@2.1.1:
430 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
431 | engines: {node: '>=0.10.0'}
432 |
433 | is-glob@4.0.3:
434 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
435 | engines: {node: '>=0.10.0'}
436 |
437 | is-number@7.0.0:
438 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
439 | engines: {node: '>=0.12.0'}
440 |
441 | is-path-inside@3.0.3:
442 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
443 | engines: {node: '>=8'}
444 |
445 | isexe@2.0.0:
446 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
447 |
448 | js-yaml@4.1.0:
449 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
450 | hasBin: true
451 |
452 | json-buffer@3.0.1:
453 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
454 |
455 | json-schema-traverse@0.4.1:
456 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
457 |
458 | json-stable-stringify-without-jsonify@1.0.1:
459 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
460 |
461 | keyv@4.5.4:
462 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
463 |
464 | levn@0.4.1:
465 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
466 | engines: {node: '>= 0.8.0'}
467 |
468 | locate-path@6.0.0:
469 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
470 | engines: {node: '>=10'}
471 |
472 | lodash.merge@4.6.2:
473 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
474 |
475 | lru-cache@6.0.0:
476 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
477 | engines: {node: '>=10'}
478 |
479 | merge2@1.4.1:
480 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
481 | engines: {node: '>= 8'}
482 |
483 | micromatch@4.0.5:
484 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
485 | engines: {node: '>=8.6'}
486 |
487 | minimatch@3.1.2:
488 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
489 |
490 | ms@2.1.2:
491 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
492 |
493 | multiformats@13.1.0:
494 | resolution: {integrity: sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==}
495 |
496 | nanoevents@9.1.0:
497 | resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==}
498 | engines: {node: ^18.0.0 || >=20.0.0}
499 |
500 | natural-compare@1.4.0:
501 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
502 |
503 | once@1.4.0:
504 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
505 |
506 | optionator@0.9.3:
507 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
508 | engines: {node: '>= 0.8.0'}
509 |
510 | p-limit@3.1.0:
511 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
512 | engines: {node: '>=10'}
513 |
514 | p-locate@5.0.0:
515 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
516 | engines: {node: '>=10'}
517 |
518 | parent-module@1.0.1:
519 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
520 | engines: {node: '>=6'}
521 |
522 | path-exists@4.0.0:
523 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
524 | engines: {node: '>=8'}
525 |
526 | path-is-absolute@1.0.1:
527 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
528 | engines: {node: '>=0.10.0'}
529 |
530 | path-key@3.1.1:
531 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
532 | engines: {node: '>=8'}
533 |
534 | path-type@4.0.0:
535 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
536 | engines: {node: '>=8'}
537 |
538 | picomatch@2.3.1:
539 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
540 | engines: {node: '>=8.6'}
541 |
542 | prelude-ls@1.2.1:
543 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
544 | engines: {node: '>= 0.8.0'}
545 |
546 | punycode@2.3.1:
547 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
548 | engines: {node: '>=6'}
549 |
550 | queue-microtask@1.2.3:
551 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
552 |
553 | resolve-from@4.0.0:
554 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
555 | engines: {node: '>=4'}
556 |
557 | reusify@1.0.4:
558 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
559 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
560 |
561 | rimraf@3.0.2:
562 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
563 | hasBin: true
564 |
565 | run-parallel@1.2.0:
566 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
567 |
568 | semver@7.6.0:
569 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
570 | engines: {node: '>=10'}
571 | hasBin: true
572 |
573 | shebang-command@2.0.0:
574 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
575 | engines: {node: '>=8'}
576 |
577 | shebang-regex@3.0.0:
578 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
579 | engines: {node: '>=8'}
580 |
581 | slash@3.0.0:
582 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
583 | engines: {node: '>=8'}
584 |
585 | strip-ansi@6.0.1:
586 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
587 | engines: {node: '>=8'}
588 |
589 | strip-json-comments@3.1.1:
590 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
591 | engines: {node: '>=8'}
592 |
593 | supports-color@7.2.0:
594 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
595 | engines: {node: '>=8'}
596 |
597 | text-table@0.2.0:
598 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
599 |
600 | to-regex-range@5.0.1:
601 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
602 | engines: {node: '>=8.0'}
603 |
604 | ts-api-utils@1.2.1:
605 | resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==}
606 | engines: {node: '>=16'}
607 | peerDependencies:
608 | typescript: '>=4.2.0'
609 |
610 | type-check@0.4.0:
611 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
612 | engines: {node: '>= 0.8.0'}
613 |
614 | type-fest@0.20.2:
615 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
616 | engines: {node: '>=10'}
617 |
618 | typescript@5.9.2:
619 | resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
620 | engines: {node: '>=14.17'}
621 | hasBin: true
622 |
623 | undici-types@6.21.0:
624 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
625 |
626 | uri-js@4.4.1:
627 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
628 |
629 | which@2.0.2:
630 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
631 | engines: {node: '>= 8'}
632 | hasBin: true
633 |
634 | wrappy@1.0.2:
635 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
636 |
637 | ws@8.18.3:
638 | resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
639 | engines: {node: '>=10.0.0'}
640 | peerDependencies:
641 | bufferutil: ^4.0.1
642 | utf-8-validate: '>=5.0.2'
643 | peerDependenciesMeta:
644 | bufferutil:
645 | optional: true
646 | utf-8-validate:
647 | optional: true
648 |
649 | yallist@4.0.0:
650 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
651 |
652 | yocto-queue@0.1.0:
653 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
654 | engines: {node: '>=10'}
655 |
656 | yocto-queue@1.2.1:
657 | resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
658 | engines: {node: '>=12.20'}
659 |
660 | snapshots:
661 |
662 | '@aashutoshrathi/word-wrap@1.2.6': {}
663 |
664 | '@atcute/atproto@3.1.1':
665 | dependencies:
666 | '@atcute/lexicons': 1.1.0
667 |
668 | '@atcute/car@3.1.1':
669 | dependencies:
670 | '@atcute/cbor': 2.2.5
671 | '@atcute/cid': 2.2.3
672 | '@atcute/uint8array': 1.0.3
673 | '@atcute/varint': 1.0.2
674 | yocto-queue: 1.2.1
675 |
676 | '@atcute/cbor@2.2.5':
677 | dependencies:
678 | '@atcute/cid': 2.2.3
679 | '@atcute/multibase': 1.1.4
680 | '@atcute/uint8array': 1.0.3
681 |
682 | '@atcute/cid@2.2.3':
683 | dependencies:
684 | '@atcute/multibase': 1.1.4
685 | '@atcute/uint8array': 1.0.3
686 |
687 | '@atcute/lexicons@1.1.0':
688 | dependencies:
689 | esm-env: 1.2.2
690 |
691 | '@atcute/multibase@1.1.4':
692 | dependencies:
693 | '@atcute/uint8array': 1.0.3
694 |
695 | '@atcute/uint8array@1.0.3': {}
696 |
697 | '@atcute/varint@1.0.2': {}
698 |
699 | '@dprint/darwin-arm64@0.41.0':
700 | optional: true
701 |
702 | '@dprint/darwin-x64@0.41.0':
703 | optional: true
704 |
705 | '@dprint/linux-arm64-glibc@0.41.0':
706 | optional: true
707 |
708 | '@dprint/linux-x64-glibc@0.41.0':
709 | optional: true
710 |
711 | '@dprint/linux-x64-musl@0.41.0':
712 | optional: true
713 |
714 | '@dprint/win32-x64@0.41.0':
715 | optional: true
716 |
717 | '@eslint-community/eslint-utils@4.4.0(eslint@8.50.0)':
718 | dependencies:
719 | eslint: 8.50.0
720 | eslint-visitor-keys: 3.4.3
721 |
722 | '@eslint-community/regexpp@4.10.0': {}
723 |
724 | '@eslint/eslintrc@2.1.4':
725 | dependencies:
726 | ajv: 6.12.6
727 | debug: 4.3.4
728 | espree: 9.6.1
729 | globals: 13.24.0
730 | ignore: 5.3.1
731 | import-fresh: 3.3.0
732 | js-yaml: 4.1.0
733 | minimatch: 3.1.2
734 | strip-json-comments: 3.1.1
735 | transitivePeerDependencies:
736 | - supports-color
737 |
738 | '@eslint/js@8.50.0': {}
739 |
740 | '@humanwhocodes/config-array@0.11.14':
741 | dependencies:
742 | '@humanwhocodes/object-schema': 2.0.2
743 | debug: 4.3.4
744 | minimatch: 3.1.2
745 | transitivePeerDependencies:
746 | - supports-color
747 |
748 | '@humanwhocodes/module-importer@1.0.1': {}
749 |
750 | '@humanwhocodes/object-schema@2.0.2': {}
751 |
752 | '@nodelib/fs.scandir@2.1.5':
753 | dependencies:
754 | '@nodelib/fs.stat': 2.0.5
755 | run-parallel: 1.2.0
756 |
757 | '@nodelib/fs.stat@2.0.5': {}
758 |
759 | '@nodelib/fs.walk@1.2.8':
760 | dependencies:
761 | '@nodelib/fs.scandir': 2.1.5
762 | fastq: 1.17.1
763 |
764 | '@types/json-schema@7.0.15': {}
765 |
766 | '@types/node@22.17.0':
767 | dependencies:
768 | undici-types: 6.21.0
769 |
770 | '@types/semver@7.5.7': {}
771 |
772 | '@types/ws@8.5.10':
773 | dependencies:
774 | '@types/node': 22.17.0
775 |
776 | '@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4(eslint@8.50.0)(typescript@5.9.2))(eslint@8.50.0)(typescript@5.9.2)':
777 | dependencies:
778 | '@eslint-community/regexpp': 4.10.0
779 | '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.9.2)
780 | '@typescript-eslint/scope-manager': 6.7.4
781 | '@typescript-eslint/type-utils': 6.7.4(eslint@8.50.0)(typescript@5.9.2)
782 | '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.9.2)
783 | '@typescript-eslint/visitor-keys': 6.7.4
784 | debug: 4.3.4
785 | eslint: 8.50.0
786 | graphemer: 1.4.0
787 | ignore: 5.3.1
788 | natural-compare: 1.4.0
789 | semver: 7.6.0
790 | ts-api-utils: 1.2.1(typescript@5.9.2)
791 | optionalDependencies:
792 | typescript: 5.9.2
793 | transitivePeerDependencies:
794 | - supports-color
795 |
796 | '@typescript-eslint/parser@6.7.4(eslint@8.50.0)(typescript@5.9.2)':
797 | dependencies:
798 | '@typescript-eslint/scope-manager': 6.7.4
799 | '@typescript-eslint/types': 6.7.4
800 | '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.9.2)
801 | '@typescript-eslint/visitor-keys': 6.7.4
802 | debug: 4.3.4
803 | eslint: 8.50.0
804 | optionalDependencies:
805 | typescript: 5.9.2
806 | transitivePeerDependencies:
807 | - supports-color
808 |
809 | '@typescript-eslint/scope-manager@6.7.4':
810 | dependencies:
811 | '@typescript-eslint/types': 6.7.4
812 | '@typescript-eslint/visitor-keys': 6.7.4
813 |
814 | '@typescript-eslint/type-utils@6.7.4(eslint@8.50.0)(typescript@5.9.2)':
815 | dependencies:
816 | '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.9.2)
817 | '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.9.2)
818 | debug: 4.3.4
819 | eslint: 8.50.0
820 | ts-api-utils: 1.2.1(typescript@5.9.2)
821 | optionalDependencies:
822 | typescript: 5.9.2
823 | transitivePeerDependencies:
824 | - supports-color
825 |
826 | '@typescript-eslint/types@6.7.4': {}
827 |
828 | '@typescript-eslint/typescript-estree@6.7.4(typescript@5.9.2)':
829 | dependencies:
830 | '@typescript-eslint/types': 6.7.4
831 | '@typescript-eslint/visitor-keys': 6.7.4
832 | debug: 4.3.4
833 | globby: 11.1.0
834 | is-glob: 4.0.3
835 | semver: 7.6.0
836 | ts-api-utils: 1.2.1(typescript@5.9.2)
837 | optionalDependencies:
838 | typescript: 5.9.2
839 | transitivePeerDependencies:
840 | - supports-color
841 |
842 | '@typescript-eslint/utils@6.7.4(eslint@8.50.0)(typescript@5.9.2)':
843 | dependencies:
844 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
845 | '@types/json-schema': 7.0.15
846 | '@types/semver': 7.5.7
847 | '@typescript-eslint/scope-manager': 6.7.4
848 | '@typescript-eslint/types': 6.7.4
849 | '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.9.2)
850 | eslint: 8.50.0
851 | semver: 7.6.0
852 | transitivePeerDependencies:
853 | - supports-color
854 | - typescript
855 |
856 | '@typescript-eslint/visitor-keys@6.7.4':
857 | dependencies:
858 | '@typescript-eslint/types': 6.7.4
859 | eslint-visitor-keys: 3.4.3
860 |
861 | acorn-jsx@5.3.2(acorn@8.11.3):
862 | dependencies:
863 | acorn: 8.11.3
864 |
865 | acorn@8.11.3: {}
866 |
867 | ajv@6.12.6:
868 | dependencies:
869 | fast-deep-equal: 3.1.3
870 | fast-json-stable-stringify: 2.1.0
871 | json-schema-traverse: 0.4.1
872 | uri-js: 4.4.1
873 |
874 | ansi-regex@5.0.1: {}
875 |
876 | ansi-styles@4.3.0:
877 | dependencies:
878 | color-convert: 2.0.1
879 |
880 | argparse@2.0.1: {}
881 |
882 | array-union@2.1.0: {}
883 |
884 | balanced-match@1.0.2: {}
885 |
886 | brace-expansion@1.1.11:
887 | dependencies:
888 | balanced-match: 1.0.2
889 | concat-map: 0.0.1
890 |
891 | braces@3.0.2:
892 | dependencies:
893 | fill-range: 7.0.1
894 |
895 | callsites@3.1.0: {}
896 |
897 | chalk@4.1.2:
898 | dependencies:
899 | ansi-styles: 4.3.0
900 | supports-color: 7.2.0
901 |
902 | color-convert@2.0.1:
903 | dependencies:
904 | color-name: 1.1.4
905 |
906 | color-name@1.1.4: {}
907 |
908 | concat-map@0.0.1: {}
909 |
910 | cross-spawn@7.0.3:
911 | dependencies:
912 | path-key: 3.1.1
913 | shebang-command: 2.0.0
914 | which: 2.0.2
915 |
916 | debug@4.3.4:
917 | dependencies:
918 | ms: 2.1.2
919 |
920 | deep-is@0.1.4: {}
921 |
922 | dir-glob@3.0.1:
923 | dependencies:
924 | path-type: 4.0.0
925 |
926 | doctrine@3.0.0:
927 | dependencies:
928 | esutils: 2.0.3
929 |
930 | dprint@0.41.0:
931 | optionalDependencies:
932 | '@dprint/darwin-arm64': 0.41.0
933 | '@dprint/darwin-x64': 0.41.0
934 | '@dprint/linux-arm64-glibc': 0.41.0
935 | '@dprint/linux-x64-glibc': 0.41.0
936 | '@dprint/linux-x64-musl': 0.41.0
937 | '@dprint/win32-x64': 0.41.0
938 |
939 | escape-string-regexp@4.0.0: {}
940 |
941 | eslint-scope@7.2.2:
942 | dependencies:
943 | esrecurse: 4.3.0
944 | estraverse: 5.3.0
945 |
946 | eslint-visitor-keys@3.4.3: {}
947 |
948 | eslint@8.50.0:
949 | dependencies:
950 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0)
951 | '@eslint-community/regexpp': 4.10.0
952 | '@eslint/eslintrc': 2.1.4
953 | '@eslint/js': 8.50.0
954 | '@humanwhocodes/config-array': 0.11.14
955 | '@humanwhocodes/module-importer': 1.0.1
956 | '@nodelib/fs.walk': 1.2.8
957 | ajv: 6.12.6
958 | chalk: 4.1.2
959 | cross-spawn: 7.0.3
960 | debug: 4.3.4
961 | doctrine: 3.0.0
962 | escape-string-regexp: 4.0.0
963 | eslint-scope: 7.2.2
964 | eslint-visitor-keys: 3.4.3
965 | espree: 9.6.1
966 | esquery: 1.5.0
967 | esutils: 2.0.3
968 | fast-deep-equal: 3.1.3
969 | file-entry-cache: 6.0.1
970 | find-up: 5.0.0
971 | glob-parent: 6.0.2
972 | globals: 13.24.0
973 | graphemer: 1.4.0
974 | ignore: 5.3.1
975 | imurmurhash: 0.1.4
976 | is-glob: 4.0.3
977 | is-path-inside: 3.0.3
978 | js-yaml: 4.1.0
979 | json-stable-stringify-without-jsonify: 1.0.1
980 | levn: 0.4.1
981 | lodash.merge: 4.6.2
982 | minimatch: 3.1.2
983 | natural-compare: 1.4.0
984 | optionator: 0.9.3
985 | strip-ansi: 6.0.1
986 | text-table: 0.2.0
987 | transitivePeerDependencies:
988 | - supports-color
989 |
990 | esm-env@1.2.2: {}
991 |
992 | espree@9.6.1:
993 | dependencies:
994 | acorn: 8.11.3
995 | acorn-jsx: 5.3.2(acorn@8.11.3)
996 | eslint-visitor-keys: 3.4.3
997 |
998 | esquery@1.5.0:
999 | dependencies:
1000 | estraverse: 5.3.0
1001 |
1002 | esrecurse@4.3.0:
1003 | dependencies:
1004 | estraverse: 5.3.0
1005 |
1006 | estraverse@5.3.0: {}
1007 |
1008 | esutils@2.0.3: {}
1009 |
1010 | fast-deep-equal@3.1.3: {}
1011 |
1012 | fast-glob@3.3.2:
1013 | dependencies:
1014 | '@nodelib/fs.stat': 2.0.5
1015 | '@nodelib/fs.walk': 1.2.8
1016 | glob-parent: 5.1.2
1017 | merge2: 1.4.1
1018 | micromatch: 4.0.5
1019 |
1020 | fast-json-stable-stringify@2.1.0: {}
1021 |
1022 | fast-levenshtein@2.0.6: {}
1023 |
1024 | fastq@1.17.1:
1025 | dependencies:
1026 | reusify: 1.0.4
1027 |
1028 | file-entry-cache@6.0.1:
1029 | dependencies:
1030 | flat-cache: 3.2.0
1031 |
1032 | fill-range@7.0.1:
1033 | dependencies:
1034 | to-regex-range: 5.0.1
1035 |
1036 | find-up@5.0.0:
1037 | dependencies:
1038 | locate-path: 6.0.0
1039 | path-exists: 4.0.0
1040 |
1041 | flat-cache@3.2.0:
1042 | dependencies:
1043 | flatted: 3.2.9
1044 | keyv: 4.5.4
1045 | rimraf: 3.0.2
1046 |
1047 | flatted@3.2.9: {}
1048 |
1049 | fs.realpath@1.0.0: {}
1050 |
1051 | glob-parent@5.1.2:
1052 | dependencies:
1053 | is-glob: 4.0.3
1054 |
1055 | glob-parent@6.0.2:
1056 | dependencies:
1057 | is-glob: 4.0.3
1058 |
1059 | glob@7.2.3:
1060 | dependencies:
1061 | fs.realpath: 1.0.0
1062 | inflight: 1.0.6
1063 | inherits: 2.0.4
1064 | minimatch: 3.1.2
1065 | once: 1.4.0
1066 | path-is-absolute: 1.0.1
1067 |
1068 | globals@13.24.0:
1069 | dependencies:
1070 | type-fest: 0.20.2
1071 |
1072 | globby@11.1.0:
1073 | dependencies:
1074 | array-union: 2.1.0
1075 | dir-glob: 3.0.1
1076 | fast-glob: 3.3.2
1077 | ignore: 5.3.1
1078 | merge2: 1.4.1
1079 | slash: 3.0.0
1080 |
1081 | graphemer@1.4.0: {}
1082 |
1083 | has-flag@4.0.0: {}
1084 |
1085 | ignore@5.3.1: {}
1086 |
1087 | import-fresh@3.3.0:
1088 | dependencies:
1089 | parent-module: 1.0.1
1090 | resolve-from: 4.0.0
1091 |
1092 | imurmurhash@0.1.4: {}
1093 |
1094 | inflight@1.0.6:
1095 | dependencies:
1096 | once: 1.4.0
1097 | wrappy: 1.0.2
1098 |
1099 | inherits@2.0.4: {}
1100 |
1101 | is-extglob@2.1.1: {}
1102 |
1103 | is-glob@4.0.3:
1104 | dependencies:
1105 | is-extglob: 2.1.1
1106 |
1107 | is-number@7.0.0: {}
1108 |
1109 | is-path-inside@3.0.3: {}
1110 |
1111 | isexe@2.0.0: {}
1112 |
1113 | js-yaml@4.1.0:
1114 | dependencies:
1115 | argparse: 2.0.1
1116 |
1117 | json-buffer@3.0.1: {}
1118 |
1119 | json-schema-traverse@0.4.1: {}
1120 |
1121 | json-stable-stringify-without-jsonify@1.0.1: {}
1122 |
1123 | keyv@4.5.4:
1124 | dependencies:
1125 | json-buffer: 3.0.1
1126 |
1127 | levn@0.4.1:
1128 | dependencies:
1129 | prelude-ls: 1.2.1
1130 | type-check: 0.4.0
1131 |
1132 | locate-path@6.0.0:
1133 | dependencies:
1134 | p-locate: 5.0.0
1135 |
1136 | lodash.merge@4.6.2: {}
1137 |
1138 | lru-cache@6.0.0:
1139 | dependencies:
1140 | yallist: 4.0.0
1141 |
1142 | merge2@1.4.1: {}
1143 |
1144 | micromatch@4.0.5:
1145 | dependencies:
1146 | braces: 3.0.2
1147 | picomatch: 2.3.1
1148 |
1149 | minimatch@3.1.2:
1150 | dependencies:
1151 | brace-expansion: 1.1.11
1152 |
1153 | ms@2.1.2: {}
1154 |
1155 | multiformats@13.1.0: {}
1156 |
1157 | nanoevents@9.1.0: {}
1158 |
1159 | natural-compare@1.4.0: {}
1160 |
1161 | once@1.4.0:
1162 | dependencies:
1163 | wrappy: 1.0.2
1164 |
1165 | optionator@0.9.3:
1166 | dependencies:
1167 | '@aashutoshrathi/word-wrap': 1.2.6
1168 | deep-is: 0.1.4
1169 | fast-levenshtein: 2.0.6
1170 | levn: 0.4.1
1171 | prelude-ls: 1.2.1
1172 | type-check: 0.4.0
1173 |
1174 | p-limit@3.1.0:
1175 | dependencies:
1176 | yocto-queue: 0.1.0
1177 |
1178 | p-locate@5.0.0:
1179 | dependencies:
1180 | p-limit: 3.1.0
1181 |
1182 | parent-module@1.0.1:
1183 | dependencies:
1184 | callsites: 3.1.0
1185 |
1186 | path-exists@4.0.0: {}
1187 |
1188 | path-is-absolute@1.0.1: {}
1189 |
1190 | path-key@3.1.1: {}
1191 |
1192 | path-type@4.0.0: {}
1193 |
1194 | picomatch@2.3.1: {}
1195 |
1196 | prelude-ls@1.2.1: {}
1197 |
1198 | punycode@2.3.1: {}
1199 |
1200 | queue-microtask@1.2.3: {}
1201 |
1202 | resolve-from@4.0.0: {}
1203 |
1204 | reusify@1.0.4: {}
1205 |
1206 | rimraf@3.0.2:
1207 | dependencies:
1208 | glob: 7.2.3
1209 |
1210 | run-parallel@1.2.0:
1211 | dependencies:
1212 | queue-microtask: 1.2.3
1213 |
1214 | semver@7.6.0:
1215 | dependencies:
1216 | lru-cache: 6.0.0
1217 |
1218 | shebang-command@2.0.0:
1219 | dependencies:
1220 | shebang-regex: 3.0.0
1221 |
1222 | shebang-regex@3.0.0: {}
1223 |
1224 | slash@3.0.0: {}
1225 |
1226 | strip-ansi@6.0.1:
1227 | dependencies:
1228 | ansi-regex: 5.0.1
1229 |
1230 | strip-json-comments@3.1.1: {}
1231 |
1232 | supports-color@7.2.0:
1233 | dependencies:
1234 | has-flag: 4.0.0
1235 |
1236 | text-table@0.2.0: {}
1237 |
1238 | to-regex-range@5.0.1:
1239 | dependencies:
1240 | is-number: 7.0.0
1241 |
1242 | ts-api-utils@1.2.1(typescript@5.9.2):
1243 | dependencies:
1244 | typescript: 5.9.2
1245 |
1246 | type-check@0.4.0:
1247 | dependencies:
1248 | prelude-ls: 1.2.1
1249 |
1250 | type-fest@0.20.2: {}
1251 |
1252 | typescript@5.9.2: {}
1253 |
1254 | undici-types@6.21.0: {}
1255 |
1256 | uri-js@4.4.1:
1257 | dependencies:
1258 | punycode: 2.3.1
1259 |
1260 | which@2.0.2:
1261 | dependencies:
1262 | isexe: 2.0.0
1263 |
1264 | wrappy@1.0.2: {}
1265 |
1266 | ws@8.18.3: {}
1267 |
1268 | yallist@4.0.0: {}
1269 |
1270 | yocto-queue@0.1.0: {}
1271 |
1272 | yocto-queue@1.2.1: {}
1273 |
--------------------------------------------------------------------------------