diff --git a/packages/app/src/Cache/EventCacheWorker.ts b/packages/app/src/Cache/EventCacheWorker.ts index dce3cc3e..535f8f38 100644 --- a/packages/app/src/Cache/EventCacheWorker.ts +++ b/packages/app/src/Cache/EventCacheWorker.ts @@ -1,7 +1,7 @@ import { CachedTable, CacheEvents } from "@snort/shared"; import { NostrEvent } from "@snort/system"; import { WorkerRelayInterface } from "@snort/worker-relay"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; export class EventCacheWorker extends EventEmitter implements CachedTable { #relay: WorkerRelayInterface; diff --git a/packages/app/src/Cache/ProfileWorkerCache.ts b/packages/app/src/Cache/ProfileWorkerCache.ts index 43ddf69a..e3109956 100644 --- a/packages/app/src/Cache/ProfileWorkerCache.ts +++ b/packages/app/src/Cache/ProfileWorkerCache.ts @@ -2,7 +2,7 @@ import { CachedTable, CacheEvents, removeUndefined, unixNowMs, unwrap } from "@s import { CachedMetadata, mapEventToProfile, NostrEvent } from "@snort/system"; import { WorkerRelayInterface } from "@snort/worker-relay"; import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; export class ProfileCacheRelayWorker extends EventEmitter implements CachedTable { #relay: WorkerRelayInterface; diff --git a/packages/app/src/Cache/UserFollowsWorker.ts b/packages/app/src/Cache/UserFollowsWorker.ts index 4b8483d9..59c1425c 100644 --- a/packages/app/src/Cache/UserFollowsWorker.ts +++ b/packages/app/src/Cache/UserFollowsWorker.ts @@ -2,7 +2,7 @@ import { CachedTable, CacheEvents, removeUndefined, unixNowMs, unwrap } from "@s import { EventKind, NostrEvent, UsersFollows } from "@snort/system"; import { WorkerRelayInterface } from "@snort/worker-relay"; import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; export class UserFollowsWorker extends EventEmitter implements CachedTable { #relay: WorkerRelayInterface; diff --git a/packages/app/vite.config.ts b/packages/app/vite.config.ts index ec24bf53..765bc176 100644 --- a/packages/app/vite.config.ts +++ b/packages/app/vite.config.ts @@ -62,11 +62,12 @@ export default defineConfig({ CONFIG: JSON.stringify(appConfig), global: {}, // needed for custom-event lib }, - test: { - globals: true, - environment: "jsdom", - }, worker: { format: "es", + rollupOptions: { + output: { + format: "module" + } + } }, }); diff --git a/packages/shared/src/external-store.ts b/packages/shared/src/external-store.ts index 00f0ea72..2fbd2358 100644 --- a/packages/shared/src/external-store.ts +++ b/packages/shared/src/external-store.ts @@ -1,4 +1,4 @@ -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; interface ExternalStoreEvents { change: () => void; diff --git a/packages/shared/src/feed-cache.ts b/packages/shared/src/feed-cache.ts index 2b84d103..870a607a 100644 --- a/packages/shared/src/feed-cache.ts +++ b/packages/shared/src/feed-cache.ts @@ -1,7 +1,7 @@ import debug from "debug"; import { removeUndefined, unixNowMs } from "./utils"; import { DexieTableLike } from "./dexie-like"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; type HookFn = () => void; diff --git a/packages/system/src/connection-pool.ts b/packages/system/src/connection-pool.ts index b4ccbf39..d1a34318 100644 --- a/packages/system/src/connection-pool.ts +++ b/packages/system/src/connection-pool.ts @@ -1,6 +1,6 @@ import { removeUndefined, sanitizeRelayUrl, unwrap } from "@snort/shared"; import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { Connection, RelaySettings } from "./connection"; import { NostrEvent, OkResponse, TaggedNostrEvent } from "./nostr"; diff --git a/packages/system/src/connection.ts b/packages/system/src/connection.ts index 4f50d1a6..19190e52 100644 --- a/packages/system/src/connection.ts +++ b/packages/system/src/connection.ts @@ -2,7 +2,7 @@ import { v4 as uuid } from "uuid"; import debug from "debug"; import WebSocket from "isomorphic-ws"; import { unixNowMs, dedupe } from "@snort/shared"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { DefaultConnectTimeout } from "./const"; import { NostrEvent, OkResponse, ReqCommand, ReqFilter, TaggedNostrEvent, u256 } from "./nostr"; diff --git a/packages/system/src/impl/nip46.ts b/packages/system/src/impl/nip46.ts index e854da0d..9fa020f5 100644 --- a/packages/system/src/impl/nip46.ts +++ b/packages/system/src/impl/nip46.ts @@ -8,7 +8,7 @@ import { EventSigner, PrivateKeySigner } from "../signer"; import { NostrEvent } from "../nostr"; import { EventBuilder } from "../event-builder"; import EventKind from "../event-kind"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; const NIP46_KIND = 24_133; diff --git a/packages/system/src/index.ts b/packages/system/src/index.ts index 8a37ee9f..d3d58b77 100644 --- a/packages/system/src/index.ts +++ b/packages/system/src/index.ts @@ -8,7 +8,7 @@ import { Optimizer } from "./query-optimizer"; import { base64 } from "@scure/base"; import { CachedTable } from "@snort/shared"; import { ConnectionPool } from "./connection-pool"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { QueryEvents } from "./query"; import { CacheRelay } from "./cache-relay"; import { RequestRouter } from "./request-router"; diff --git a/packages/system/src/negentropy/negentropy-flow.ts b/packages/system/src/negentropy/negentropy-flow.ts index 396ddf4b..0b37fcf8 100644 --- a/packages/system/src/negentropy/negentropy-flow.ts +++ b/packages/system/src/negentropy/negentropy-flow.ts @@ -4,7 +4,7 @@ import { ReqFilter, TaggedNostrEvent } from "../nostr"; import { Negentropy } from "./negentropy"; import { NegentropyStorageVector } from "./vector-storage"; import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; export interface NegentropyFlowEvents { /** diff --git a/packages/system/src/nostr-system.ts b/packages/system/src/nostr-system.ts index 46408948..0f1e8bba 100644 --- a/packages/system/src/nostr-system.ts +++ b/packages/system/src/nostr-system.ts @@ -1,5 +1,5 @@ import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { CachedTable, isHex, unixNowMs } from "@snort/shared"; import { NostrEvent, TaggedNostrEvent, OkResponse } from "./nostr"; diff --git a/packages/system/src/note-collection.ts b/packages/system/src/note-collection.ts index 93f1235b..625164d1 100644 --- a/packages/system/src/note-collection.ts +++ b/packages/system/src/note-collection.ts @@ -1,7 +1,7 @@ import { SortedMap, dedupe } from "@snort/shared"; import { EventExt, EventType, TaggedNostrEvent } from "."; import { findTag } from "./utils"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; export const EmptySnapshot: NoteStoreSnapshotData = []; export type NoteStoreSnapshotData = Array; diff --git a/packages/system/src/query-manager.ts b/packages/system/src/query-manager.ts index 52ce2649..74e80e53 100644 --- a/packages/system/src/query-manager.ts +++ b/packages/system/src/query-manager.ts @@ -1,5 +1,5 @@ import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { BuiltRawReqFilter, RequestBuilder, RequestStrategy, SystemInterface, TaggedNostrEvent } from "."; import { Query, TraceReport } from "./query"; import { FilterCacheLayer, IdsFilterCacheLayer } from "./filter-cache-layer"; diff --git a/packages/system/src/query.ts b/packages/system/src/query.ts index ddecc493..f8c278a5 100644 --- a/packages/system/src/query.ts +++ b/packages/system/src/query.ts @@ -1,6 +1,6 @@ import { v4 as uuid } from "uuid"; import debug from "debug"; -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { unixNowMs, unwrap } from "@snort/shared"; import { Connection, ReqFilter, Nips, TaggedNostrEvent, SystemInterface, ParsedFragment } from "."; diff --git a/packages/worker-relay/package.json b/packages/worker-relay/package.json index bafa8151..43040db7 100644 --- a/packages/worker-relay/package.json +++ b/packages/worker-relay/package.json @@ -1,15 +1,16 @@ { "name": "@snort/worker-relay", - "version": "1.0.3", + "version": "1.0.5", "description": "A nostr relay in a service worker", "main": "dist/index.js", "types": "dist/index.d.ts", + "type": "module", "module": "src/index.ts", "repository": "https://git.v0l.io/Kieran/snort", "author": "Kieran", "license": "MIT", "scripts": { - "build": "rm -rf dist && tsc" + "build": "rm -rf dist && tsc && esbuild src/worker.ts --bundle --minify --sourcemap --outdir=dist/esm --format=esm --out-extension:.js=.mjs" }, "files": [ "src", @@ -17,13 +18,13 @@ ], "dependencies": { "@sqlite.org/sqlite-wasm": "^3.45.1-build1", - "debug": "^4.3.4", "eventemitter3": "^5.0.1", "uuid": "^9.0.1" }, "devDependencies": { "@types/debug": "^4.1.12", "@types/uuid": "^9.0.7", + "esbuild": "^0.20.1", "typescript": "^5.2.2" } } diff --git a/packages/worker-relay/src/debug.ts b/packages/worker-relay/src/debug.ts new file mode 100644 index 00000000..7c817b48 --- /dev/null +++ b/packages/worker-relay/src/debug.ts @@ -0,0 +1,10 @@ + +let debug = false; +export function debugLog(scope: string, msg: string, ...args: Array) { + if (!debug) return; + console.log(scope, msg, ...args); +} + +export function setLogging(v: boolean) { + debug = v; +} \ No newline at end of file diff --git a/packages/worker-relay/src/forYouFeed.ts b/packages/worker-relay/src/forYouFeed.ts index 7d782fe8..ffbb5795 100644 --- a/packages/worker-relay/src/forYouFeed.ts +++ b/packages/worker-relay/src/forYouFeed.ts @@ -1,5 +1,4 @@ -import debug from "debug"; - +import { debugLog } from "./debug"; import { RelayHandler, NostrEvent } from "./types"; // import { parseZap } from "../../system/src/zaps"; @@ -8,7 +7,7 @@ const parseZap = (_zap: NostrEvent) => { return { event: null } as { event: null | NostrEvent }; }; -const log = debug("getForYouFeed"); +const log = (msg: string, ...args: Array) => debugLog("getForYouFeed", msg, ...args); export async function getForYouFeed(relay: RelayHandler, pubkey: string): Promise { console.time("For You feed generation time"); diff --git a/packages/worker-relay/src/index.ts b/packages/worker-relay/src/index.ts index 8b951ec7..df6f30d2 100644 --- a/packages/worker-relay/src/index.ts +++ b/packages/worker-relay/src/index.ts @@ -1 +1 @@ -export * from "./interface"; +export * from "./interface"; \ No newline at end of file diff --git a/packages/worker-relay/src/interface.ts b/packages/worker-relay/src/interface.ts index a57b27bb..cdd3b1bb 100644 --- a/packages/worker-relay/src/interface.ts +++ b/packages/worker-relay/src/interface.ts @@ -10,13 +10,32 @@ import { v4 as uuid } from "uuid"; export class WorkerRelayInterface { #worker: Worker; + #sqliteDir?: string; #commandQueue: Map) => void> = new Map(); // Command timeout timeout: number = 30_000; - constructor(path: string) { - this.#worker = new Worker(path, { type: "module" }); + /** + * Interface wrapper for worker relay + * @param path Path to worker script or Worker script object + * @param sqlite3Dir Directory to search for sqlite3 depends + */ + constructor(path?: string | Worker, sqlite3Dir?: string) { + if (path instanceof Worker) { + this.#worker = path; + } else { + const sqliteBase = new URL("@sqlite.org/sqlite-wasm?url", import.meta.url); + this.#sqliteDir = sqlite3Dir ?? sqliteBase.href; + const scriptPath = path ? new URL(path) : new URL("@snort/worker-relay/dist/esm/worker.mjs", import.meta.url); + this.#worker = new Worker(scriptPath, { type: "module" }) + }; + this.#worker.onerror = e => { + console.error(e.message, e); + } + this.#worker.onmessageerror = e => { + console.error(e); + } this.#worker.onmessage = e => { const cmd = e.data as WorkerMessage; if (cmd.cmd === "reply") { @@ -27,8 +46,8 @@ export class WorkerRelayInterface { }; } - async init(path: string) { - return await this.#workerRpc("init", path); + async init(databasePath: string) { + return await this.#workerRpc, boolean>("init", [databasePath, this.#sqliteDir ?? ""]); } async event(ev: NostrEvent) { @@ -63,6 +82,10 @@ export class WorkerRelayInterface { return this.#workerRpc<[string, EventMetadata], void>("setEventMetadata", [id, meta]); } + async debug(v: string) { + return await this.#workerRpc("debug", v); + } + async #workerRpc(cmd: WorkerMessageCommand, args?: T) { const id = uuid(); const msg = { @@ -70,8 +93,8 @@ export class WorkerRelayInterface { cmd, args, } as WorkerMessage; - this.#worker.postMessage(msg); return await new Promise((resolve, reject) => { + this.#worker.postMessage(msg); const t = setTimeout(() => { this.#commandQueue.delete(id); reject(new Error("Timeout")); diff --git a/packages/worker-relay/src/memory-relay.ts b/packages/worker-relay/src/memory-relay.ts index ea1d8de7..437b9cb5 100644 --- a/packages/worker-relay/src/memory-relay.ts +++ b/packages/worker-relay/src/memory-relay.ts @@ -1,15 +1,15 @@ -import EventEmitter from "eventemitter3"; +import { EventEmitter } from "eventemitter3"; import { NostrEvent, RelayHandler, RelayHandlerEvents, ReqFilter, eventMatchesFilter, EventMetadata } from "./types"; -import debug from "debug"; +import { debugLog } from "./debug"; /** * A very simple dumb fallback relay using a flat table */ export class InMemoryRelay extends EventEmitter implements RelayHandler { #events: Map = new Map(); - #log = debug("InMemoryRelay"); + #log = (msg: string, ...args: Array) => debugLog("InMemoryRelay", msg, ...args); - init(path: string): Promise { + init() { this.#log("Using in-memory relay"); return Promise.resolve(); } diff --git a/packages/worker-relay/src/migrations.ts b/packages/worker-relay/src/migrations.ts index f5222567..debf0caa 100644 --- a/packages/worker-relay/src/migrations.ts +++ b/packages/worker-relay/src/migrations.ts @@ -1,8 +1,8 @@ import { NostrEvent } from "./types"; import { SqliteRelay } from "./sqlite-relay"; -import debug from "debug"; +import { debugLog } from "./debug"; -const log = debug("SqliteRelay:migrations"); +const log = (msg: string, ...args: Array) => debugLog("SqliteRelay:migrations", msg, ...args); const migrations = [ { version: 1, script: migrate_v1 }, diff --git a/packages/worker-relay/src/sqlite-relay.ts b/packages/worker-relay/src/sqlite-relay.ts index 0ef7d268..89c3b127 100644 --- a/packages/worker-relay/src/sqlite-relay.ts +++ b/packages/worker-relay/src/sqlite-relay.ts @@ -1,21 +1,27 @@ import sqlite3InitModule, { Database, Sqlite3Static } from "@sqlite.org/sqlite-wasm"; import { EventEmitter } from "eventemitter3"; import { EventMetadata, NostrEvent, RelayHandler, RelayHandlerEvents, ReqFilter, unixNowMs } from "./types"; -import debug from "debug"; import migrate from "./migrations"; +import { debugLog } from "./debug"; export class SqliteRelay extends EventEmitter implements RelayHandler { #sqlite?: Sqlite3Static; - #log = debug("SqliteRelay"); + #log = (msg: string, ...args: Array) => debugLog("SqliteRelay", msg, ...args); db?: Database; #seenInserts = new Set(); /** * Initialize the SQLite driver */ - async init(path: string) { + async init(path: string, sqliteWasmPath?: string) { if (this.#sqlite) return; - this.#sqlite = await sqlite3InitModule(); + this.#sqlite = await sqlite3InitModule({ + locateFile(path, prefix) { + return new URL(`sqlite-wasm/jswasm/${path}`, sqliteWasmPath).href; + }, + print: msg => this.#log(msg), + printErr: msg => this.#log(msg) + }); this.#log(`Got SQLite version: ${this.#sqlite.version.libVersion}`); await this.#open(path); this.db && migrate(this); @@ -28,22 +34,13 @@ export class SqliteRelay extends EventEmitter implements Rel if (!this.#sqlite) throw new Error("Must call init first"); if (this.db) return; - if ("opfs" in this.#sqlite) { - try { - this.db = new this.#sqlite.oo1.OpfsDb(path, "cw"); - this.#log(`Opened ${this.db.filename}`); - this.db.exec( - `PRAGMA cache_size=${ - 32 * 1024 - }; PRAGMA page_size=8192; PRAGMA journal_mode=MEMORY; PRAGMA temp_store=MEMORY;`, - ); - } catch (e) { - // wipe db - console.error(e); - } - } else { - throw new Error("OPFS not supported!"); - } + const pool = await this.#sqlite.installOpfsSAHPoolVfs({}); + this.db = new pool.OpfsSAHPoolDb(path); + this.#log(`Opened ${this.db.filename}`); + /*this.db.exec( + `PRAGMA cache_size=${32 * 1024 + }; PRAGMA page_size=8192; PRAGMA journal_mode=MEMORY; PRAGMA temp_store=MEMORY;`, + );*/ } close() { diff --git a/packages/worker-relay/src/types.ts b/packages/worker-relay/src/types.ts index f024a3ec..d53526ab 100644 --- a/packages/worker-relay/src/types.ts +++ b/packages/worker-relay/src/types.ts @@ -11,7 +11,8 @@ export type WorkerMessageCommand = | "dumpDb" | "emit-event" | "forYouFeed" - | "setEventMetadata"; + | "setEventMetadata" + | "debug"; export interface WorkerMessage { id: string; @@ -57,7 +58,7 @@ export interface OkResponse { } export interface RelayHandler extends EventEmitter { - init(path: string): Promise; + init(path: string, path2Wasm?: string): Promise; close(): void; event(ev: NostrEvent): boolean; eventBatch(evs: Array): boolean; diff --git a/packages/worker-relay/src/worker.ts b/packages/worker-relay/src/worker.ts index 91c03b9f..a0e02713 100644 --- a/packages/worker-relay/src/worker.ts +++ b/packages/worker-relay/src/worker.ts @@ -1,8 +1,9 @@ /// -import { InMemoryRelay } from "./memory-relay"; -import { WorkQueueItem, barrierQueue, processWorkQueue } from "./queue"; import { SqliteRelay } from "./sqlite-relay"; +import { InMemoryRelay } from "./memory-relay"; +import { debugLog, setLogging } from "./debug"; +import { WorkQueueItem, barrierQueue, processWorkQueue } from "./queue"; import { NostrEvent, RelayHandler, ReqCommand, ReqFilter, WorkerMessage, unixNowMs, EventMetadata } from "./types"; import { getForYouFeed } from "./forYouFeed"; @@ -40,10 +41,14 @@ async function insertBatch() { } setTimeout(() => insertBatch(), 100); } -setTimeout(() => insertBatch(), 100); const cmdQueue: Array = []; -processWorkQueue(cmdQueue, 50); +try { + setTimeout(() => insertBatch(), 100); + processWorkQueue(cmdQueue, 50); +} catch (e) { + console.error(e); +} async function tryOpfs() { try { @@ -57,12 +62,17 @@ async function tryOpfs() { globalThis.onclose = () => { relay?.close(); -}; +} globalThis.onmessage = async ev => { const msg = ev.data as WorkerMessage; try { switch (msg.cmd) { + case "debug": { + setLogging(true); + reply(msg.id, true); + break; + } case "init": { await barrierQueue(cmdQueue, async () => { if ("WebAssembly" in globalThis && (await tryOpfs())) { @@ -70,7 +80,9 @@ globalThis.onmessage = async ev => { } else { relay = new InMemoryRelay(); } - await relay.init(msg.args as string); + const [dbPath, wasmPath] = msg.args as Array; + debugLog("StartInit", dbPath, wasmPath); + await relay.init(dbPath, wasmPath); reply(msg.id, true); }); break; @@ -81,7 +93,10 @@ globalThis.onmessage = async ev => { break; } case "close": { - reply(msg.id, true); + await barrierQueue(cmdQueue, async () => { + const res = relay!.close(); + reply(msg.id, res); + }); break; } case "req": { @@ -151,6 +166,12 @@ globalThis.onmessage = async ev => { } } } catch (e) { - reply(msg.id, { error: JSON.stringify(e) }); + if (e instanceof Error) { + reply(msg.id, { error: e.message }); + } else if (typeof e === "string") { + reply(msg.id, { error: e }); + } else { + reply(msg.id, "Unknown error") + } } -}; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 00c29d04..fa9ecc10 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1857,6 +1857,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/aix-ppc64@npm:0.20.1" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/android-arm64@npm:0.19.5" @@ -1864,6 +1871,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/android-arm64@npm:0.20.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/android-arm@npm:0.19.5" @@ -1871,6 +1885,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/android-arm@npm:0.20.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/android-x64@npm:0.19.5" @@ -1878,6 +1899,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/android-x64@npm:0.20.1" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/darwin-arm64@npm:0.19.5" @@ -1885,6 +1913,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/darwin-arm64@npm:0.20.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/darwin-x64@npm:0.19.5" @@ -1892,6 +1927,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/darwin-x64@npm:0.20.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/freebsd-arm64@npm:0.19.5" @@ -1899,6 +1941,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/freebsd-arm64@npm:0.20.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/freebsd-x64@npm:0.19.5" @@ -1906,6 +1955,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/freebsd-x64@npm:0.20.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-arm64@npm:0.19.5" @@ -1913,6 +1969,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-arm64@npm:0.20.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-arm@npm:0.19.5" @@ -1920,6 +1983,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-arm@npm:0.20.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-ia32@npm:0.19.5" @@ -1927,6 +1997,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-ia32@npm:0.20.1" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-loong64@npm:0.19.5" @@ -1934,6 +2011,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-loong64@npm:0.20.1" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-mips64el@npm:0.19.5" @@ -1941,6 +2025,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-mips64el@npm:0.20.1" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-ppc64@npm:0.19.5" @@ -1948,6 +2039,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-ppc64@npm:0.20.1" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-riscv64@npm:0.19.5" @@ -1955,6 +2053,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-riscv64@npm:0.20.1" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-s390x@npm:0.19.5" @@ -1962,6 +2067,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-s390x@npm:0.20.1" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/linux-x64@npm:0.19.5" @@ -1969,6 +2081,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/linux-x64@npm:0.20.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/netbsd-x64@npm:0.19.5" @@ -1976,6 +2095,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/netbsd-x64@npm:0.20.1" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/openbsd-x64@npm:0.19.5" @@ -1983,6 +2109,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/openbsd-x64@npm:0.20.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/sunos-x64@npm:0.19.5" @@ -1990,6 +2123,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/sunos-x64@npm:0.20.1" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/win32-arm64@npm:0.19.5" @@ -1997,6 +2137,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/win32-arm64@npm:0.20.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/win32-ia32@npm:0.19.5" @@ -2004,6 +2151,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/win32-ia32@npm:0.20.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.19.5": version: 0.19.5 resolution: "@esbuild/win32-x64@npm:0.19.5" @@ -2011,6 +2165,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.20.1": + version: 0.20.1 + resolution: "@esbuild/win32-x64@npm:0.20.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -3117,7 +3278,7 @@ __metadata: "@sqlite.org/sqlite-wasm": ^3.45.1-build1 "@types/debug": ^4.1.12 "@types/uuid": ^9.0.7 - debug: ^4.3.4 + esbuild: ^0.20.1 eventemitter3: ^5.0.1 typescript: ^5.2.2 uuid: ^9.0.1 @@ -5913,6 +6074,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.20.1": + version: 0.20.1 + resolution: "esbuild@npm:0.20.1" + dependencies: + "@esbuild/aix-ppc64": 0.20.1 + "@esbuild/android-arm": 0.20.1 + "@esbuild/android-arm64": 0.20.1 + "@esbuild/android-x64": 0.20.1 + "@esbuild/darwin-arm64": 0.20.1 + "@esbuild/darwin-x64": 0.20.1 + "@esbuild/freebsd-arm64": 0.20.1 + "@esbuild/freebsd-x64": 0.20.1 + "@esbuild/linux-arm": 0.20.1 + "@esbuild/linux-arm64": 0.20.1 + "@esbuild/linux-ia32": 0.20.1 + "@esbuild/linux-loong64": 0.20.1 + "@esbuild/linux-mips64el": 0.20.1 + "@esbuild/linux-ppc64": 0.20.1 + "@esbuild/linux-riscv64": 0.20.1 + "@esbuild/linux-s390x": 0.20.1 + "@esbuild/linux-x64": 0.20.1 + "@esbuild/netbsd-x64": 0.20.1 + "@esbuild/openbsd-x64": 0.20.1 + "@esbuild/sunos-x64": 0.20.1 + "@esbuild/win32-arm64": 0.20.1 + "@esbuild/win32-ia32": 0.20.1 + "@esbuild/win32-x64": 0.20.1 + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: af8b3c79e48d303501cac8551bf1ac5ebf5d86eebf2d1eb9d2a7018f4c5506bb120ed2454a013e3387e499de780a916bbffc9edd4ef132be403cd39771ace045 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1"