@powerhousedao/connect 2.5.0-dev.1 → 2.5.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.env +3 -0
- package/dist/assets/{app-BK9yyR0p.js → app-DHGgyt5K.js} +43 -27
- package/dist/assets/app-DHGgyt5K.js.map +1 -0
- package/dist/assets/{app-loader-vNh4XNhS.js → app-loader-Ucmr53VY.js} +142 -136
- package/dist/assets/app-loader-Ucmr53VY.js.map +1 -0
- package/dist/assets/{browser-DLEVfenP.js → browser-CKAdkOdU.js} +7 -6
- package/dist/assets/browser-CKAdkOdU.js.map +1 -0
- package/dist/assets/{ccip-d4Fvfnck.js → ccip-DH23JEmG.js} +4 -4
- package/dist/assets/{ccip-d4Fvfnck.js.map → ccip-DH23JEmG.js.map} +1 -1
- package/dist/assets/{content-Dg_mJiwf.js → content-EGmRQK_E.js} +9 -10
- package/dist/assets/{content-Dg_mJiwf.js.map → content-EGmRQK_E.js.map} +1 -1
- package/dist/assets/{index-DCdqF6af.js → index-BLnk2_Y0.js} +4 -4
- package/dist/assets/{index-DCdqF6af.js.map → index-BLnk2_Y0.js.map} +1 -1
- package/dist/assets/{index-CFjpc0j4.js → index-D2HzaeAU.js} +6 -5
- package/dist/assets/{index-CFjpc0j4.js.map → index-D2HzaeAU.js.map} +1 -1
- package/dist/assets/{index-BZlYEVaI.js → index-D5AaEvVM.js} +4 -4
- package/dist/assets/index-D5AaEvVM.js.map +1 -0
- package/dist/assets/{index-CCz-r5yA.js → index-DU6fFIOc.js} +5 -5
- package/dist/assets/{index-CCz-r5yA.js.map → index-DU6fFIOc.js.map} +1 -1
- package/dist/assets/{main.2BUYHNUF.js → main.CIo1oAHU.js} +2 -2
- package/dist/assets/{main.2BUYHNUF.js.map → main.CIo1oAHU.js.map} +1 -1
- package/dist/assets/nodefs-CjLGMEKf.js +20 -0
- package/dist/assets/nodefs-CjLGMEKf.js.map +1 -0
- package/dist/assets/opfs-ahp-B5o8adrg.js +296 -0
- package/dist/assets/opfs-ahp-B5o8adrg.js.map +1 -0
- package/dist/assets/pglite-worker-CyG3W9Rr.js +7498 -0
- package/dist/assets/pglite-worker-CyG3W9Rr.js.map +1 -0
- package/dist/assets/postgres-CkP7QCDB.data +0 -0
- package/dist/assets/postgres-CyuUVpXN.wasm +0 -0
- package/dist/assets/reactor-analytics-BGUerk08.js +80 -0
- package/dist/assets/reactor-analytics-BGUerk08.js.map +1 -0
- package/dist/assets/{router-Cer_dPvF.js → router-Dcntoskm.js} +6 -6
- package/dist/assets/{router-Cer_dPvF.js.map → router-Dcntoskm.js.map} +1 -1
- package/dist/index.html +3 -1
- package/dist/swEnv.js +2 -0
- package/dist/vite-envs.sh +19 -1
- package/package.json +10 -9
- package/dist/assets/app-BK9yyR0p.js.map +0 -1
- package/dist/assets/app-loader-vNh4XNhS.js.map +0 -1
- package/dist/assets/browser-DLEVfenP.js.map +0 -1
- package/dist/assets/index-BZlYEVaI.js.map +0 -1
- package/dist/assets/reactor-analytics-CE2M9qWD.js +0 -42
- package/dist/assets/reactor-analytics-CE2M9qWD.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { a8 as AnalyticsPath, a7 as DateTime } from "./app-
|
|
5
|
-
import {
|
|
6
|
-
import "./main.
|
|
4
|
+
import { a8 as AnalyticsPath, a7 as DateTime } from "./app-DHGgyt5K.js";
|
|
5
|
+
import { ah as childLogger } from "./app-loader-Ucmr53VY.js";
|
|
6
|
+
import "./main.CIo1oAHU.js";
|
|
7
7
|
import "react/jsx-runtime";
|
|
8
8
|
import "react";
|
|
9
9
|
import "react-dom";
|
|
@@ -205,4 +205,4 @@ const processorFactory = (module) => (driveId) => {
|
|
|
205
205
|
export {
|
|
206
206
|
processorFactory
|
|
207
207
|
};
|
|
208
|
-
//# sourceMappingURL=index-
|
|
208
|
+
//# sourceMappingURL=index-D5AaEvVM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-D5AaEvVM.js","sources":["../../../../node_modules/.pnpm/@powerhousedao+diff-analyzer@0.0.0-dev.4_576eecc0548041bf0a11aee036647aec/node_modules/@powerhousedao/diff-analyzer/dist/lib/document-diff.js","../../../../node_modules/.pnpm/@powerhousedao+diff-analyzer@0.0.0-dev.4_576eecc0548041bf0a11aee036647aec/node_modules/@powerhousedao/diff-analyzer/dist/processors/diff-analytics/index.js","../../../../node_modules/.pnpm/@powerhousedao+diff-analyzer@0.0.0-dev.4_576eecc0548041bf0a11aee036647aec/node_modules/@powerhousedao/diff-analyzer/dist/processors/index.js"],"sourcesContent":["/**\n * Calculates the difference between two document states\n */\nexport function diffDocumentStates(doc1, doc2) {\n const changes = [];\n // Compare global state\n const globalChanges = diffStateObjects(doc1, doc2, \"state.global\", \"global\");\n changes.push(...globalChanges);\n // Count changes by type\n const additions = changes.filter((c) => c.type === \"add\").length;\n const removals = changes.filter((c) => c.type === \"remove\").length;\n // Group changes by scope\n const changesByScope = {\n global: changes.filter((c) => c.scope === \"global\"),\n };\n return {\n totalChanges: changes.length,\n additions,\n removals,\n changesByScope,\n changes,\n };\n}\n/**\n * Recursively compares two state objects and returns a list of changes\n */\nfunction diffStateObjects(obj1, obj2, path, scope) {\n const changes = [];\n // Handle primitive values\n if (typeof obj1 !== \"object\" ||\n typeof obj2 !== \"object\" ||\n obj1 === null ||\n obj2 === null) {\n if (obj1 !== obj2) {\n // Special handling for strings to diff character by character\n if (typeof obj1 === \"string\" && typeof obj2 === \"string\") {\n return diffStateStrings(obj1, obj2, path, scope);\n }\n else {\n // For non-string primitives, treat a change as a remove + add\n changes.push({\n type: \"remove\",\n path,\n oldValue: obj1,\n scope,\n });\n changes.push({\n type: \"add\",\n path,\n newValue: obj2,\n scope,\n });\n }\n }\n return changes;\n }\n // Handle arrays\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n // Compare array lengths\n if (obj1.length !== obj2.length) {\n // For arrays with different lengths, treat as a remove + add\n changes.push({\n type: \"remove\",\n path,\n oldValue: obj1,\n scope,\n });\n changes.push({\n type: \"add\",\n path,\n newValue: obj2,\n scope,\n });\n return changes;\n }\n // Compare array elements\n for (let i = 0; i < obj1.length; i++) {\n const elementChanges = diffStateObjects(obj1[i], obj2[i], `${path}[${i}]`, scope);\n changes.push(...elementChanges);\n }\n return changes;\n }\n // Handle objects\n const obj1Record = obj1;\n const obj2Record = obj2;\n const obj1Keys = Object.keys(obj1Record);\n const obj2Keys = Object.keys(obj2Record);\n // First, check for removed keys\n for (const key of obj1Keys) {\n if (!(key in obj2Record)) {\n // Key was removed\n changes.push({\n type: \"remove\",\n path: `${path}.${key}`,\n oldValue: obj1Record[key],\n scope,\n });\n }\n }\n // Then, check for added keys and modified values\n for (const key of obj2Keys) {\n if (!(key in obj1Record)) {\n // Key was added\n changes.push({\n type: \"add\",\n path: `${path}.${key}`,\n newValue: obj2Record[key],\n scope,\n });\n }\n else if (obj1Record[key] !== obj2Record[key]) {\n // For object changes, recursively diff the objects\n const nestedChanges = diffStateObjects(obj1Record[key], obj2Record[key], `${path}.${key}`, scope);\n changes.push(...nestedChanges);\n }\n }\n return changes;\n}\n/**\n * Compares two strings character by character and returns a list of changes\n */\nfunction diffStateStrings(str1, str2, path, scope) {\n const changes = [];\n const maxLen = Math.max(str1.length, str2.length);\n for (let i = 0; i < maxLen; i++) {\n if (i >= str1.length) {\n // Addition of new character\n changes.push({\n type: \"add\",\n path: `${path}[${i}]`,\n newValue: str2[i],\n scope,\n });\n }\n else if (i >= str2.length) {\n // Removal of character\n changes.push({\n type: \"remove\",\n path: `${path}[${i}]`,\n oldValue: str1[i],\n scope,\n });\n }\n else if (str1[i] !== str2[i]) {\n // Character changed\n changes.push({\n type: \"remove\",\n path: `${path}[${i}]`,\n oldValue: str1[i],\n scope,\n });\n changes.push({\n type: \"add\",\n path: `${path}[${i}]`,\n newValue: str2[i],\n scope,\n });\n }\n }\n return changes;\n}\n/**\n * Generates analytics data from a state diff summary\n */\nexport function generateStateAnalyticsData(diff) {\n return {\n totalChanges: diff.totalChanges,\n changesByType: {\n add: diff.additions,\n remove: diff.removals,\n },\n changesByScope: {\n global: diff.changesByScope.global.length,\n },\n changePaths: diff.changes.map((c) => c.path),\n };\n}\n","import { AnalyticsPath, } from \"@powerhousedao/analytics-engine-core\";\nimport { DateTime } from \"luxon\";\nimport { diffDocumentStates } from \"../../lib/document-diff.js\";\nimport { childLogger } from \"document-drive\";\nexport class DiffAnalyticsProcessor {\n analyticsStore;\n logger;\n constructor(analyticsStore, logger = childLogger([\"processor\", \"diff-analytics\"])) {\n this.analyticsStore = analyticsStore;\n this.logger = logger;\n //\n }\n async onStrands(strands) {\n if (strands.length === 0) {\n return;\n }\n const inputs = [];\n for (const strand of strands) {\n if (strand.operations.length === 0) {\n continue;\n }\n const firstOp = strand.operations[0];\n const source = AnalyticsPath.fromString(`ph/${strand.driveId}/${strand.documentId}/${strand.branch}/${strand.scope}`);\n if (firstOp.index === 0) {\n await this.clearSource(source);\n }\n for (const operation of strand.operations) {\n const diff = diffDocumentStates(operation.previousState, operation.state);\n for (const change of diff.changes) {\n inputs.push(this.generateInput(strand.documentId, strand.branch, strand.scope, operation.index, change.type, 1, source, operation.timestamp, change.path));\n }\n }\n }\n if (inputs.length) {\n await this.analyticsStore.addSeriesValues(inputs);\n }\n }\n async onDisconnect() { }\n async clearSource(source) {\n try {\n await this.analyticsStore.clearSeriesBySource(source, true);\n }\n catch (e) {\n this.logger.error(\"Failed to clear source\", e);\n }\n }\n generateInput(documentId, branch, scope, revision, type, value, source, timestamp, path) {\n const dimensions = {};\n const changePath = path.split(\"[\")[0].replaceAll(\".\", \"/\");\n dimensions.changes = AnalyticsPath.fromString(`changes/${type}`);\n dimensions.document = AnalyticsPath.fromString(`document/${documentId}/${branch}/${scope}/${revision}`);\n dimensions.path = AnalyticsPath.fromString(`path/${changePath}`);\n return {\n dimensions,\n metric: \"Count\",\n start: DateTime.fromISO(timestamp),\n source,\n value,\n };\n }\n}\n","/**\n * This is a scaffold file meant for customization.\n * Delete the file and run the code generator again to have it reset\n */\nimport { DiffAnalyticsProcessor } from \"./diff-analytics/index.js\";\nexport const processorFactory = (module) => (driveId) => {\n return [\n {\n processor: new DiffAnalyticsProcessor(module.analyticsStore),\n filter: {\n branch: [\"main\"],\n documentId: [\"*\"],\n scope: [\"*\"],\n documentType: [\"*\"],\n },\n },\n ];\n};\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -7,10 +7,10 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
7
7
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
8
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
9
9
|
var _DB_NAME, _STORE_NAME, _KEY, _db, _BrowserKeyStorage_instances, useStore_fn, _store, _namespace, _BaseStorage_instances, buildKey_fn, _baseUrl, _store2, _connectId, _eventEmitter, _Renown_instances, updateUser_fn, getCredential_fn;
|
|
10
|
-
import { Z as RENOWN_URL, _ as getEnsInfo } from "./app-
|
|
11
|
-
import { $, a5, a4, a1, a6, a0, a2, a3 } from "./app-
|
|
12
|
-
import {
|
|
13
|
-
import "./main.
|
|
10
|
+
import { Z as RENOWN_URL, _ as getEnsInfo } from "./app-DHGgyt5K.js";
|
|
11
|
+
import { $, a5, a4, a1, a6, a0, a2, a3 } from "./app-DHGgyt5K.js";
|
|
12
|
+
import { ag as connectConfig, $ as logger } from "./app-loader-Ucmr53VY.js";
|
|
13
|
+
import "./main.CIo1oAHU.js";
|
|
14
14
|
import "react/jsx-runtime";
|
|
15
15
|
import "react";
|
|
16
16
|
import "react-dom";
|
|
@@ -253,4 +253,4 @@ export {
|
|
|
253
253
|
a2 as removeExternalPackage,
|
|
254
254
|
a3 as subscribeExternalPackages
|
|
255
255
|
};
|
|
256
|
-
//# sourceMappingURL=index-
|
|
256
|
+
//# sourceMappingURL=index-DU6fFIOc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CCz-r5yA.js","sources":["../../src/services/crypto/browser.ts","../../src/services/renown/utils.ts","../../src/services/storage/index.ts","../../src/services/storage/browser.ts","../../src/services/renown/browser.ts","../../src/services/renown/index.ts"],"sourcesContent":["import { type JsonWebKeyPairStorage, type JwkKeyPair } from './index.js';\n\nexport class BrowserKeyStorage implements JsonWebKeyPairStorage {\n static #DB_NAME = 'browserKeyDB';\n static #STORE_NAME = 'keyPairs';\n static #KEY = 'keyPair';\n\n #db: Promise<IDBDatabase>;\n constructor() {\n this.#db = new Promise((resolve, reject) => {\n const req = indexedDB.open(BrowserKeyStorage.#DB_NAME, 1);\n req.onupgradeneeded = () => {\n req.result.createObjectStore(BrowserKeyStorage.#STORE_NAME);\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error as Error);\n });\n }\n\n async #useStore(mode: IDBTransactionMode = 'readwrite') {\n const database = await this.#db;\n const transaction = database.transaction(\n BrowserKeyStorage.#STORE_NAME,\n mode,\n );\n const store = transaction.objectStore(BrowserKeyStorage.#STORE_NAME);\n return store;\n }\n\n async saveKeyPair(keyPair: JwkKeyPair) {\n const store = await this.#useStore();\n const request = store.put(keyPair, BrowserKeyStorage.#KEY);\n return new Promise<void>((resolve, reject) => {\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n reject(new Error('Failed to save key pair'));\n };\n });\n }\n\n async loadKeyPair(): Promise<JwkKeyPair | undefined> {\n const store = await this.#useStore('readonly');\n const request = store.getAll();\n\n return new Promise<JwkKeyPair | undefined>((resolve, reject) => {\n request.onsuccess = () => {\n const keyPair = request.result.length\n ? (request.result[0] as JwkKeyPair)\n : undefined;\n resolve(keyPair);\n };\n request.onerror = () => {\n reject(new Error('Failed to load key pair'));\n };\n });\n }\n}\n","export type PKHDid = {\n networkId: string;\n chainId: number;\n address: `0x${string}`;\n};\n\nexport function parsePkhDid(did: string): PKHDid {\n const parts = did.split(':');\n if (!did.startsWith('did:pkh:') || parts.length !== 5) {\n throw new Error('Invalid pkh did');\n }\n const [, , networkId, chainIdStr, address] = parts;\n\n if (!address.startsWith('0x')) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n const chainId = Number(chainIdStr);\n if (isNaN(chainId)) {\n throw new Error(`Invalid chain id: ${chainIdStr}`);\n }\n\n return {\n chainId,\n networkId,\n address: address as PKHDid['address'],\n };\n}\n","export interface IStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n get<Key extends keyof T>(key: Key): T[Key];\n set<Key extends keyof T>(key: Key, value?: T[Key]): void;\n delete<Key extends keyof T>(key: Key): void;\n}\n\nexport class BaseStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> implements IStorage<T>\n{\n #store: IStorage<T>;\n #namespace: string;\n\n protected constructor(store: IStorage<T>, namespace: string) {\n this.#store = store;\n this.#namespace = namespace;\n }\n\n #buildKey<Key extends keyof T>(key: Key): Key {\n return `${this.#namespace}:${key.toString()}` as Key;\n }\n\n get<Key extends keyof T>(key: Key): T[Key] {\n return this.#store.get(this.#buildKey(key));\n }\n set<Key extends keyof T>(key: Key, value?: T[Key] | undefined): void {\n return this.#store.set(this.#buildKey(key), value);\n }\n delete<Key extends keyof T>(key: Key): void {\n return this.#store.delete(this.#buildKey(key));\n }\n}\n","import connectConfig from '#connect-config';\nimport { BaseStorage, type IStorage } from './index.js';\n\nconst store: IStorage = {\n get: function <Key extends string>(key: Key): unknown {\n const value = localStorage.getItem(key);\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n },\n set: function <Key extends string>(key: Key, value?: unknown): void {\n return value\n ? localStorage.setItem(key, JSON.stringify(value))\n : localStorage.removeItem(key);\n },\n delete: function <Key extends string>(key: Key): void {\n return localStorage.removeItem(key);\n },\n};\n\nexport class BrowserStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends BaseStorage<T> {\n constructor(namespace: string) {\n super(\n store as IStorage<T>,\n `${connectConfig.routerBasename}:${namespace}`,\n );\n }\n}\n","import { Renown } from './index.js';\nimport { BrowserStorage } from '../storage/browser.js';\n\nexport function initRenownBrowser(connectId: string) {\n return new Renown(new BrowserStorage('renown'), connectId);\n}\n","import { logger } from 'document-drive';\nimport type { IStorage } from '../storage/index.js';\nimport { getEnsInfo } from '../viem.js';\nimport { RENOWN_URL } from './constants.js';\nimport {\n type PowerhouseVerifiableCredential,\n type RenownStorage,\n type User,\n} from './types.js';\nimport { parsePkhDid } from './utils.js';\n\nexport * from './browser.js';\nexport * from './constants.js';\nexport * from './types.js';\nexport type {\n PowerhouseVerifiableCredential,\n Unsubscribe,\n User,\n} from './types.js';\nexport * from './utils.js';\n\nexport class Renown {\n #baseUrl: string;\n #store: RenownStorage;\n #connectId: string;\n #eventEmitter = new EventTarget();\n\n constructor(store: IStorage, connectId: string, baseUrl = RENOWN_URL) {\n this.#store = store as RenownStorage;\n this.#connectId = connectId;\n this.#baseUrl = baseUrl;\n\n if (this.user) {\n this.login(this.user.did).catch(() => void 0);\n }\n }\n\n get user() {\n return this.#store.get('user');\n }\n\n #updateUser(user: User | undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n user ? this.#store.set('user', user) : this.#store.delete('user');\n this.#eventEmitter.dispatchEvent(\n new CustomEvent('user', { detail: user }),\n );\n }\n\n set connectId(connectId: string) {\n this.#connectId = connectId;\n const user = this.user;\n\n this.#updateUser(undefined);\n\n // tries to login with new connectId\n if (user) {\n this.login(user.did).catch(e => {\n console.log('User no longer authenticated:', e);\n });\n }\n }\n\n async login(did: string): Promise<User> {\n try {\n const result = parsePkhDid(did);\n\n const credential = await this.#getCredential(\n result.address,\n result.chainId,\n this.#connectId,\n );\n if (!credential) {\n this.#updateUser(undefined);\n throw new Error('Credential not found');\n }\n const user: User = {\n ...result,\n did,\n credential,\n };\n\n getEnsInfo(user.address, user.chainId)\n .then(ens => {\n if (\n this.user?.address === user.address &&\n this.user.chainId === user.chainId\n ) {\n this.#updateUser({ ...this.user, ens });\n }\n })\n .catch(logger.error);\n\n this.#updateUser(user);\n return user;\n } catch (error) {\n logger.error(error);\n this.#updateUser(undefined);\n throw error;\n }\n }\n\n logout() {\n this.#updateUser(undefined);\n }\n\n on(event: 'user', listener: (user: User) => void) {\n const eventListener = ((e: CustomEvent<User>) => {\n listener(e.detail);\n }) as EventListener;\n\n this.#eventEmitter.addEventListener(event, eventListener);\n return () => {\n this.#eventEmitter.removeEventListener(event, eventListener);\n };\n }\n\n async #getCredential(\n address: string,\n chainId: number,\n connectId: string,\n ): Promise<PowerhouseVerifiableCredential | undefined> {\n if (!this.#baseUrl) {\n throw new Error('RENOWN_URL is not set');\n }\n const url = new URL(\n `/api/auth/credential?address=${encodeURIComponent(address)}&chainId=${encodeURIComponent(chainId)}&connectId=${encodeURIComponent(connectId)}`,\n this.#baseUrl,\n );\n const response = await fetch(url, {\n method: 'GET',\n });\n if (response.ok) {\n const result = (await response.json()) as {\n credential: PowerhouseVerifiableCredential;\n };\n return result.credential;\n } else {\n throw new Error('Failed to get credential');\n }\n }\n}\n"],"names":["store","_store"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-DU6fFIOc.js","sources":["../../src/services/crypto/browser.ts","../../src/services/renown/utils.ts","../../src/services/storage/index.ts","../../src/services/storage/browser.ts","../../src/services/renown/browser.ts","../../src/services/renown/index.ts"],"sourcesContent":["import { type JsonWebKeyPairStorage, type JwkKeyPair } from './index.js';\n\nexport class BrowserKeyStorage implements JsonWebKeyPairStorage {\n static #DB_NAME = 'browserKeyDB';\n static #STORE_NAME = 'keyPairs';\n static #KEY = 'keyPair';\n\n #db: Promise<IDBDatabase>;\n constructor() {\n this.#db = new Promise((resolve, reject) => {\n const req = indexedDB.open(BrowserKeyStorage.#DB_NAME, 1);\n req.onupgradeneeded = () => {\n req.result.createObjectStore(BrowserKeyStorage.#STORE_NAME);\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error as Error);\n });\n }\n\n async #useStore(mode: IDBTransactionMode = 'readwrite') {\n const database = await this.#db;\n const transaction = database.transaction(\n BrowserKeyStorage.#STORE_NAME,\n mode,\n );\n const store = transaction.objectStore(BrowserKeyStorage.#STORE_NAME);\n return store;\n }\n\n async saveKeyPair(keyPair: JwkKeyPair) {\n const store = await this.#useStore();\n const request = store.put(keyPair, BrowserKeyStorage.#KEY);\n return new Promise<void>((resolve, reject) => {\n request.onsuccess = () => {\n resolve();\n };\n request.onerror = () => {\n reject(new Error('Failed to save key pair'));\n };\n });\n }\n\n async loadKeyPair(): Promise<JwkKeyPair | undefined> {\n const store = await this.#useStore('readonly');\n const request = store.getAll();\n\n return new Promise<JwkKeyPair | undefined>((resolve, reject) => {\n request.onsuccess = () => {\n const keyPair = request.result.length\n ? (request.result[0] as JwkKeyPair)\n : undefined;\n resolve(keyPair);\n };\n request.onerror = () => {\n reject(new Error('Failed to load key pair'));\n };\n });\n }\n}\n","export type PKHDid = {\n networkId: string;\n chainId: number;\n address: `0x${string}`;\n};\n\nexport function parsePkhDid(did: string): PKHDid {\n const parts = did.split(':');\n if (!did.startsWith('did:pkh:') || parts.length !== 5) {\n throw new Error('Invalid pkh did');\n }\n const [, , networkId, chainIdStr, address] = parts;\n\n if (!address.startsWith('0x')) {\n throw new Error(`Invalid address: ${address}`);\n }\n\n const chainId = Number(chainIdStr);\n if (isNaN(chainId)) {\n throw new Error(`Invalid chain id: ${chainIdStr}`);\n }\n\n return {\n chainId,\n networkId,\n address: address as PKHDid['address'],\n };\n}\n","export interface IStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n get<Key extends keyof T>(key: Key): T[Key];\n set<Key extends keyof T>(key: Key, value?: T[Key]): void;\n delete<Key extends keyof T>(key: Key): void;\n}\n\nexport class BaseStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> implements IStorage<T>\n{\n #store: IStorage<T>;\n #namespace: string;\n\n protected constructor(store: IStorage<T>, namespace: string) {\n this.#store = store;\n this.#namespace = namespace;\n }\n\n #buildKey<Key extends keyof T>(key: Key): Key {\n return `${this.#namespace}:${key.toString()}` as Key;\n }\n\n get<Key extends keyof T>(key: Key): T[Key] {\n return this.#store.get(this.#buildKey(key));\n }\n set<Key extends keyof T>(key: Key, value?: T[Key] | undefined): void {\n return this.#store.set(this.#buildKey(key), value);\n }\n delete<Key extends keyof T>(key: Key): void {\n return this.#store.delete(this.#buildKey(key));\n }\n}\n","import connectConfig from '#connect-config';\nimport { BaseStorage, type IStorage } from './index.js';\n\nconst store: IStorage = {\n get: function <Key extends string>(key: Key): unknown {\n const value = localStorage.getItem(key);\n if (value) {\n return JSON.parse(value);\n }\n return undefined;\n },\n set: function <Key extends string>(key: Key, value?: unknown): void {\n return value\n ? localStorage.setItem(key, JSON.stringify(value))\n : localStorage.removeItem(key);\n },\n delete: function <Key extends string>(key: Key): void {\n return localStorage.removeItem(key);\n },\n};\n\nexport class BrowserStorage<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends BaseStorage<T> {\n constructor(namespace: string) {\n super(\n store as IStorage<T>,\n `${connectConfig.routerBasename}:${namespace}`,\n );\n }\n}\n","import { Renown } from './index.js';\nimport { BrowserStorage } from '../storage/browser.js';\n\nexport function initRenownBrowser(connectId: string) {\n return new Renown(new BrowserStorage('renown'), connectId);\n}\n","import { logger } from 'document-drive';\nimport type { IStorage } from '../storage/index.js';\nimport { getEnsInfo } from '../viem.js';\nimport { RENOWN_URL } from './constants.js';\nimport {\n type PowerhouseVerifiableCredential,\n type RenownStorage,\n type User,\n} from './types.js';\nimport { parsePkhDid } from './utils.js';\n\nexport * from './browser.js';\nexport * from './constants.js';\nexport * from './types.js';\nexport type {\n PowerhouseVerifiableCredential,\n Unsubscribe,\n User,\n} from './types.js';\nexport * from './utils.js';\n\nexport class Renown {\n #baseUrl: string;\n #store: RenownStorage;\n #connectId: string;\n #eventEmitter = new EventTarget();\n\n constructor(store: IStorage, connectId: string, baseUrl = RENOWN_URL) {\n this.#store = store as RenownStorage;\n this.#connectId = connectId;\n this.#baseUrl = baseUrl;\n\n if (this.user) {\n this.login(this.user.did).catch(() => void 0);\n }\n }\n\n get user() {\n return this.#store.get('user');\n }\n\n #updateUser(user: User | undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n user ? this.#store.set('user', user) : this.#store.delete('user');\n this.#eventEmitter.dispatchEvent(\n new CustomEvent('user', { detail: user }),\n );\n }\n\n set connectId(connectId: string) {\n this.#connectId = connectId;\n const user = this.user;\n\n this.#updateUser(undefined);\n\n // tries to login with new connectId\n if (user) {\n this.login(user.did).catch(e => {\n console.log('User no longer authenticated:', e);\n });\n }\n }\n\n async login(did: string): Promise<User> {\n try {\n const result = parsePkhDid(did);\n\n const credential = await this.#getCredential(\n result.address,\n result.chainId,\n this.#connectId,\n );\n if (!credential) {\n this.#updateUser(undefined);\n throw new Error('Credential not found');\n }\n const user: User = {\n ...result,\n did,\n credential,\n };\n\n getEnsInfo(user.address, user.chainId)\n .then(ens => {\n if (\n this.user?.address === user.address &&\n this.user.chainId === user.chainId\n ) {\n this.#updateUser({ ...this.user, ens });\n }\n })\n .catch(logger.error);\n\n this.#updateUser(user);\n return user;\n } catch (error) {\n logger.error(error);\n this.#updateUser(undefined);\n throw error;\n }\n }\n\n logout() {\n this.#updateUser(undefined);\n }\n\n on(event: 'user', listener: (user: User) => void) {\n const eventListener = ((e: CustomEvent<User>) => {\n listener(e.detail);\n }) as EventListener;\n\n this.#eventEmitter.addEventListener(event, eventListener);\n return () => {\n this.#eventEmitter.removeEventListener(event, eventListener);\n };\n }\n\n async #getCredential(\n address: string,\n chainId: number,\n connectId: string,\n ): Promise<PowerhouseVerifiableCredential | undefined> {\n if (!this.#baseUrl) {\n throw new Error('RENOWN_URL is not set');\n }\n const url = new URL(\n `/api/auth/credential?address=${encodeURIComponent(address)}&chainId=${encodeURIComponent(chainId)}&connectId=${encodeURIComponent(connectId)}`,\n this.#baseUrl,\n );\n const response = await fetch(url, {\n method: 'GET',\n });\n if (response.ok) {\n const result = (await response.json()) as {\n credential: PowerhouseVerifiableCredential;\n };\n return result.credential;\n } else {\n throw new Error('Failed to get credential');\n }\n }\n}\n"],"names":["store","_store"],"mappings":"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"}
|
|
@@ -109,8 +109,8 @@ const __vitePreload = function preload(baseModule, deps, importerUrl) {
|
|
|
109
109
|
return baseModule().catch(handlePreloadError);
|
|
110
110
|
});
|
|
111
111
|
};
|
|
112
|
-
__vitePreload(() => import("./index-
|
|
112
|
+
__vitePreload(() => import("./index-BLnk2_Y0.js"), true ? [] : void 0);
|
|
113
113
|
export {
|
|
114
114
|
__vitePreload as _
|
|
115
115
|
};
|
|
116
|
-
//# sourceMappingURL=main.
|
|
116
|
+
//# sourceMappingURL=main.CIo1oAHU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8BA,OAAO,qBAAY","names":[],"ignoreList":[],"sources":["../../src/renderer.ts"],"sourcesContent":["/**\n * This file will automatically be loaded by vite and run in the \"renderer\" context.\n * To learn more about the differences between the \"main\" and the \"renderer\" context in\n * Electron, visit:\n *\n * https://electronjs.org/docs/tutorial/application-architecture#main-and-renderer-processes\n *\n * By default, Node.js integration in this file is disabled. When enabling Node.js integration\n * in a renderer process, please be aware of potential security implications. You can read\n * more about security risks here:\n *\n * https://electronjs.org/docs/tutorial/security\n *\n * To enable Node.js integration in this file, open up `main.js` and enable the `nodeIntegration`\n * flag:\n *\n * ```\n * // Create the browser window.\n * mainWindow = new BrowserWindow({\n * width: 800,\n * height: 600,\n * webPreferences: {\n * nodeIntegration: true\n * }\n * });\n * ```\n */\n\n// splits app code into separate chunk to avoid circular dependencies\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nimport('./index.js');\n"],"file":"assets/main.
|
|
1
|
+
{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8BA,OAAO,qBAAY","names":[],"ignoreList":[],"sources":["../../src/renderer.ts"],"sourcesContent":["/**\n * This file will automatically be loaded by vite and run in the \"renderer\" context.\n * To learn more about the differences between the \"main\" and the \"renderer\" context in\n * Electron, visit:\n *\n * https://electronjs.org/docs/tutorial/application-architecture#main-and-renderer-processes\n *\n * By default, Node.js integration in this file is disabled. When enabling Node.js integration\n * in a renderer process, please be aware of potential security implications. You can read\n * more about security risks here:\n *\n * https://electronjs.org/docs/tutorial/security\n *\n * To enable Node.js integration in this file, open up `main.js` and enable the `nodeIntegration`\n * flag:\n *\n * ```\n * // Create the browser window.\n * mainWindow = new BrowserWindow({\n * width: 800,\n * height: 600,\n * webPreferences: {\n * nodeIntegration: true\n * }\n * });\n * ```\n */\n\n// splits app code into separate chunk to avoid circular dependencies\n// eslint-disable-next-line @typescript-eslint/no-floating-promises\nimport('./index.js');\n"],"file":"assets/main.CIo1oAHU.js"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { u as ur, C, a as u } from "./pglite-worker-CyG3W9Rr.js";
|
|
2
|
+
u();
|
|
3
|
+
var m = class extends ur {
|
|
4
|
+
constructor(t) {
|
|
5
|
+
super(t), this.rootDir = (void 0)(t), (void 0)((void 0)(this.rootDir)) || (void 0)(this.rootDir);
|
|
6
|
+
}
|
|
7
|
+
async init(t, e) {
|
|
8
|
+
return this.pg = t, { emscriptenOpts: { ...e, preRun: [...e.preRun || [], (r) => {
|
|
9
|
+
let c = r.FS.filesystems.NODEFS;
|
|
10
|
+
r.FS.mkdir(C), r.FS.mount(c, { root: this.rootDir }, C);
|
|
11
|
+
}] } };
|
|
12
|
+
}
|
|
13
|
+
async closeFs() {
|
|
14
|
+
this.pg.Module.FS.quit();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
m as NodeFS
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=nodefs-CjLGMEKf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodefs-CjLGMEKf.js","sources":["../../../node_modules/.pnpm/@electric-sql+pglite@0.2.17/node_modules/@electric-sql/pglite/dist/fs/nodefs.js"],"sourcesContent":["import{d as i,e as p}from\"../chunk-WGR4JCLS.js\";import{j as n}from\"../chunk-BTBUZ646.js\";n();import*as s from\"fs\";import*as o from\"path\";var m=class extends p{constructor(t){super(t),this.rootDir=o.resolve(t),s.existsSync(o.join(this.rootDir))||s.mkdirSync(this.rootDir)}async init(t,e){return this.pg=t,{emscriptenOpts:{...e,preRun:[...e.preRun||[],r=>{let c=r.FS.filesystems.NODEFS;r.FS.mkdir(i),r.FS.mount(c,{root:this.rootDir},i)}]}}}async closeFs(){this.pg.Module.FS.quit()}};export{m as NodeFS};\n//# sourceMappingURL=nodefs.js.map"],"names":["n","p","o.resolve","s.existsSync","o.join","s.mkdirSync","i"],"mappings":";AAAyFA,EAAG;AAAgD,IAAC,IAAE,cAAcC,GAAC;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,CAAC,GAAE,KAAK,UAAQC,SAAU,CAAC,GAAEC,SAAaC,SAAO,KAAK,OAAO,CAAC,KAAGC,SAAY,KAAK,OAAO;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE,GAAE;AAAC,WAAO,KAAK,KAAG,GAAE,EAAC,gBAAe,EAAC,GAAG,GAAE,QAAO,CAAC,GAAG,EAAE,UAAQ,CAAE,GAAC,OAAG;AAAC,UAAI,IAAE,EAAE,GAAG,YAAY;AAAO,QAAE,GAAG,MAAMC,CAAC,GAAE,EAAE,GAAG,MAAM,GAAE,EAAC,MAAK,KAAK,QAAO,GAAEA,CAAC;AAAA,IAAC,CAAC,EAAC,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,UAAS;AAAC,SAAK,GAAG,OAAO,GAAG;EAAM;AAAC;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { c as cr, R as R$1, T as T$1, h, p as pr, a as u, x as x$1, U } from "./pglite-worker-CyG3W9Rr.js";
|
|
2
|
+
u();
|
|
3
|
+
var $ = "state.txt", G = "data", T = { DIR: 16384, FILE: 32768 }, H, v, F, M, y, b, m, x, P, D, S, n, C, O, k, w, f, I, W, j, L = class extends cr {
|
|
4
|
+
constructor(e, { initialPoolSize: t = 1e3, maintainedPoolSize: o = 100, debug: i = false } = {}) {
|
|
5
|
+
super(e, { debug: i });
|
|
6
|
+
R$1(this, n);
|
|
7
|
+
R$1(this, H);
|
|
8
|
+
R$1(this, v);
|
|
9
|
+
R$1(this, F);
|
|
10
|
+
R$1(this, M);
|
|
11
|
+
R$1(this, y);
|
|
12
|
+
R$1(this, b, /* @__PURE__ */ new Map());
|
|
13
|
+
R$1(this, m, /* @__PURE__ */ new Map());
|
|
14
|
+
R$1(this, x, 0);
|
|
15
|
+
R$1(this, P, /* @__PURE__ */ new Map());
|
|
16
|
+
R$1(this, D, /* @__PURE__ */ new Map());
|
|
17
|
+
this.lastCheckpoint = 0;
|
|
18
|
+
this.checkpointInterval = 1e3 * 60;
|
|
19
|
+
this.poolCounter = 0;
|
|
20
|
+
R$1(this, S, /* @__PURE__ */ new Set());
|
|
21
|
+
this.initialPoolSize = t, this.maintainedPoolSize = o;
|
|
22
|
+
}
|
|
23
|
+
async init(e, t) {
|
|
24
|
+
return await T$1(this, n, C).call(this), super.init(e, t);
|
|
25
|
+
}
|
|
26
|
+
async syncToFs(e = false) {
|
|
27
|
+
await this.maybeCheckpointState(), await this.maintainPool(), e || this.flush();
|
|
28
|
+
}
|
|
29
|
+
async closeFs() {
|
|
30
|
+
for (let e of h(this, m).values()) e.close();
|
|
31
|
+
h(this, y).flush(), h(this, y).close(), this.pg.Module.FS.quit();
|
|
32
|
+
}
|
|
33
|
+
async maintainPool(e) {
|
|
34
|
+
e = e || this.maintainedPoolSize;
|
|
35
|
+
let t = e - this.state.pool.length, o = [];
|
|
36
|
+
for (let i = 0; i < t; i++) o.push(new Promise(async (c) => {
|
|
37
|
+
++this.poolCounter;
|
|
38
|
+
let a = `${(Date.now() - 1704063600).toString(16).padStart(8, "0")}-${this.poolCounter.toString(16).padStart(8, "0")}`, h$1 = await h(this, F).getFileHandle(a, { create: true }), d = await h$1.createSyncAccessHandle();
|
|
39
|
+
h(this, b).set(a, h$1), h(this, m).set(a, d), T$1(this, n, k).call(this, { opp: "createPoolFile", args: [a] }), this.state.pool.push(a), c();
|
|
40
|
+
}));
|
|
41
|
+
for (let i = 0; i > t; i--) o.push(new Promise(async (c) => {
|
|
42
|
+
var _a;
|
|
43
|
+
let a = this.state.pool.pop();
|
|
44
|
+
T$1(this, n, k).call(this, { opp: "deletePoolFile", args: [a] });
|
|
45
|
+
let h$1 = h(this, b).get(a);
|
|
46
|
+
(_a = h(this, m).get(a)) == null ? void 0 : _a.close(), await h(this, F).removeEntry(h$1.name), h(this, b).delete(a), h(this, m).delete(a), c();
|
|
47
|
+
}));
|
|
48
|
+
await Promise.all(o);
|
|
49
|
+
}
|
|
50
|
+
_createPoolFileState(e) {
|
|
51
|
+
this.state.pool.push(e);
|
|
52
|
+
}
|
|
53
|
+
_deletePoolFileState(e) {
|
|
54
|
+
let t = this.state.pool.indexOf(e);
|
|
55
|
+
t > -1 && this.state.pool.splice(t, 1);
|
|
56
|
+
}
|
|
57
|
+
async maybeCheckpointState() {
|
|
58
|
+
Date.now() - this.lastCheckpoint > this.checkpointInterval && await this.checkpointState();
|
|
59
|
+
}
|
|
60
|
+
async checkpointState() {
|
|
61
|
+
let e = new TextEncoder().encode(JSON.stringify(this.state));
|
|
62
|
+
h(this, y).truncate(0), h(this, y).write(e, { at: 0 }), h(this, y).flush(), this.lastCheckpoint = Date.now();
|
|
63
|
+
}
|
|
64
|
+
flush() {
|
|
65
|
+
for (let e of h(this, S)) try {
|
|
66
|
+
e.flush();
|
|
67
|
+
} catch {
|
|
68
|
+
}
|
|
69
|
+
h(this, S).clear();
|
|
70
|
+
}
|
|
71
|
+
chmod(e, t) {
|
|
72
|
+
T$1(this, n, O).call(this, { opp: "chmod", args: [e, t] }, () => {
|
|
73
|
+
this._chmodState(e, t);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
_chmodState(e, t) {
|
|
77
|
+
let o = T$1(this, n, f).call(this, e);
|
|
78
|
+
o.mode = t;
|
|
79
|
+
}
|
|
80
|
+
close(e) {
|
|
81
|
+
let t = T$1(this, n, I).call(this, e);
|
|
82
|
+
h(this, P).delete(e), h(this, D).delete(t);
|
|
83
|
+
}
|
|
84
|
+
fstat(e) {
|
|
85
|
+
let t = T$1(this, n, I).call(this, e);
|
|
86
|
+
return this.lstat(t);
|
|
87
|
+
}
|
|
88
|
+
lstat(e) {
|
|
89
|
+
let t = T$1(this, n, f).call(this, e), o = t.type === "file" ? h(this, m).get(t.backingFilename).getSize() : 0, i = 4096;
|
|
90
|
+
return { dev: 0, ino: 0, mode: t.mode, nlink: 1, uid: 0, gid: 0, rdev: 0, size: o, blksize: i, blocks: Math.ceil(o / i), atime: t.lastModified, mtime: t.lastModified, ctime: t.lastModified };
|
|
91
|
+
}
|
|
92
|
+
mkdir(e, t) {
|
|
93
|
+
T$1(this, n, O).call(this, { opp: "mkdir", args: [e, t] }, () => {
|
|
94
|
+
this._mkdirState(e, t);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
_mkdirState(e, t) {
|
|
98
|
+
let o = T$1(this, n, w).call(this, e), i = o.pop(), c = [], a = this.state.root;
|
|
99
|
+
for (let d of o) {
|
|
100
|
+
if (c.push(e), !Object.prototype.hasOwnProperty.call(a.children, d)) if (t == null ? void 0 : t.recursive) this.mkdir(c.join("/"));
|
|
101
|
+
else throw new p("ENOENT", "No such file or directory");
|
|
102
|
+
if (a.children[d].type !== "directory") throw new p("ENOTDIR", "Not a directory");
|
|
103
|
+
a = a.children[d];
|
|
104
|
+
}
|
|
105
|
+
if (Object.prototype.hasOwnProperty.call(a.children, i)) throw new p("EEXIST", "File exists");
|
|
106
|
+
let h2 = { type: "directory", lastModified: Date.now(), mode: (t == null ? void 0 : t.mode) || T.DIR, children: {} };
|
|
107
|
+
a.children[i] = h2;
|
|
108
|
+
}
|
|
109
|
+
open(e, t, o) {
|
|
110
|
+
if (T$1(this, n, f).call(this, e).type !== "file") throw new p("EISDIR", "Is a directory");
|
|
111
|
+
let c = T$1(this, n, W).call(this);
|
|
112
|
+
return h(this, P).set(c, e), h(this, D).set(e, c), c;
|
|
113
|
+
}
|
|
114
|
+
readdir(e) {
|
|
115
|
+
let t = T$1(this, n, f).call(this, e);
|
|
116
|
+
if (t.type !== "directory") throw new p("ENOTDIR", "Not a directory");
|
|
117
|
+
return Object.keys(t.children);
|
|
118
|
+
}
|
|
119
|
+
read(e, t, o, i, c) {
|
|
120
|
+
let a = T$1(this, n, I).call(this, e), h$1 = T$1(this, n, f).call(this, a);
|
|
121
|
+
if (h$1.type !== "file") throw new p("EISDIR", "Is a directory");
|
|
122
|
+
return h(this, m).get(h$1.backingFilename).read(new Uint8Array(t.buffer, o, i), { at: c });
|
|
123
|
+
}
|
|
124
|
+
rename(e, t) {
|
|
125
|
+
T$1(this, n, O).call(this, { opp: "rename", args: [e, t] }, () => {
|
|
126
|
+
this._renameState(e, t, true);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
_renameState(e, t, o = false) {
|
|
130
|
+
let i = T$1(this, n, w).call(this, e), c = i.pop(), a = T$1(this, n, f).call(this, i.join("/"));
|
|
131
|
+
if (!Object.prototype.hasOwnProperty.call(a.children, c)) throw new p("ENOENT", "No such file or directory");
|
|
132
|
+
let h$1 = T$1(this, n, w).call(this, t), d = h$1.pop(), l = T$1(this, n, f).call(this, h$1.join("/"));
|
|
133
|
+
if (o && Object.prototype.hasOwnProperty.call(l.children, d)) {
|
|
134
|
+
let u2 = l.children[d];
|
|
135
|
+
h(this, m).get(u2.backingFilename).truncate(0), this.state.pool.push(u2.backingFilename);
|
|
136
|
+
}
|
|
137
|
+
l.children[d] = a.children[c], delete a.children[c];
|
|
138
|
+
}
|
|
139
|
+
rmdir(e) {
|
|
140
|
+
T$1(this, n, O).call(this, { opp: "rmdir", args: [e] }, () => {
|
|
141
|
+
this._rmdirState(e);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
_rmdirState(e) {
|
|
145
|
+
let t = T$1(this, n, w).call(this, e), o = t.pop(), i = T$1(this, n, f).call(this, t.join("/"));
|
|
146
|
+
if (!Object.prototype.hasOwnProperty.call(i.children, o)) throw new p("ENOENT", "No such file or directory");
|
|
147
|
+
let c = i.children[o];
|
|
148
|
+
if (c.type !== "directory") throw new p("ENOTDIR", "Not a directory");
|
|
149
|
+
if (Object.keys(c.children).length > 0) throw new p("ENOTEMPTY", "Directory not empty");
|
|
150
|
+
delete i.children[o];
|
|
151
|
+
}
|
|
152
|
+
truncate(e, t = 0) {
|
|
153
|
+
let o = T$1(this, n, f).call(this, e);
|
|
154
|
+
if (o.type !== "file") throw new p("EISDIR", "Is a directory");
|
|
155
|
+
let i = h(this, m).get(o.backingFilename);
|
|
156
|
+
if (!i) throw new p("ENOENT", "No such file or directory");
|
|
157
|
+
i.truncate(t), h(this, S).add(i);
|
|
158
|
+
}
|
|
159
|
+
unlink(e) {
|
|
160
|
+
T$1(this, n, O).call(this, { opp: "unlink", args: [e] }, () => {
|
|
161
|
+
this._unlinkState(e, true);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
_unlinkState(e, t = false) {
|
|
165
|
+
let o = T$1(this, n, w).call(this, e), i = o.pop(), c = T$1(this, n, f).call(this, o.join("/"));
|
|
166
|
+
if (!Object.prototype.hasOwnProperty.call(c.children, i)) throw new p("ENOENT", "No such file or directory");
|
|
167
|
+
let a = c.children[i];
|
|
168
|
+
if (a.type !== "file") throw new p("EISDIR", "Is a directory");
|
|
169
|
+
if (delete c.children[i], t) {
|
|
170
|
+
let h$1 = h(this, m).get(a.backingFilename);
|
|
171
|
+
h$1 == null ? void 0 : h$1.truncate(0), h(this, S).add(h$1), h(this, D).has(e) && (h(this, P).delete(h(this, D).get(e)), h(this, D).delete(e));
|
|
172
|
+
}
|
|
173
|
+
this.state.pool.push(a.backingFilename);
|
|
174
|
+
}
|
|
175
|
+
utimes(e, t, o) {
|
|
176
|
+
T$1(this, n, O).call(this, { opp: "utimes", args: [e, t, o] }, () => {
|
|
177
|
+
this._utimesState(e, t, o);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
_utimesState(e, t, o) {
|
|
181
|
+
let i = T$1(this, n, f).call(this, e);
|
|
182
|
+
i.lastModified = o;
|
|
183
|
+
}
|
|
184
|
+
writeFile(e, t, o) {
|
|
185
|
+
let i = T$1(this, n, w).call(this, e), c = i.pop(), a = T$1(this, n, f).call(this, i.join("/"));
|
|
186
|
+
if (Object.prototype.hasOwnProperty.call(a.children, c)) {
|
|
187
|
+
let l = a.children[c];
|
|
188
|
+
l.lastModified = Date.now(), T$1(this, n, k).call(this, { opp: "setLastModified", args: [e, l.lastModified] });
|
|
189
|
+
} else {
|
|
190
|
+
if (this.state.pool.length === 0) throw new Error("No more file handles available in the pool");
|
|
191
|
+
let l = { type: "file", lastModified: Date.now(), mode: (o == null ? void 0 : o.mode) || T.FILE, backingFilename: this.state.pool.pop() };
|
|
192
|
+
a.children[c] = l, T$1(this, n, k).call(this, { opp: "createFileNode", args: [e, l] });
|
|
193
|
+
}
|
|
194
|
+
let h$1 = a.children[c], d = h(this, m).get(h$1.backingFilename);
|
|
195
|
+
t.length > 0 && (d.write(typeof t == "string" ? new TextEncoder().encode(t) : new Uint8Array(t), { at: 0 }), e.startsWith("/pg_wal") && h(this, S).add(d));
|
|
196
|
+
}
|
|
197
|
+
_createFileNodeState(e, t) {
|
|
198
|
+
let o = T$1(this, n, w).call(this, e), i = o.pop(), c = T$1(this, n, f).call(this, o.join("/"));
|
|
199
|
+
c.children[i] = t;
|
|
200
|
+
let a = this.state.pool.indexOf(t.backingFilename);
|
|
201
|
+
return a > -1 && this.state.pool.splice(a, 1), t;
|
|
202
|
+
}
|
|
203
|
+
_setLastModifiedState(e, t) {
|
|
204
|
+
let o = T$1(this, n, f).call(this, e);
|
|
205
|
+
o.lastModified = t;
|
|
206
|
+
}
|
|
207
|
+
write(e, t, o, i, c) {
|
|
208
|
+
let a = T$1(this, n, I).call(this, e), h$1 = T$1(this, n, f).call(this, a);
|
|
209
|
+
if (h$1.type !== "file") throw new p("EISDIR", "Is a directory");
|
|
210
|
+
let d = h(this, m).get(h$1.backingFilename);
|
|
211
|
+
if (!d) throw new p("EBADF", "Bad file descriptor");
|
|
212
|
+
let l = d.write(new Uint8Array(t, o, i), { at: c });
|
|
213
|
+
return a.startsWith("/pg_wal") && h(this, S).add(d), l;
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
H = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap(), F = /* @__PURE__ */ new WeakMap(), M = /* @__PURE__ */ new WeakMap(), y = /* @__PURE__ */ new WeakMap(), b = /* @__PURE__ */ new WeakMap(), m = /* @__PURE__ */ new WeakMap(), x = /* @__PURE__ */ new WeakMap(), P = /* @__PURE__ */ new WeakMap(), D = /* @__PURE__ */ new WeakMap(), S = /* @__PURE__ */ new WeakMap(), n = /* @__PURE__ */ new WeakSet(), C = async function() {
|
|
217
|
+
x$1(this, H, await navigator.storage.getDirectory()), x$1(this, v, await T$1(this, n, j).call(this, this.dataDir, { create: true })), x$1(this, F, await T$1(this, n, j).call(this, G, { from: h(this, v), create: true })), x$1(this, M, await h(this, v).getFileHandle($, { create: true })), x$1(this, y, await h(this, M).createSyncAccessHandle());
|
|
218
|
+
let e = new ArrayBuffer(h(this, y).getSize());
|
|
219
|
+
h(this, y).read(e, { at: 0 });
|
|
220
|
+
let t, o = new TextDecoder().decode(e).split(`
|
|
221
|
+
`), i = false;
|
|
222
|
+
try {
|
|
223
|
+
t = JSON.parse(o[0]);
|
|
224
|
+
} catch {
|
|
225
|
+
t = { root: { type: "directory", lastModified: Date.now(), mode: T.DIR, children: {} }, pool: [] }, h(this, y).truncate(0), h(this, y).write(new TextEncoder().encode(JSON.stringify(t)), { at: 0 }), i = true;
|
|
226
|
+
}
|
|
227
|
+
this.state = t;
|
|
228
|
+
let c = o.slice(1).filter(Boolean).map((l) => JSON.parse(l));
|
|
229
|
+
for (let l of c) {
|
|
230
|
+
let u2 = `_${l.opp}State`;
|
|
231
|
+
if (typeof this[u2] == "function") try {
|
|
232
|
+
this[u2].bind(this)(...l.args);
|
|
233
|
+
} catch (N) {
|
|
234
|
+
console.warn("Error applying OPFS AHP WAL entry", l, N);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
let a = [], h$1 = async (l) => {
|
|
238
|
+
if (l.type === "file") try {
|
|
239
|
+
let u2 = await h(this, F).getFileHandle(l.backingFilename), N = await u2.createSyncAccessHandle();
|
|
240
|
+
h(this, b).set(l.backingFilename, u2), h(this, m).set(l.backingFilename, N);
|
|
241
|
+
} catch (u2) {
|
|
242
|
+
console.error("Error opening file handle for node", l, u2);
|
|
243
|
+
}
|
|
244
|
+
else for (let u2 of Object.values(l.children)) a.push(h$1(u2));
|
|
245
|
+
};
|
|
246
|
+
await h$1(this.state.root);
|
|
247
|
+
let d = [];
|
|
248
|
+
for (let l of this.state.pool) d.push(new Promise(async (u2) => {
|
|
249
|
+
h(this, b).has(l) && console.warn("File handle already exists for pool file", l);
|
|
250
|
+
let N = await h(this, F).getFileHandle(l), U2 = await N.createSyncAccessHandle();
|
|
251
|
+
h(this, b).set(l, N), h(this, m).set(l, U2), u2();
|
|
252
|
+
}));
|
|
253
|
+
await Promise.all([...a, ...d]), await this.maintainPool(i ? this.initialPoolSize : this.maintainedPoolSize);
|
|
254
|
+
}, O = function(e, t) {
|
|
255
|
+
let o = T$1(this, n, k).call(this, e);
|
|
256
|
+
try {
|
|
257
|
+
t();
|
|
258
|
+
} catch (i) {
|
|
259
|
+
throw h(this, y).truncate(o), i;
|
|
260
|
+
}
|
|
261
|
+
}, k = function(e) {
|
|
262
|
+
let t = JSON.stringify(e), o = new TextEncoder().encode(`
|
|
263
|
+
${t}`), i = h(this, y).getSize();
|
|
264
|
+
return h(this, y).write(o, { at: i }), h(this, S).add(h(this, y)), i;
|
|
265
|
+
}, w = function(e) {
|
|
266
|
+
return e.split("/").filter(Boolean);
|
|
267
|
+
}, f = function(e, t) {
|
|
268
|
+
let o = T$1(this, n, w).call(this, e), i = t || this.state.root;
|
|
269
|
+
for (let c of o) {
|
|
270
|
+
if (i.type !== "directory") throw new p("ENOTDIR", "Not a directory");
|
|
271
|
+
if (!Object.prototype.hasOwnProperty.call(i.children, c)) throw new p("ENOENT", "No such file or directory");
|
|
272
|
+
i = i.children[c];
|
|
273
|
+
}
|
|
274
|
+
return i;
|
|
275
|
+
}, I = function(e) {
|
|
276
|
+
let t = h(this, P).get(e);
|
|
277
|
+
if (!t) throw new p("EBADF", "Bad file descriptor");
|
|
278
|
+
return t;
|
|
279
|
+
}, W = function() {
|
|
280
|
+
let e = ++U(this, x)._;
|
|
281
|
+
for (; h(this, P).has(e); ) U(this, x)._++;
|
|
282
|
+
return e;
|
|
283
|
+
}, j = async function(e, t) {
|
|
284
|
+
let o = T$1(this, n, w).call(this, e), i = (t == null ? void 0 : t.from) || h(this, H);
|
|
285
|
+
for (let c of o) i = await i.getDirectoryHandle(c, { create: t == null ? void 0 : t.create });
|
|
286
|
+
return i;
|
|
287
|
+
};
|
|
288
|
+
var p = class extends Error {
|
|
289
|
+
constructor(A, e) {
|
|
290
|
+
super(e), typeof A == "number" ? this.code = A : typeof A == "string" && (this.code = pr[A]);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
export {
|
|
294
|
+
L as OpfsAhpFS
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=opfs-ahp-B5o8adrg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opfs-ahp-B5o8adrg.js","sources":["../../../node_modules/.pnpm/@electric-sql+pglite@0.2.17/node_modules/@electric-sql/pglite/dist/fs/opfs-ahp.js"],"sourcesContent":["import{f as B,g as z}from\"../chunk-WGR4JCLS.js\";import{e as s,f as g,g as E,h as r,i as _,j as R}from\"../chunk-BTBUZ646.js\";R();var $=\"state.txt\",G=\"data\",T={DIR:16384,FILE:32768},H,v,F,M,y,b,m,x,P,D,S,n,C,O,k,w,f,I,W,j,L=class extends B{constructor(e,{initialPoolSize:t=1e3,maintainedPoolSize:o=100,debug:i=!1}={}){super(e,{debug:i});g(this,n);g(this,H);g(this,v);g(this,F);g(this,M);g(this,y);g(this,b,new Map);g(this,m,new Map);g(this,x,0);g(this,P,new Map);g(this,D,new Map);this.lastCheckpoint=0;this.checkpointInterval=1e3*60;this.poolCounter=0;g(this,S,new Set);this.initialPoolSize=t,this.maintainedPoolSize=o}async init(e,t){return await r(this,n,C).call(this),super.init(e,t)}async syncToFs(e=!1){await this.maybeCheckpointState(),await this.maintainPool(),e||this.flush()}async closeFs(){for(let e of s(this,m).values())e.close();s(this,y).flush(),s(this,y).close(),this.pg.Module.FS.quit()}async maintainPool(e){e=e||this.maintainedPoolSize;let t=e-this.state.pool.length,o=[];for(let i=0;i<t;i++)o.push(new Promise(async c=>{++this.poolCounter;let a=`${(Date.now()-1704063600).toString(16).padStart(8,\"0\")}-${this.poolCounter.toString(16).padStart(8,\"0\")}`,h=await s(this,F).getFileHandle(a,{create:!0}),d=await h.createSyncAccessHandle();s(this,b).set(a,h),s(this,m).set(a,d),r(this,n,k).call(this,{opp:\"createPoolFile\",args:[a]}),this.state.pool.push(a),c()}));for(let i=0;i>t;i--)o.push(new Promise(async c=>{let a=this.state.pool.pop();r(this,n,k).call(this,{opp:\"deletePoolFile\",args:[a]});let h=s(this,b).get(a);s(this,m).get(a)?.close(),await s(this,F).removeEntry(h.name),s(this,b).delete(a),s(this,m).delete(a),c()}));await Promise.all(o)}_createPoolFileState(e){this.state.pool.push(e)}_deletePoolFileState(e){let t=this.state.pool.indexOf(e);t>-1&&this.state.pool.splice(t,1)}async maybeCheckpointState(){Date.now()-this.lastCheckpoint>this.checkpointInterval&&await this.checkpointState()}async checkpointState(){let e=new TextEncoder().encode(JSON.stringify(this.state));s(this,y).truncate(0),s(this,y).write(e,{at:0}),s(this,y).flush(),this.lastCheckpoint=Date.now()}flush(){for(let e of s(this,S))try{e.flush()}catch{}s(this,S).clear()}chmod(e,t){r(this,n,O).call(this,{opp:\"chmod\",args:[e,t]},()=>{this._chmodState(e,t)})}_chmodState(e,t){let o=r(this,n,f).call(this,e);o.mode=t}close(e){let t=r(this,n,I).call(this,e);s(this,P).delete(e),s(this,D).delete(t)}fstat(e){let t=r(this,n,I).call(this,e);return this.lstat(t)}lstat(e){let t=r(this,n,f).call(this,e),o=t.type===\"file\"?s(this,m).get(t.backingFilename).getSize():0,i=4096;return{dev:0,ino:0,mode:t.mode,nlink:1,uid:0,gid:0,rdev:0,size:o,blksize:i,blocks:Math.ceil(o/i),atime:t.lastModified,mtime:t.lastModified,ctime:t.lastModified}}mkdir(e,t){r(this,n,O).call(this,{opp:\"mkdir\",args:[e,t]},()=>{this._mkdirState(e,t)})}_mkdirState(e,t){let o=r(this,n,w).call(this,e),i=o.pop(),c=[],a=this.state.root;for(let d of o){if(c.push(e),!Object.prototype.hasOwnProperty.call(a.children,d))if(t?.recursive)this.mkdir(c.join(\"/\"));else throw new p(\"ENOENT\",\"No such file or directory\");if(a.children[d].type!==\"directory\")throw new p(\"ENOTDIR\",\"Not a directory\");a=a.children[d]}if(Object.prototype.hasOwnProperty.call(a.children,i))throw new p(\"EEXIST\",\"File exists\");let h={type:\"directory\",lastModified:Date.now(),mode:t?.mode||T.DIR,children:{}};a.children[i]=h}open(e,t,o){if(r(this,n,f).call(this,e).type!==\"file\")throw new p(\"EISDIR\",\"Is a directory\");let c=r(this,n,W).call(this);return s(this,P).set(c,e),s(this,D).set(e,c),c}readdir(e){let t=r(this,n,f).call(this,e);if(t.type!==\"directory\")throw new p(\"ENOTDIR\",\"Not a directory\");return Object.keys(t.children)}read(e,t,o,i,c){let a=r(this,n,I).call(this,e),h=r(this,n,f).call(this,a);if(h.type!==\"file\")throw new p(\"EISDIR\",\"Is a directory\");return s(this,m).get(h.backingFilename).read(new Uint8Array(t.buffer,o,i),{at:c})}rename(e,t){r(this,n,O).call(this,{opp:\"rename\",args:[e,t]},()=>{this._renameState(e,t,!0)})}_renameState(e,t,o=!1){let i=r(this,n,w).call(this,e),c=i.pop(),a=r(this,n,f).call(this,i.join(\"/\"));if(!Object.prototype.hasOwnProperty.call(a.children,c))throw new p(\"ENOENT\",\"No such file or directory\");let h=r(this,n,w).call(this,t),d=h.pop(),l=r(this,n,f).call(this,h.join(\"/\"));if(o&&Object.prototype.hasOwnProperty.call(l.children,d)){let u=l.children[d];s(this,m).get(u.backingFilename).truncate(0),this.state.pool.push(u.backingFilename)}l.children[d]=a.children[c],delete a.children[c]}rmdir(e){r(this,n,O).call(this,{opp:\"rmdir\",args:[e]},()=>{this._rmdirState(e)})}_rmdirState(e){let t=r(this,n,w).call(this,e),o=t.pop(),i=r(this,n,f).call(this,t.join(\"/\"));if(!Object.prototype.hasOwnProperty.call(i.children,o))throw new p(\"ENOENT\",\"No such file or directory\");let c=i.children[o];if(c.type!==\"directory\")throw new p(\"ENOTDIR\",\"Not a directory\");if(Object.keys(c.children).length>0)throw new p(\"ENOTEMPTY\",\"Directory not empty\");delete i.children[o]}truncate(e,t=0){let o=r(this,n,f).call(this,e);if(o.type!==\"file\")throw new p(\"EISDIR\",\"Is a directory\");let i=s(this,m).get(o.backingFilename);if(!i)throw new p(\"ENOENT\",\"No such file or directory\");i.truncate(t),s(this,S).add(i)}unlink(e){r(this,n,O).call(this,{opp:\"unlink\",args:[e]},()=>{this._unlinkState(e,!0)})}_unlinkState(e,t=!1){let o=r(this,n,w).call(this,e),i=o.pop(),c=r(this,n,f).call(this,o.join(\"/\"));if(!Object.prototype.hasOwnProperty.call(c.children,i))throw new p(\"ENOENT\",\"No such file or directory\");let a=c.children[i];if(a.type!==\"file\")throw new p(\"EISDIR\",\"Is a directory\");if(delete c.children[i],t){let h=s(this,m).get(a.backingFilename);h?.truncate(0),s(this,S).add(h),s(this,D).has(e)&&(s(this,P).delete(s(this,D).get(e)),s(this,D).delete(e))}this.state.pool.push(a.backingFilename)}utimes(e,t,o){r(this,n,O).call(this,{opp:\"utimes\",args:[e,t,o]},()=>{this._utimesState(e,t,o)})}_utimesState(e,t,o){let i=r(this,n,f).call(this,e);i.lastModified=o}writeFile(e,t,o){let i=r(this,n,w).call(this,e),c=i.pop(),a=r(this,n,f).call(this,i.join(\"/\"));if(Object.prototype.hasOwnProperty.call(a.children,c)){let l=a.children[c];l.lastModified=Date.now(),r(this,n,k).call(this,{opp:\"setLastModified\",args:[e,l.lastModified]})}else{if(this.state.pool.length===0)throw new Error(\"No more file handles available in the pool\");let l={type:\"file\",lastModified:Date.now(),mode:o?.mode||T.FILE,backingFilename:this.state.pool.pop()};a.children[c]=l,r(this,n,k).call(this,{opp:\"createFileNode\",args:[e,l]})}let h=a.children[c],d=s(this,m).get(h.backingFilename);t.length>0&&(d.write(typeof t==\"string\"?new TextEncoder().encode(t):new Uint8Array(t),{at:0}),e.startsWith(\"/pg_wal\")&&s(this,S).add(d))}_createFileNodeState(e,t){let o=r(this,n,w).call(this,e),i=o.pop(),c=r(this,n,f).call(this,o.join(\"/\"));c.children[i]=t;let a=this.state.pool.indexOf(t.backingFilename);return a>-1&&this.state.pool.splice(a,1),t}_setLastModifiedState(e,t){let o=r(this,n,f).call(this,e);o.lastModified=t}write(e,t,o,i,c){let a=r(this,n,I).call(this,e),h=r(this,n,f).call(this,a);if(h.type!==\"file\")throw new p(\"EISDIR\",\"Is a directory\");let d=s(this,m).get(h.backingFilename);if(!d)throw new p(\"EBADF\",\"Bad file descriptor\");let l=d.write(new Uint8Array(t,o,i),{at:c});return a.startsWith(\"/pg_wal\")&&s(this,S).add(d),l}};H=new WeakMap,v=new WeakMap,F=new WeakMap,M=new WeakMap,y=new WeakMap,b=new WeakMap,m=new WeakMap,x=new WeakMap,P=new WeakMap,D=new WeakMap,S=new WeakMap,n=new WeakSet,C=async function(){E(this,H,await navigator.storage.getDirectory()),E(this,v,await r(this,n,j).call(this,this.dataDir,{create:!0})),E(this,F,await r(this,n,j).call(this,G,{from:s(this,v),create:!0})),E(this,M,await s(this,v).getFileHandle($,{create:!0})),E(this,y,await s(this,M).createSyncAccessHandle());let e=new ArrayBuffer(s(this,y).getSize());s(this,y).read(e,{at:0});let t,o=new TextDecoder().decode(e).split(`\n`),i=!1;try{t=JSON.parse(o[0])}catch{t={root:{type:\"directory\",lastModified:Date.now(),mode:T.DIR,children:{}},pool:[]},s(this,y).truncate(0),s(this,y).write(new TextEncoder().encode(JSON.stringify(t)),{at:0}),i=!0}this.state=t;let c=o.slice(1).filter(Boolean).map(l=>JSON.parse(l));for(let l of c){let u=`_${l.opp}State`;if(typeof this[u]==\"function\")try{this[u].bind(this)(...l.args)}catch(N){console.warn(\"Error applying OPFS AHP WAL entry\",l,N)}}let a=[],h=async l=>{if(l.type===\"file\")try{let u=await s(this,F).getFileHandle(l.backingFilename),N=await u.createSyncAccessHandle();s(this,b).set(l.backingFilename,u),s(this,m).set(l.backingFilename,N)}catch(u){console.error(\"Error opening file handle for node\",l,u)}else for(let u of Object.values(l.children))a.push(h(u))};await h(this.state.root);let d=[];for(let l of this.state.pool)d.push(new Promise(async u=>{s(this,b).has(l)&&console.warn(\"File handle already exists for pool file\",l);let N=await s(this,F).getFileHandle(l),U=await N.createSyncAccessHandle();s(this,b).set(l,N),s(this,m).set(l,U),u()}));await Promise.all([...a,...d]),await this.maintainPool(i?this.initialPoolSize:this.maintainedPoolSize)},O=function(e,t){let o=r(this,n,k).call(this,e);try{t()}catch(i){throw s(this,y).truncate(o),i}},k=function(e){let t=JSON.stringify(e),o=new TextEncoder().encode(`\n${t}`),i=s(this,y).getSize();return s(this,y).write(o,{at:i}),s(this,S).add(s(this,y)),i},w=function(e){return e.split(\"/\").filter(Boolean)},f=function(e,t){let o=r(this,n,w).call(this,e),i=t||this.state.root;for(let c of o){if(i.type!==\"directory\")throw new p(\"ENOTDIR\",\"Not a directory\");if(!Object.prototype.hasOwnProperty.call(i.children,c))throw new p(\"ENOENT\",\"No such file or directory\");i=i.children[c]}return i},I=function(e){let t=s(this,P).get(e);if(!t)throw new p(\"EBADF\",\"Bad file descriptor\");return t},W=function(){let e=++_(this,x)._;for(;s(this,P).has(e);)_(this,x)._++;return e},j=async function(e,t){let o=r(this,n,w).call(this,e),i=t?.from||s(this,H);for(let c of o)i=await i.getDirectoryHandle(c,{create:t?.create});return i};var p=class extends Error{constructor(A,e){super(e),typeof A==\"number\"?this.code=A:typeof A==\"string\"&&(this.code=z[A])}};export{L as OpfsAhpFS};\n//# sourceMappingURL=opfs-ahp.js.map"],"names":["R","B","g","r","s","h","u","E","U","_","z"],"mappings":"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","x_google_ignoreList":[0]}
|