refactor: fix worker-relay for external users
This commit is contained in:
parent
a0aa86a0b3
commit
226618ac77
@ -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<CacheEvents> implements CachedTable<NostrEvent> {
|
||||
#relay: WorkerRelayInterface;
|
||||
|
@ -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<CacheEvents> implements CachedTable<CachedMetadata> {
|
||||
#relay: WorkerRelayInterface;
|
||||
|
@ -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<CacheEvents> implements CachedTable<UsersFollows> {
|
||||
#relay: WorkerRelayInterface;
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
import EventEmitter from "eventemitter3";
|
||||
import { EventEmitter } from "eventemitter3";
|
||||
|
||||
interface ExternalStoreEvents {
|
||||
change: () => void;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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";
|
||||
|
@ -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 {
|
||||
/**
|
||||
|
@ -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";
|
||||
|
@ -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<TaggedNostrEvent>;
|
||||
|
@ -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";
|
||||
|
@ -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 ".";
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
10
packages/worker-relay/src/debug.ts
Normal file
10
packages/worker-relay/src/debug.ts
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
let debug = false;
|
||||
export function debugLog(scope: string, msg: string, ...args: Array<any>) {
|
||||
if (!debug) return;
|
||||
console.log(scope, msg, ...args);
|
||||
}
|
||||
|
||||
export function setLogging(v: boolean) {
|
||||
debug = v;
|
||||
}
|
@ -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<any>) => debugLog("getForYouFeed", msg, ...args);
|
||||
|
||||
export async function getForYouFeed(relay: RelayHandler, pubkey: string): Promise<NostrEvent[]> {
|
||||
console.time("For You feed generation time");
|
||||
|
@ -1 +1 @@
|
||||
export * from "./interface";
|
||||
export * from "./interface";
|
@ -10,13 +10,32 @@ import { v4 as uuid } from "uuid";
|
||||
|
||||
export class WorkerRelayInterface {
|
||||
#worker: Worker;
|
||||
#sqliteDir?: string;
|
||||
#commandQueue: Map<string, (v: unknown, ports: ReadonlyArray<MessagePort>) => 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<any>;
|
||||
if (cmd.cmd === "reply") {
|
||||
@ -27,8 +46,8 @@ export class WorkerRelayInterface {
|
||||
};
|
||||
}
|
||||
|
||||
async init(path: string) {
|
||||
return await this.#workerRpc<string, boolean>("init", path);
|
||||
async init(databasePath: string) {
|
||||
return await this.#workerRpc<Array<string>, 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<string, boolean>("debug", v);
|
||||
}
|
||||
|
||||
async #workerRpc<T, R>(cmd: WorkerMessageCommand, args?: T) {
|
||||
const id = uuid();
|
||||
const msg = {
|
||||
@ -70,8 +93,8 @@ export class WorkerRelayInterface {
|
||||
cmd,
|
||||
args,
|
||||
} as WorkerMessage<T>;
|
||||
this.#worker.postMessage(msg);
|
||||
return await new Promise<R>((resolve, reject) => {
|
||||
this.#worker.postMessage(msg);
|
||||
const t = setTimeout(() => {
|
||||
this.#commandQueue.delete(id);
|
||||
reject(new Error("Timeout"));
|
||||
|
@ -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<RelayHandlerEvents> implements RelayHandler {
|
||||
#events: Map<string, NostrEvent> = new Map();
|
||||
#log = debug("InMemoryRelay");
|
||||
#log = (msg: string, ...args: Array<any>) => debugLog("InMemoryRelay", msg, ...args);
|
||||
|
||||
init(path: string): Promise<void> {
|
||||
init() {
|
||||
this.#log("Using in-memory relay");
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
@ -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<any>) => debugLog("SqliteRelay:migrations", msg, ...args);
|
||||
|
||||
const migrations = [
|
||||
{ version: 1, script: migrate_v1 },
|
||||
|
@ -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<RelayHandlerEvents> implements RelayHandler {
|
||||
#sqlite?: Sqlite3Static;
|
||||
#log = debug("SqliteRelay");
|
||||
#log = (msg: string, ...args: Array<any>) => debugLog("SqliteRelay", msg, ...args);
|
||||
db?: Database;
|
||||
#seenInserts = new Set<string>();
|
||||
|
||||
/**
|
||||
* 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<RelayHandlerEvents> 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() {
|
||||
|
@ -11,7 +11,8 @@ export type WorkerMessageCommand =
|
||||
| "dumpDb"
|
||||
| "emit-event"
|
||||
| "forYouFeed"
|
||||
| "setEventMetadata";
|
||||
| "setEventMetadata"
|
||||
| "debug";
|
||||
|
||||
export interface WorkerMessage<T> {
|
||||
id: string;
|
||||
@ -57,7 +58,7 @@ export interface OkResponse {
|
||||
}
|
||||
|
||||
export interface RelayHandler extends EventEmitter<RelayHandlerEvents> {
|
||||
init(path: string): Promise<void>;
|
||||
init(path: string, path2Wasm?: string): Promise<void>;
|
||||
close(): void;
|
||||
event(ev: NostrEvent): boolean;
|
||||
eventBatch(evs: Array<NostrEvent>): boolean;
|
||||
|
@ -1,8 +1,9 @@
|
||||
/// <reference lib="webworker" />
|
||||
|
||||
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<WorkQueueItem> = [];
|
||||
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<any>;
|
||||
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<string>;
|
||||
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")
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
243
yarn.lock
243
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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user