@peerbit/any-store
Advanced tools
Comparing version 1.0.11 to 1.0.12
@@ -6,2 +6,3 @@ import { deserialize, serialize } from "@dao-xyz/borsh"; | ||
import { waitForResolved } from "@peerbit/time"; | ||
const directory = location.hash.split("#")?.[1]; | ||
const encodeName = (name) => { | ||
@@ -49,3 +50,3 @@ // since "/" and perhaps other characters might not be allowed we do encode | ||
let isOpen = false; | ||
const createMemory = (root, level = []) => { | ||
const createMemory = (root, levels = []) => { | ||
let m = root; | ||
@@ -56,4 +57,10 @@ // 'open' | 'closed' is just a virtual thing since OPFS is always open as soone as we get the FileSystemDirectoryHandle | ||
await ready; | ||
isOpen = true; | ||
m = m || (await navigator.storage.getDirectory()); | ||
if (!m) { | ||
m = await navigator.storage.getDirectory(); | ||
if (directory) { | ||
m = await m.getDirectoryHandle(encodeName(directory), { | ||
create: true | ||
}); | ||
} | ||
} | ||
}; | ||
@@ -123,3 +130,3 @@ return { | ||
}); | ||
const sublevel = [...level, encodedName]; | ||
const sublevel = [...levels, name]; | ||
const subMemory = createMemory(fileHandle, sublevel); | ||
@@ -153,14 +160,12 @@ this._levels.set(memory.levelKey(sublevel), subMemory); | ||
if (message instanceof memory.REQ_Open) { | ||
if (isOpen) { | ||
throw new Error("Already open"); | ||
if (!isOpen) { | ||
await this._rootStore.open(); | ||
isOpen = true; | ||
} | ||
await this._rootStore.open(); | ||
for (const level of message.level) { | ||
this._rootStore = await this._rootStore.sublevel(level); | ||
} | ||
await this.respond(message, new memory.RESP_Open({ level: message.level }), postMessageFn); | ||
return; | ||
} | ||
const m = message.level.length === 0 | ||
? this._rootStore | ||
: this._levels.get(memory.levelKey(message.level.map((x) => encodeName(x)))); | ||
: this._levels.get(memory.levelKey(message.level)); | ||
if (!m) { | ||
@@ -167,0 +172,0 @@ throw new Error("Recieved memory message for an undefined level"); |
import { AnyStore, MaybePromise } from "./interface.js"; | ||
import * as memory from "./opfs-worker-messages.js"; | ||
export declare class OPFSStore implements AnyStore { | ||
readonly directory?: string | undefined; | ||
worker: Worker; | ||
level: string[]; | ||
levelMap: Map<string, AnyStore>; | ||
@@ -10,3 +10,3 @@ root: AnyStore; | ||
private _createMemory; | ||
constructor(level?: string[]); | ||
constructor(directory?: string | undefined); | ||
status(): MaybePromise<"opening" | "open" | "closing" | "closed">; | ||
@@ -13,0 +13,0 @@ close(): Promise<void>; |
@@ -31,8 +31,9 @@ import * as memory from "./opfs-worker-messages.js"; | ||
} | ||
const workerURL = new URL("./opfs-worker.js", import.meta.url); | ||
/* new Worker(workerURL, { type: 'module' }) */ | ||
const createWorker = () => new Worker(workerURL, { type: "module" }); | ||
const createWorker = (directory) => { | ||
const workerURL = new URL("./opfs-worker.js#" + directory, import.meta.url); | ||
return new Worker(workerURL, { type: "module" }); | ||
}; | ||
export class OPFSStore { | ||
directory; | ||
worker; | ||
level; | ||
levelMap; | ||
@@ -42,4 +43,4 @@ root; | ||
_createMemory; | ||
constructor(level = []) { | ||
this.level = level; | ||
constructor(directory) { | ||
this.directory = directory; | ||
this.levelMap = new Map(); | ||
@@ -94,4 +95,4 @@ this._createMemory = (level = []) => { | ||
if (!this.worker) { | ||
this.root = this._createMemory(this.level); | ||
this.worker = createWorker(); | ||
this.worker = createWorker(this.directory); | ||
this.root = this._createMemory([]); | ||
this.worker.addEventListener("message", async (ev) => { | ||
@@ -98,0 +99,0 @@ const message = deserialize(ev.data, memory.MemoryMessage); |
import { MemoryStore } from "./memory.js"; | ||
import { OPFSStore } from "./opfs.js"; | ||
export const createStore = (directory) => { | ||
return directory ? new OPFSStore([directory]) : new MemoryStore(); | ||
return directory ? new OPFSStore(directory) : new MemoryStore(); | ||
}; | ||
@@ -6,0 +6,0 @@ /* export const estimate = (directory: string): Promise<{ quota?: number, usage?: number }> => { |
{ | ||
"name": "@peerbit/any-store", | ||
"version": "1.0.11", | ||
"version": "1.0.12", | ||
"description": "Level with lazy transactions", | ||
@@ -51,3 +51,3 @@ "type": "module", | ||
], | ||
"gitHead": "b9b6843a83f12c6b23e78efef9cd323267881adb" | ||
"gitHead": "954ec9009b2cd65baf4558009504b83eb17badf6" | ||
} |
@@ -8,2 +8,4 @@ import { deserialize, serialize } from "@dao-xyz/borsh"; | ||
const directory = location.hash.split("#")?.[1]; | ||
const encodeName = (name: string): string => { | ||
@@ -66,3 +68,3 @@ // since "/" and perhaps other characters might not be allowed we do encode | ||
root?: FileSystemDirectoryHandle, | ||
level: string[] = [] | ||
levels: string[] = [] | ||
): AnyStore => { | ||
@@ -75,6 +77,11 @@ let m: FileSystemDirectoryHandle = root!; | ||
await ready; | ||
isOpen = true; | ||
m = m || (await navigator.storage.getDirectory()); | ||
if (!m) { | ||
m = await navigator.storage.getDirectory(); | ||
if (directory) { | ||
m = await m.getDirectoryHandle(encodeName(directory), { | ||
create: true | ||
}); | ||
} | ||
} | ||
}; | ||
return { | ||
@@ -147,3 +154,3 @@ clear: async () => { | ||
}); | ||
const sublevel = [...level, encodedName]; | ||
const sublevel = [...levels, name]; | ||
const subMemory = createMemory(fileHandle, sublevel); | ||
@@ -180,9 +187,6 @@ this._levels.set(memory.levelKey(sublevel), subMemory); | ||
if (message instanceof memory.REQ_Open) { | ||
if (isOpen) { | ||
throw new Error("Already open"); | ||
if (!isOpen) { | ||
await this._rootStore.open(); | ||
isOpen = true; | ||
} | ||
await this._rootStore.open(); | ||
for (const level of message.level) { | ||
this._rootStore = await this._rootStore.sublevel(level); | ||
} | ||
await this.respond( | ||
@@ -193,2 +197,3 @@ message, | ||
); | ||
return; | ||
} | ||
@@ -199,5 +204,3 @@ | ||
? this._rootStore | ||
: this._levels.get( | ||
memory.levelKey(message.level.map((x) => encodeName(x))) | ||
); | ||
: this._levels.get(memory.levelKey(message.level)); | ||
if (!m) { | ||
@@ -204,0 +207,0 @@ throw new Error("Recieved memory message for an undefined level"); |
@@ -53,9 +53,9 @@ import { AnyStore, MaybePromise } from "./interface.js"; | ||
const workerURL = new URL("./opfs-worker.js", import.meta.url); | ||
const createWorker = (directory) => { | ||
const workerURL = new URL("./opfs-worker.js#" + directory, import.meta.url); | ||
return new Worker(workerURL, { type: "module" }); | ||
}; | ||
/* new Worker(workerURL, { type: 'module' }) */ | ||
const createWorker = () => new Worker(workerURL, { type: "module" }); | ||
export class OPFSStore implements AnyStore { | ||
worker: Worker; | ||
level: string[]; | ||
levelMap: Map<string, AnyStore>; | ||
@@ -70,4 +70,3 @@ root: AnyStore; | ||
private _createMemory: (level: string[]) => AnyStore; | ||
constructor(level: string[] = []) { | ||
this.level = level; | ||
constructor(readonly directory?: string) { | ||
this.levelMap = new Map(); | ||
@@ -105,5 +104,3 @@ this._createMemory = (level: string[] = []): AnyStore => { | ||
sublevel: async (name) => { | ||
await this.request<memory.RESP_Sublevel>( | ||
new memory.REQ_Sublevel({ level, name }) | ||
); | ||
await this.request(new memory.REQ_Sublevel({ level, name })); | ||
const newLevels = [...level, name]; | ||
@@ -146,4 +143,4 @@ const sublevel = this._createMemory(newLevels); | ||
if (!this.worker) { | ||
this.root = this._createMemory(this.level); | ||
this.worker = createWorker(); | ||
this.worker = createWorker(this.directory); | ||
this.root = this._createMemory([]); | ||
this.worker.addEventListener("message", async (ev) => { | ||
@@ -150,0 +147,0 @@ const message = deserialize(ev.data, memory.MemoryMessage); |
@@ -5,3 +5,3 @@ import { MemoryStore } from "./memory.js"; | ||
export const createStore = (directory?: string) => { | ||
return directory ? new OPFSStore([directory]) : new MemoryStore(); | ||
return directory ? new OPFSStore(directory) : new MemoryStore(); | ||
}; | ||
@@ -8,0 +8,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
102694
1989